diff --git a/Compiling.md b/Compiling.md new file mode 100644 index 0000000..541213d --- /dev/null +++ b/Compiling.md @@ -0,0 +1,36 @@ +# Introduction # + +Compiling & installing. + + +# Details # + +You should be able to run + +``` +> make +``` +and +``` +> make test +``` + +... to install. + +Some caveats are: + +The sparse hash library may need updating. + +The new version of varcall requires the GNU scientific library to be installed in order to compile. + +On UBUNTU : + +apt-get install libgsl0-dev + +On CENTOS/REDHAT : + +rpm -i gsl-devel + +On WINDOWS: + +Use MinGW, and use the [Windows port of GSL](http://gnuwin32.sourceforge.net/packages/gsl.htm) \ No newline at end of file diff --git a/FastqJoin.md b/FastqJoin.md new file mode 100644 index 0000000..5fab680 --- /dev/null +++ b/FastqJoin.md @@ -0,0 +1,58 @@ +# Usage # + +``` +Usage: fastq-join [options] [mate.fq] -o + +Joins two paired-end reads on the overlapping ends. + +Options: + +-o FIL See 'Output' below +-v C Verifies that the 2 files probe id's match up to char C + use '/' for Illumina reads +-p N N-percent maximum difference (8) +-m N N-minimum overlap (6) +-r FIL Verbose stitch length report +-R No reverse complement +-V Show version + +Output: + + You can supply 3 -o arguments, for un1, un2, join files, or one +argument as a file name template. The suffix 'un1, un2, or join' is +appended to the file, or they replace a %-character if present. + + If a 'mate' input file is present (barcode read), then the files +'un3' and 'join2' are also created. + + Files named ".gz" are assumed to be compressed, and can be +read/written as long as "gzip" is in the path. +``` + +## Etc ## + +This uses our sqr(distance)/len for anchored alignment quality algorithm. It's a good measure of anchored alignment quality, akin (in my mind) to squared-deviation for means. + +## Overlapping Bases ## + +### When the bases match ### + +The higher quality base is used, and it is increased by up to 3 + +### When the bases don't match ### + +If one quality is greater than "3" (50%), then the the resulting quality is the difference between the two qualities (reduced quality due to mismatch), or "3" )(50%), whichever is greater. + +#### Examples: #### + +``` +40 vs 3 = 37 : second base has low quality... doesn't change top by much +40 vs 40 = 3 : two equal quality bases that don't match = qual of 3 +2 vs 2 = 2 : neither base has a high quality +``` + +#### Some caveats: #### + +Illumina's quality scores are not accurate and estimates vary by chemistry and sequencer. I would recommend using a profiling tool, on PhiX, and adjusting your qualities using the results of the tool. + +For example the quality score "2" has a true quality, typically of "11" ... this is Illumina's code for "quality estimation failure". The quality scores at the high end ("34-40") are often overestimates. \ No newline at end of file diff --git a/FastqMcf.md b/FastqMcf.md new file mode 100644 index 0000000..f7ddc6f --- /dev/null +++ b/FastqMcf.md @@ -0,0 +1,124 @@ +# Introduction # + +fastq-mcf attempts to: + + * Detect & remove sequencing adapters and primers + * Detect limited skewing at the ends of reads and clip + * Detect poor quality at the ends of reads and clip + * Detect Ns, and remove from ends + * Remove reads with CASAVA 'Y' flag (purity filtering) + * Discard sequences that are too short after all of the above + * Keep multiple mate-reads in sync while doing all of the above + +# Usage # + +``` + +Usage: fastq-mcf [options] [mates1.fq ...] +Version: 1.04.636 + +Detects levels of adapter presence, computes likelihoods and +locations (start, end) of the adapters. Removes the adapter +sequences from the fastq file(s). + +Stats go to stderr, unless -o is specified. + +Specify -0 to turn off all default settings + +If you specify multiple 'paired-end' inputs, then a -o option is +required for each. IE: -o read1.clip.q -o read2.clip.fq + +Options: + -h This help + -o FIL Output file (stats to stdout) + -s N.N Log scale for adapter minimum-length-match (2.2) + -t N % occurance threshold before adapter clipping (0.25) + -m N Minimum clip length, overrides scaled auto (1) + -p N Maximum adapter difference percentage (10) + -l N Minimum remaining sequence length (19) + -L N Maximum remaining sequence length (none) + -D N Remove duplicate reads : Read_1 has an identical N bases (0) + -k N sKew percentage-less-than causing cycle removal (2) + -x N 'N' (Bad read) percentage causing cycle removal (20) + -q N quality threshold causing base removal (10) + -w N window-size for quality trimming (1) + -H remove >95% homopolymer reads (no) + -0 Set all default parameters to zero/do nothing + -U|u Force disable/enable Illumina PF filtering (auto) + -P N Phred-scale (auto) + -R Dont remove Ns from the fronts/ends of reads + -n Dont clip, just output what would be done + -C N Number of reads to use for subsampling (300k) + -S Save all discarded reads to '.skip' files + -d Output lots of random debugging stuff + +Quality adjustment options: + --cycle-adjust CYC,AMT Adjust cycle CYC (negative = offset from end) by amount AMT + --phred-adjust SCORE,AMT Adjust score SCORE by amount AMT + +Filtering options*: + --[mate-]qual-mean NUM Minimum mean quality score + --[mate-]qual-gt NUM,THR At least NUM quals > THR + --[mate-]max-ns NUM Maxmium N-calls in a read (can be a %) + --[mate-]min-len NUM Minimum remaining length (same as -l) + --hompolymer-pct PCT Homopolymer filter percent (95) + +If mate- prefix is used, then applies to second non-barcode read only + +Adapter files are 'fasta' formatted: + +Specify n/a to turn off adapter clipping, and just use filters + +Increasing the scale makes recognition-lengths longer, a scale +of 100 will force full-length recognition of adapters. + +Adapter sequences with _5p in their label will match 'end's, +and sequences with _3p in their label will match 'start's, +otherwise the 'end' is auto-determined. + +Skew is when one cycle is poor, 'skewed' toward a particular base. +If any nucleotide is less than the skew percentage, then the +whole cycle is removed. Disable for methyl-seq, etc. + +Set the skew (-k) or N-pct (-x) to 0 to turn it off (should be done +for miRNA, amplicon and other low-complexity situations!) + +Duplicate read filtering is appropriate for assembly tasks, and +never when read length < expected coverage. -D 50 will use +4.5GB RAM on 100m DNA reads - be careful. Great for RNA assembly. + +*Quality filters are evaluated after clipping/trimming +``` + +## Notes ## + +Adapter file format is fasta. You can set it to /dev/null, and pass "-f" to do skew detection only. + +## Todo ## + + * When discarding one read for being "too short", it has to discard both pairs. For a sequencing run of normal quality this is not an issue. It should, though, write "un-mated" reads (whose mate was skipped) to a separate file. Typically, since these read mates were poor quality, it's not really useful... but it can be for diagnostics. I've seen runs where these provide valuable data. + + * Like any tool that does many things, fastq-mcf can be limited in it's ability to be flexible. The biggest missing feature is for it to be able to read files that are formatted like it's stderr output, and use them to guide the process. Given that feature, fastq-mcf would be complete. + +## Notes ## + + * Default settings are probably too conservative when it comes to trimming poor quality/detecting base-skew. + + * It won't trim the "insides" of a paired-end read. It also will no longer attempt to quality filter a barcode read. No override for these, but I can't think of a reason to. + + * The -x percentage can be a confusing parameter. it causes the **entire** cycle to be removed from **all** reads.... even ones without N's... if more than, say, 20% of that cycle is N's. + +## Cleaning multiple files ## + +Using process substitution, or named pipes, you can clean multiple fastq's in one pass. This is useful for combining multiple MiSeq runs, or multiple lanes for example: + +``` +fastq-mcf \ + -o cleaned.R1.fq.gz \ + -o cleaned.R2.fq.gz \ + adapters.fa \ + <(gunzip -c uncleaned.lane1.R1.fq.gz uncleaned.lane2.R1.fq.gz;) \ + <(gunzip -c uncleaned.lane1.R2.fq.gz uncleaned.lane2.R2.fq.gz;) +``` + +(Many bioinformatic tools are not "stream friendly", and some may require the "buffer" command to work. But fastq-mcf does its own buffering internally.) \ No newline at end of file diff --git a/FastqMultx.md b/FastqMultx.md new file mode 100644 index 0000000..7e33bff --- /dev/null +++ b/FastqMultx.md @@ -0,0 +1,112 @@ +# Introduction # + +The idea behind this is to reduce the amount of "piping" going on in a pipeline. A lot of time, disk space and nail-chewing is spent keeping files in sync, figuring out what barcodes are on what samples, etc. The goal of this program is to make it easier to demultiplex possibly paired-end sequences, and also to allow the "guessing" of barcode sets based on master lists of barcoding protocols (fluidigm, truseq, etc.) + +# Usage # + +``` +Usage: fastq-multx [-g|-l] -o r1.%.fq [mate.fq -o r2.%.fq] ... + +Output files must contain a '%' sign which is replaced with the barcode id in the barcodes file. + +Barcodes file looks like this: + + + ... + +Default is to guess the -bol or -eol based on clear stats. + +If -g is used, then it's parameter is an index lane, and frequently occuring sequences are used. + +If -l is used then all barcodes in the file are tried, and the *group* with the *most* matches is chosen. + +Grouped barcodes file looks like this: + + + + ... + +Mated reads, if supplied, are kept in-sync + +Options: + +-o FIL1 [FIL2] Output files (one per input, required) +-g FIL Determine barcodes from indexed read FIL +-l FIL Determine barcodes from any read, using FIL as a master list +-b Force beginning of line +-e Force end of line +-x Don't trim barcodes before writing +-n Don't execute, just print likely barcode list +-v C Verify that mated id's match up to character C ('/' for illumina) +-m N Allow up to N mismatches, as long as they are unique +``` + + +Files named ".gz" are assumed to be compressed, and can be +read/written as long as "gzip" is in the path. + +# Example 1 # + +# this example will read/output files that are gzipped, since -B is used and only 1 sequence files is present, it will look for barcodes on the "ends" of the sequence and will tell you which end it found them on + +`fastq-multx -B barcodes.fil seq.fastq.gz -o %.fq.gz` + +Contents of barcodes.fil: + +``` +mock_a ACCC +salt_a CGTA +mock_b GAGT +salty_b CGGT +``` + +# Example 2 # + +# this example will first determine which "barcode group" to use, will select the most likely set of barcodes from that file, and will then proceed as if only that set was specified. this allows for a single pipeline that works with multiple technologies + +`fastq-multx -l barcodes.grp seq2.fastq.gz seq1.fastq.gz -o n/a -o out%.fq` + +Contents of barcodes.grp: + +``` +id seq style +LB1 ATCACG TruSeq +LB2 CGATGT TruSeq +LB3 TTAGGC TruSeq +LB4 TGACCA TruSeq +LB5 ACAGTG TruSeq +A01_01 TAGCTTGT Fluidigm +B01_02 CGATGTTT Fluidigm +C01_03 GCCAATGT Fluidigm +D01_04 ACAGTGGT Fluidigm +E01_05 ATCACGTT Fluidigm +``` + +Standard error will output: + +`Using Barcode Group: TruSeq on File: seq2.fastq.gz (start), Threshold 0.59%` + +This indicated that The LB1-LB5 barcodes will be used, and that the filess will be named LB1-LB5, and that the barcode was at the "start" of the reads in the seq2 file. + + +Example of Nextera/Dual-Indexed input: + +``` +id seq style +D708_508 TAATGCGC-GTACTGAC TruSeq RNA +D709_501 CGGCTATG-TATAGCCT TruSeq RNA +D709_502 CGGCTATG-ATAGAGGC TruSeq RNA +D709_503 CGGCTATG-CCTATCCT TruSeq RNA +D709_504 CGGCTATG-GGCTCTGA TruSeq RNA +D709_505 CGGCTATG-AGGCGAAG TruSeq RNA +D709_506 CGGCTATG-TAATCTTA TruSeq RNA +D709_507 CGGCTATG-CAGGACGT TruSeq RNA +D709_508 CGGCTATG-GTACTGAC TruSeq RNA +D710_501 TCCGCGAA-TATAGCCT TruSeq RNA +D710_502 TCCGCGAA-ATAGAGGC TruSeq RNA +D710_503 TCCGCGAA-CCTATCCT TruSeq RNA +D710_504 TCCGCGAA-GGCTCTGA TruSeq RNA +D710_505 TCCGCGAA-AGGCGAAG TruSeq RNA +D710_506 TCCGCGAA-TAATCTTA TruSeq RNA +D710_507 TCCGCGAA-CAGGACGT TruSeq RNA +``` \ No newline at end of file diff --git a/ProjectHome.md b/ProjectHome.md new file mode 100644 index 0000000..c6f20b0 --- /dev/null +++ b/ProjectHome.md @@ -0,0 +1,41 @@ +Command-line tools for processing biological sequencing data. Barcode demultiplexing, adapter trimming, etc. + +Primarily written to support an Illumina based pipeline - but should work with any FASTQs. + +### Overview: ### + + * [fastq-mcf](FastqMcf.md) +> > Scans a sequence file for adapters, and, based on a log-scaled threshold, determines a set of clipping parameters and performs clipping. Also does skewing detection and quality filtering. + * [fastq-multx](FastqMultx.md) +> > Demultiplexes a fastq. Capable of auto-determining barcode id's based on a master set fields. Keeps multiple reads in-sync during demultiplexing. Can verify that the reads are in-sync as well, and fail if they're not. + * [fastq-join](FastqJoin.md) +> > Similar to audy's stitch program, but in C, more efficient and supports some automatic benchmarking and tuning. It uses the same "squared distance for anchored alignment" as other tools. + * [varcall](Varcall.md) +> > Takes a pileup and calculates variants in a more easily parameterized manner than some other tools. + +### Other Stuff: ### + + * [sam-stats](SamStats.md) - Basic sam/bam stats. Like other tools, but produces what I want to look at, in a format suitable for passing to other programs. (View source) + + * fastq-stats - Basic fastq stats. Counts duplicates. Option for per-cycle stats, or not (irrelevant for many sequencers). (View source) + + * determine-phred - Returns the phred scale of the input file. Works with sams, fastq's or pileups and gzipped files. + + * Chrdex.pm & Sqldex.pm - obsoleted by the cpan module Text::Tidx. Sqldex may not actually be obsolete, because Tidx uses more ram and is slower for very small jobs. But for Exome and RNA-Seq work, [Text::Tidx](http://search.cpan.org/~earonesty/Text-Tidx/) beats both. + + * qsh - Runs a bash script file like a "cluster aware makefile"...only processing newer things, die'ing if things go wrong, and sending jobs to a queue manager if they're big. That way you don't have to write makefiles, or wrap things in "qsub" calls for every little program. Not really ready yet. + + * grun - Fast, lightweight grid queue software. Keeps the job queue on disk at all times. Very fast. Works well by now + + * gwrap - Bash wrapper shell that downloads all dependencies that are not the local system.... good for EC2 nodes. Linux only. Will use it if we ever go to EC2. + + * gtf2bed - Converter that bundles up a GFF's exons and makes a UCSC-styled bed file with thin/thick properly set from the start/stop sites. (Click for source) + + * randomFQ - takes a fastq (can be gzipped or paired-end) and randomly subsets to a user defined number of reads (Click for source) + +### Citing: ### + + +> Erik Aronesty (2011). _ea-utils_ : "Command-line tools for processing biological sequencing data"; http://code.google.com/p/ea-utils + +> Erik Aronesty (2013). _TOBioiJ_ : "Comparison of Sequencing Utility Programs", [DOI:10.2174/1875036201307010001](http://benthamscience.com/open/openaccess.php?tobioij/articles/V007/1TOBIOIJ.htm) \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index d1a8448..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# ea-utils -This project was automatically exported from code.google.com/p/ea-utils and will now be maintained in this repository on GitHub. - -To build ea-utils, follow these [build instructions](https://github.com/ExpressionAnalysis/ea-utils/blob/wiki/Compiling.md). Please see http://expressionanalysis.github.io/ea-utils/ for further help information. - diff --git a/SamStats.md b/SamStats.md new file mode 100644 index 0000000..7be78c3 --- /dev/null +++ b/SamStats.md @@ -0,0 +1,65 @@ +# Introduction # + +Tool for computing statistics from (possibly compressed) SAM or BAM files. + +See [SamStatsDetails](https://github.com/ExpressionAnalysis/ea-utils/blob/wiki/SamStatsDetails.md) for more info on the output fields. + +# Usage # + +``` +Usage: sam-stats [options] [file1] [file2...filen] +Version: 1.32 + +Produces lots of easily digested statistics for the files listed + +Options (default in parens): + +-D Keep track of multiple alignments (slower!) +-M Only overwrite if newer (requires -x, or multiple files) +-A Report all chr sigs, even if there are more than 1000 +-R FIL RNA-Seq stats output (coverage, 3' bias, etc) +-B Input is bam, dont bother looking at magic +-x FIL File extension for multiple files (stats) +-b INT Number of reads to sample for per-base stats (1M) +-S INT Size of ascii-signature (30) +-z Don't fail when zero entries in sam + +OUTPUT: + +If one file is specified, then the output is to standard out. If +multiple files are specified, or if the -x option is supplied, +the output file is .. Default extension is 'stats'. + +Complete Stats: + + : mean, max, stdev, median, Q1 (25 percentile), Q3 + reads : # of entries in the sam file, might not be # reads + phred : phred scale used + bsize : # reads used for qual stats + mapped reads : number of aligned reads (unique probe id sequences) + mapped bases : total of the lengths of the aligned reads + forward : number of forward-aligned reads + reverse : number of reverse-aligned reads + secondary : # of entries with 256-bit set + snp rate : mismatched bases / total bases + ins rate : insert bases / total bases + del rate : deleted bases / total bases + pct mismatch : percent of reads that have mismatches + len : read length stats, ignored if fixed-length + mapq : stats for mapping qualities + insert : stats for insert sizes + % : percentage of mapped bases per chr, followed by a signature + +Subsampled stats (1M reads max): + base qual : stats for base qualities + %A,%T,%C,%G : base percentages + +Meaning of the per-chromosome signature: + A ascii-histogram of mapped reads by chromosome position. + It is only output if the original SAM/BAM has a header. The values + are the log2 of the # of mapped reads at each position + ascii '0'. +``` + +DETAILED OVERVIEW OF STATISTICS: + +Click [SamStatsDetails](https://github.com/ExpressionAnalysis/ea-utils/blob/wiki/SamStatsDetails.md) for more information on each stat, how it's calculated and what it means. diff --git a/SamStatsDetails.md b/SamStatsDetails.md new file mode 100644 index 0000000..d90a53d --- /dev/null +++ b/SamStatsDetails.md @@ -0,0 +1,144 @@ +# Sam-stats statistics by name # + +### reads ### + +Incremented for every sequence-containing line in the sam file, regardless of whether it represents an alignment. for some files, this is not actually the number of reads. indeed, this may be a poor name for this stat + +### version ### + +The version of sam-stats used. + +### mapped reads ### + +If duplicate tracking was enabled via -D, then this attempts to recapitulate the number of unique, mapped, probe-id's in the original sam file. It is multiplied by 2 for paired-end data with duplicate read id's. The idea is that if you divide this by the number of reads in the fastq you aligned (possibly from the output of fastq-stats), you will get an accurate "percentage of reads aligned" statistic. + +If duplicate tracking is not enabled, then the result is the number of mapped reads in the sam file. + +The definition of "mapped" is something with a non-negative position, and a "non-asterisk" cigar string. + +### pct ambiguous ### + +Formula is: + +100 ** / ** + +"Aligning more than once" means more than 2 alignments for paired end and more than 1 alignment for single-end. + +_This does NOT, currently, use the BWA XA tag, and support for this will be added in the near future._ + +### max dup align ### + +The maximum number of alignments for a single probe-id. IE: if seq4455 aligns 50 times, and this is more than any other sequence, then the result would be 50. For paired-end reads one is subtracted, since you should get two alignments with the same probe-id for each read, but anything more than that is considered "ambiguous". + +One could argue, rightly, that it should be divided by two for paired end. If this is changed, it would require a major version upgrade, or rename of the statistic since it would invalidate historical comparisons. + + +### singleton mappings ### + +Number of reads that aligned only once, without a pair. Only tracked if -D is enabled. + +### total mappings ### + +The number of lines in the sam file that were "mapped" reads. + +### mapped bases ### + +The total number of bases, derived from the length of the sequence strings, in the sam file that were "mapped" reads. + +### library:paired-end ### + +And indicator that "paired end" semantics were used when running sam-stats, because there were alignments that exhibited these characteristics. + +### discordant mates ### +The number of read-pairs that were aligned to different chromosomes. + +### distant mates ### +The number of read-pairs that were aligned more than 50k bases apart + +### phred ### +The phred scale used when analyzing this sam file. Should always be 33, unless you're looking at some old Illumina aligned output. + + +### forward ### +The number of lines in the sam file that were aligned to the "forward" strand. No accounting is done on duplicates. + +### reverse ### +The number of lines in the sam file that were aligned to the "reverse" strand. No accounting is done on duplicates. + +### len (max/min/mean) ### +"len max" is always output. "len mean, len stdev" are only output if the length of the sequence reads vary. Calculations are based on the the length of the (possibly hard-clipped) sequence in the sam file. + +### mapq (mean/stdev/Q1/median/Q3) ### + +These are all statistics on mapped reads only, with no attempt to de-duplicate multiply aligned reads before calculating the statistic. As a result, a single read that is represented 1000 times in the sam results can skew the mapping quality significantly lower (since they will all be zeroes). + +The statistics presented are: mean and standard deviation, (Q1) first-quartile (R-compatible algorithm used), median, and (Q3) upper-quartile. + +### snp rate ### +The total number of mismatch bases, divided by the total number of mapped based. Calculated using NM tags. + +### ins rate ### +The total number of inserted bases, divided by the total number of mapped based. Calculated using cigar strings. + +### del rate ### +The total number of deleted bases, divided by the total number of mapped based. Calculated using cigar strings. + +### insert mean/stdev/Q1/median/Q3 ### +These are the "isize" statistics. The mean and standard deviation are ["trimmed" by 10%](http://en.wikipedia.org/wiki/Truncated_mean), in accordance with best-practices for producing meaningful fragment size distributions. + +You will have to add the mean length of read2 to this value in order to get the total fragment size for programs like Mosaik and RSEM that require it, or subtract the mean read1 size for programs like tophat that require the "between fragment" size (even if negative). + +Quartiles are computed with an R-compatible algorithm + +### base qual mean/stdev ### + +Total quality score of every mapped base, divided by the total number of mapped bases. + +### %A/%T/%C/%G/%N ### + +Total number of mapped bases of each type, divided by the total number of mapped bases. + +### num ref seqs ### + +The number of reference sequences in the original SAM headers. + +### num ref aligned ### + +The number of unique reference sequences that have at least one alignment. + +### median skew ### + +Only enabled in "rna mode", the median skewness of all transcripts with coverage. An "overall bias" metric, useful for detecting 3'bias. + +### median coverage ### + +Median of nonzero coverage (see rna mode below) + +### median coverage cv ### + +Median of nonzero coverage variability (see rna mode below) + +### %chr1, %gene, and signature values ### + +For each mapped reference chromosome or gene, the total number of mapped bases is totaled. The percentages are the total mapped bases for that gene or chromosome divided by the total mapped bases. + +If "-A" is used, up to a million reference sequences are tracked and output. + +In addition to outputting a percentage, and only if the sam file had a header, a signature representing a histogram of alignments is output. + +Each chromosome/gene is divided in to 30 evenly sized "buckets". + +The values in the signature are the log2 of the # of mapped reads in each position bucket times the length of those reads + ascii '0'. + +Long reads caveat: There is no attempt to break-up long reads that align across multiple regions however. So these signatures are not (yet) useful for very long reads. If a read's first position maps to histogram bucket 1, but spans across to bucket 2, all of the bases are currently counted in bucket 1. For short reads, this is not significant. + + +### "RNA-seq" mode coverage matrix ### + +A "coverage" file is output with one row per reference sequence, the _7 columns_ are: transcript id, length, count, coverage percentage, skewness (bias), and coverage cv, and a signature (see above). + + * Coverage: statistics are 1x, and approximate, and are intended to measure exon bias - not appropriate for assembly! + + * Skewness: is the standard pearsons 3rd order skewness applies to the alignment positions across the transcript. + + * Coverage CV: the coefficient of variation of the coverage histogram (can be computed from the signature). \ No newline at end of file diff --git a/Varcall.md b/Varcall.md new file mode 100644 index 0000000..178aae5 --- /dev/null +++ b/Varcall.md @@ -0,0 +1,98 @@ +# Introduction # + +varcall does two tasks: + + * Calculates error rate statistics in a pileup + * Outputs variants per position + + +The tool is not complete. + +In particular: the VCF output is somewhat broken. The native output formats now work fine, and the stats/outputs collection and use are also working well. + +One of the advantages of using varcall over something like GATK is the extensive parameterization, allowing varcall to be used in any situation, this is also a shortcoming... since users must know the meanings of every parameter. In addition, varcall seems to be particularly fast. + +Recently we added variation specific error rate collection, and it is used, instead of a the global error rate, in the calculation of pvals. This vastly reduces false positives, etc. + +By the time we reach version 1, all of these should be fixed, including better docs, and better "auto-configuration" based on sampling. If you are using varcall before then, carefully experiment with parameters and compare to other tools. + +Version 1 should also have the ability to do a stats collection across a group of samples, and then subsequent calling using those stats. The advantage here is that for some amplicon/pcr assays, there are insufficient locii to get an accurate error variation estimate per-sample. + + +# Usage # + +``` + +Usage: varcall <-s|-v> <-f REF> [options] bam1 [bam2...] +Version: 0.95.794 (BETA) + +Either outputs summry stats for the list of files, or performs variant calling. +(You can specify -s and -v, in which case both are done). + +Options (later options override earlier): + +-s Calculate statistics +-v|version Calculate variants bases on supplied parameters (see -S) +-f Reference fasta (required if using bams, ignored otherwise) +-m Min locii depth (1) +-a Min allele depth (2) +-p Min allele pct by quality (0) +-q Min qual (3) +-Q Min mapping quality (0) +-b Min pct balance (strand/total) (0) +-D FLOAT Max duplicate read fraction (depth/length per position) (1) +-d FLOAT Minimum diversity (CV from optimal depth) (0.25) +-G FLOAT Minimum agreement (Weighted CV of positional variation) (0.25) +-0 Zero out all filters, set e-value filter to 1, report everything +-B If running from a BAM, turn off BAQ correction (false) +-R Homopolymer repeat indel filtering (8) +-e FLOAT Alpha filter to use, requires -l or -S (.05) +-g FLOAT Global minimum error rate (default: assume phred is ok) +-l INT Number of locii in total pileup used for bonferroni (1 mil) +-x CHR:POS Output this pos only, then quit +-S FILE Read in statistics and params from a previous run with -s (do this!) +-A ANNOT Calculate in-target stats using the annotation file (requires -o) +-o PREFIX Output prefix (works with -s or -v) +-F files List of file types to output (var, varsum, eav, vcf) + +Extended Options + +--pcr-annot BED Only include reads adhering to the expected amplicons +--stranded TYPE Can be FR (the default), FF, FR. Used with pcr-annot +--diversity|d FLOAT Alias for -d +--agreement|G FLOAT Alias for -G +--no-indels Ignore all indels + +Input files + +Files must be sorted bam files with bai index files available. +Alternatively, a single pileup file can be supplied. + +Output files + +Varcalls go to stdout. Stats go to stdout, or stderr if varcalling too + +If an output prefix is used, files are created as follows: + PREFIX.var Variant calls in tab delimited 'varcall' format + PREFIX.eav Variant calls in tab delimited 'ea-var' format + PREFIX.cse Variant calls in tab delimited 'varprowl' format + PREFIX.vcf Variant calls, in vcf format + PREFIX.varsum Summary of variant calls + PREFIX.tgt.var On-target version of .var + PREFIX.tgt.cse On-target version of .cse + PREFIX.tgt.varsum On-target version of .varsum + +Stats Output: + +Contains mean, median, quartile information for depth, base quality, read len, +mapping quality, indel levels. Also estimates parameters suitable for +variant calls, and can be passed directly to this program for variant calls + +If an output prefix is used, files are created as follows: + + PREFIX.stats Stats output + PREFIX.noise Non-reference, non-homozygous allele summary + PREFIX.xnoise Like noise, but with context-specific rates + + +``` \ No newline at end of file diff --git a/clipper/CHANGES b/clipper/CHANGES deleted file mode 100644 index 01ed643..0000000 --- a/clipper/CHANGES +++ /dev/null @@ -1,27 +0,0 @@ -r805: -* fixed fastq-mcf 'start' bug for ubuntu 14.04 - -r780: -* fixed fastq-mcf output -* added support for fastq-multx reading from headers -* bundled entire sparsehash library, changed Makefile to include it -* fastq-join corrected quality in overlapped regions -* added a proper test suite. requires perl & Test::More -* fastq-multx minimum distance -* fastq-join allow insert < read-length -* fastq-mcf corrected low-complexity filtering - -r181 - CASAVA purity filtering -r154 - fixed major bug in RMN's that would invalidate reads -r152 - allowed short adapters to work at the 'begin' of reads -r171 - paired-ends get trimmed like anything else....other behavior was too conservative -r258 - gzip support on input and output, append barcode to unmatched id -r353 - support for dual-indexed nextera reads in fastq-multx, new defaults based on ROC curve analysis -r401 - added -L, included google dir, included build for sam-stats -r408 - updated fast-join docs, changed default mismatch to 8% -r425 - fastq-mcf filtering options, multx verif char fixed -r474 - RNAmode & coverage stats output -r475 - fix paired-end forward/reverse counts -r534 - -S can be before -R, also ver num increment -r551 - eventer -l 0 bug fix, debug output improvement -r558 - sam-stats snp rate change, fastq-lib poorqual N's issue fixed, buffering added (todo: add to lib) diff --git a/clipper/Chrdex.pm b/clipper/Chrdex.pm deleted file mode 100644 index de80b8d..0000000 --- a/clipper/Chrdex.pm +++ /dev/null @@ -1,479 +0,0 @@ -package Chrdex; - -# Licensed via the "Artistic License" -# See: http://dev.perl.org/licenses/artistic.html -# Copyright 2011, Expression Analysis -# Author: Erik Aronesty -# "Let me know if it's useful" -# -# EXMAPLE: -# $x = Chrdex->new("CCDS_Exome_annot.txt", chr=>2, beg=>5, end=>6, skip=>1); -# $x->search(1, 153432255); -# TODO: -# work with ranges...should be easy - -use Inline 'C'; - -use strict; -use warnings::register; - -use Storable qw(store retrieve); -use Data::Dumper; -use locale; ##added by vjw to control case of reference bases - -our $VERSION = '1.2.15'; # major = object interface is different, minor = new features, release=fixes/performance improve -my $FILEVER = 4; # only increment this if existing files won't work with the new version - -my $tmpb; - -sub new { - my ($class, $path, %opts) = @_; - - if (ref($class)) { - $class = ref($class); - } - - $opts{delim} = "\t" if ! $opts{delim}; - $opts{skip} = 0 if ! $opts{skip}; - $opts{chr} = 0 if ! $opts{chr}; - $opts{beg} = 1 if ! $opts{beg}; - $opts{end} = 2 if ! $opts{end}; - $opts{ver} = $FILEVER; - - if (! -s $path) { # be a little more careful about this one - if (! -s $path || -d $path) { - die "Can't open $path.\n"; - } - } - - # location of data store - my $annob = $path; - $annob =~ s/([^\/]+)$/\.$1/; - $annob = "$annob.chrdex"; - - $annob = $opts{index_path} if $opts{index_path}; - - my $ref; - my $mt = (stat($path))[9]; - # if index is new - if (!$opts{force} && (stat($annob))[9] > $mt) { - $ref = eval {retrieve $annob}; - - # if arguments were different, then clear ref - for (qw(delim skip chr beg end ver byref)) { - last if !$ref; - $ref = undef if !($ref->{_opts}->{$_} eq $opts{$_}); - } - - if ($ref) { - # if begin != end, then type is range - if ($ref->{_opts}->{beg} != $ref->{_opts}->{end}) { - eval{chrdex_check($ref)}; - if ($@) { - $ref = undef; - } - } - } - } - - if (!$ref) { - my %locs; - $tmpb = "$annob.$$"; - open( IN, $path ) or die "Can't open $path: $!\n"; - my $skip = $opts{skip}; - while ($skip > 0) { scalar ; --$skip }; - - my $pos = 0; - $pos = tell IN if $opts{byref}; - while() { - my ($chr, $beg, $end); - $_ =~ s/\s+$//; - my @data = split /\t/; - $chr = $data[$opts{chr}]; - $beg = $data[$opts{beg}]; - $end = $data[$opts{end}]; - if (!(($beg+0) eq $beg)) { - die "Invalid data in $path at line $., expected a number, got '$beg'\n"; - } - $chr=~s/^chr//i; - $_ = $pos if $opts{byref}; - - # here's where you put the annotation info - if ($opts{beg} == $opts{end}) { - if ($locs{"$chr:$beg"}) { - push @{$locs{"$chr:$beg"}}, $_;; - } else { - $locs{"$chr:$beg"} = [$_]; - } - } else { - push @{$locs{$chr}}, [$beg+0, $end+0, [$_]]; - } - $pos = tell IN if $opts{byref}; - } - close IN; - - if ($opts{beg} == $opts{end}) { - goto DONE; - } - - # sort & cache annotation, deal with overlaps nicely - my $i; - for my $chr (keys(%locs)) { - my $arr = $locs{$chr}; - @{$locs{$chr}} = sort {$a->[0]-$b->[0]} @{$locs{$chr}}; - for ($i=0;$i<$#{$arr};++$i) { - next unless $arr->[$i+1]->[0]; # empty? skip - if ($arr->[$i]->[1] >= $arr->[$i+1]->[0]) { # if i overlap the next one - # warn 1, Dumper($arr->[$i], $arr->[$i+1], $arr->[$i+2]); - - # frag after next - my $new_st = $arr->[$i+1]->[1]+1; - my $new_en = $arr->[$i]->[1]; - my $new_ro = $arr->[$i]->[2]; - - # TODO: store as array... string folding will save lots of space when there are many overlaps - # but hasn't been a problem so far - if ($arr->[$i]->[1] < $arr->[$i+1]->[1]) { - # overlap next - $new_st = $arr->[$i]->[1] + 1; - $new_en = $arr->[$i+1]->[1]; - $new_ro = [@{$arr->[$i+1]->[2]}]; - $arr->[$i+1]->[1] = $arr->[$i]->[1]; - push @{$arr->[$i+1]->[2]}, @{$arr->[$i]->[2]}; - } else { - push @{$arr->[$i+1]->[2]}, @{$arr->[$i]->[2]}; - } - - # shorten my end to less than the next's start - $arr->[$i]->[1] = $arr->[$i+1]->[0]-1; - - if ($new_en >= $new_st) { - # warn "NEW: $new_st $new_en $new_ro\n"; - - # put the fragment where it belongs - my $j=$i+2; - while ($j<=$#{$arr} & $new_st > $arr->[$j]->[0]) { - ++$j; - } - splice(@{$arr}, $j, 0, [$new_st, $new_en, $new_ro]); - } - - if ($arr->[$i]->[1] < $arr->[$i]->[0]) { - splice(@{$arr}, $i, 1); - --$i; - } - # warn 2, Dumper($arr->[$i], $arr->[$i+1], $arr->[$i+2]); - } - } - } - DONE: - $locs{_opts} = \%opts; - $ref = \%locs; - store \%locs, "$tmpb"; - rename "$tmpb", "$annob"; - } - - # stuff these into the top level, since tests showed it was significantly more expensive to doubly-reference - - $ref->{_type}='C'; - $ref->{_type}='I' if ($opts{beg} == $opts{end}); - - if (($ref->{_type} eq 'C')) { - chrdex_check($ref); - } - - if ($opts{byref}) { - # only storing pointers to file, not whole record - require IO::File; - $ref->{_byref}=1; - $ref->{_refh} = new IO::File; - open($ref->{_refh}, $path) || die "Can't open $path\n"; - } - - bless $ref, $class; - - return $ref; -} - -END { - unlink("$tmpb.chrdex"); -} - -sub search { - return join "\n", query(@_); -} - -sub query { - my ($self, $chr, $loc, $loc2) = @_; - $chr=~s/^chr//io; - my $type = $self->{_type}; - my $list; - if ($type eq 'C') { - if ($loc2) { - $list = chrdex_search_range($self, $chr, $loc, $loc2); - return () if ! defined $list; - my $prev; - for (my $i = 0; $i < @$list; ++$i) { - if ($prev eq $list->[$i]) { - splice @$list, $i, 1; - --$i; - } - $prev = $list->[$i]; - } - return @$list if !($self->{_byref}); - } else { - $list = chrdex_search($self, $chr, $loc); - return () if ! defined $list; - return @$list if !($self->{_byref}); - } - } elsif ($type eq 'I') { - if ($loc2) { - # if only this wasn't a hash.... sheesh - my %hv; - for (my $i=$loc;$i<$loc2;++$i) { - $list = $self->{"$chr:$loc"}; - next unless defined $list; - for (@$list) { - $hv{$_}=1; - } - } - $list = [keys(%hv)]; - } else { - $list = $self->{"$chr:$loc"}; - return () if ! defined $list; - } - } - - if ($self->{_byref}) { - for (@$list) { - seek $self->{_refh}, $_, 0; - $_=$self->{_refh}->getline(); - chomp $_; - } - } - return @$list; -} - -1; - -__DATA__ -__C__ - -bool get_sten(AV *arr, int i, int *st, int*en); -SV * av_fetch_2(AV *arr, int i, int j); -int chrdex_search_n(AV *arr, SV *schr, SV* sloc); - -void chrdex_search(SV *self, SV *schr, SV* sloc) { - SV *roi; - AV *arr; - SV **pav; - HV *map= (HV*) SvRV(self); - char *chr = SvPV_nolen(schr); - int loc = SvIV(sloc); - - pav = hv_fetch(map, chr, strlen(chr), 0); - - if (!pav) - return; - - arr = (AV*) SvRV(*pav); - - int i = chrdex_search_n(arr, schr, sloc); - if (i >=0) { - roi = av_fetch_2(arr, i, 2); - if (!roi) - return; - - Inline_Stack_Vars; - Inline_Stack_Reset; - Inline_Stack_Push(sv_2mortal(newSVsv(roi))); - Inline_Stack_Done; - Inline_Stack_Return(1); - } - return; -} - -void chrdex_search_range(SV *self, SV *schr, SV* sloc, SV* eloc) { - SV *roi = NULL; - AV *arr; - SV **pav; - HV *map= (HV*) SvRV(self); - char *chr = SvPV_nolen(schr); - int isloc = SvIV(sloc); - int ieloc = SvIV(eloc); - - pav = hv_fetch(map, chr, strlen(chr), 0); - - if (!pav) - return; - - arr = (AV*) SvRV(*pav); - - int i = chrdex_search_n(arr, schr, sloc); - int j = chrdex_search_n(arr, schr, eloc); - - if (!i) i=j; - if (!j) j=i; - if (i >=0) { - int x; - char *rx; - AV *rav=NULL; - for (x=i; x<=j; ++x) { - int st, en; - if (get_sten(arr, x, &st, &en)) { - if (ieloc >= st && isloc <= en) { - SV* ret = av_fetch_2(arr, x, 2); - if (ret) { - int z; - if (!rav) rav = newAV(); - for (z=0;z<=av_len(SvRV(ret));++z) { - SV ** s = av_fetch(SvRV(ret), z, 0); - if (s) { - SvREFCNT_inc(*s); - av_push(rav, *s); - } - } - } - } - } - } - - if (!rav) - return; - - Inline_Stack_Vars; - Inline_Stack_Reset; - Inline_Stack_Push(newRV_noinc((SV*)rav)); - Inline_Stack_Push(roi); - Inline_Stack_Done; - Inline_Stack_Return(1); - } - return; -} - -int chrdex_search_n(AV *arr, SV *schr, SV* sloc) { - int b=0, t, i, st, en; - char *chr = SvPV_nolen(schr); - int loc = SvIV(sloc); - - b = 0; - t = av_len(arr); - - if (t <= b) { - get_sten(arr, i=0, &st, &en); - } else { - while (t > b) { - i = (t+b)/2; - if (!get_sten(arr, i, &st, &en)) - return; - - if ((i == b) || (i == t)) - break; - if (loc > en) { - b = i; - } else if (loc < st) { - t = i; - } else { - break; - } - } - } - -// printf("chr:%s loc: %d, st: %d en: %d i: %d t: %d b: %d\n", chr, loc, st, en, i, t, b); - - if (loc < st) { - --i; - if (i < 0 || !get_sten(arr, i, &st, &en)) - return; - } else if (loc > en) { - ++i; - if (!get_sten(arr, i, &st, &en)) - return; - } - - if (loc >= st && loc <= en) { - return i; - } - - return -1; -} - -// doubly indexed array ... fetch 1, fetch 2 -SV * av_fetch_2(AV *arr, int i, int j) { - SV **pav; - - if (!(pav = av_fetch(arr,i,0))) - return &PL_sv_undef; - - arr = (AV*) SvRV(*pav); - - if (!(pav = av_fetch(arr,j,0))) - return &PL_sv_undef; - - return *pav; -} - -bool get_sten(AV *arr, int i, int *st, int*en) { - SV **pav; - - if (!(pav = av_fetch(arr,i,0))) - return 0; - - arr = (AV*) SvRV(*pav); - - if (!(pav = av_fetch(arr,0,0))) - return 0; - *st = SvIV(*pav); - - if (!(pav = av_fetch(arr,1,0))) - return 0; - - *en = SvIV(*pav); - - return 1; -} - -void chrdex_check(SV *annoR) { - HE *he; // hash entry - SV *ent; // hash value - HV *hv; // annotation hash table - AV *av; // array in hash - SV **v; // entry in array - char *key; - int len; - - if (!SvRV(annoR)) - croak("annotation hash must be a reference"); - - annoR = SvRV(annoR); - if (SvTYPE(annoR) != SVt_PVHV) - croak("annotation array must be a hash ref"); - - hv = (HV *) annoR; - if (!hv_iterinit(hv)) { - croak("empty hash, fix that in perl"); - } - - he = hv_iternext(hv); - ent = hv_iternextsv(hv, &key, &len); - while (key && *key == '_') { - ent = hv_iternextsv(hv, &key, &len); - } - if ( SvTYPE(ent) != SVt_RV || (SvTYPE(SvRV(ent)) != SVt_PVAV) ) { - croak("each entry in the annotation hash must be a reference to an array"); - } - - av = (AV*) SvRV(ent); - v = av_fetch(av, 0, 0); - if (!v) { - croak("no empty annotation arrays, please"); - } - - if ( SvTYPE(*v) != SVt_RV || (SvTYPE(SvRV(*v)) != SVt_PVAV) ) { - croak("each entry in the array should contain a start and end region"); - } - - // ok.... reference should be safe enough not to segfault later -} - - diff --git a/clipper/Grun.pm b/clipper/Grun.pm deleted file mode 100644 index e1a419a..0000000 --- a/clipper/Grun.pm +++ /dev/null @@ -1,114 +0,0 @@ -package Grun; - -use Exporter; - -use JSON::XS; -use File::Temp qw(tempfile); -use Carp; - -our @ISA=qw(Exporter); -our @EXPORT=qw(grun grun_wait grun_kill); - -my %JTMP; -sub grun_wait { - my ($jid) = @_; - my $ret = system("grun -q wait $jid 2>&1"); - if ($ret) { - $ret =(($ret<<8)&255) if $ret > 255; - $ret = 1 if !$ret; - } - - open (my $fh, '<', $JTMP{$jid} . ".out"); - local $/=undef; - my $out=<$fh>; - close $fh; - - # copy pasted from below... make a function! - $out=decode_json($out); - if ($out->{err}) { - # remote eval died... so we do too - die $out->{err}; - }; - if (wantarray) { - # return array - return @{$out->{ret}}; - } else { - # return single value - return $out->{ret}->[0]; - } -} - -sub grun { - # this is only required on the execution node....so don't use it everywhere if not needed - require B::RecDeparse; - - # at most 9 levels deep - my $deparse=B::RecDeparse->new(level=>9); - - my ($op, $func, @args) = @_; - croak("usage: grun({options}, \\\&function, \@args)") unless ref($func) eq 'CODE' && defined(wantarray); - ($fh, $filename) = tempfile(".grun.XXXXXX", DIR=>"."); - my $code=$deparse->coderef2text($func); - my $def=encode_json({code=>$code, args=>\@args, wantarray=>wantarray}); - print $fh $def; - close $fh; - - my $opts; - if ($op->{nowait}) { - $opts = "-o $filename.out -nowait"; - } - - my $cmd = "grun $opts $^X -MGrun -e \"\\\"Grun::exec('$filename')\\\"\""; - - # get output (json string) - - my $out = `$cmd`; - if ($op->{nowait}) { - my ($jid) = $out =~ /job_id.*:\s*(\d+)/i; - $JTMP{$jid}=$filename; - return $jid; - } - - $out=decode_json($out); - if ($out->{err}) { - # remote eval died... so we do too - die $out->{err}; - }; - if (wantarray) { - # return array - return @{$out->{ret}}; - } else { - # return single value - return $out->{ret}->[0]; - } -} - -sub exec { - my ($fil) = @_; - local $/ = undef; - open( my $fh, '<', $fil ); - my $json = <$fh>; - close $fh; - - my $hash=decode_json($json); - my $sub = "sub " . $hash->{code}; - $sub = eval($sub); - my (@ret, $ret, $err); - eval { - if ($hash->{wantarray}) { - @ret=&{$sub}(@{$hash->{args}}); - } else { - # scalar context - $ret=&{$sub}(@{$hash->{args}}); - @ret=(($ret)); - } - }; - my $err=$@; - my $out=encode_json({ret=>\@ret, err=>$err}); - - # return output via STDOUT - print $out; -} - - -1; diff --git a/clipper/HyperLevelDB/.gitignore b/clipper/HyperLevelDB/.gitignore deleted file mode 100644 index 04b5816..0000000 --- a/clipper/HyperLevelDB/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# wildcards -.deps -.dirstamp -*.la -.libs -*.lo -*.o -*_test -# specific files -/aclocal.m4 -/autom4te.cache/ -/benchmark -/config.guess -/config.h -/config.h.in -/config.log -/config.status -/config.sub -/configure -/db_bench -/depcomp -/hyperleveldb.upack -/install-sh -/leveldbutil -/leveldb-verify -/libhyperleveldb.pc -/libtool -/ltmain.sh -/m4/ -/Makefile -/Makefile.in -/Makefile.old -/missing -/stamp-h1 diff --git a/clipper/HyperLevelDB/.tarballignore b/clipper/HyperLevelDB/.tarballignore deleted file mode 100644 index 3ad664f..0000000 --- a/clipper/HyperLevelDB/.tarballignore +++ /dev/null @@ -1,2 +0,0 @@ -.gitignore -.tarballignore diff --git a/clipper/HyperLevelDB/AUTHORS b/clipper/HyperLevelDB/AUTHORS deleted file mode 100644 index bf024ab..0000000 --- a/clipper/HyperLevelDB/AUTHORS +++ /dev/null @@ -1,15 +0,0 @@ -# Names should be added to this file like so: -# Name or Organization - -Google Inc. - -# Initial version authors: -Jeffrey Dean -Sanjay Ghemawat - -# Partial list of contributors: -Kevin Regan -Johan Bilien - -# HyperLevelDB authors: -Robert Escriva diff --git a/clipper/HyperLevelDB/LICENSE b/clipper/HyperLevelDB/LICENSE deleted file mode 100644 index 8e80208..0000000 --- a/clipper/HyperLevelDB/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2011 The LevelDB Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/clipper/HyperLevelDB/Makefile.am b/clipper/HyperLevelDB/Makefile.am deleted file mode 100644 index e74e4ea..0000000 --- a/clipper/HyperLevelDB/Makefile.am +++ /dev/null @@ -1,274 +0,0 @@ -## Copyright (c) 2013 -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are met: -## -## * Redistributions of source code must retain the above copyright notice, -## this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in the -## documentation and/or other materials provided with the distribution. -## * Neither the name of nb nor the names of its contributors may be used to -## endorse or promote products derived from this software without specific -## prior written permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -## ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -## LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -## POSSIBILITY OF SUCH DAMAGE. - -ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} -AM_CPPFLAGS = -I${abs_top_srcdir}/include -AM_CFLAGS = -DLEVELDB_PLATFORM_POSIX $(SNAPPY_FLAGS) ${EXTRA_CFLAGS} $(WANAL_CFLAGS) -AM_CXXFLAGS = -DLEVELDB_PLATFORM_POSIX $(SNAPPY_FLAGS) ${EXTRA_CFLAGS} $(WANAL_CXXFLAGS) -AM_MAKEFLAGS = --no-print-directory - -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = libhyperleveldb.pc - -EXTRA_DIST = -EXTRA_DIST += AUTHORS -EXTRA_DIST += doc/benchmark.html -EXTRA_DIST += doc/doc.css -EXTRA_DIST += doc/impl.html -EXTRA_DIST += doc/index.html -EXTRA_DIST += doc/log_format.txt -EXTRA_DIST += doc/table_format.txt -EXTRA_DIST += helpers/memenv/memenv.cc -EXTRA_DIST += helpers/memenv/memenv_test.cc -EXTRA_DIST += LICENSE -EXTRA_DIST += NEWS -EXTRA_DIST += port/README -EXTRA_DIST += README -EXTRA_DIST += TODO - -pkginclude_HEADERS = -pkginclude_HEADERS += include/hyperleveldb/cache.h -pkginclude_HEADERS += include/hyperleveldb/c.h -pkginclude_HEADERS += include/hyperleveldb/comparator.h -pkginclude_HEADERS += include/hyperleveldb/db.h -pkginclude_HEADERS += include/hyperleveldb/env.h -pkginclude_HEADERS += include/hyperleveldb/filter_policy.h -pkginclude_HEADERS += include/hyperleveldb/iterator.h -pkginclude_HEADERS += include/hyperleveldb/options.h -pkginclude_HEADERS += include/hyperleveldb/slice.h -pkginclude_HEADERS += include/hyperleveldb/replay_iterator.h -pkginclude_HEADERS += include/hyperleveldb/status.h -pkginclude_HEADERS += include/hyperleveldb/table_builder.h -pkginclude_HEADERS += include/hyperleveldb/table.h -pkginclude_HEADERS += include/hyperleveldb/write_batch.h -noinst_HEADERS = -noinst_HEADERS += db/builder.h -noinst_HEADERS += db/dbformat.h -noinst_HEADERS += db/db_impl.h -noinst_HEADERS += db/db_iter.h -noinst_HEADERS += db/filename.h -noinst_HEADERS += db/log_format.h -noinst_HEADERS += db/log_reader.h -noinst_HEADERS += db/log_writer.h -noinst_HEADERS += db/memtable.h -noinst_HEADERS += db/skiplist.h -noinst_HEADERS += db/replay_iterator.h -noinst_HEADERS += db/snapshot.h -noinst_HEADERS += db/table_cache.h -noinst_HEADERS += db/version_edit.h -noinst_HEADERS += db/version_set.h -noinst_HEADERS += db/write_batch_internal.h -noinst_HEADERS += helpers/memenv/memenv.h -noinst_HEADERS += port/atomic_pointer.h -noinst_HEADERS += port/port_example.h -noinst_HEADERS += port/port.h -noinst_HEADERS += port/port_posix.h -noinst_HEADERS += port/thread_annotations.h -noinst_HEADERS += port/win/stdint.h -noinst_HEADERS += table/block_builder.h -noinst_HEADERS += table/block.h -noinst_HEADERS += table/filter_block.h -noinst_HEADERS += table/format.h -noinst_HEADERS += table/iterator_wrapper.h -noinst_HEADERS += table/merger.h -noinst_HEADERS += table/two_level_iterator.h -noinst_HEADERS += util/arena.h -noinst_HEADERS += util/coding.h -noinst_HEADERS += util/crc32c.h -noinst_HEADERS += util/hash.h -noinst_HEADERS += util/histogram.h -noinst_HEADERS += util/logging.h -noinst_HEADERS += util/mutexlock.h -noinst_HEADERS += util/posix_logger.h -noinst_HEADERS += util/random.h -noinst_HEADERS += util/testharness.h -noinst_HEADERS += util/testutil.h - -lib_LTLIBRARIES = libhyperleveldb.la - -libhyperleveldb_la_SOURCES = -libhyperleveldb_la_SOURCES += db/builder.cc -libhyperleveldb_la_SOURCES += db/c.cc -libhyperleveldb_la_SOURCES += db/dbformat.cc -libhyperleveldb_la_SOURCES += db/db_impl.cc -libhyperleveldb_la_SOURCES += db/db_iter.cc -libhyperleveldb_la_SOURCES += db/filename.cc -libhyperleveldb_la_SOURCES += db/log_reader.cc -libhyperleveldb_la_SOURCES += db/log_writer.cc -libhyperleveldb_la_SOURCES += db/memtable.cc -libhyperleveldb_la_SOURCES += db/repair.cc -libhyperleveldb_la_SOURCES += db/replay_iterator.cc -libhyperleveldb_la_SOURCES += db/table_cache.cc -libhyperleveldb_la_SOURCES += db/version_edit.cc -libhyperleveldb_la_SOURCES += db/version_set.cc -libhyperleveldb_la_SOURCES += db/write_batch.cc -libhyperleveldb_la_SOURCES += table/block_builder.cc -libhyperleveldb_la_SOURCES += table/block.cc -libhyperleveldb_la_SOURCES += table/filter_block.cc -libhyperleveldb_la_SOURCES += table/format.cc -libhyperleveldb_la_SOURCES += table/iterator.cc -libhyperleveldb_la_SOURCES += table/merger.cc -libhyperleveldb_la_SOURCES += table/table_builder.cc -libhyperleveldb_la_SOURCES += table/table.cc -libhyperleveldb_la_SOURCES += table/two_level_iterator.cc -libhyperleveldb_la_SOURCES += util/arena.cc -libhyperleveldb_la_SOURCES += util/bloom.cc -libhyperleveldb_la_SOURCES += util/cache.cc -libhyperleveldb_la_SOURCES += util/coding.cc -libhyperleveldb_la_SOURCES += util/comparator.cc -libhyperleveldb_la_SOURCES += util/crc32c.cc -libhyperleveldb_la_SOURCES += util/env.cc -libhyperleveldb_la_SOURCES += util/env_posix.cc -libhyperleveldb_la_SOURCES += util/filter_policy.cc -libhyperleveldb_la_SOURCES += util/hash.cc -libhyperleveldb_la_SOURCES += util/histogram.cc -libhyperleveldb_la_SOURCES += util/logging.cc -libhyperleveldb_la_SOURCES += util/options.cc -libhyperleveldb_la_SOURCES += util/status.cc -libhyperleveldb_la_SOURCES += port/port_posix.cc -libhyperleveldb_la_LIBADD = $(SNAPPY_LIBS) -lpthread -libhyperleveldb_la_LDFLAGS = -lpthread - -TESTUTIL = util/testutil.cc -TESTHARNESS = util/testharness.cc $(TESTUTIL) - -noinst_PROGRAMS = -noinst_PROGRAMS += db_bench -noinst_PROGRAMS += leveldbutil -noinst_PROGRAMS += leveldb-verify - -EXTRA_PROGRAMS = -EXTRA_PROGRAMS += benchmark -EXTRA_PROGRAMS += db_bench_sqlite3 -EXTRA_PROGRAMS += db_bench_tree_db - -check_PROGRAMS = -check_PROGRAMS += autocompact_test -check_PROGRAMS += arena_test -check_PROGRAMS += bloom_test -check_PROGRAMS += c_test -check_PROGRAMS += cache_test -check_PROGRAMS += coding_test -check_PROGRAMS += corruption_test -check_PROGRAMS += crc32c_test -check_PROGRAMS += db_test -check_PROGRAMS += dbformat_test -check_PROGRAMS += env_test -check_PROGRAMS += filename_test -check_PROGRAMS += filter_block_test -check_PROGRAMS += log_test -check_PROGRAMS += skiplist_test -check_PROGRAMS += table_test -check_PROGRAMS += version_edit_test -check_PROGRAMS += version_set_test -check_PROGRAMS += write_batch_test -check_PROGRAMS += issue178_test -check_PROGRAMS += issue200_test - -TESTS = $(check_PROGRAMS) - -benchmark_SOURCES = benchmark.cc -benchmark_LDADD = libhyperleveldb.la -lpthread -le -lpopt -lygor -benchmark_LDFLAGS = -no-install - -db_bench_SOURCES = db/db_bench.cc $(TESTUTIL) -db_bench_LDADD = libhyperleveldb.la -lpthread - -db_bench_sqlite3_SOURCES = doc/bench/db_bench_sqlite3.cc $(TESTUTIL) -db_bench_sqlite3_LDADD = -lsqlite3 - -db_bench_tree_db_SOURCES = doc/bench/db_bench_tree_db.cc $(TESTUTIL) -db_bench_tree_db_LDADD = -lkyotocabinet - -leveldbutil_SOURCES = db/leveldb_main.cc -leveldbutil_LDADD = libhyperleveldb.la -lpthread - -leveldb_verify_SOURCES = leveldb-verify.cc -leveldb_verify_LDADD = libhyperleveldb.la -lpthread - -autocompact_test_SOURCES = db/autocompact_test.cc $(TESTHARNESS) -autocompact_test_LDADD = libhyperleveldb.la -lpthread - -arena_test_SOURCES = util/arena_test.cc $(TESTHARNESS) -arena_test_LDADD = libhyperleveldb.la -lpthread - -bloom_test_SOURCES = util/bloom_test.cc $(TESTHARNESS) -bloom_test_LDADD = libhyperleveldb.la -lpthread - -c_test_SOURCES = db/c_test.c $(TESTHARNESS) -c_test_LDADD = libhyperleveldb.la -lpthread - -cache_test_SOURCES = util/cache_test.cc $(TESTHARNESS) -cache_test_LDADD = libhyperleveldb.la -lpthread - -coding_test_SOURCES = util/coding_test.cc $(TESTHARNESS) -coding_test_LDADD = libhyperleveldb.la -lpthread - -corruption_test_SOURCES = db/corruption_test.cc $(TESTHARNESS) -corruption_test_LDADD = libhyperleveldb.la -lpthread - -crc32c_test_SOURCES = util/crc32c_test.cc $(TESTHARNESS) -crc32c_test_LDADD = libhyperleveldb.la -lpthread - -db_test_SOURCES = db/db_test.cc $(TESTHARNESS) -db_test_LDADD = libhyperleveldb.la -lpthread - -dbformat_test_SOURCES = db/dbformat_test.cc $(TESTHARNESS) -dbformat_test_LDADD = libhyperleveldb.la -lpthread - -env_test_SOURCES = util/env_test.cc $(TESTHARNESS) -env_test_LDADD = libhyperleveldb.la -lpthread - -filename_test_SOURCES = db/filename_test.cc $(TESTHARNESS) -filename_test_LDADD = libhyperleveldb.la -lpthread - -filter_block_test_SOURCES = table/filter_block_test.cc $(TESTHARNESS) -filter_block_test_LDADD = libhyperleveldb.la -lpthread - -log_test_SOURCES = db/log_test.cc $(TESTHARNESS) -log_test_LDADD = libhyperleveldb.la -lpthread - -table_test_SOURCES = table/table_test.cc $(TESTHARNESS) -table_test_LDADD = libhyperleveldb.la -lpthread - -skiplist_test_SOURCES = db/skiplist_test.cc $(TESTHARNESS) -skiplist_test_LDADD = libhyperleveldb.la -lpthread - -version_edit_test_SOURCES = db/version_edit_test.cc $(TESTHARNESS) -version_edit_test_LDADD = libhyperleveldb.la -lpthread - -version_set_test_SOURCES = db/version_set_test.cc $(TESTHARNESS) -version_set_test_LDADD = libhyperleveldb.la -lpthread - -write_batch_test_SOURCES = db/write_batch_test.cc $(TESTHARNESS) -write_batch_test_LDADD = libhyperleveldb.la -lpthread - -issue178_test_SOURCES = issues/issue178_test.cc $(TESTHARNESS) -issue178_test_LDADD = libhyperleveldb.la -lpthread - -issue200_test_SOURCES = issues/issue200_test.cc $(TESTHARNESS) -issue200_test_LDADD = libhyperleveldb.la -lpthread diff --git a/clipper/HyperLevelDB/NEWS b/clipper/HyperLevelDB/NEWS deleted file mode 100644 index 3fd9924..0000000 --- a/clipper/HyperLevelDB/NEWS +++ /dev/null @@ -1,17 +0,0 @@ -Release 1.2 2011-05-16 ----------------------- - -Fixes for larger databases (tested up to one billion 100-byte entries, -i.e., ~100GB). - -(1) Place hard limit on number of level-0 files. This fixes errors -of the form "too many open files". - -(2) Fixed memtable management. Before the fix, a heavy write burst -could cause unbounded memory usage. - -A fix for a logging bug where the reader would incorrectly complain -about corruption. - -Allow public access to WriteBatch contents so that users can easily -wrap a DB. diff --git a/clipper/HyperLevelDB/README b/clipper/HyperLevelDB/README deleted file mode 100644 index 1b95ba2..0000000 --- a/clipper/HyperLevelDB/README +++ /dev/null @@ -1,62 +0,0 @@ -leveldb: A key-value store -Authors: Sanjay Ghemawat (sanjay@google.com) and Jeff Dean (jeff@google.com) - -The code under this directory implements a system for maintaining a -persistent key/value store. - -See doc/index.html for more explanation. -See doc/impl.html for a brief overview of the implementation. - -The public interface is in include/*.h. Callers should not include or -rely on the details of any other header files in this package. Those -internal APIs may be changed without warning. - -Guide to header files: - -include/db.h - Main interface to the DB: Start here - -include/options.h - Control over the behavior of an entire database, and also - control over the behavior of individual reads and writes. - -include/comparator.h - Abstraction for user-specified comparison function. If you want - just bytewise comparison of keys, you can use the default comparator, - but clients can write their own comparator implementations if they - want custom ordering (e.g. to handle different character - encodings, etc.) - -include/iterator.h - Interface for iterating over data. You can get an iterator - from a DB object. - -include/write_batch.h - Interface for atomically applying multiple updates to a database. - -include/slice.h - A simple module for maintaining a pointer and a length into some - other byte array. - -include/status.h - Status is returned from many of the public interfaces and is used - to report success and various kinds of errors. - -include/env.h - Abstraction of the OS environment. A posix implementation of - this interface is in util/env_posix.cc - -include/table.h -include/table_builder.h - Lower-level modules that most clients probably won't use directly - -Install -======= - -Get up and running quickly: - - $ autoreconf -i - $ ./configure - $ make - # make install - # ldconfig diff --git a/clipper/HyperLevelDB/TODO b/clipper/HyperLevelDB/TODO deleted file mode 100644 index e603c07..0000000 --- a/clipper/HyperLevelDB/TODO +++ /dev/null @@ -1,14 +0,0 @@ -ss -- Stats - -db -- Maybe implement DB::BulkDeleteForRange(start_key, end_key) - that would blow away files whose ranges are entirely contained - within [start_key..end_key]? For Chrome, deletion of obsolete - object stores, etc. can be done in the background anyway, so - probably not that important. -- There have been requests for MultiGet. - -After a range is completely deleted, what gets rid of the -corresponding files if we do no future changes to that range. Make -the conditions for triggering compactions fire in more situations? diff --git a/clipper/HyperLevelDB/benchmark.cc b/clipper/HyperLevelDB/benchmark.cc deleted file mode 100644 index fe2d6ae..0000000 --- a/clipper/HyperLevelDB/benchmark.cc +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright (c) 2013-2014, Cornell University -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of HyperLevelDB nor the names of its contributors may -// be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -// HyperLevelDB -#include -#include -#include - -// STL -#include - -// po6 -#include - -// e -#include - -// ygor -#include - -static long _done = 0; -static long _number = 1000000; -static long _threads = 1; -static long _write_buf = 64ULL * 1024ULL * 1024ULL; -static const char* _output = "benchmark.dat"; -static const char* _dir = "."; - -static void -worker_thread(leveldb::DB*, ygor_data_logger* dl, - const armnod_config* k, - const armnod_config* v); - -int -main(int argc, const char* argv[]) -{ - // parse the command line - e::argparser ap; - ap.autohelp(); - ap.arg().name('n', "number") - .description("perform N operations against the database (default: 1000000)") - .metavar("N") - .as_long(&_number); - ap.arg().name('t', "threads") - .description("run the test with T concurrent threads (default: 1)") - .metavar("T") - .as_long(&_threads); - ap.arg().name('w', "write-buffer") - .description("write buffer size (default: 64MB)") - .as_long(&_write_buf); - ap.arg().name('o', "output") - .description("output file for benchmark results (default: benchmark.dat)") - .as_string(&_output); - ap.arg().name('d', "db-dir") - .description("directory for leveldb storage (default: .)") - .as_string(&_dir); - const std::auto_ptr key_parser(armnod_argparser::create("key-")); - const std::auto_ptr value_parser(armnod_argparser::create("value-")); - ap.add("Key Generation:", key_parser->parser()); - ap.add("Value Generation:", value_parser->parser()); - - if (!ap.parse(argc, argv)) - { - return EXIT_FAILURE; - } - - // open the LevelDB - leveldb::Options opts; - opts.create_if_missing = true; - opts.write_buffer_size = _write_buf; - opts.filter_policy = leveldb::NewBloomFilterPolicy(10); - leveldb::DB* db; - leveldb::Status st = leveldb::DB::Open(opts, _dir, &db); - - if (!st.ok()) - { - std::cerr << "could not open LevelDB: " << st.ToString() << std::endl; - return EXIT_FAILURE; - } - - // setup the experiment - ygor_data_logger* dl = ygor_data_logger_create(_output, 1000000, 1000); - - if (!dl) - { - std::cerr << "could not open log: " << strerror(errno) << std::endl; - return EXIT_FAILURE; - } - - typedef std::tr1::shared_ptr thread_ptr; - std::vector threads; - - for (size_t i = 0; i < _threads; ++i) - { - thread_ptr t(new po6::threads::thread(std::tr1::bind(worker_thread, db, dl, - key_parser->config(), value_parser->config()))); - threads.push_back(t); - t->start(); - } - - // do the experiment - - // tear it down - for (size_t i = 0; i < threads.size(); ++i) - { - threads[i]->join(); - } - - if (ygor_data_logger_flush_and_destroy(dl) < 0) - { - std::cerr << "could not close log: " << strerror(errno) << std::endl; - return EXIT_FAILURE; - } - - // dump stats of the DB - std::string tmp; - if (db->GetProperty("leveldb.stats", &tmp)) std::cout << tmp << std::endl; - delete db; - return EXIT_SUCCESS; -} - -void -worker_thread(leveldb::DB* db, - ygor_data_logger* dl, - const armnod_config* _k, - const armnod_config* _v) -{ - armnod_generator* key(armnod_generator_create(_k)); - armnod_generator* val(armnod_generator_create(_v)); - armnod_generator_seed(key, 0xdeadbeef); - armnod_generator_seed(val, 0x1eaff00d); - - while (__sync_fetch_and_add(&_done, 1) < _number) - { - const char* k = armnod_generate(key); - const char* v = armnod_generate(val); - size_t k_sz = strlen(k); - size_t v_sz = strlen(v); - - // issue a "get" - std::string tmp; - leveldb::ReadOptions ropts; - ygor_data_record dr; - dr.flags = 1; - ygor_data_logger_start(dl, &dr); - leveldb::Status rst = db->Get(ropts, leveldb::Slice(k, k_sz), &tmp); - ygor_data_logger_finish(dl, &dr); - ygor_data_logger_record(dl, &dr); - assert(rst.ok() || rst.IsNotFound()); - - // issue a "put" - leveldb::WriteOptions wopts; - wopts.sync = false; - dr.flags = 2; - ygor_data_logger_start(dl, &dr); - leveldb::Status wst = db->Put(wopts, leveldb::Slice(k, k_sz), leveldb::Slice(v, v_sz)); - ygor_data_logger_finish(dl, &dr); - ygor_data_logger_record(dl, &dr); - assert(wst.ok()); - } - - armnod_generator_destroy(key); - armnod_generator_destroy(val); -} diff --git a/clipper/HyperLevelDB/configure.ac b/clipper/HyperLevelDB/configure.ac deleted file mode 100644 index 44a90dc..0000000 --- a/clipper/HyperLevelDB/configure.ac +++ /dev/null @@ -1,111 +0,0 @@ -# Copyright (c) 2013 -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of HyperLevelDB nor the names of its contributors may -# be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -AC_PREREQ([2.62]) -AC_INIT([hyperleveldb], [1.0.dev], [robert@hyperdex.org]) -m4_define([serial_tests], [ - m4_esyscmd([case `automake --version | head -n 1` in - *1.11*);; - *) echo serial-tests;; - esac]) -]) -AM_INIT_AUTOMAKE(foreign serial_tests subdir-objects dist-bzip2) -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) -LT_PREREQ([2.2]) -LT_INIT -AC_CONFIG_SRCDIR([include/hyperleveldb/db.h]) -AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_MACRO_DIR([m4]) - -# Checks for programs. -AC_PROG_CXX -AC_PROG_CC -AC_LANG(C++) - -EXTRA_CFLAGS="" -AX_CHECK_COMPILE_FLAG([-fno-builtin-memcmp],[EXTRA_CFLAGS="-fno-builtin-memcmp"],,) -AX_CHECK_COMPILE_FLAG([-fno-builtin-memmove],[EXTRA_CFLAGS="${EXTRA_CFLAGS} -fno-builtin-memcmp"],,) -AX_CHECK_COMPILE_FLAG([-Qunused-arguments],[EXTRA_CFLAGS="${EXTRA_CFLAGS} -Qunused-arguments"],,) -#AX_CHECK_COMPILE_FLAG([-Wno-unknown-warning-option],[EXTRA_CFLAGS="${EXTRA_CFLAGS} -Wno-unknown-warning-option"],,) -AC_SUBST([EXTRA_CFLAGS], [${EXTRA_CFLAGS}]) - -# Checks for libraries. - -# Checks for header files. -AC_CHECK_HEADERS([endian.h machine/endian.h sys/endian.h sys/isa_defs.h sys/types.h]) - -# Checks for typedefs, structures, and compiler characteristics. - -# Checks for library functions. -AC_FUNC_ERROR_AT_LINE -AC_FUNC_MMAP -AC_CHECK_FUNCS([alarm clock_gettime mach_absolute_time ftruncate fsync]) -AC_CHECK_FUNCS([fread fread_unlocked fwrite fwrite_unlocked fflush]) -AC_CHECK_FUNCS([fflush_unlocked memmove mkdir munmap rmdir socket]) -AC_CHECK_DECLS([fdatasync]) - -# Optional components -snappy_detect_hdr=yes -snappy_detect_lib=yes -AC_CHECK_LIB([snappy], [snappy_compress], [], [snappy_detect_hdr=no]) -AC_CHECK_HEADER([snappy.h],,[snappy_detect_lib=no]) -AC_ARG_ENABLE([snappy], [AS_HELP_STRING([--enable-snappy], - [build with Snappy @<:@default: auto@:>@])], - [snappy=${enableval}], [snappy=no]) -if test x"${snappy}" = xyes; then - if test x"${snappy_detect_hdr}" != xyes; then - AC_MSG_ERROR([ -------------------------------------------------- -LevelDB configured with the Snappy library. -libsnappy.so not found -Please install Snappy to continue. --------------------------------------------------]) - fi - if test x"${snappy_detect_lib}" != xyes; then - AC_MSG_ERROR([ -------------------------------------------------- -LevelDB configured with the Snappy library. -snappy.h not found -Please install Snappy to continue. --------------------------------------------------]) - fi -fi -if test x"${snappy_detect_hdr}" = xyes -a x"${snappy_detect_lib}" = xyes; then -SNAPPY_FLAGS=-DSNAPPY -SNAPPY_LIBS=-lsnappy -else -SNAPPY_FLAGS= -SNAPPY_LIBS= -fi -AC_SUBST(SNAPPY_FLAGS) -AC_SUBST(SNAPPY_LIBS) - -AC_CONFIG_FILES([Makefile libhyperleveldb.pc hyperleveldb.upack]) -AC_OUTPUT diff --git a/clipper/HyperLevelDB/db/autocompact_test.cc b/clipper/HyperLevelDB/db/autocompact_test.cc deleted file mode 100644 index acf3c7d..0000000 --- a/clipper/HyperLevelDB/db/autocompact_test.cc +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (c) 2013 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/db.h" -#include "db/db_impl.h" -#include "hyperleveldb/cache.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -class AutoCompactTest { - public: - std::string dbname_; - Cache* tiny_cache_; - Options options_; - DB* db_; - - AutoCompactTest() { - dbname_ = test::TmpDir() + "/autocompact_test"; - tiny_cache_ = NewLRUCache(100); - options_.block_cache = tiny_cache_; - DestroyDB(dbname_, options_); - options_.create_if_missing = true; - options_.compression = kNoCompression; - ASSERT_OK(DB::Open(options_, dbname_, &db_)); - } - - ~AutoCompactTest() { - delete db_; - DestroyDB(dbname_, Options()); - delete tiny_cache_; - } - - std::string Key(int i) { - char buf[100]; - snprintf(buf, sizeof(buf), "key%06d", i); - return std::string(buf); - } - - uint64_t Size(const Slice& start, const Slice& limit) { - Range r(start, limit); - uint64_t size; - db_->GetApproximateSizes(&r, 1, &size); - return size; - } - - void DoReads(int n); -}; - -static const int kValueSize = 200 * 1024; -static const int kTotalSize = 100 * 1024 * 1024; -static const int kCount = kTotalSize / kValueSize; - -// Read through the first n keys repeatedly and check that they get -// compacted (verified by checking the size of the key space). -void AutoCompactTest::DoReads(int n) { - std::string value(kValueSize, 'x'); - DBImpl* dbi = reinterpret_cast(db_); - - // Fill database - for (int i = 0; i < kCount; i++) { - ASSERT_OK(db_->Put(WriteOptions(), Key(i), value)); - } - ASSERT_OK(dbi->TEST_CompactMemTable()); - - // Delete everything - for (int i = 0; i < kCount; i++) { - ASSERT_OK(db_->Delete(WriteOptions(), Key(i))); - } - ASSERT_OK(dbi->TEST_CompactMemTable()); - - // Get initial measurement of the space we will be reading. - const int64_t initial_size = Size(Key(0), Key(n)); - const int64_t initial_other_size = Size(Key(n), Key(kCount)); - - // Read until size drops significantly. - std::string limit_key = Key(n); - for (int read = 0; true; read++) { - ASSERT_LT(read, 100) << "Taking too long to compact"; - Iterator* iter = db_->NewIterator(ReadOptions()); - for (iter->SeekToFirst(); - iter->Valid() && iter->key().ToString() < limit_key; - iter->Next()) { - // Drop data - } - delete iter; - // Wait a little bit to allow any triggered compactions to complete. - Env::Default()->SleepForMicroseconds(1000000); - uint64_t size = Size(Key(0), Key(n)); - fprintf(stderr, "iter %3d => %7.3f MB [other %7.3f MB]\n", - read+1, size/1048576.0, Size(Key(n), Key(kCount))/1048576.0); - if (size <= initial_size/10) { - break; - } - } - - // Verify that the size of the key space not touched by the reads - // is pretty much unchanged. - const int64_t final_other_size = Size(Key(n), Key(kCount)); - ASSERT_LE(final_other_size, initial_other_size + 1048576); - ASSERT_GE(final_other_size, initial_other_size/5 - 1048576); -} - -TEST(AutoCompactTest, ReadAll) { - DoReads(kCount); -} - -// HyperLevelDB's ratio-driven compactions always compact everything here. The -// reads trigger the compaction, but then the system decides it is more -// effiicient to just collect everything, emptying the db completely. -#if 0 -TEST(AutoCompactTest, ReadHalf) { - DoReads(kCount/2); -} -#endif - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/db/builder.cc b/clipper/HyperLevelDB/db/builder.cc deleted file mode 100644 index 78544f6..0000000 --- a/clipper/HyperLevelDB/db/builder.cc +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/builder.h" - -#include "db/filename.h" -#include "db/dbformat.h" -#include "db/table_cache.h" -#include "db/version_edit.h" -#include "hyperleveldb/db.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/iterator.h" - -namespace leveldb { - -Status BuildTable(const std::string& dbname, - Env* env, - const Options& options, - TableCache* table_cache, - Iterator* iter, - FileMetaData* meta) { - Status s; - meta->file_size = 0; - iter->SeekToFirst(); - - std::string fname = SSTTableFileName(dbname, meta->number); - if (iter->Valid()) { - WritableFile* file; - s = env->NewWritableFile(fname, &file); - if (!s.ok()) { - return s; - } - - TableBuilder* builder = new TableBuilder(options, file); - meta->smallest.DecodeFrom(iter->key()); - for (; iter->Valid(); iter->Next()) { - Slice key = iter->key(); - meta->largest.DecodeFrom(key); - builder->Add(key, iter->value()); - } - - // Finish and check for builder errors - if (s.ok()) { - s = builder->Finish(); - if (s.ok()) { - meta->file_size = builder->FileSize(); - assert(meta->file_size > 0); - } - } else { - builder->Abandon(); - } - delete builder; - - // Finish and check for file errors - if (s.ok()) { - s = file->Sync(); - } - if (s.ok()) { - s = file->Close(); - } - delete file; - file = NULL; - - if (s.ok()) { - // Verify that the table is usable - Iterator* it = table_cache->NewIterator(ReadOptions(), - meta->number, - meta->file_size); - s = it->status(); - delete it; - } - } - - // Check for input iterator errors - if (!iter->status().ok()) { - s = iter->status(); - } - - if (s.ok() && meta->file_size > 0) { - // Keep it - } else { - env->DeleteFile(fname); - } - return s; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/builder.h b/clipper/HyperLevelDB/db/builder.h deleted file mode 100644 index a755314..0000000 --- a/clipper/HyperLevelDB/db/builder.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_BUILDER_H_ -#define STORAGE_LEVELDB_DB_BUILDER_H_ - -#include "hyperleveldb/status.h" - -namespace leveldb { - -struct Options; -struct FileMetaData; - -class Env; -class Iterator; -class TableCache; -class VersionEdit; - -// Build a Table file from the contents of *iter. The generated file -// will be named according to meta->number. On success, the rest of -// *meta will be filled with metadata about the generated table. -// If no data is present in *iter, meta->file_size will be set to -// zero, and no Table file will be produced. -extern Status BuildTable(const std::string& dbname, - Env* env, - const Options& options, - TableCache* table_cache, - Iterator* iter, - FileMetaData* meta); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_BUILDER_H_ diff --git a/clipper/HyperLevelDB/db/c.cc b/clipper/HyperLevelDB/db/c.cc deleted file mode 100644 index c51f4ff..0000000 --- a/clipper/HyperLevelDB/db/c.cc +++ /dev/null @@ -1,595 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/c.h" - -#include -#include -#include "hyperleveldb/cache.h" -#include "hyperleveldb/comparator.h" -#include "hyperleveldb/db.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/filter_policy.h" -#include "hyperleveldb/iterator.h" -#include "hyperleveldb/options.h" -#include "hyperleveldb/status.h" -#include "hyperleveldb/write_batch.h" - -using leveldb::Cache; -using leveldb::Comparator; -using leveldb::CompressionType; -using leveldb::DB; -using leveldb::Env; -using leveldb::FileLock; -using leveldb::FilterPolicy; -using leveldb::Iterator; -using leveldb::kMajorVersion; -using leveldb::kMinorVersion; -using leveldb::Logger; -using leveldb::NewBloomFilterPolicy; -using leveldb::NewLRUCache; -using leveldb::Options; -using leveldb::RandomAccessFile; -using leveldb::Range; -using leveldb::ReadOptions; -using leveldb::SequentialFile; -using leveldb::Slice; -using leveldb::Snapshot; -using leveldb::Status; -using leveldb::WritableFile; -using leveldb::WriteBatch; -using leveldb::WriteOptions; - -extern "C" { - -struct leveldb_t { DB* rep; }; -struct leveldb_iterator_t { Iterator* rep; }; -struct leveldb_writebatch_t { WriteBatch rep; }; -struct leveldb_snapshot_t { const Snapshot* rep; }; -struct leveldb_readoptions_t { ReadOptions rep; }; -struct leveldb_writeoptions_t { WriteOptions rep; }; -struct leveldb_options_t { Options rep; }; -struct leveldb_cache_t { Cache* rep; }; -struct leveldb_seqfile_t { SequentialFile* rep; }; -struct leveldb_randomfile_t { RandomAccessFile* rep; }; -struct leveldb_writablefile_t { WritableFile* rep; }; -struct leveldb_logger_t { Logger* rep; }; -struct leveldb_filelock_t { FileLock* rep; }; - -struct leveldb_comparator_t : public Comparator { - void* state_; - void (*destructor_)(void*); - int (*compare_)( - void*, - const char* a, size_t alen, - const char* b, size_t blen); - const char* (*name_)(void*); - - virtual ~leveldb_comparator_t() { - (*destructor_)(state_); - } - - virtual int Compare(const Slice& a, const Slice& b) const { - return (*compare_)(state_, a.data(), a.size(), b.data(), b.size()); - } - - virtual const char* Name() const { - return (*name_)(state_); - } - - // No-ops since the C binding does not support key shortening methods. - virtual void FindShortestSeparator(std::string*, const Slice&) const { } - virtual void FindShortSuccessor(std::string* key) const { } -}; - -struct leveldb_filterpolicy_t : public FilterPolicy { - void* state_; - void (*destructor_)(void*); - const char* (*name_)(void*); - char* (*create_)( - void*, - const char* const* key_array, const size_t* key_length_array, - int num_keys, - size_t* filter_length); - unsigned char (*key_match_)( - void*, - const char* key, size_t length, - const char* filter, size_t filter_length); - - virtual ~leveldb_filterpolicy_t() { - (*destructor_)(state_); - } - - virtual const char* Name() const { - return (*name_)(state_); - } - - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const { - std::vector key_pointers(n); - std::vector key_sizes(n); - for (int i = 0; i < n; i++) { - key_pointers[i] = keys[i].data(); - key_sizes[i] = keys[i].size(); - } - size_t len; - char* filter = (*create_)(state_, &key_pointers[0], &key_sizes[0], n, &len); - dst->append(filter, len); - free(filter); - } - - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const { - return (*key_match_)(state_, key.data(), key.size(), - filter.data(), filter.size()); - } -}; - -struct leveldb_env_t { - Env* rep; - bool is_default; -}; - -static bool SaveError(char** errptr, const Status& s) { - assert(errptr != NULL); - if (s.ok()) { - return false; - } else if (*errptr == NULL) { - *errptr = strdup(s.ToString().c_str()); - } else { - // TODO(sanjay): Merge with existing error? - free(*errptr); - *errptr = strdup(s.ToString().c_str()); - } - return true; -} - -static char* CopyString(const std::string& str) { - char* result = reinterpret_cast(malloc(sizeof(char) * str.size())); - memcpy(result, str.data(), sizeof(char) * str.size()); - return result; -} - -leveldb_t* leveldb_open( - const leveldb_options_t* options, - const char* name, - char** errptr) { - DB* db; - if (SaveError(errptr, DB::Open(options->rep, std::string(name), &db))) { - return NULL; - } - leveldb_t* result = new leveldb_t; - result->rep = db; - return result; -} - -void leveldb_close(leveldb_t* db) { - delete db->rep; - delete db; -} - -void leveldb_put( - leveldb_t* db, - const leveldb_writeoptions_t* options, - const char* key, size_t keylen, - const char* val, size_t vallen, - char** errptr) { - SaveError(errptr, - db->rep->Put(options->rep, Slice(key, keylen), Slice(val, vallen))); -} - -void leveldb_delete( - leveldb_t* db, - const leveldb_writeoptions_t* options, - const char* key, size_t keylen, - char** errptr) { - SaveError(errptr, db->rep->Delete(options->rep, Slice(key, keylen))); -} - - -void leveldb_write( - leveldb_t* db, - const leveldb_writeoptions_t* options, - leveldb_writebatch_t* batch, - char** errptr) { - SaveError(errptr, db->rep->Write(options->rep, &batch->rep)); -} - -char* leveldb_get( - leveldb_t* db, - const leveldb_readoptions_t* options, - const char* key, size_t keylen, - size_t* vallen, - char** errptr) { - char* result = NULL; - std::string tmp; - Status s = db->rep->Get(options->rep, Slice(key, keylen), &tmp); - if (s.ok()) { - *vallen = tmp.size(); - result = CopyString(tmp); - } else { - *vallen = 0; - if (!s.IsNotFound()) { - SaveError(errptr, s); - } - } - return result; -} - -leveldb_iterator_t* leveldb_create_iterator( - leveldb_t* db, - const leveldb_readoptions_t* options) { - leveldb_iterator_t* result = new leveldb_iterator_t; - result->rep = db->rep->NewIterator(options->rep); - return result; -} - -const leveldb_snapshot_t* leveldb_create_snapshot( - leveldb_t* db) { - leveldb_snapshot_t* result = new leveldb_snapshot_t; - result->rep = db->rep->GetSnapshot(); - return result; -} - -void leveldb_release_snapshot( - leveldb_t* db, - const leveldb_snapshot_t* snapshot) { - db->rep->ReleaseSnapshot(snapshot->rep); - delete snapshot; -} - -char* leveldb_property_value( - leveldb_t* db, - const char* propname) { - std::string tmp; - if (db->rep->GetProperty(Slice(propname), &tmp)) { - // We use strdup() since we expect human readable output. - return strdup(tmp.c_str()); - } else { - return NULL; - } -} - -void leveldb_approximate_sizes( - leveldb_t* db, - int num_ranges, - const char* const* range_start_key, const size_t* range_start_key_len, - const char* const* range_limit_key, const size_t* range_limit_key_len, - uint64_t* sizes) { - Range* ranges = new Range[num_ranges]; - for (int i = 0; i < num_ranges; i++) { - ranges[i].start = Slice(range_start_key[i], range_start_key_len[i]); - ranges[i].limit = Slice(range_limit_key[i], range_limit_key_len[i]); - } - db->rep->GetApproximateSizes(ranges, num_ranges, sizes); - delete[] ranges; -} - -void leveldb_compact_range( - leveldb_t* db, - const char* start_key, size_t start_key_len, - const char* limit_key, size_t limit_key_len) { - Slice a, b; - db->rep->CompactRange( - // Pass NULL Slice if corresponding "const char*" is NULL - (start_key ? (a = Slice(start_key, start_key_len), &a) : NULL), - (limit_key ? (b = Slice(limit_key, limit_key_len), &b) : NULL)); -} - -void leveldb_destroy_db( - const leveldb_options_t* options, - const char* name, - char** errptr) { - SaveError(errptr, DestroyDB(name, options->rep)); -} - -void leveldb_repair_db( - const leveldb_options_t* options, - const char* name, - char** errptr) { - SaveError(errptr, RepairDB(name, options->rep)); -} - -void leveldb_iter_destroy(leveldb_iterator_t* iter) { - delete iter->rep; - delete iter; -} - -unsigned char leveldb_iter_valid(const leveldb_iterator_t* iter) { - return iter->rep->Valid(); -} - -void leveldb_iter_seek_to_first(leveldb_iterator_t* iter) { - iter->rep->SeekToFirst(); -} - -void leveldb_iter_seek_to_last(leveldb_iterator_t* iter) { - iter->rep->SeekToLast(); -} - -void leveldb_iter_seek(leveldb_iterator_t* iter, const char* k, size_t klen) { - iter->rep->Seek(Slice(k, klen)); -} - -void leveldb_iter_next(leveldb_iterator_t* iter) { - iter->rep->Next(); -} - -void leveldb_iter_prev(leveldb_iterator_t* iter) { - iter->rep->Prev(); -} - -const char* leveldb_iter_key(const leveldb_iterator_t* iter, size_t* klen) { - Slice s = iter->rep->key(); - *klen = s.size(); - return s.data(); -} - -const char* leveldb_iter_value(const leveldb_iterator_t* iter, size_t* vlen) { - Slice s = iter->rep->value(); - *vlen = s.size(); - return s.data(); -} - -void leveldb_iter_get_error(const leveldb_iterator_t* iter, char** errptr) { - SaveError(errptr, iter->rep->status()); -} - -leveldb_writebatch_t* leveldb_writebatch_create() { - return new leveldb_writebatch_t; -} - -void leveldb_writebatch_destroy(leveldb_writebatch_t* b) { - delete b; -} - -void leveldb_writebatch_clear(leveldb_writebatch_t* b) { - b->rep.Clear(); -} - -void leveldb_writebatch_put( - leveldb_writebatch_t* b, - const char* key, size_t klen, - const char* val, size_t vlen) { - b->rep.Put(Slice(key, klen), Slice(val, vlen)); -} - -void leveldb_writebatch_delete( - leveldb_writebatch_t* b, - const char* key, size_t klen) { - b->rep.Delete(Slice(key, klen)); -} - -void leveldb_writebatch_iterate( - leveldb_writebatch_t* b, - void* state, - void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen), - void (*deleted)(void*, const char* k, size_t klen)) { - class H : public WriteBatch::Handler { - public: - void* state_; - void (*put_)(void*, const char* k, size_t klen, const char* v, size_t vlen); - void (*deleted_)(void*, const char* k, size_t klen); - virtual void Put(const Slice& key, const Slice& value) { - (*put_)(state_, key.data(), key.size(), value.data(), value.size()); - } - virtual void Delete(const Slice& key) { - (*deleted_)(state_, key.data(), key.size()); - } - }; - H handler; - handler.state_ = state; - handler.put_ = put; - handler.deleted_ = deleted; - b->rep.Iterate(&handler); -} - -leveldb_options_t* leveldb_options_create() { - return new leveldb_options_t; -} - -void leveldb_options_destroy(leveldb_options_t* options) { - delete options; -} - -void leveldb_options_set_comparator( - leveldb_options_t* opt, - leveldb_comparator_t* cmp) { - opt->rep.comparator = cmp; -} - -void leveldb_options_set_filter_policy( - leveldb_options_t* opt, - leveldb_filterpolicy_t* policy) { - opt->rep.filter_policy = policy; -} - -void leveldb_options_set_create_if_missing( - leveldb_options_t* opt, unsigned char v) { - opt->rep.create_if_missing = v; -} - -void leveldb_options_set_error_if_exists( - leveldb_options_t* opt, unsigned char v) { - opt->rep.error_if_exists = v; -} - -void leveldb_options_set_paranoid_checks( - leveldb_options_t* opt, unsigned char v) { - opt->rep.paranoid_checks = v; -} - -void leveldb_options_set_env(leveldb_options_t* opt, leveldb_env_t* env) { - opt->rep.env = (env ? env->rep : NULL); -} - -void leveldb_options_set_info_log(leveldb_options_t* opt, leveldb_logger_t* l) { - opt->rep.info_log = (l ? l->rep : NULL); -} - -void leveldb_options_set_write_buffer_size(leveldb_options_t* opt, size_t s) { - opt->rep.write_buffer_size = s; -} - -void leveldb_options_set_max_open_files(leveldb_options_t* opt, int n) { - opt->rep.max_open_files = n; -} - -void leveldb_options_set_cache(leveldb_options_t* opt, leveldb_cache_t* c) { - opt->rep.block_cache = c->rep; -} - -void leveldb_options_set_block_size(leveldb_options_t* opt, size_t s) { - opt->rep.block_size = s; -} - -void leveldb_options_set_block_restart_interval(leveldb_options_t* opt, int n) { - opt->rep.block_restart_interval = n; -} - -void leveldb_options_set_compression(leveldb_options_t* opt, int t) { - opt->rep.compression = static_cast(t); -} - -leveldb_comparator_t* leveldb_comparator_create( - void* state, - void (*destructor)(void*), - int (*compare)( - void*, - const char* a, size_t alen, - const char* b, size_t blen), - const char* (*name)(void*)) { - leveldb_comparator_t* result = new leveldb_comparator_t; - result->state_ = state; - result->destructor_ = destructor; - result->compare_ = compare; - result->name_ = name; - return result; -} - -void leveldb_comparator_destroy(leveldb_comparator_t* cmp) { - delete cmp; -} - -leveldb_filterpolicy_t* leveldb_filterpolicy_create( - void* state, - void (*destructor)(void*), - char* (*create_filter)( - void*, - const char* const* key_array, const size_t* key_length_array, - int num_keys, - size_t* filter_length), - unsigned char (*key_may_match)( - void*, - const char* key, size_t length, - const char* filter, size_t filter_length), - const char* (*name)(void*)) { - leveldb_filterpolicy_t* result = new leveldb_filterpolicy_t; - result->state_ = state; - result->destructor_ = destructor; - result->create_ = create_filter; - result->key_match_ = key_may_match; - result->name_ = name; - return result; -} - -void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t* filter) { - delete filter; -} - -leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom(int bits_per_key) { - // Make a leveldb_filterpolicy_t, but override all of its methods so - // they delegate to a NewBloomFilterPolicy() instead of user - // supplied C functions. - struct Wrapper : public leveldb_filterpolicy_t { - const FilterPolicy* rep_; - ~Wrapper() { delete rep_; } - const char* Name() const { return rep_->Name(); } - void CreateFilter(const Slice* keys, int n, std::string* dst) const { - return rep_->CreateFilter(keys, n, dst); - } - bool KeyMayMatch(const Slice& key, const Slice& filter) const { - return rep_->KeyMayMatch(key, filter); - } - static void DoNothing(void*) { } - }; - Wrapper* wrapper = new Wrapper; - wrapper->rep_ = NewBloomFilterPolicy(bits_per_key); - wrapper->state_ = NULL; - wrapper->destructor_ = &Wrapper::DoNothing; - return wrapper; -} - -leveldb_readoptions_t* leveldb_readoptions_create() { - return new leveldb_readoptions_t; -} - -void leveldb_readoptions_destroy(leveldb_readoptions_t* opt) { - delete opt; -} - -void leveldb_readoptions_set_verify_checksums( - leveldb_readoptions_t* opt, - unsigned char v) { - opt->rep.verify_checksums = v; -} - -void leveldb_readoptions_set_fill_cache( - leveldb_readoptions_t* opt, unsigned char v) { - opt->rep.fill_cache = v; -} - -void leveldb_readoptions_set_snapshot( - leveldb_readoptions_t* opt, - const leveldb_snapshot_t* snap) { - opt->rep.snapshot = (snap ? snap->rep : NULL); -} - -leveldb_writeoptions_t* leveldb_writeoptions_create() { - return new leveldb_writeoptions_t; -} - -void leveldb_writeoptions_destroy(leveldb_writeoptions_t* opt) { - delete opt; -} - -void leveldb_writeoptions_set_sync( - leveldb_writeoptions_t* opt, unsigned char v) { - opt->rep.sync = v; -} - -leveldb_cache_t* leveldb_cache_create_lru(size_t capacity) { - leveldb_cache_t* c = new leveldb_cache_t; - c->rep = NewLRUCache(capacity); - return c; -} - -void leveldb_cache_destroy(leveldb_cache_t* cache) { - delete cache->rep; - delete cache; -} - -leveldb_env_t* leveldb_create_default_env() { - leveldb_env_t* result = new leveldb_env_t; - result->rep = Env::Default(); - result->is_default = true; - return result; -} - -void leveldb_env_destroy(leveldb_env_t* env) { - if (!env->is_default) delete env->rep; - delete env; -} - -void leveldb_free(void* ptr) { - free(ptr); -} - -int leveldb_major_version() { - return kMajorVersion; -} - -int leveldb_minor_version() { - return kMinorVersion; -} - -} // end extern "C" diff --git a/clipper/HyperLevelDB/db/c_test.c b/clipper/HyperLevelDB/db/c_test.c deleted file mode 100644 index 3f5b60e..0000000 --- a/clipper/HyperLevelDB/db/c_test.c +++ /dev/null @@ -1,390 +0,0 @@ -/* Copyright (c) 2011 The LevelDB Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. See the AUTHORS file for names of contributors. */ - -#include "hyperleveldb/c.h" - -#include -#include -#include -#include -#include -#include - -const char* phase = ""; -static char dbname[200]; - -static void StartPhase(const char* name) { - fprintf(stderr, "=== Test %s\n", name); - phase = name; -} - -static const char* GetTempDir(void) { - const char* ret = getenv("TEST_TMPDIR"); - if (ret == NULL || ret[0] == '\0') - ret = "/tmp"; - return ret; -} - -#define CheckNoError(err) \ - if ((err) != NULL) { \ - fprintf(stderr, "%s:%d: %s: %s\n", __FILE__, __LINE__, phase, (err)); \ - abort(); \ - } - -#define CheckCondition(cond) \ - if (!(cond)) { \ - fprintf(stderr, "%s:%d: %s: %s\n", __FILE__, __LINE__, phase, #cond); \ - abort(); \ - } - -static void CheckEqual(const char* expected, const char* v, size_t n) { - if (expected == NULL && v == NULL) { - // ok - } else if (expected != NULL && v != NULL && n == strlen(expected) && - memcmp(expected, v, n) == 0) { - // ok - return; - } else { - fprintf(stderr, "%s: expected '%s', got '%s'\n", - phase, - (expected ? expected : "(null)"), - (v ? v : "(null")); - abort(); - } -} - -static void Free(char** ptr) { - if (*ptr) { - free(*ptr); - *ptr = NULL; - } -} - -static void CheckGet( - leveldb_t* db, - const leveldb_readoptions_t* options, - const char* key, - const char* expected) { - char* err = NULL; - size_t val_len; - char* val; - val = leveldb_get(db, options, key, strlen(key), &val_len, &err); - CheckNoError(err); - CheckEqual(expected, val, val_len); - Free(&val); -} - -static void CheckIter(leveldb_iterator_t* iter, - const char* key, const char* val) { - size_t len; - const char* str; - str = leveldb_iter_key(iter, &len); - CheckEqual(key, str, len); - str = leveldb_iter_value(iter, &len); - CheckEqual(val, str, len); -} - -// Callback from leveldb_writebatch_iterate() -static void CheckPut(void* ptr, - const char* k, size_t klen, - const char* v, size_t vlen) { - int* state = (int*) ptr; - CheckCondition(*state < 2); - switch (*state) { - case 0: - CheckEqual("bar", k, klen); - CheckEqual("b", v, vlen); - break; - case 1: - CheckEqual("box", k, klen); - CheckEqual("c", v, vlen); - break; - } - (*state)++; -} - -// Callback from leveldb_writebatch_iterate() -static void CheckDel(void* ptr, const char* k, size_t klen) { - int* state = (int*) ptr; - CheckCondition(*state == 2); - CheckEqual("bar", k, klen); - (*state)++; -} - -static void CmpDestroy(void* arg) { } - -static int CmpCompare(void* arg, const char* a, size_t alen, - const char* b, size_t blen) { - int n = (alen < blen) ? alen : blen; - int r = memcmp(a, b, n); - if (r == 0) { - if (alen < blen) r = -1; - else if (alen > blen) r = +1; - } - return r; -} - -static const char* CmpName(void* arg) { - return "foo"; -} - -// Custom filter policy -static unsigned char fake_filter_result = 1; -static void FilterDestroy(void* arg) { } -static const char* FilterName(void* arg) { - return "TestFilter"; -} -static char* FilterCreate( - void* arg, - const char* const* key_array, const size_t* key_length_array, - int num_keys, - size_t* filter_length) { - *filter_length = 4; - char* result = malloc(4); - memcpy(result, "fake", 4); - return result; -} -unsigned char FilterKeyMatch( - void* arg, - const char* key, size_t length, - const char* filter, size_t filter_length) { - CheckCondition(filter_length == 4); - CheckCondition(memcmp(filter, "fake", 4) == 0); - return fake_filter_result; -} - -int main(int argc, char** argv) { - leveldb_t* db; - leveldb_comparator_t* cmp; - leveldb_cache_t* cache; - leveldb_env_t* env; - leveldb_options_t* options; - leveldb_readoptions_t* roptions; - leveldb_writeoptions_t* woptions; - char* err = NULL; - int run = -1; - - CheckCondition(leveldb_major_version() >= 1); - CheckCondition(leveldb_minor_version() >= 1); - - snprintf(dbname, sizeof(dbname), - "%s/leveldb_c_test-%d", - GetTempDir(), - ((int) geteuid())); - - StartPhase("create_objects"); - cmp = leveldb_comparator_create(NULL, CmpDestroy, CmpCompare, CmpName); - env = leveldb_create_default_env(); - cache = leveldb_cache_create_lru(100000); - - options = leveldb_options_create(); - leveldb_options_set_comparator(options, cmp); - leveldb_options_set_error_if_exists(options, 1); - leveldb_options_set_cache(options, cache); - leveldb_options_set_env(options, env); - leveldb_options_set_info_log(options, NULL); - leveldb_options_set_write_buffer_size(options, 100000); - leveldb_options_set_paranoid_checks(options, 1); - leveldb_options_set_max_open_files(options, 10); - leveldb_options_set_block_size(options, 1024); - leveldb_options_set_block_restart_interval(options, 8); - leveldb_options_set_compression(options, leveldb_no_compression); - - roptions = leveldb_readoptions_create(); - leveldb_readoptions_set_verify_checksums(roptions, 1); - leveldb_readoptions_set_fill_cache(roptions, 0); - - woptions = leveldb_writeoptions_create(); - leveldb_writeoptions_set_sync(woptions, 1); - - StartPhase("destroy"); - leveldb_destroy_db(options, dbname, &err); - Free(&err); - - StartPhase("open_error"); - db = leveldb_open(options, dbname, &err); - CheckCondition(err != NULL); - Free(&err); - - StartPhase("leveldb_free"); - db = leveldb_open(options, dbname, &err); - CheckCondition(err != NULL); - leveldb_free(err); - err = NULL; - - StartPhase("open"); - leveldb_options_set_create_if_missing(options, 1); - db = leveldb_open(options, dbname, &err); - CheckNoError(err); - CheckGet(db, roptions, "foo", NULL); - - StartPhase("put"); - leveldb_put(db, woptions, "foo", 3, "hello", 5, &err); - CheckNoError(err); - CheckGet(db, roptions, "foo", "hello"); - - StartPhase("compactall"); - leveldb_compact_range(db, NULL, 0, NULL, 0); - CheckGet(db, roptions, "foo", "hello"); - - StartPhase("compactrange"); - leveldb_compact_range(db, "a", 1, "z", 1); - CheckGet(db, roptions, "foo", "hello"); - - StartPhase("writebatch"); - { - leveldb_writebatch_t* wb = leveldb_writebatch_create(); - leveldb_writebatch_put(wb, "foo", 3, "a", 1); - leveldb_writebatch_clear(wb); - leveldb_writebatch_put(wb, "bar", 3, "b", 1); - leveldb_writebatch_put(wb, "box", 3, "c", 1); - leveldb_writebatch_delete(wb, "bar", 3); - leveldb_write(db, woptions, wb, &err); - CheckNoError(err); - CheckGet(db, roptions, "foo", "hello"); - CheckGet(db, roptions, "bar", NULL); - CheckGet(db, roptions, "box", "c"); - int pos = 0; - leveldb_writebatch_iterate(wb, &pos, CheckPut, CheckDel); - CheckCondition(pos == 3); - leveldb_writebatch_destroy(wb); - } - - StartPhase("iter"); - { - leveldb_iterator_t* iter = leveldb_create_iterator(db, roptions); - CheckCondition(!leveldb_iter_valid(iter)); - leveldb_iter_seek_to_first(iter); - CheckCondition(leveldb_iter_valid(iter)); - CheckIter(iter, "box", "c"); - leveldb_iter_next(iter); - CheckIter(iter, "foo", "hello"); - leveldb_iter_prev(iter); - CheckIter(iter, "box", "c"); - leveldb_iter_prev(iter); - CheckCondition(!leveldb_iter_valid(iter)); - leveldb_iter_seek_to_last(iter); - CheckIter(iter, "foo", "hello"); - leveldb_iter_seek(iter, "b", 1); - CheckIter(iter, "box", "c"); - leveldb_iter_get_error(iter, &err); - CheckNoError(err); - leveldb_iter_destroy(iter); - } - - StartPhase("approximate_sizes"); - { - int i; - int n = 20000; - char keybuf[100]; - char valbuf[100]; - uint64_t sizes[2]; - const char* start[2] = { "a", "k00000000000000010000" }; - size_t start_len[2] = { 1, 21 }; - const char* limit[2] = { "k00000000000000010000", "z" }; - size_t limit_len[2] = { 21, 1 }; - leveldb_writeoptions_set_sync(woptions, 0); - for (i = 0; i < n; i++) { - snprintf(keybuf, sizeof(keybuf), "k%020d", i); - snprintf(valbuf, sizeof(valbuf), "v%020d", i); - leveldb_put(db, woptions, keybuf, strlen(keybuf), valbuf, strlen(valbuf), - &err); - CheckNoError(err); - } - leveldb_approximate_sizes(db, 2, start, start_len, limit, limit_len, sizes); - CheckCondition(sizes[0] > 0); - CheckCondition(sizes[1] > 0); - } - - StartPhase("property"); - { - char* prop = leveldb_property_value(db, "nosuchprop"); - CheckCondition(prop == NULL); - prop = leveldb_property_value(db, "leveldb.stats"); - CheckCondition(prop != NULL); - Free(&prop); - } - - StartPhase("snapshot"); - { - const leveldb_snapshot_t* snap; - snap = leveldb_create_snapshot(db); - leveldb_delete(db, woptions, "foo", 3, &err); - CheckNoError(err); - leveldb_readoptions_set_snapshot(roptions, snap); - CheckGet(db, roptions, "foo", "hello"); - leveldb_readoptions_set_snapshot(roptions, NULL); - CheckGet(db, roptions, "foo", NULL); - leveldb_release_snapshot(db, snap); - } - - StartPhase("repair"); - { - leveldb_close(db); - leveldb_options_set_create_if_missing(options, 0); - leveldb_options_set_error_if_exists(options, 0); - leveldb_repair_db(options, dbname, &err); - CheckNoError(err); - db = leveldb_open(options, dbname, &err); - CheckNoError(err); - CheckGet(db, roptions, "foo", NULL); - CheckGet(db, roptions, "bar", NULL); - CheckGet(db, roptions, "box", "c"); - leveldb_options_set_create_if_missing(options, 1); - leveldb_options_set_error_if_exists(options, 1); - } - - StartPhase("filter"); - for (run = 0; run < 2; run++) { - // First run uses custom filter, second run uses bloom filter - CheckNoError(err); - leveldb_filterpolicy_t* policy; - if (run == 0) { - policy = leveldb_filterpolicy_create( - NULL, FilterDestroy, FilterCreate, FilterKeyMatch, FilterName); - } else { - policy = leveldb_filterpolicy_create_bloom(10); - } - - // Create new database - leveldb_close(db); - leveldb_destroy_db(options, dbname, &err); - leveldb_options_set_filter_policy(options, policy); - db = leveldb_open(options, dbname, &err); - CheckNoError(err); - leveldb_put(db, woptions, "foo", 3, "foovalue", 8, &err); - CheckNoError(err); - leveldb_put(db, woptions, "bar", 3, "barvalue", 8, &err); - CheckNoError(err); - leveldb_compact_range(db, NULL, 0, NULL, 0); - - fake_filter_result = 1; - CheckGet(db, roptions, "foo", "foovalue"); - CheckGet(db, roptions, "bar", "barvalue"); - if (phase == 0) { - // Must not find value when custom filter returns false - fake_filter_result = 0; - CheckGet(db, roptions, "foo", NULL); - CheckGet(db, roptions, "bar", NULL); - fake_filter_result = 1; - - CheckGet(db, roptions, "foo", "foovalue"); - CheckGet(db, roptions, "bar", "barvalue"); - } - leveldb_options_set_filter_policy(options, NULL); - leveldb_filterpolicy_destroy(policy); - } - - StartPhase("cleanup"); - leveldb_close(db); - leveldb_options_destroy(options); - leveldb_readoptions_destroy(roptions); - leveldb_writeoptions_destroy(woptions); - leveldb_cache_destroy(cache); - leveldb_comparator_destroy(cmp); - leveldb_env_destroy(env); - - fprintf(stderr, "PASS\n"); - return 0; -} diff --git a/clipper/HyperLevelDB/db/corruption_test.cc b/clipper/HyperLevelDB/db/corruption_test.cc deleted file mode 100644 index a3372b2..0000000 --- a/clipper/HyperLevelDB/db/corruption_test.cc +++ /dev/null @@ -1,374 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/db.h" - -#include -#include -#include -#include -#include "hyperleveldb/cache.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/table.h" -#include "hyperleveldb/write_batch.h" -#include "db/db_impl.h" -#include "db/filename.h" -#include "db/log_format.h" -#include "db/version_set.h" -#include "util/logging.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -static const int kValueSize = 1000; - -class CorruptionTest { - public: - test::ErrorEnv env_; - std::string dbname_; - Cache* tiny_cache_; - Options options_; - DB* db_; - - CorruptionTest() { - tiny_cache_ = NewLRUCache(100); - options_.env = &env_; - options_.block_cache = tiny_cache_; - dbname_ = test::TmpDir() + "/db_test"; - DestroyDB(dbname_, options_); - - db_ = NULL; - options_.create_if_missing = true; - Reopen(); - options_.create_if_missing = false; - } - - ~CorruptionTest() { - delete db_; - DestroyDB(dbname_, Options()); - delete tiny_cache_; - } - - Status TryReopen() { - delete db_; - db_ = NULL; - return DB::Open(options_, dbname_, &db_); - } - - void Reopen() { - ASSERT_OK(TryReopen()); - } - - void RepairDB() { - delete db_; - db_ = NULL; - ASSERT_OK(::leveldb::RepairDB(dbname_, options_)); - } - - void Build(int n) { - std::string key_space, value_space; - WriteBatch batch; - for (int i = 0; i < n; i++) { - //if ((i % 100) == 0) fprintf(stderr, "@ %d of %d\n", i, n); - Slice key = Key(i, &key_space); - batch.Clear(); - batch.Put(key, Value(i, &value_space)); - WriteOptions options; - // Corrupt() doesn't work without this sync on windows; stat reports 0 for - // the file size. - if (i == n - 1) { - options.sync = true; - } - ASSERT_OK(db_->Write(options, &batch)); - } - } - - void Check(int min_expected, int max_expected) { - int next_expected = 0; - int missed = 0; - int bad_keys = 0; - int bad_values = 0; - int correct = 0; - std::string value_space; - Iterator* iter = db_->NewIterator(ReadOptions()); - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - uint64_t key; - Slice in(iter->key()); - if (in == "" || in == "~") { - // Ignore boundary keys. - continue; - } - if (!ConsumeDecimalNumber(&in, &key) || - !in.empty() || - key < next_expected) { - bad_keys++; - continue; - } - missed += (key - next_expected); - next_expected = key + 1; - if (iter->value() != Value(key, &value_space)) { - bad_values++; - } else { - correct++; - } - } - delete iter; - - fprintf(stderr, - "expected=%d..%d; got=%d; bad_keys=%d; bad_values=%d; missed=%d\n", - min_expected, max_expected, correct, bad_keys, bad_values, missed); - ASSERT_LE(min_expected, correct); - ASSERT_GE(max_expected, correct); - } - - void Corrupt(FileType filetype, int offset, int bytes_to_corrupt) { - // Pick file to corrupt - std::vector filenames; - ASSERT_OK(env_.GetChildren(dbname_, &filenames)); - uint64_t number; - FileType type; - std::string fname; - int picked_number = -1; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type) && - type == filetype && - int(number) > picked_number) { // Pick latest file - fname = dbname_ + "/" + filenames[i]; - picked_number = number; - } - } - ASSERT_TRUE(!fname.empty()) << filetype; - - struct stat sbuf; - if (stat(fname.c_str(), &sbuf) != 0) { - const char* msg = strerror(errno); - ASSERT_TRUE(false) << fname << ": " << msg; - } - - if (offset < 0) { - // Relative to end of file; make it absolute - if (-offset > sbuf.st_size) { - offset = 0; - } else { - offset = sbuf.st_size + offset; - } - } - if (offset > sbuf.st_size) { - offset = sbuf.st_size; - } - if (offset + bytes_to_corrupt > sbuf.st_size) { - bytes_to_corrupt = sbuf.st_size - offset; - } - - // Do it - std::string contents; - Status s = ReadFileToString(Env::Default(), fname, &contents); - ASSERT_TRUE(s.ok()) << s.ToString(); - for (int i = 0; i < bytes_to_corrupt; i++) { - contents[i + offset] ^= 0x80; - } - s = WriteStringToFile(Env::Default(), contents, fname); - ASSERT_TRUE(s.ok()) << s.ToString(); - } - - int Property(const std::string& name) { - std::string property; - int result; - if (db_->GetProperty(name, &property) && - sscanf(property.c_str(), "%d", &result) == 1) { - return result; - } else { - return -1; - } - } - - // Return the ith key - Slice Key(int i, std::string* storage) { - char buf[100]; - snprintf(buf, sizeof(buf), "%016d", i); - storage->assign(buf, strlen(buf)); - return Slice(*storage); - } - - // Return the value to associate with the specified key - Slice Value(int k, std::string* storage) { - Random r(k); - return test::RandomString(&r, kValueSize, storage); - } -}; - -TEST(CorruptionTest, Recovery) { - Build(100); - Check(100, 100); - Corrupt(kLogFile, 19, 1); // WriteBatch tag for first record - Corrupt(kLogFile, log::kBlockSize + 1000, 1); // Somewhere in second block - Reopen(); - - // The 64 records in the first two log blocks are completely lost. - Check(36, 36); -} - -TEST(CorruptionTest, RecoverWriteError) { - env_.writable_file_error_ = true; - Status s = TryReopen(); - ASSERT_TRUE(!s.ok()); -} - -TEST(CorruptionTest, NewFileErrorDuringWrite) { - // Do enough writing to force minor compaction - env_.writable_file_error_ = true; - const int num = 3 + (Options().write_buffer_size / kValueSize); - std::string value_storage; - Status s; - for (int i = 0; s.ok() && i < num; i++) { - WriteBatch batch; - batch.Put("a", Value(100, &value_storage)); - s = db_->Write(WriteOptions(), &batch); - } - ASSERT_TRUE(!s.ok()); - ASSERT_GE(env_.num_writable_file_errors_, 1); - env_.writable_file_error_ = false; - Reopen(); -} - -TEST(CorruptionTest, TableFile) { - Build(100); - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - dbi->TEST_CompactRange(0, NULL, NULL); - dbi->TEST_CompactRange(1, NULL, NULL); - - Corrupt(kTableFile, 100, 1); - Check(90, 99); -} - -TEST(CorruptionTest, TableFileRepair) { - options_.block_size = 2 * kValueSize; // Limit scope of corruption - options_.paranoid_checks = true; - Reopen(); - Build(100); - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - dbi->TEST_CompactRange(0, NULL, NULL); - dbi->TEST_CompactRange(1, NULL, NULL); - - Corrupt(kTableFile, 100, 1); - RepairDB(); - Reopen(); - Check(95, 99); -} - -TEST(CorruptionTest, TableFileIndexData) { - Build(10000); // Enough to build multiple Tables - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - - Corrupt(kTableFile, -2000, 500); - Reopen(); - Check(5000, 9999); -} - -TEST(CorruptionTest, MissingDescriptor) { - Build(1000); - RepairDB(); - Reopen(); - Check(1000, 1000); -} - -TEST(CorruptionTest, SequenceNumberRecovery) { - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v1")); - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v2")); - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v3")); - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v4")); - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v5")); - RepairDB(); - Reopen(); - std::string v; - ASSERT_OK(db_->Get(ReadOptions(), "foo", &v)); - ASSERT_EQ("v5", v); - // Write something. If sequence number was not recovered properly, - // it will be hidden by an earlier write. - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v6")); - ASSERT_OK(db_->Get(ReadOptions(), "foo", &v)); - ASSERT_EQ("v6", v); - Reopen(); - ASSERT_OK(db_->Get(ReadOptions(), "foo", &v)); - ASSERT_EQ("v6", v); -} - -TEST(CorruptionTest, CorruptedDescriptor) { - ASSERT_OK(db_->Put(WriteOptions(), "foo", "hello")); - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - dbi->TEST_CompactRange(0, NULL, NULL); - - Corrupt(kDescriptorFile, 0, 1000); - Status s = TryReopen(); - ASSERT_TRUE(!s.ok()); - - RepairDB(); - Reopen(); - std::string v; - ASSERT_OK(db_->Get(ReadOptions(), "foo", &v)); - ASSERT_EQ("hello", v); -} - -TEST(CorruptionTest, CompactionInputError) { - Build(10); - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - const int last = config::kMaxMemCompactLevel; - ASSERT_EQ(1, Property("leveldb.num-files-at-level" + NumberToString(last))); - - Corrupt(kTableFile, 100, 1); - Check(5, 9); - - // Force compactions by writing lots of values - Build(10000); - Check(10000, 10000); -} - -TEST(CorruptionTest, CompactionInputErrorParanoid) { - options_.paranoid_checks = true; - options_.write_buffer_size = 512 << 10; - Reopen(); - DBImpl* dbi = reinterpret_cast(db_); - - // Make multiple inputs so we need to compact. - for (int i = 0; i < 2; i++) { - Build(10); - dbi->TEST_CompactMemTable(); - Corrupt(kTableFile, 100, 1); - env_.SleepForMicroseconds(100000); - } - dbi->CompactRange(NULL, NULL); - - // Write must fail because of corrupted table - std::string tmp1, tmp2; - Status s = db_->Put(WriteOptions(), Key(5, &tmp1), Value(5, &tmp2)); - ASSERT_TRUE(!s.ok()) << "write did not fail in corrupted paranoid db"; -} - -TEST(CorruptionTest, UnrelatedKeys) { - Build(10); - DBImpl* dbi = reinterpret_cast(db_); - dbi->TEST_CompactMemTable(); - Corrupt(kTableFile, 100, 1); - - std::string tmp1, tmp2; - ASSERT_OK(db_->Put(WriteOptions(), Key(1000, &tmp1), Value(1000, &tmp2))); - std::string v; - ASSERT_OK(db_->Get(ReadOptions(), Key(1000, &tmp1), &v)); - ASSERT_EQ(Value(1000, &tmp2).ToString(), v); - dbi->TEST_CompactMemTable(); - ASSERT_OK(db_->Get(ReadOptions(), Key(1000, &tmp1), &v)); - ASSERT_EQ(Value(1000, &tmp2).ToString(), v); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/db/db_bench.cc b/clipper/HyperLevelDB/db/db_bench.cc deleted file mode 100644 index 0c52bbc..0000000 --- a/clipper/HyperLevelDB/db/db_bench.cc +++ /dev/null @@ -1,979 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include -#include "db/db_impl.h" -#include "db/version_set.h" -#include "hyperleveldb/cache.h" -#include "hyperleveldb/db.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/write_batch.h" -#include "port/port.h" -#include "util/crc32c.h" -#include "util/histogram.h" -#include "util/mutexlock.h" -#include "util/random.h" -#include "util/testutil.h" - -// Comma-separated list of operations to run in the specified order -// Actual benchmarks: -// fillseq -- write N values in sequential key order in async mode -// fillrandom -- write N values in random key order in async mode -// overwrite -- overwrite N values in random key order in async mode -// fillsync -- write N/100 values in random key order in sync mode -// fill100K -- write N/1000 100K values in random order in async mode -// deleteseq -- delete N keys in sequential order -// deleterandom -- delete N keys in random order -// readseq -- read N times sequentially -// readreverse -- read N times in reverse order -// readrandom -- read N times in random order -// readmissing -- read N missing keys in random order -// readhot -- read N times in random order from 1% section of DB -// seekrandom -- N random seeks -// crc32c -- repeated crc32c of 4K of data -// acquireload -- load N*1000 times -// Meta operations: -// compact -- Compact the entire DB -// stats -- Print DB stats -// sstables -- Print sstable info -// heapprofile -- Dump a heap profile (if supported by this port) -static const char* FLAGS_benchmarks = - "fillseq," - "fillsync," - "fillrandom," - "overwrite," - "readrandom," - "readrandom," // Extra run to allow previous compactions to quiesce - "readseq," - "readreverse," - "compact," - "readrandom," - "readseq," - "readreverse," - "fill100K," - "crc32c," - "snappycomp," - "snappyuncomp," - "acquireload," - ; - -// Number of key/values to place in database -static int FLAGS_num = 1000000; - -// Number of read operations to do. If negative, do FLAGS_num reads. -static int FLAGS_reads = -1; - -// Number of concurrent threads to run. -static int FLAGS_threads = 1; - -// Size of each value -static int FLAGS_value_size = 100; - -// Arrange to generate values that shrink to this fraction of -// their original size after compression -static double FLAGS_compression_ratio = 0.5; - -// Print histogram of operation timings -static bool FLAGS_histogram = false; - -// Number of bytes to buffer in memtable before compacting -// (initialized to default value by "main") -static int FLAGS_write_buffer_size = 0; - -// Number of bytes to use as a cache of uncompressed data. -// Negative means use default settings. -static int FLAGS_cache_size = -1; - -// Maximum number of files to keep open at the same time (use default if == 0) -static int FLAGS_open_files = 0; - -// Bloom filter bits per key. -// Negative means use default settings. -static int FLAGS_bloom_bits = -1; - -// If true, do not destroy the existing database. If you set this -// flag and also specify a benchmark that wants a fresh database, that -// benchmark will fail. -static bool FLAGS_use_existing_db = false; - -// Use the db with the following name. -static const char* FLAGS_db = NULL; - -namespace leveldb { - -namespace { - -// Helper for quickly generating random data. -class RandomGenerator { - private: - std::string data_; - int pos_; - - public: - RandomGenerator() { - // We use a limited amount of data over and over again and ensure - // that it is larger than the compression window (32KB), and also - // large enough to serve all typical value sizes we want to write. - Random rnd(301); - std::string piece; - while (data_.size() < 1048576) { - // Add a short fragment that is as compressible as specified - // by FLAGS_compression_ratio. - test::CompressibleString(&rnd, FLAGS_compression_ratio, 100, &piece); - data_.append(piece); - } - pos_ = 0; - } - - Slice Generate(size_t len) { - if (pos_ + len > data_.size()) { - pos_ = 0; - assert(len < data_.size()); - } - pos_ += len; - return Slice(data_.data() + pos_ - len, len); - } -}; - -static Slice TrimSpace(Slice s) { - size_t start = 0; - while (start < s.size() && isspace(s[start])) { - start++; - } - size_t limit = s.size(); - while (limit > start && isspace(s[limit-1])) { - limit--; - } - return Slice(s.data() + start, limit - start); -} - -static void AppendWithSpace(std::string* str, Slice msg) { - if (msg.empty()) return; - if (!str->empty()) { - str->push_back(' '); - } - str->append(msg.data(), msg.size()); -} - -class Stats { - private: - double start_; - double finish_; - double seconds_; - int done_; - int next_report_; - int64_t bytes_; - double last_op_finish_; - Histogram hist_; - std::string message_; - - public: - Stats() { Start(); } - - void Start() { - next_report_ = 100; - last_op_finish_ = start_; - hist_.Clear(); - done_ = 0; - bytes_ = 0; - seconds_ = 0; - start_ = Env::Default()->NowMicros(); - finish_ = start_; - message_.clear(); - } - - void Merge(const Stats& other) { - hist_.Merge(other.hist_); - done_ += other.done_; - bytes_ += other.bytes_; - seconds_ += other.seconds_; - if (other.start_ < start_) start_ = other.start_; - if (other.finish_ > finish_) finish_ = other.finish_; - - // Just keep the messages from one thread - if (message_.empty()) message_ = other.message_; - } - - void Stop() { - finish_ = Env::Default()->NowMicros(); - seconds_ = (finish_ - start_) * 1e-6; - } - - void AddMessage(Slice msg) { - AppendWithSpace(&message_, msg); - } - - void FinishedSingleOp() { - if (FLAGS_histogram) { - double now = Env::Default()->NowMicros(); - double micros = now - last_op_finish_; - hist_.Add(micros); - if (micros > 20000) { - fprintf(stderr, "long op: %.1f micros%30s\r", micros, ""); - fflush(stderr); - } - last_op_finish_ = now; - } - - done_++; - if (done_ >= next_report_) { - if (next_report_ < 1000) next_report_ += 100; - else if (next_report_ < 5000) next_report_ += 500; - else if (next_report_ < 10000) next_report_ += 1000; - else if (next_report_ < 50000) next_report_ += 5000; - else if (next_report_ < 100000) next_report_ += 10000; - else if (next_report_ < 500000) next_report_ += 50000; - else next_report_ += 100000; - fprintf(stderr, "... finished %d ops%30s\r", done_, ""); - fflush(stderr); - } - } - - void AddBytes(int64_t n) { - bytes_ += n; - } - - void Report(const Slice& name) { - // Pretend at least one op was done in case we are running a benchmark - // that does not call FinishedSingleOp(). - if (done_ < 1) done_ = 1; - - std::string extra; - if (bytes_ > 0) { - // Rate is computed on actual elapsed time, not the sum of per-thread - // elapsed times. - double elapsed = (finish_ - start_) * 1e-6; - char rate[100]; - snprintf(rate, sizeof(rate), "%6.1f MB/s", - (bytes_ / 1048576.0) / elapsed); - extra = rate; - } - AppendWithSpace(&extra, message_); - - fprintf(stdout, "%-12s : %11.3f micros/op;%s%s\n", - name.ToString().c_str(), - seconds_ * 1e6 / done_, - (extra.empty() ? "" : " "), - extra.c_str()); - if (FLAGS_histogram) { - fprintf(stdout, "Microseconds per op:\n%s\n", hist_.ToString().c_str()); - } - fflush(stdout); - } -}; - -// State shared by all concurrent executions of the same benchmark. -struct SharedState { - port::Mutex mu; - port::CondVar cv; - int total; - - // Each thread goes through the following states: - // (1) initializing - // (2) waiting for others to be initialized - // (3) running - // (4) done - - int num_initialized; - int num_done; - bool start; - - SharedState() : cv(&mu) { } -}; - -// Per-thread state for concurrent executions of the same benchmark. -struct ThreadState { - int tid; // 0..n-1 when running in n threads - Random rand; // Has different seeds for different threads - Stats stats; - SharedState* shared; - - ThreadState(int index) - : tid(index), - rand(1000 + index) { - } -}; - -} // namespace - -class Benchmark { - private: - Cache* cache_; - const FilterPolicy* filter_policy_; - DB* db_; - int num_; - int value_size_; - int entries_per_batch_; - WriteOptions write_options_; - int reads_; - int heap_counter_; - - void PrintHeader() { - const int kKeySize = 16; - PrintEnvironment(); - fprintf(stdout, "Keys: %d bytes each\n", kKeySize); - fprintf(stdout, "Values: %d bytes each (%d bytes after compression)\n", - FLAGS_value_size, - static_cast(FLAGS_value_size * FLAGS_compression_ratio + 0.5)); - fprintf(stdout, "Entries: %d\n", num_); - fprintf(stdout, "RawSize: %.1f MB (estimated)\n", - ((static_cast(kKeySize + FLAGS_value_size) * num_) - / 1048576.0)); - fprintf(stdout, "FileSize: %.1f MB (estimated)\n", - (((kKeySize + FLAGS_value_size * FLAGS_compression_ratio) * num_) - / 1048576.0)); - PrintWarnings(); - fprintf(stdout, "------------------------------------------------\n"); - } - - void PrintWarnings() { -#if defined(__GNUC__) && !defined(__OPTIMIZE__) - fprintf(stdout, - "WARNING: Optimization is disabled: benchmarks unnecessarily slow\n" - ); -#endif -#ifndef NDEBUG - fprintf(stdout, - "WARNING: Assertions are enabled; benchmarks unnecessarily slow\n"); -#endif - - // See if snappy is working by attempting to compress a compressible string - const char text[] = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; - std::string compressed; - if (!port::Snappy_Compress(text, sizeof(text), &compressed)) { - fprintf(stdout, "WARNING: Snappy compression is not enabled\n"); - } else if (compressed.size() >= sizeof(text)) { - fprintf(stdout, "WARNING: Snappy compression is not effective\n"); - } - } - - void PrintEnvironment() { - fprintf(stderr, "LevelDB: version %d.%d\n", - kMajorVersion, kMinorVersion); - -#if defined(__linux) - time_t now = time(NULL); - fprintf(stderr, "Date: %s", ctime(&now)); // ctime() adds newline - - FILE* cpuinfo = fopen("/proc/cpuinfo", "r"); - if (cpuinfo != NULL) { - char line[1000]; - int num_cpus = 0; - std::string cpu_type; - std::string cache_size; - while (fgets(line, sizeof(line), cpuinfo) != NULL) { - const char* sep = strchr(line, ':'); - if (sep == NULL) { - continue; - } - Slice key = TrimSpace(Slice(line, sep - 1 - line)); - Slice val = TrimSpace(Slice(sep + 1)); - if (key == "model name") { - ++num_cpus; - cpu_type = val.ToString(); - } else if (key == "cache size") { - cache_size = val.ToString(); - } - } - fclose(cpuinfo); - fprintf(stderr, "CPU: %d * %s\n", num_cpus, cpu_type.c_str()); - fprintf(stderr, "CPUCache: %s\n", cache_size.c_str()); - } -#endif - } - - public: - Benchmark() - : cache_(FLAGS_cache_size >= 0 ? NewLRUCache(FLAGS_cache_size) : NULL), - filter_policy_(FLAGS_bloom_bits >= 0 - ? NewBloomFilterPolicy(FLAGS_bloom_bits) - : NULL), - db_(NULL), - num_(FLAGS_num), - value_size_(FLAGS_value_size), - entries_per_batch_(1), - reads_(FLAGS_reads < 0 ? FLAGS_num : FLAGS_reads), - heap_counter_(0) { - std::vector files; - Env::Default()->GetChildren(FLAGS_db, &files); - for (size_t i = 0; i < files.size(); i++) { - if (Slice(files[i]).starts_with("heap-")) { - Env::Default()->DeleteFile(std::string(FLAGS_db) + "/" + files[i]); - } - } - if (!FLAGS_use_existing_db) { - DestroyDB(FLAGS_db, Options()); - } - } - - ~Benchmark() { - delete db_; - delete cache_; - delete filter_policy_; - } - - void Run() { - PrintHeader(); - Open(); - - const char* benchmarks = FLAGS_benchmarks; - while (benchmarks != NULL) { - const char* sep = strchr(benchmarks, ','); - Slice name; - if (sep == NULL) { - name = benchmarks; - benchmarks = NULL; - } else { - name = Slice(benchmarks, sep - benchmarks); - benchmarks = sep + 1; - } - - // Reset parameters that may be overriddden bwlow - num_ = FLAGS_num; - reads_ = (FLAGS_reads < 0 ? FLAGS_num : FLAGS_reads); - value_size_ = FLAGS_value_size; - entries_per_batch_ = 1; - write_options_ = WriteOptions(); - - void (Benchmark::*method)(ThreadState*) = NULL; - bool fresh_db = false; - int num_threads = FLAGS_threads; - - if (name == Slice("fillseq")) { - fresh_db = true; - method = &Benchmark::WriteSeq; - } else if (name == Slice("fillbatch")) { - fresh_db = true; - entries_per_batch_ = 1000; - method = &Benchmark::WriteSeq; - } else if (name == Slice("fillrandom")) { - fresh_db = true; - method = &Benchmark::WriteRandom; - } else if (name == Slice("overwrite")) { - fresh_db = false; - method = &Benchmark::WriteRandom; - } else if (name == Slice("fillsync")) { - fresh_db = true; - num_ /= 1000; - write_options_.sync = true; - method = &Benchmark::WriteRandom; - } else if (name == Slice("fill100K")) { - fresh_db = true; - num_ /= 1000; - value_size_ = 100 * 1000; - method = &Benchmark::WriteRandom; - } else if (name == Slice("readseq")) { - method = &Benchmark::ReadSequential; - } else if (name == Slice("readreverse")) { - method = &Benchmark::ReadReverse; - } else if (name == Slice("readrandom")) { - method = &Benchmark::ReadRandom; - } else if (name == Slice("readmissing")) { - method = &Benchmark::ReadMissing; - } else if (name == Slice("seekrandom")) { - method = &Benchmark::SeekRandom; - } else if (name == Slice("readhot")) { - method = &Benchmark::ReadHot; - } else if (name == Slice("readrandomsmall")) { - reads_ /= 1000; - method = &Benchmark::ReadRandom; - } else if (name == Slice("deleteseq")) { - method = &Benchmark::DeleteSeq; - } else if (name == Slice("deleterandom")) { - method = &Benchmark::DeleteRandom; - } else if (name == Slice("readwhilewriting")) { - num_threads++; // Add extra thread for writing - method = &Benchmark::ReadWhileWriting; - } else if (name == Slice("compact")) { - method = &Benchmark::Compact; - } else if (name == Slice("crc32c")) { - method = &Benchmark::Crc32c; - } else if (name == Slice("acquireload")) { - method = &Benchmark::AcquireLoad; - } else if (name == Slice("snappycomp")) { - method = &Benchmark::SnappyCompress; - } else if (name == Slice("snappyuncomp")) { - method = &Benchmark::SnappyUncompress; - } else if (name == Slice("heapprofile")) { - HeapProfile(); - } else if (name == Slice("stats")) { - PrintStats("leveldb.stats"); - } else if (name == Slice("sstables")) { - PrintStats("leveldb.sstables"); - } else { - if (name != Slice()) { // No error message for empty name - fprintf(stderr, "unknown benchmark '%s'\n", name.ToString().c_str()); - } - } - - if (fresh_db) { - if (FLAGS_use_existing_db) { - fprintf(stdout, "%-12s : skipped (--use_existing_db is true)\n", - name.ToString().c_str()); - method = NULL; - } else { - delete db_; - db_ = NULL; - DestroyDB(FLAGS_db, Options()); - Open(); - } - } - - if (method != NULL) { - RunBenchmark(num_threads, name, method); - } - } - } - - private: - struct ThreadArg { - Benchmark* bm; - SharedState* shared; - ThreadState* thread; - void (Benchmark::*method)(ThreadState*); - }; - - static void ThreadBody(void* v) { - ThreadArg* arg = reinterpret_cast(v); - SharedState* shared = arg->shared; - ThreadState* thread = arg->thread; - { - MutexLock l(&shared->mu); - shared->num_initialized++; - if (shared->num_initialized >= shared->total) { - shared->cv.SignalAll(); - } - while (!shared->start) { - shared->cv.Wait(); - } - } - - thread->stats.Start(); - (arg->bm->*(arg->method))(thread); - thread->stats.Stop(); - - { - MutexLock l(&shared->mu); - shared->num_done++; - if (shared->num_done >= shared->total) { - shared->cv.SignalAll(); - } - } - } - - void RunBenchmark(int n, Slice name, - void (Benchmark::*method)(ThreadState*)) { - SharedState shared; - shared.total = n; - shared.num_initialized = 0; - shared.num_done = 0; - shared.start = false; - - ThreadArg* arg = new ThreadArg[n]; - for (int i = 0; i < n; i++) { - arg[i].bm = this; - arg[i].method = method; - arg[i].shared = &shared; - arg[i].thread = new ThreadState(i); - arg[i].thread->shared = &shared; - Env::Default()->StartThread(ThreadBody, &arg[i]); - } - - shared.mu.Lock(); - while (shared.num_initialized < n) { - shared.cv.Wait(); - } - - shared.start = true; - shared.cv.SignalAll(); - while (shared.num_done < n) { - shared.cv.Wait(); - } - shared.mu.Unlock(); - - for (int i = 1; i < n; i++) { - arg[0].thread->stats.Merge(arg[i].thread->stats); - } - arg[0].thread->stats.Report(name); - - for (int i = 0; i < n; i++) { - delete arg[i].thread; - } - delete[] arg; - } - - void Crc32c(ThreadState* thread) { - // Checksum about 500MB of data total - const int size = 4096; - const char* label = "(4K per op)"; - std::string data(size, 'x'); - int64_t bytes = 0; - uint32_t crc = 0; - while (bytes < 500 * 1048576) { - crc = crc32c::Value(data.data(), size); - thread->stats.FinishedSingleOp(); - bytes += size; - } - // Print so result is not dead - fprintf(stderr, "... crc=0x%x\r", static_cast(crc)); - - thread->stats.AddBytes(bytes); - thread->stats.AddMessage(label); - } - - void AcquireLoad(ThreadState* thread) { - int dummy; - port::AtomicPointer ap(&dummy); - int count = 0; - void *ptr = NULL; - thread->stats.AddMessage("(each op is 1000 loads)"); - while (count < 100000) { - for (int i = 0; i < 1000; i++) { - ptr = ap.Acquire_Load(); - } - count++; - thread->stats.FinishedSingleOp(); - } - if (ptr == NULL) exit(1); // Disable unused variable warning. - } - - void SnappyCompress(ThreadState* thread) { - RandomGenerator gen; - Slice input = gen.Generate(Options().block_size); - int64_t bytes = 0; - int64_t produced = 0; - bool ok = true; - std::string compressed; - while (ok && bytes < 1024 * 1048576) { // Compress 1G - ok = port::Snappy_Compress(input.data(), input.size(), &compressed); - produced += compressed.size(); - bytes += input.size(); - thread->stats.FinishedSingleOp(); - } - - if (!ok) { - thread->stats.AddMessage("(snappy failure)"); - } else { - char buf[100]; - snprintf(buf, sizeof(buf), "(output: %.1f%%)", - (produced * 100.0) / bytes); - thread->stats.AddMessage(buf); - thread->stats.AddBytes(bytes); - } - } - - void SnappyUncompress(ThreadState* thread) { - RandomGenerator gen; - Slice input = gen.Generate(Options().block_size); - std::string compressed; - bool ok = port::Snappy_Compress(input.data(), input.size(), &compressed); - int64_t bytes = 0; - char* uncompressed = new char[input.size()]; - while (ok && bytes < 1024 * 1048576) { // Compress 1G - ok = port::Snappy_Uncompress(compressed.data(), compressed.size(), - uncompressed); - bytes += input.size(); - thread->stats.FinishedSingleOp(); - } - delete[] uncompressed; - - if (!ok) { - thread->stats.AddMessage("(snappy failure)"); - } else { - thread->stats.AddBytes(bytes); - } - } - - void Open() { - assert(db_ == NULL); - Options options; - options.create_if_missing = !FLAGS_use_existing_db; - options.block_cache = cache_; - options.write_buffer_size = FLAGS_write_buffer_size; - options.max_open_files = FLAGS_open_files; - options.filter_policy = filter_policy_; - Status s = DB::Open(options, FLAGS_db, &db_); - if (!s.ok()) { - fprintf(stderr, "open error: %s\n", s.ToString().c_str()); - exit(1); - } - } - - void WriteSeq(ThreadState* thread) { - DoWrite(thread, true); - } - - void WriteRandom(ThreadState* thread) { - DoWrite(thread, false); - } - - void DoWrite(ThreadState* thread, bool seq) { - if (num_ != FLAGS_num) { - char msg[100]; - snprintf(msg, sizeof(msg), "(%d ops)", num_); - thread->stats.AddMessage(msg); - } - - RandomGenerator gen; - WriteBatch batch; - Status s; - int64_t bytes = 0; - for (int i = 0; i < num_; i += entries_per_batch_) { - batch.Clear(); - for (int j = 0; j < entries_per_batch_; j++) { - const int k = seq ? i+j : (thread->rand.Next() % FLAGS_num); - char key[100]; - snprintf(key, sizeof(key), "%016d", k); - batch.Put(key, gen.Generate(value_size_)); - bytes += value_size_ + strlen(key); - thread->stats.FinishedSingleOp(); - } - s = db_->Write(write_options_, &batch); - if (!s.ok()) { - fprintf(stderr, "put error: %s\n", s.ToString().c_str()); - exit(1); - } - } - thread->stats.AddBytes(bytes); - } - - void ReadSequential(ThreadState* thread) { - Iterator* iter = db_->NewIterator(ReadOptions()); - int i = 0; - int64_t bytes = 0; - for (iter->SeekToFirst(); i < reads_ && iter->Valid(); iter->Next()) { - bytes += iter->key().size() + iter->value().size(); - thread->stats.FinishedSingleOp(); - ++i; - } - delete iter; - thread->stats.AddBytes(bytes); - } - - void ReadReverse(ThreadState* thread) { - Iterator* iter = db_->NewIterator(ReadOptions()); - int i = 0; - int64_t bytes = 0; - for (iter->SeekToLast(); i < reads_ && iter->Valid(); iter->Prev()) { - bytes += iter->key().size() + iter->value().size(); - thread->stats.FinishedSingleOp(); - ++i; - } - delete iter; - thread->stats.AddBytes(bytes); - } - - void ReadRandom(ThreadState* thread) { - ReadOptions options; - std::string value; - int found = 0; - for (int i = 0; i < reads_; i++) { - char key[100]; - const int k = thread->rand.Next() % FLAGS_num; - snprintf(key, sizeof(key), "%016d", k); - if (db_->Get(options, key, &value).ok()) { - found++; - } - thread->stats.FinishedSingleOp(); - } - char msg[100]; - snprintf(msg, sizeof(msg), "(%d of %d found)", found, num_); - thread->stats.AddMessage(msg); - } - - void ReadMissing(ThreadState* thread) { - ReadOptions options; - std::string value; - for (int i = 0; i < reads_; i++) { - char key[100]; - const int k = thread->rand.Next() % FLAGS_num; - snprintf(key, sizeof(key), "%016d.", k); - db_->Get(options, key, &value); - thread->stats.FinishedSingleOp(); - } - } - - void ReadHot(ThreadState* thread) { - ReadOptions options; - std::string value; - const int range = (FLAGS_num + 99) / 100; - for (int i = 0; i < reads_; i++) { - char key[100]; - const int k = thread->rand.Next() % range; - snprintf(key, sizeof(key), "%016d", k); - db_->Get(options, key, &value); - thread->stats.FinishedSingleOp(); - } - } - - void SeekRandom(ThreadState* thread) { - ReadOptions options; - std::string value; - int found = 0; - for (int i = 0; i < reads_; i++) { - Iterator* iter = db_->NewIterator(options); - char key[100]; - const int k = thread->rand.Next() % FLAGS_num; - snprintf(key, sizeof(key), "%016d", k); - iter->Seek(key); - if (iter->Valid() && iter->key() == key) found++; - delete iter; - thread->stats.FinishedSingleOp(); - } - char msg[100]; - snprintf(msg, sizeof(msg), "(%d of %d found)", found, num_); - thread->stats.AddMessage(msg); - } - - void DoDelete(ThreadState* thread, bool seq) { - RandomGenerator gen; - WriteBatch batch; - Status s; - for (int i = 0; i < num_; i += entries_per_batch_) { - batch.Clear(); - for (int j = 0; j < entries_per_batch_; j++) { - const int k = seq ? i+j : (thread->rand.Next() % FLAGS_num); - char key[100]; - snprintf(key, sizeof(key), "%016d", k); - batch.Delete(key); - thread->stats.FinishedSingleOp(); - } - s = db_->Write(write_options_, &batch); - if (!s.ok()) { - fprintf(stderr, "del error: %s\n", s.ToString().c_str()); - exit(1); - } - } - } - - void DeleteSeq(ThreadState* thread) { - DoDelete(thread, true); - } - - void DeleteRandom(ThreadState* thread) { - DoDelete(thread, false); - } - - void ReadWhileWriting(ThreadState* thread) { - if (thread->tid > 0) { - ReadRandom(thread); - } else { - // Special thread that keeps writing until other threads are done. - RandomGenerator gen; - while (true) { - { - MutexLock l(&thread->shared->mu); - if (thread->shared->num_done + 1 >= thread->shared->num_initialized) { - // Other threads have finished - break; - } - } - - const int k = thread->rand.Next() % FLAGS_num; - char key[100]; - snprintf(key, sizeof(key), "%016d", k); - Status s = db_->Put(write_options_, key, gen.Generate(value_size_)); - if (!s.ok()) { - fprintf(stderr, "put error: %s\n", s.ToString().c_str()); - exit(1); - } - } - - // Do not count any of the preceding work/delay in stats. - thread->stats.Start(); - } - } - - void Compact(ThreadState* thread) { - db_->CompactRange(NULL, NULL); - } - - void PrintStats(const char* key) { - std::string stats; - if (!db_->GetProperty(key, &stats)) { - stats = "(failed)"; - } - fprintf(stdout, "\n%s\n", stats.c_str()); - } - - static void WriteToFile(void* arg, const char* buf, int n) { - reinterpret_cast(arg)->Append(Slice(buf, n)); - } - - void HeapProfile() { - char fname[100]; - snprintf(fname, sizeof(fname), "%s/heap-%04d", FLAGS_db, ++heap_counter_); - WritableFile* file; - Status s = Env::Default()->NewWritableFile(fname, &file); - if (!s.ok()) { - fprintf(stderr, "%s\n", s.ToString().c_str()); - return; - } - bool ok = port::GetHeapProfile(WriteToFile, file); - delete file; - if (!ok) { - fprintf(stderr, "heap profiling not supported\n"); - Env::Default()->DeleteFile(fname); - } - } -}; - -} // namespace leveldb - -int main(int argc, char** argv) { - FLAGS_write_buffer_size = leveldb::Options().write_buffer_size; - FLAGS_open_files = leveldb::Options().max_open_files; - std::string default_db_path; - - for (int i = 1; i < argc; i++) { - double d; - int n; - char junk; - if (leveldb::Slice(argv[i]).starts_with("--benchmarks=")) { - FLAGS_benchmarks = argv[i] + strlen("--benchmarks="); - } else if (sscanf(argv[i], "--compression_ratio=%lf%c", &d, &junk) == 1) { - FLAGS_compression_ratio = d; - } else if (sscanf(argv[i], "--histogram=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_histogram = n; - } else if (sscanf(argv[i], "--use_existing_db=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_use_existing_db = n; - } else if (sscanf(argv[i], "--num=%d%c", &n, &junk) == 1) { - FLAGS_num = n; - } else if (sscanf(argv[i], "--reads=%d%c", &n, &junk) == 1) { - FLAGS_reads = n; - } else if (sscanf(argv[i], "--threads=%d%c", &n, &junk) == 1) { - FLAGS_threads = n; - } else if (sscanf(argv[i], "--value_size=%d%c", &n, &junk) == 1) { - FLAGS_value_size = n; - } else if (sscanf(argv[i], "--write_buffer_size=%d%c", &n, &junk) == 1) { - FLAGS_write_buffer_size = n; - } else if (sscanf(argv[i], "--cache_size=%d%c", &n, &junk) == 1) { - FLAGS_cache_size = n; - } else if (sscanf(argv[i], "--bloom_bits=%d%c", &n, &junk) == 1) { - FLAGS_bloom_bits = n; - } else if (sscanf(argv[i], "--open_files=%d%c", &n, &junk) == 1) { - FLAGS_open_files = n; - } else if (strncmp(argv[i], "--db=", 5) == 0) { - FLAGS_db = argv[i] + 5; - } else { - fprintf(stderr, "Invalid flag '%s'\n", argv[i]); - exit(1); - } - } - - // Choose a location for the test database if none given with --db= - if (FLAGS_db == NULL) { - leveldb::Env::Default()->GetTestDirectory(&default_db_path); - default_db_path += "/dbbench"; - FLAGS_db = default_db_path.c_str(); - } - - leveldb::Benchmark benchmark; - benchmark.Run(); - return 0; -} diff --git a/clipper/HyperLevelDB/db/db_impl.cc b/clipper/HyperLevelDB/db/db_impl.cc deleted file mode 100644 index 2e18d00..0000000 --- a/clipper/HyperLevelDB/db/db_impl.cc +++ /dev/null @@ -1,1991 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/db_impl.h" - -#include -#include -#include -#include -#include -#include -#include "db/builder.h" -#include "db/db_iter.h" -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "db/memtable.h" -#include "db/replay_iterator.h" -#include "db/table_cache.h" -#include "db/version_set.h" -#include "db/write_batch_internal.h" -#include "hyperleveldb/db.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/replay_iterator.h" -#include "hyperleveldb/status.h" -#include "hyperleveldb/table.h" -#include "hyperleveldb/table_builder.h" -#include "port/port.h" -#include "table/block.h" -#include "table/merger.h" -#include "table/two_level_iterator.h" -#include "util/coding.h" -#include "util/logging.h" -#include "util/mutexlock.h" - -#include -namespace leveldb { - -const int kStraightReads = 50; - -const int kNumNonTableCacheFiles = 10; - -struct DBImpl::CompactionState { - Compaction* const compaction; - - // Sequence numbers < smallest_snapshot are not significant since we - // will never have to service a snapshot below smallest_snapshot. - // Therefore if we have seen a sequence number S <= smallest_snapshot, - // we can drop all entries for the same key with sequence numbers < S. - SequenceNumber smallest_snapshot; - - // Files produced by compaction - struct Output { - uint64_t number; - uint64_t file_size; - InternalKey smallest, largest; - }; - std::vector outputs; - - // State kept for output being generated - WritableFile* outfile; - TableBuilder* builder; - - uint64_t total_bytes; - - Output* current_output() { return &outputs[outputs.size()-1]; } - - explicit CompactionState(Compaction* c) - : compaction(c), - outfile(NULL), - builder(NULL), - total_bytes(0) { - } -}; - -// Fix user-supplied options to be reasonable -template -static void ClipToRange(T* ptr, V minvalue, V maxvalue) { - if (static_cast(*ptr) > maxvalue) *ptr = maxvalue; - if (static_cast(*ptr) < minvalue) *ptr = minvalue; -} -Options SanitizeOptions(const std::string& dbname, - const InternalKeyComparator* icmp, - const InternalFilterPolicy* ipolicy, - const Options& src) { - Options result = src; - result.comparator = icmp; - result.filter_policy = (src.filter_policy != NULL) ? ipolicy : NULL; - ClipToRange(&result.max_open_files, 64 + kNumNonTableCacheFiles, 50000); - ClipToRange(&result.write_buffer_size, 64<<10, 1<<30); - ClipToRange(&result.block_size, 1<<10, 4<<20); - if (result.info_log == NULL) { - // Open a log file in the same directory as the db - src.env->CreateDir(dbname); // In case it does not exist - src.env->RenameFile(InfoLogFileName(dbname), OldInfoLogFileName(dbname)); - Status s = src.env->NewLogger(InfoLogFileName(dbname), &result.info_log); - if (!s.ok()) { - // No place suitable for logging - result.info_log = NULL; - } - } - if (result.block_cache == NULL) { - result.block_cache = NewLRUCache(8 << 20); - } - return result; -} - -DBImpl::DBImpl(const Options& raw_options, const std::string& dbname) - : env_(raw_options.env), - internal_comparator_(raw_options.comparator), - internal_filter_policy_(raw_options.filter_policy), - options_(SanitizeOptions(dbname, &internal_comparator_, - &internal_filter_policy_, raw_options)), - owns_info_log_(options_.info_log != raw_options.info_log), - owns_cache_(options_.block_cache != raw_options.block_cache), - dbname_(dbname), - db_lock_(NULL), - shutting_down_(NULL), - mem_(new MemTable(internal_comparator_)), - imm_(NULL), - logfile_(), - logfile_number_(0), - log_(), - seed_(0), - writers_upper_(0), - writers_tail_(NULL), - allow_background_activity_(false), - num_bg_threads_(0), - bg_fg_cv_(&mutex_), - bg_compaction_cv_(&mutex_), - bg_memtable_cv_(&mutex_), - bg_optimistic_trip_(false), - bg_optimistic_cv_(&mutex_), - bg_log_cv_(&mutex_), - bg_log_occupied_(false), - manual_compaction_(NULL), - manual_garbage_cutoff_(raw_options.manual_garbage_collection ? - SequenceNumber(0) : kMaxSequenceNumber), - straight_reads_(0), - backup_cv_(&mutex_), - backup_in_progress_(), - backup_deferred_delete_() { - mutex_.Lock(); - mem_->Ref(); - has_imm_.Release_Store(NULL); - backup_in_progress_.Release_Store(NULL); - env_->StartThread(&DBImpl::CompactMemTableWrapper, this); - env_->StartThread(&DBImpl::CompactOptimisticWrapper, this); - env_->StartThread(&DBImpl::CompactLevelWrapper, this); - num_bg_threads_ = 3; - - // Reserve ten files or so for other uses and give the rest to TableCache. - const int table_cache_size = options_.max_open_files - kNumNonTableCacheFiles; - table_cache_ = new TableCache(dbname_, &options_, table_cache_size); - versions_ = new VersionSet(dbname_, &options_, table_cache_, - &internal_comparator_); - - for (int i = 0; i < leveldb::config::kNumLevels; ++i) { - levels_locked_[i] = false; - } - mutex_.Unlock(); -} - -DBImpl::~DBImpl() { - // Wait for background work to finish - mutex_.Lock(); - shutting_down_.Release_Store(this); // Any non-NULL value is ok - bg_optimistic_cv_.SignalAll(); - bg_compaction_cv_.SignalAll(); - bg_memtable_cv_.SignalAll(); - while (num_bg_threads_ > 0) { - bg_fg_cv_.Wait(); - } - mutex_.Unlock(); - - if (db_lock_ != NULL) { - env_->UnlockFile(db_lock_); - } - - delete versions_; - if (mem_ != NULL) mem_->Unref(); - if (imm_ != NULL) imm_->Unref(); - log_.reset(); - logfile_.reset(); - delete table_cache_; - - if (owns_info_log_) { - delete options_.info_log; - } - if (owns_cache_) { - delete options_.block_cache; - } -} - -Status DBImpl::NewDB() { - VersionEdit new_db; - new_db.SetComparatorName(user_comparator()->Name()); - new_db.SetLogNumber(0); - new_db.SetNextFile(2); - new_db.SetLastSequence(0); - - const std::string manifest = DescriptorFileName(dbname_, 1); - WritableFile* file; - Status s = env_->NewWritableFile(manifest, &file); - if (!s.ok()) { - return s; - } - { - log::Writer log(file); - std::string record; - new_db.EncodeTo(&record); - s = log.AddRecord(record); - if (s.ok()) { - s = file->Close(); - } - } - delete file; - if (s.ok()) { - // Make "CURRENT" file that points to the new manifest file. - s = SetCurrentFile(env_, dbname_, 1); - } else { - env_->DeleteFile(manifest); - } - return s; -} - -void DBImpl::MaybeIgnoreError(Status* s) const { - if (s->ok() || options_.paranoid_checks) { - // No change needed - } else { - Log(options_.info_log, "Ignoring error %s", s->ToString().c_str()); - *s = Status::OK(); - } -} - -void DBImpl::DeleteObsoleteFiles() { - // Defer if there's background activity - mutex_.AssertHeld(); - if (backup_in_progress_.Acquire_Load() != NULL) { - backup_deferred_delete_ = true; - return; - } - - // If you ever release mutex_ in this function, you'll need to do more work in - // LiveBackup - - if (!bg_error_.ok()) { - // After a background error, we don't know whether a new version may - // or may not have been committed, so we cannot safely garbage collect. - return; - } - - // Make a set of all of the live files - std::set live = pending_outputs_; - versions_->AddLiveFiles(&live); - - std::vector filenames; - env_->GetChildren(dbname_, &filenames); // Ignoring errors on purpose - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type)) { - bool keep = true; - switch (type) { - case kLogFile: - keep = ((number >= versions_->LogNumber()) || - (number == versions_->PrevLogNumber())); - break; - case kDescriptorFile: - // Keep my manifest file, and any newer incarnations' - // (in case there is a race that allows other incarnations) - keep = (number >= versions_->ManifestFileNumber()); - break; - case kTableFile: - keep = (live.find(number) != live.end()); - break; - case kTempFile: - // Any temp files that are currently being written to must - // be recorded in pending_outputs_, which is inserted into "live" - keep = (live.find(number) != live.end()); - break; - case kCurrentFile: - case kDBLockFile: - case kInfoLogFile: - keep = true; - break; - } - - if (!keep) { - if (type == kTableFile) { - table_cache_->Evict(number); - } - Log(options_.info_log, "Delete type=%d #%lld\n", - int(type), - static_cast(number)); - env_->DeleteFile(dbname_ + "/" + filenames[i]); - } - } - } -} - -Status DBImpl::Recover(VersionEdit* edit) { - mutex_.AssertHeld(); - - // Ignore error from CreateDir since the creation of the DB is - // committed only when the descriptor is created, and this directory - // may already exist from a previous failed creation attempt. - env_->CreateDir(dbname_); - assert(db_lock_ == NULL); - Status s = env_->LockFile(LockFileName(dbname_), &db_lock_); - if (!s.ok()) { - return s; - } - - if (!env_->FileExists(CurrentFileName(dbname_))) { - if (options_.create_if_missing) { - s = NewDB(); - if (!s.ok()) { - return s; - } - } else { - return Status::InvalidArgument( - dbname_, "does not exist (create_if_missing is false)"); - } - } else { - if (options_.error_if_exists) { - return Status::InvalidArgument( - dbname_, "exists (error_if_exists is true)"); - } - } - - s = versions_->Recover(); - if (s.ok()) { - SequenceNumber max_sequence(0); - - // Recover from all newer log files than the ones named in the - // descriptor (new log files may have been added by the previous - // incarnation without registering them in the descriptor). - // - // Note that PrevLogNumber() is no longer used, but we pay - // attention to it in case we are recovering a database - // produced by an older version of leveldb. - const uint64_t min_log = versions_->LogNumber(); - const uint64_t prev_log = versions_->PrevLogNumber(); - std::vector filenames; - s = env_->GetChildren(dbname_, &filenames); - if (!s.ok()) { - return s; - } - std::set expected; - versions_->AddLiveFiles(&expected); - uint64_t number; - FileType type; - std::vector logs; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type)) { - expected.erase(number); - if (type == kLogFile && ((number >= min_log) || (number == prev_log))) - logs.push_back(number); - } - } - if (!expected.empty()) { - char buf[50]; - snprintf(buf, sizeof(buf), "%d missing files; e.g.", - static_cast(expected.size())); - return Status::Corruption(buf, SSTTableFileName(dbname_, *(expected.begin()))); - } - - // Recover in the order in which the logs were generated - std::sort(logs.begin(), logs.end()); - for (size_t i = 0; i < logs.size(); i++) { - s = RecoverLogFile(logs[i], edit, &max_sequence); - - // The previous incarnation may not have written any MANIFEST - // records after allocating this log number. So we manually - // update the file number allocation counter in VersionSet. - versions_->MarkFileNumberUsed(logs[i]); - } - - if (s.ok()) { - if (versions_->LastSequence() < max_sequence) { - versions_->SetLastSequence(max_sequence); - } - } - } - - return s; -} - -Status DBImpl::RecoverLogFile(uint64_t log_number, - VersionEdit* edit, - SequenceNumber* max_sequence) { - struct LogReporter : public log::Reader::Reporter { - Env* env; - Logger* info_log; - const char* fname; - Status* status; // NULL if options_.paranoid_checks==false - virtual void Corruption(size_t bytes, const Status& s) { - Log(info_log, "%s%s: dropping %d bytes; %s", - (this->status == NULL ? "(ignoring error) " : ""), - fname, static_cast(bytes), s.ToString().c_str()); - if (this->status != NULL && this->status->ok()) *this->status = s; - } - }; - - mutex_.AssertHeld(); - - // Open the log file - std::string fname = LogFileName(dbname_, log_number); - SequentialFile* file; - Status status = env_->NewSequentialFile(fname, &file); - if (!status.ok()) { - MaybeIgnoreError(&status); - return status; - } - - // Create the log reader. - LogReporter reporter; - reporter.env = env_; - reporter.info_log = options_.info_log; - reporter.fname = fname.c_str(); - reporter.status = (options_.paranoid_checks ? &status : NULL); - // We intentially make log::Reader do checksumming even if - // paranoid_checks==false so that corruptions cause entire commits - // to be skipped instead of propagating bad information (like overly - // large sequence numbers). - log::Reader reader(file, &reporter, true/*checksum*/, - 0/*initial_offset*/); - Log(options_.info_log, "Recovering log #%llu", - (unsigned long long) log_number); - - // Read all the records and add to a memtable - std::string scratch; - Slice record; - WriteBatch batch; - MemTable* mem = NULL; - while (reader.ReadRecord(&record, &scratch) && - status.ok()) { - if (record.size() < 12) { - reporter.Corruption( - record.size(), Status::Corruption("log record too small")); - continue; - } - WriteBatchInternal::SetContents(&batch, record); - - if (mem == NULL) { - mem = new MemTable(internal_comparator_); - mem->Ref(); - } - status = WriteBatchInternal::InsertInto(&batch, mem); - MaybeIgnoreError(&status); - if (!status.ok()) { - break; - } - const SequenceNumber last_seq = - WriteBatchInternal::Sequence(&batch) + - WriteBatchInternal::Count(&batch) - 1; - if (last_seq > *max_sequence) { - *max_sequence = last_seq; - } - - if (mem->ApproximateMemoryUsage() > options_.write_buffer_size) { - status = WriteLevel0Table(mem, edit, NULL, NULL); - if (!status.ok()) { - // Reflect errors immediately so that conditions like full - // file-systems cause the DB::Open() to fail. - break; - } - mem->Unref(); - mem = NULL; - } - } - - if (status.ok() && mem != NULL) { - status = WriteLevel0Table(mem, edit, NULL, NULL); - // Reflect errors immediately so that conditions like full - // file-systems cause the DB::Open() to fail. - } - - if (mem != NULL) mem->Unref(); - delete file; - return status; -} - -Status DBImpl::WriteLevel0Table(MemTable* mem, VersionEdit* edit, - Version* base, uint64_t* number) { - mutex_.AssertHeld(); - const uint64_t start_micros = env_->NowMicros(); - FileMetaData meta; - meta.number = versions_->NewFileNumber(); - if (number) { - *number = meta.number; - } - pending_outputs_.insert(meta.number); - Iterator* iter = mem->NewIterator(); - Log(options_.info_log, "Level-0 table #%llu: started", - (unsigned long long) meta.number); - - Status s; - { - mutex_.Unlock(); - s = BuildTable(dbname_, env_, options_, table_cache_, iter, &meta); - mutex_.Lock(); - } - - Log(options_.info_log, "Level-0 table #%llu: %lld bytes %s", - (unsigned long long) meta.number, - (unsigned long long) meta.file_size, - s.ToString().c_str()); - delete iter; - - // Note that if file_size is zero, the file has been deleted and - // should not be added to the manifest. - int level = 0; - if (s.ok() && meta.file_size > 0) { - const Slice min_user_key = meta.smallest.user_key(); - const Slice max_user_key = meta.largest.user_key(); - if (base != NULL) { - level = base->PickLevelForMemTableOutput(min_user_key, max_user_key); - while (level > 0 && levels_locked_[level]) { - --level; - } - } - edit->AddFile(level, meta.number, meta.file_size, - meta.smallest, meta.largest); - } - - CompactionStats stats; - stats.micros = env_->NowMicros() - start_micros; - stats.bytes_written = meta.file_size; - stats_[level].Add(stats); - return s; -} - -void DBImpl::CompactMemTableThread() { - MutexLock l(&mutex_); - while (!shutting_down_.Acquire_Load() && !allow_background_activity_) { - bg_memtable_cv_.Wait(); - } - while (!shutting_down_.Acquire_Load()) { - while (!shutting_down_.Acquire_Load() && imm_ == NULL) { - bg_memtable_cv_.Wait(); - } - if (shutting_down_.Acquire_Load()) { - break; - } - - // Save the contents of the memtable as a new Table - VersionEdit edit; - Version* base = versions_->current(); - base->Ref(); - uint64_t number; - Status s = WriteLevel0Table(imm_, &edit, base, &number); - base->Unref(); base = NULL; - - if (s.ok() && shutting_down_.Acquire_Load()) { - s = Status::IOError("Deleting DB during memtable compaction"); - } - - // Replace immutable memtable with the generated Table - if (s.ok()) { - edit.SetPrevLogNumber(0); - edit.SetLogNumber(logfile_number_); // Earlier logs no longer needed - s = versions_->LogAndApply(&edit, &mutex_, &bg_log_cv_, &bg_log_occupied_); - } - - pending_outputs_.erase(number); - - if (s.ok()) { - // Commit to the new state - imm_->Unref(); - imm_ = NULL; - has_imm_.Release_Store(NULL); - bg_fg_cv_.SignalAll(); - bg_compaction_cv_.Signal(); - DeleteObsoleteFiles(); - } else { - RecordBackgroundError(s); - continue; - } - - if (!shutting_down_.Acquire_Load() && !s.ok()) { - // Wait a little bit before retrying background compaction in - // case this is an environmental problem and we do not want to - // chew up resources for failed compactions for the duration of - // the problem. - bg_fg_cv_.SignalAll(); // In case a waiter can proceed despite the error - Log(options_.info_log, "Waiting after memtable compaction error: %s", - s.ToString().c_str()); - mutex_.Unlock(); - env_->SleepForMicroseconds(1000000); - mutex_.Lock(); - } - - assert(config::kL0_SlowdownWritesTrigger > 0); - if (versions_->NumLevelFiles(0) >= config::kL0_SlowdownWritesTrigger - 1) { - bg_optimistic_trip_ = true; - bg_optimistic_cv_.Signal(); - } - } - Log(options_.info_log, "cleaning up CompactMemTableThread"); - num_bg_threads_ -= 1; - bg_fg_cv_.SignalAll(); -} - -void DBImpl::CompactRange(const Slice* begin, const Slice* end) { - int max_level_with_files = 1; - { - MutexLock l(&mutex_); - Version* base = versions_->current(); - for (int level = 1; level < config::kNumLevels; level++) { - if (base->OverlapInLevel(level, begin, end)) { - max_level_with_files = level; - } - } - } - TEST_CompactMemTable(); // TODO(sanjay): Skip if memtable does not overlap - for (int level = 0; level < max_level_with_files; level++) { - TEST_CompactRange(level, begin, end); - } -} - -void DBImpl::TEST_CompactRange(int level, const Slice* begin,const Slice* end) { - assert(level >= 0); - assert(level + 1 < config::kNumLevels); - - InternalKey begin_storage, end_storage; - - ManualCompaction manual; - manual.level = level; - manual.done = false; - if (begin == NULL) { - manual.begin = NULL; - } else { - begin_storage = InternalKey(*begin, kMaxSequenceNumber, kValueTypeForSeek); - manual.begin = &begin_storage; - } - if (end == NULL) { - manual.end = NULL; - } else { - end_storage = InternalKey(*end, 0, static_cast(0)); - manual.end = &end_storage; - } - - MutexLock l(&mutex_); - while (!manual.done && !shutting_down_.Acquire_Load() && bg_error_.ok()) { - if (manual_compaction_ == NULL) { // Idle - manual_compaction_ = &manual; - bg_compaction_cv_.Signal(); - bg_memtable_cv_.Signal(); - } else { // Running either my compaction or another compaction. - bg_fg_cv_.Wait(); - } - } - if (manual_compaction_ == &manual) { - // Cancel my manual compaction since we aborted early for some reason. - manual_compaction_ = NULL; - } -} - -Status DBImpl::TEST_CompactMemTable() { - // NULL batch means just wait for earlier writes to be done - Status s = Write(WriteOptions(), NULL); - if (s.ok()) { - // Wait until the compaction completes - MutexLock l(&mutex_); - while (imm_ != NULL && bg_error_.ok()) { - bg_fg_cv_.Wait(); - } - if (imm_ != NULL) { - s = bg_error_; - } - } - return s; -} - -void DBImpl::CompactLevelThread() { - MutexLock l(&mutex_); - while (!shutting_down_.Acquire_Load() && !allow_background_activity_) { - bg_compaction_cv_.Wait(); - } - while (!shutting_down_.Acquire_Load()) { - while (!shutting_down_.Acquire_Load() && - manual_compaction_ == NULL && - !versions_->NeedsCompaction(levels_locked_, straight_reads_ > kStraightReads)) { - bg_compaction_cv_.Wait(); - } - if (shutting_down_.Acquire_Load()) { - break; - } - - assert(manual_compaction_ == NULL || num_bg_threads_ == 3); - Status s = BackgroundCompaction(); - bg_fg_cv_.SignalAll(); // before the backoff In case a waiter - // can proceed despite the error - - if (s.ok()) { - // Success - } else if (shutting_down_.Acquire_Load()) { - // Error most likely due to shutdown; do not wait - } else { - // Wait a little bit before retrying background compaction in - // case this is an environmental problem and we do not want to - // chew up resources for failed compactions for the duration of - // the problem. - Log(options_.info_log, "Waiting after background compaction error: %s", - s.ToString().c_str()); - mutex_.Unlock(); - int seconds_to_sleep = 1; - env_->SleepForMicroseconds(seconds_to_sleep * 1000000); - mutex_.Lock(); - } - } - Log(options_.info_log, "cleaning up CompactLevelThread"); - num_bg_threads_ -= 1; - bg_fg_cv_.SignalAll(); -} - -void DBImpl::RecordBackgroundError(const Status& s) { - mutex_.AssertHeld(); - if (bg_error_.ok()) { - bg_error_ = s; - bg_fg_cv_.SignalAll(); - } -} - -Status DBImpl::BackgroundCompaction() { - mutex_.AssertHeld(); - Compaction* c = NULL; - bool is_manual = (manual_compaction_ != NULL); - InternalKey manual_end; - if (is_manual) { - ManualCompaction* m = manual_compaction_; - c = versions_->CompactRange(m->level, m->begin, m->end); - m->done = (c == NULL); - if (c != NULL) { - manual_end = c->input(0, c->num_input_files(0) - 1)->largest; - } - Log(options_.info_log, - "Manual compaction at level-%d from %s .. %s; will stop at %s\n", - m->level, - (m->begin ? m->begin->DebugString().c_str() : "(begin)"), - (m->end ? m->end->DebugString().c_str() : "(end)"), - (m->done ? "(end)" : manual_end.DebugString().c_str())); - } else { - int level = versions_->PickCompactionLevel(levels_locked_, straight_reads_ > kStraightReads); - if (level != config::kNumLevels) { - c = versions_->PickCompaction(versions_->current(), level); - } - if (c) { - assert(!levels_locked_[c->level() + 0]); - assert(!levels_locked_[c->level() + 1]); - levels_locked_[c->level() + 0] = true; - levels_locked_[c->level() + 1] = true; - } - } - - Status status; - - if (c == NULL) { - // Nothing to do - } else if (!is_manual && c->IsTrivialMove() && c->level() > 0) { - // Move file to next level - for (size_t i = 0; i < c->num_input_files(0); ++i) { - FileMetaData* f = c->input(0, i); - c->edit()->DeleteFile(c->level(), f->number); - c->edit()->AddFile(c->level() + 1, f->number, f->file_size, - f->smallest, f->largest); - } - status = versions_->LogAndApply(c->edit(), &mutex_, &bg_log_cv_, &bg_log_occupied_); - if (!status.ok()) { - RecordBackgroundError(status); - } - VersionSet::LevelSummaryStorage tmp; - for (size_t i = 0; i < c->num_input_files(0); ++i) { - FileMetaData* f = c->input(0, i); - Log(options_.info_log, "Moved #%lld to level-%d %lld bytes %s: %s\n", - static_cast(f->number), - c->level() + 1, - static_cast(f->file_size), - status.ToString().c_str(), - versions_->LevelSummary(&tmp)); - } - } else { - CompactionState* compact = new CompactionState(c); - status = DoCompactionWork(compact); - if (!status.ok()) { - RecordBackgroundError(status); - } - CleanupCompaction(compact); - c->ReleaseInputs(); - DeleteObsoleteFiles(); - } - - if (c) { - levels_locked_[c->level() + 0] = false; - levels_locked_[c->level() + 1] = false; - delete c; - } - - if (status.ok()) { - // Done - } else if (shutting_down_.Acquire_Load()) { - // Ignore compaction errors found during shutting down - } else { - Log(options_.info_log, - "Compaction error: %s", status.ToString().c_str()); - } - - if (is_manual) { - ManualCompaction* m = manual_compaction_; - if (!status.ok()) { - m->done = true; - } - if (!m->done) { - // We only compacted part of the requested range. Update *m - // to the range that is left to be compacted. - m->tmp_storage = manual_end; - m->begin = &m->tmp_storage; - } - manual_compaction_ = NULL; - } - return status; -} - -void DBImpl::CompactOptimisticThread() { - MutexLock l(&mutex_); - while (!shutting_down_.Acquire_Load() && !allow_background_activity_) { - bg_optimistic_cv_.Wait(); - } - while (!shutting_down_.Acquire_Load()) { - while (!shutting_down_.Acquire_Load() && !bg_optimistic_trip_) { - bg_optimistic_cv_.Wait(); - } - if (shutting_down_.Acquire_Load()) { - break; - } - bg_optimistic_trip_ = false; - Status s = OptimisticCompaction(); - - if (!shutting_down_.Acquire_Load() && !s.ok()) { - // Wait a little bit before retrying background compaction in - // case this is an environmental problem and we do not want to - // chew up resources for failed compactions for the duration of - // the problem. - Log(options_.info_log, "Waiting after optimistic compaction error: %s", - s.ToString().c_str()); - mutex_.Unlock(); - env_->SleepForMicroseconds(1000000); - mutex_.Lock(); - } - } - Log(options_.info_log, "cleaning up OptimisticCompactThread"); - num_bg_threads_ -= 1; - bg_fg_cv_.SignalAll(); -} - -Status DBImpl::OptimisticCompaction() { - mutex_.AssertHeld(); - Log(options_.info_log, "Optimistic compaction started"); - bool did_compaction = true; - uint64_t iters = 0; - while (did_compaction) { - ++iters; - did_compaction = false; - Compaction* c = NULL; - for (size_t level = 1; level + 1 < config::kNumLevels; ++level) { - if (levels_locked_[level] || levels_locked_[level + 1]) { - continue; - } - Compaction* tmp = versions_->PickCompaction(versions_->current(), level); - if (tmp && tmp->IsTrivialMove()) { - if (c) { - delete c; - } - c = tmp; - break; - } else if (c && tmp && c->ratio() < tmp->ratio()) { - delete c; - c = tmp; - } else if (!c) { - c = tmp; - } else { - delete tmp; - } - } - if (!c) { - continue; - } - if (!c->IsTrivialMove() && c->ratio() < .90) { - delete c; - continue; - } - assert(!levels_locked_[c->level() + 0]); - assert(!levels_locked_[c->level() + 1]); - levels_locked_[c->level() + 0] = true; - levels_locked_[c->level() + 1] = true; - - did_compaction = true; - Status status; - - if (c->IsTrivialMove() && c->level() > 0) { - // Move file to next level - for (size_t i = 0; i < c->num_input_files(0); ++i) { - FileMetaData* f = c->input(0, i); - c->edit()->DeleteFile(c->level(), f->number); - c->edit()->AddFile(c->level() + 1, f->number, f->file_size, - f->smallest, f->largest); - } - status = versions_->LogAndApply(c->edit(), &mutex_, &bg_log_cv_, &bg_log_occupied_); - VersionSet::LevelSummaryStorage tmp; - for (size_t i = 0; i < c->num_input_files(0); ++i) { - FileMetaData* f = c->input(0, i); - Log(options_.info_log, "Moved #%lld to level-%d %lld bytes %s: %s\n", - static_cast(f->number), - c->level() + 1, - static_cast(f->file_size), - status.ToString().c_str(), - versions_->LevelSummary(&tmp)); - } - } else { - CompactionState* compact = new CompactionState(c); - status = DoCompactionWork(compact); - CleanupCompaction(compact); - c->ReleaseInputs(); - DeleteObsoleteFiles(); - } - - levels_locked_[c->level() + 0] = false; - levels_locked_[c->level() + 1] = false; - delete c; - - if (status.ok()) { - // Done - } else if (shutting_down_.Acquire_Load()) { - // Ignore compaction errors found during shutting down - break; - } else { - Log(options_.info_log, - "Compaction error: %s", status.ToString().c_str()); - if (options_.paranoid_checks && bg_error_.ok()) { - bg_error_ = status; - } - break; - } - } - Log(options_.info_log, "Optimistic compaction ended after %llu iterations", iters); - return Status::OK(); -} - -void DBImpl::CleanupCompaction(CompactionState* compact) { - mutex_.AssertHeld(); - if (compact->builder != NULL) { - // May happen if we get a shutdown call in the middle of compaction - compact->builder->Abandon(); - delete compact->builder; - } else { - assert(compact->outfile == NULL); - } - delete compact->outfile; - for (size_t i = 0; i < compact->outputs.size(); i++) { - const CompactionState::Output& out = compact->outputs[i]; - pending_outputs_.erase(out.number); - } - delete compact; -} - -Status DBImpl::OpenCompactionOutputFile(CompactionState* compact) { - assert(compact != NULL); - assert(compact->builder == NULL); - uint64_t file_number; - { - mutex_.Lock(); - file_number = versions_->NewFileNumber(); - pending_outputs_.insert(file_number); - CompactionState::Output out; - out.number = file_number; - out.smallest.Clear(); - out.largest.Clear(); - compact->outputs.push_back(out); - mutex_.Unlock(); - } - - // Make the output file - std::string fname = SSTTableFileName(dbname_, file_number); - Status s = env_->NewWritableFile(fname, &compact->outfile); - if (s.ok()) { - compact->builder = new TableBuilder(options_, compact->outfile); - } - return s; -} - -Status DBImpl::FinishCompactionOutputFile(CompactionState* compact, - Iterator* input) { - assert(compact != NULL); - assert(compact->outfile != NULL); - assert(compact->builder != NULL); - - const uint64_t output_number = compact->current_output()->number; - assert(output_number != 0); - - // Check for iterator errors - Status s = input->status(); - const uint64_t current_entries = compact->builder->NumEntries(); - if (s.ok()) { - s = compact->builder->Finish(); - } else { - compact->builder->Abandon(); - } - const uint64_t current_bytes = compact->builder->FileSize(); - compact->current_output()->file_size = current_bytes; - compact->total_bytes += current_bytes; - delete compact->builder; - compact->builder = NULL; - - // Finish and check for file errors - if (s.ok()) { - s = compact->outfile->Sync(); - } - if (s.ok()) { - s = compact->outfile->Close(); - } - delete compact->outfile; - compact->outfile = NULL; - - if (s.ok() && current_entries > 0) { - // Verify that the table is usable - Iterator* iter = table_cache_->NewIterator(ReadOptions(), - output_number, - current_bytes); - s = iter->status(); - delete iter; - if (s.ok()) { - Log(options_.info_log, - "Generated table #%llu: %lld keys, %lld bytes", - (unsigned long long) output_number, - (unsigned long long) current_entries, - (unsigned long long) current_bytes); - } - } - return s; -} - - -Status DBImpl::InstallCompactionResults(CompactionState* compact) { - mutex_.AssertHeld(); - Log(options_.info_log, "Compacted %d@%d + %d@%d files => %lld bytes", - compact->compaction->num_input_files(0), - compact->compaction->level(), - compact->compaction->num_input_files(1), - compact->compaction->level() + 1, - static_cast(compact->total_bytes)); - - // Add compaction outputs - compact->compaction->AddInputDeletions(compact->compaction->edit()); - const int level = compact->compaction->level(); - for (size_t i = 0; i < compact->outputs.size(); i++) { - const CompactionState::Output& out = compact->outputs[i]; - compact->compaction->edit()->AddFile( - level + 1, - out.number, out.file_size, out.smallest, out.largest); - } - return versions_->LogAndApply(compact->compaction->edit(), &mutex_, &bg_log_cv_, &bg_log_occupied_); -} - -Status DBImpl::DoCompactionWork(CompactionState* compact) { - const uint64_t start_micros = env_->NowMicros(); - int64_t imm_micros = 0; // Micros spent doing imm_ compactions - - Log(options_.info_log, "Compacting %d@%d + %d@%d files", - compact->compaction->num_input_files(0), - compact->compaction->level(), - compact->compaction->num_input_files(1), - compact->compaction->level() + 1); - - assert(versions_->NumLevelFiles(compact->compaction->level()) > 0); - assert(compact->builder == NULL); - assert(compact->outfile == NULL); - if (snapshots_.empty()) { - compact->smallest_snapshot = versions_->LastSequence(); - } else { - compact->smallest_snapshot = snapshots_.oldest()->number_; - } - - // Release mutex while we're actually doing the compaction work - mutex_.Unlock(); - - Iterator* input = versions_->MakeInputIterator(compact->compaction); - input->SeekToFirst(); - Status status; - ParsedInternalKey ikey; - std::string current_user_key; - bool has_current_user_key = false; - SequenceNumber last_sequence_for_key = kMaxSequenceNumber; - for (; input->Valid() && !shutting_down_.Acquire_Load(); ) { - Slice key = input->key(); - // Handle key/value, add to state, etc. - bool drop = false; - if (!ParseInternalKey(key, &ikey)) { - // Do not hide error keys - current_user_key.clear(); - has_current_user_key = false; - last_sequence_for_key = kMaxSequenceNumber; - } else { - if (!has_current_user_key || - user_comparator()->Compare(ikey.user_key, - Slice(current_user_key)) != 0) { - // First occurrence of this user key - current_user_key.assign(ikey.user_key.data(), ikey.user_key.size()); - has_current_user_key = true; - last_sequence_for_key = kMaxSequenceNumber; - } - - // Just remember that last_sequence_for_key is decreasing over time, and - // all of this makes sense. - - if (last_sequence_for_key <= compact->smallest_snapshot) { - // Hidden by an newer entry for same user key - drop = true; // (A) - } else if (ikey.type == kTypeDeletion && - ikey.sequence <= compact->smallest_snapshot && - compact->compaction->IsBaseLevelForKey(ikey.user_key)) { - // For this user key: - // (1) there is no data in higher levels - // (2) data in lower levels will have larger sequence numbers - // (3) data in layers that are being compacted here and have - // smaller sequence numbers will be dropped in the next - // few iterations of this loop (by rule (A) above). - // Therefore this deletion marker is obsolete and can be dropped. - drop = true; - } - - // If we're going to drop this key, and there was no previous version of - // this key, and it was written at or after the garbage cutoff, we keep - // it. - if (drop && - last_sequence_for_key == kMaxSequenceNumber && - ikey.sequence >= manual_garbage_cutoff_) { - drop = false; - } - - last_sequence_for_key = ikey.sequence; - } - - if (!drop) { - // Open output file if necessary - if (compact->builder == NULL) { - status = OpenCompactionOutputFile(compact); - if (!status.ok()) { - break; - } - } - if (compact->builder->NumEntries() == 0) { - compact->current_output()->smallest.DecodeFrom(key); - } - compact->current_output()->largest.DecodeFrom(key); - compact->builder->Add(key, input->value()); - - // Close output file if it is big enough - if (compact->builder->FileSize() >= - compact->compaction->MaxOutputFileSize()) { - status = FinishCompactionOutputFile(compact, input); - if (!status.ok()) { - break; - } - } - } - - input->Next(); - } - - if (status.ok() && shutting_down_.Acquire_Load()) { - status = Status::IOError("Deleting DB during compaction"); - } - if (status.ok() && compact->builder != NULL) { - status = FinishCompactionOutputFile(compact, input); - } - if (status.ok()) { - status = input->status(); - } - delete input; - input = NULL; - - CompactionStats stats; - stats.micros = env_->NowMicros() - start_micros - imm_micros; - for (int which = 0; which < 2; which++) { - for (int i = 0; i < compact->compaction->num_input_files(which); i++) { - stats.bytes_read += compact->compaction->input(which, i)->file_size; - } - } - for (size_t i = 0; i < compact->outputs.size(); i++) { - stats.bytes_written += compact->outputs[i].file_size; - } - - mutex_.Lock(); - stats_[compact->compaction->level() + 1].Add(stats); - - if (status.ok()) { - status = InstallCompactionResults(compact); - } - if (!status.ok()) { - RecordBackgroundError(status); - } - VersionSet::LevelSummaryStorage tmp; - Log(options_.info_log, - "compacted to: %s", versions_->LevelSummary(&tmp)); - return status; -} - -namespace { -struct IterState { - port::Mutex* mu; - Version* version; - MemTable* mem; - MemTable* imm; -}; - -static void CleanupIteratorState(void* arg1, void* arg2) { - IterState* state = reinterpret_cast(arg1); - state->mu->Lock(); - state->mem->Unref(); - if (state->imm != NULL) state->imm->Unref(); - state->version->Unref(); - state->mu->Unlock(); - delete state; -} -} // namespace - -Iterator* DBImpl::NewInternalIterator(const ReadOptions& options, uint64_t number, - SequenceNumber* latest_snapshot, - uint32_t* seed, bool external_sync) { - IterState* cleanup = new IterState; - if (!external_sync) { - mutex_.Lock(); - } - ++straight_reads_; - *latest_snapshot = versions_->LastSequence(); - - // Collect together all needed child iterators - std::vector list; - list.push_back(mem_->NewIterator()); - mem_->Ref(); - if (imm_ != NULL) { - list.push_back(imm_->NewIterator()); - imm_->Ref(); - } - versions_->current()->AddSomeIterators(options, number, &list); - Iterator* internal_iter = - NewMergingIterator(&internal_comparator_, &list[0], list.size()); - versions_->current()->Ref(); - - cleanup->mu = &mutex_; - cleanup->mem = mem_; - cleanup->imm = imm_; - cleanup->version = versions_->current(); - internal_iter->RegisterCleanup(CleanupIteratorState, cleanup, NULL); - - *seed = ++seed_; - if (!external_sync) { - mutex_.Unlock(); - } - return internal_iter; -} - -Iterator* DBImpl::TEST_NewInternalIterator() { - SequenceNumber ignored; - uint32_t ignored_seed; - return NewInternalIterator(ReadOptions(), 0, &ignored, &ignored_seed, false); -} - -int64_t DBImpl::TEST_MaxNextLevelOverlappingBytes() { - MutexLock l(&mutex_); - return versions_->MaxNextLevelOverlappingBytes(); -} - -Status DBImpl::Get(const ReadOptions& options, - const Slice& key, - std::string* value) { - Status s; - MutexLock l(&mutex_); - SequenceNumber snapshot; - if (options.snapshot != NULL) { - snapshot = reinterpret_cast(options.snapshot)->number_; - } else { - snapshot = versions_->LastSequence(); - } - - MemTable* mem = mem_; - MemTable* imm = imm_; - Version* current = versions_->current(); - mem->Ref(); - if (imm != NULL) imm->Ref(); - current->Ref(); - - bool have_stat_update = false; - Version::GetStats stats; - - // Unlock while reading from files and memtables - { - mutex_.Unlock(); - // First look in the memtable, then in the immutable memtable (if any). - LookupKey lkey(key, snapshot); - if (mem->Get(lkey, value, &s)) { - // Done - } else if (imm != NULL && imm->Get(lkey, value, &s)) { - // Done - } else { - s = current->Get(options, lkey, value, &stats); - have_stat_update = true; - } - mutex_.Lock(); - } - - if (have_stat_update && current->UpdateStats(stats)) { - bg_compaction_cv_.Signal(); - } - ++straight_reads_; - mem->Unref(); - if (imm != NULL) imm->Unref(); - current->Unref(); - return s; -} - -Iterator* DBImpl::NewIterator(const ReadOptions& options) { - SequenceNumber latest_snapshot; - uint32_t seed; - Iterator* iter = NewInternalIterator(options, 0, &latest_snapshot, &seed, false); - return NewDBIterator( - this, user_comparator(), iter, - (options.snapshot != NULL - ? reinterpret_cast(options.snapshot)->number_ - : latest_snapshot), - seed); -} - -void DBImpl::GetReplayTimestamp(std::string* timestamp) { - uint64_t file = 0; - uint64_t seqno = 0; - - { - MutexLock l(&mutex_); - file = versions_->NewFileNumber(); - versions_->ReuseFileNumber(file); - seqno = versions_->LastSequence(); - } - - timestamp->clear(); - PutVarint64(timestamp, file); - PutVarint64(timestamp, seqno); -} - -void DBImpl::AllowGarbageCollectBeforeTimestamp(const std::string& timestamp) { - Slice ts_slice(timestamp); - uint64_t file = 0; - uint64_t seqno = 0; - - if (timestamp == "all") { - // keep zeroes - } else if (timestamp == "now") { - MutexLock l(&mutex_); - seqno = versions_->LastSequence(); - if (manual_garbage_cutoff_ < seqno) { - manual_garbage_cutoff_ = seqno; - } - } else if (GetVarint64(&ts_slice, &file) && - GetVarint64(&ts_slice, &seqno)) { - MutexLock l(&mutex_); - if (manual_garbage_cutoff_ < seqno) { - manual_garbage_cutoff_ = seqno; - } - } -} - -bool DBImpl::ValidateTimestamp(const std::string& ts) { - uint64_t file = 0; - uint64_t seqno = 0; - Slice ts_slice(ts); - return ts == "all" || ts == "now" || - (GetVarint64(&ts_slice, &file) && - GetVarint64(&ts_slice, &seqno)); -} - -int DBImpl::CompareTimestamps(const std::string& lhs, const std::string& rhs) { - uint64_t now = 0; - uint64_t lhs_seqno = 0; - uint64_t rhs_seqno = 0; - uint64_t tmp; - if (lhs == "now" || rhs == "now") { - MutexLock l(&mutex_); - now = versions_->LastSequence(); - } - if (lhs == "all") { - lhs_seqno = 0; - } else if (lhs == "now") { - lhs_seqno = now; - } else { - Slice lhs_slice(lhs); - GetVarint64(&lhs_slice, &tmp); - GetVarint64(&lhs_slice, &lhs_seqno); - } - if (rhs == "all") { - rhs_seqno = 0; - } else if (rhs == "now") { - rhs_seqno = now; - } else { - Slice rhs_slice(rhs); - GetVarint64(&rhs_slice, &tmp); - GetVarint64(&rhs_slice, &rhs_seqno); - } - - if (lhs_seqno < rhs_seqno) { - return -1; - } else if (lhs_seqno > rhs_seqno) { - return 1; - } else { - return 0; - } -} - -Status DBImpl::GetReplayIterator(const std::string& timestamp, - ReplayIterator** iter) { - *iter = NULL; - Slice ts_slice(timestamp); - uint64_t file = 0; - uint64_t seqno = 0; - - if (timestamp == "all") { - seqno = 0; - } else if (timestamp == "now") { - MutexLock l(&mutex_); - file = versions_->NewFileNumber(); - versions_->ReuseFileNumber(file); - seqno = versions_->LastSequence(); - } else if (!GetVarint64(&ts_slice, &file) || - !GetVarint64(&ts_slice, &seqno)) { - return Status::InvalidArgument("Timestamp is not valid"); - } - - ReadOptions options; - options.fill_cache = false; - SequenceNumber latest_snapshot; - uint32_t seed; - MutexLock l(&mutex_); - Iterator* internal_iter = NewInternalIterator(options, file, &latest_snapshot, &seed, true); - internal_iter->SeekToFirst(); - ReplayIteratorImpl* iterimpl; - iterimpl = new ReplayIteratorImpl( - this, &mutex_, user_comparator(), internal_iter, mem_, SequenceNumber(seqno)); - *iter = iterimpl; - replay_iters_.push_back(iterimpl); - return Status::OK(); -} - -void DBImpl::ReleaseReplayIterator(ReplayIterator* _iter) { - MutexLock l(&mutex_); - ReplayIteratorImpl* iter = reinterpret_cast(_iter); - for (std::list::iterator it = replay_iters_.begin(); - it != replay_iters_.end(); ++it) { - if (*it == iter) { - iter->cleanup(); // calls delete - replay_iters_.erase(it); - return; - } - } -} - -void DBImpl::RecordReadSample(Slice key) { - MutexLock l(&mutex_); - ++straight_reads_; - if (versions_->current()->RecordReadSample(key)) { - bg_compaction_cv_.Signal(); - } -} - -SequenceNumber DBImpl::LastSequence() { - MutexLock l(&mutex_); - return versions_->LastSequence(); -} - -const Snapshot* DBImpl::GetSnapshot() { - MutexLock l(&mutex_); - return snapshots_.New(versions_->LastSequence()); -} - -void DBImpl::ReleaseSnapshot(const Snapshot* s) { - MutexLock l(&mutex_); - snapshots_.Delete(reinterpret_cast(s)); -} - -// Convenience methods -Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slice& val) { - return DB::Put(o, key, val); -} - -Status DBImpl::Delete(const WriteOptions& options, const Slice& key) { - return DB::Delete(options, key); -} - -// Information kept for every waiting writer -struct DBImpl::Writer { - port::Mutex mtx; - port::CondVar cv; - bool linked; - bool mayend; - Writer* next; - uint64_t start_sequence; - uint64_t end_sequence; - SHARED_PTR logfile; - SHARED_PTR log; - MemTable* mem; - SHARED_PTR old_logfile; - SHARED_PTR old_log; - - explicit Writer() - : mtx(), - cv(&mtx), - linked(false), - mayend(false), - next(NULL), - start_sequence(0), - end_sequence(0), - logfile(), - log(), - mem(NULL), - old_logfile(), - old_log() { - } - ~Writer() throw () { - } -}; - -Status DBImpl::Write(const WriteOptions& options, WriteBatch* updates) { - Writer w; - Status s; - s = SequenceWriteBegin(&w, updates); - - if (s.ok() && updates != NULL) { // NULL batch is for compactions - WriteBatchInternal::SetSequence(updates, w.start_sequence); - - // Add to log and apply to memtable. We do this without holding the lock - // because both the log and the memtable are safe for concurrent access. - // The synchronization with readers occurs with SequenceWriteEnd. - s = w.log->AddRecord(WriteBatchInternal::Contents(updates)); - - if (s.ok() && options.sync) { - s = w.logfile->Sync(); - } - if (s.ok()) { - s = WriteBatchInternal::InsertInto(updates, w.mem); - } - } - - if (!s.ok()) { - mutex_.Lock(); - RecordBackgroundError(s); - mutex_.Unlock(); - } - - SequenceWriteEnd(&w); - return s; -} - -Status DBImpl::SequenceWriteBegin(Writer* w, WriteBatch* updates) { - Status s; - MutexLock l(&mutex_); - straight_reads_ = 0; - bool force = updates == NULL; - bool enqueue_mem = false; - w->old_log.reset(); - w->old_logfile.reset(); - - while (true) { - if (!bg_error_.ok()) { - // Yield previous error - s = bg_error_; - break; - } else if (!force && - (mem_->ApproximateMemoryUsage() <= options_.write_buffer_size)) { - // There is room in current memtable - // Note that this is a sloppy check. We can overfill a memtable by the - // amount of concurrently written data. - break; - } else if (imm_ != NULL) { - // We have filled up the current memtable, but the previous - // one is still being compacted, so we wait. - bg_compaction_cv_.Signal(); - bg_memtable_cv_.Signal(); - bg_fg_cv_.Wait(); - } else { - // Attempt to switch to a new memtable and trigger compaction of old - assert(versions_->PrevLogNumber() == 0); - uint64_t new_log_number = versions_->NewFileNumber(); - WritableFile* lfile = NULL; - s = env_->NewWritableFile(LogFileName(dbname_, new_log_number), &lfile); - if (!s.ok()) { - // Avoid chewing through file number space in a tight loop. - versions_->ReuseFileNumber(new_log_number); - break; - } - w->old_log = log_; - w->old_logfile = logfile_; - logfile_.reset(lfile); - logfile_number_ = new_log_number; - log_.reset(new log::Writer(lfile)); - imm_ = mem_; - has_imm_.Release_Store(imm_); - mem_ = new MemTable(internal_comparator_); - mem_->Ref(); - force = false; // Do not force another compaction if have room - enqueue_mem = true; - break; - } - } - - if (s.ok()) { - if (writers_tail_) { - *writers_tail_ = w; - } else { - w->mayend = true; - } - writers_tail_ = &w->next; - w->linked = true; - w->next = NULL; - uint64_t diff = updates ? WriteBatchInternal::Count(updates) : 0; - uint64_t ticket = __sync_add_and_fetch(&writers_upper_, 1 + diff); - w->start_sequence = ticket - diff; - w->end_sequence = ticket; - w->logfile = logfile_; - w->log = log_; - w->mem = mem_; - w->mem->Ref(); - } - - if (enqueue_mem) { - for (std::list::iterator it = replay_iters_.begin(); - it != replay_iters_.end(); ++it) { - (*it)->enqueue(mem_, w->start_sequence); - } - } - - return s; -} - -void DBImpl::SequenceWriteEnd(Writer* w) { - if (!w->linked) { - return; - } - - // wait until we are next - { - MutexLock l(&w->mtx); - while (!w->mayend) { - w->cv.Wait(); - } - } - - // swizzle state to make ours visible - Writer* next = NULL; - { - MutexLock l(&mutex_); - versions_->SetLastSequence(w->end_sequence); - if (writers_tail_ == &w->next) { - writers_tail_ = NULL; - } - next = w->next; - } - - // signal the next writer - if (next) { - MutexLock l(&next->mtx); - next->mayend = true; - next->cv.Signal(); - } - - // must do in order: log, logfile - if (w->old_log) { - assert(w->old_logfile); - w->old_log.reset(); - w->old_logfile.reset(); - bg_memtable_cv_.Signal(); - } - - // safe because Unref is synchronized internally - if (w->mem) { - w->mem->Unref(); - } -} - -bool DBImpl::GetProperty(const Slice& property, std::string* value) { - value->clear(); - - MutexLock l(&mutex_); - Slice in = property; - Slice prefix("leveldb."); - if (!in.starts_with(prefix)) return false; - in.remove_prefix(prefix.size()); - - if (in.starts_with("num-files-at-level")) { - in.remove_prefix(strlen("num-files-at-level")); - uint64_t level; - bool ok = ConsumeDecimalNumber(&in, &level) && in.empty(); - if (!ok || level >= config::kNumLevels) { - return false; - } else { - char buf[100]; - snprintf(buf, sizeof(buf), "%d", - versions_->NumLevelFiles(static_cast(level))); - *value = buf; - return true; - } - } else if (in == "stats") { - char buf[200]; - snprintf(buf, sizeof(buf), - " Compactions\n" - "Level Files Size(MB) Time(sec) Read(MB) Write(MB)\n" - "--------------------------------------------------\n" - ); - value->append(buf); - for (int level = 0; level < config::kNumLevels; level++) { - int files = versions_->NumLevelFiles(level); - if (stats_[level].micros > 0 || files > 0) { - snprintf( - buf, sizeof(buf), - "%3d %8d %8.0f %9.0f %8.0f %9.0f\n", - level, - files, - versions_->NumLevelBytes(level) / 1048576.0, - stats_[level].micros / 1e6, - stats_[level].bytes_read / 1048576.0, - stats_[level].bytes_written / 1048576.0); - value->append(buf); - } - } - return true; - } else if (in == "sstables") { - *value = versions_->current()->DebugString(); - return true; - } - - return false; -} - -void DBImpl::GetApproximateSizes( - const Range* range, int n, - uint64_t* sizes) { - // TODO(opt): better implementation - Version* v; - { - MutexLock l(&mutex_); - versions_->current()->Ref(); - v = versions_->current(); - } - - for (int i = 0; i < n; i++) { - // Convert user_key into a corresponding internal key. - InternalKey k1(range[i].start, kMaxSequenceNumber, kValueTypeForSeek); - InternalKey k2(range[i].limit, kMaxSequenceNumber, kValueTypeForSeek); - uint64_t start = versions_->ApproximateOffsetOf(v, k1); - uint64_t limit = versions_->ApproximateOffsetOf(v, k2); - sizes[i] = (limit >= start ? limit - start : 0); - } - - { - MutexLock l(&mutex_); - v->Unref(); - } -} - -Status DBImpl::LiveBackup(const Slice& _name) { - Slice name = _name; - size_t name_sz = 0; - - for (; name_sz < name.size() && name.data()[name_sz] != '\0'; ++name_sz) - ; - - name = Slice(name.data(), name_sz); - std::set live; - uint64_t ticket; - Writer w; - - { - MutexLock l(&mutex_); - ticket = __sync_add_and_fetch(&writers_upper_, 1); - if (writers_tail_) { - *writers_tail_ = &w; - } else { - w.mayend = true; - } - writers_tail_ = &w.next; - w.linked = true; - w.next = NULL; - } - - { - MutexLock l(&w.mtx); - while (!w.mayend) { - w.cv.Wait(); - } - } - - { - MutexLock l(&mutex_); - versions_->SetLastSequence(ticket); - while (backup_in_progress_.Acquire_Load() != NULL) { - backup_cv_.Wait(); - } - backup_in_progress_.Release_Store(this); - while (bg_log_occupied_) { - bg_log_cv_.Wait(); - } - bg_log_occupied_ = true; - // note that this logic assumes that DeleteObsoleteFiles never releases - // mutex_, so that once we release at this brace, we'll guarantee that it - // will see backup_in_progress_. If you change DeleteObsoleteFiles to - // release mutex_, you'll need to add some sort of synchronization in place - // of this text block. - versions_->AddLiveFiles(&live); - if (writers_tail_ == &w.next) { - writers_tail_ = NULL; - } - } - - // signal the next writer - if (w.next) { - MutexLock l(&w.next->mtx); - w.next->mayend = true; - w.next->cv.Signal(); - } - - Status s; - std::vector filenames; - s = env_->GetChildren(dbname_, &filenames); - std::string backup_dir = dbname_ + "/backup-" + name.ToString() + "/"; - - if (s.ok()) { - s = env_->CreateDir(backup_dir); - } - - uint64_t number; - FileType type; - - for (size_t i = 0; i < filenames.size(); i++) { - if (!s.ok()) { - continue; - } - if (ParseFileName(filenames[i], &number, &type)) { - std::string src = dbname_ + "/" + filenames[i]; - std::string target = backup_dir + "/" + filenames[i]; - switch (type) { - case kLogFile: - case kDescriptorFile: - case kCurrentFile: - case kInfoLogFile: - s = env_->CopyFile(src, target); - break; - case kTableFile: - // If it's a file referenced by a version, we have logged that version - // and applied it. Our MANIFEST will reflect that, and the file - // number assigned to new files will be greater or equal, ensuring - // that they aren't overwritten. Any file not in "live" either exists - // past the current manifest (output of ongoing compaction) or so far - // in the past we don't care (we're going to delete it at the end of - // this backup). I'd rather play safe than sorry. - // - // Under no circumstances should you collapse this to a single - // LinkFile without the conditional as it has implications for backups - // that share hardlinks. Opening an older backup that has files - // hardlinked with newer backups will overwrite "immutable" files in - // the newer backups because they aren't in our manifest, and we do an - // open/write rather than a creat/rename. We avoid linking these - // files. - if (live.find(number) != live.end()) { - s = env_->LinkFile(src, target); - } - break; - case kTempFile: - case kDBLockFile: - break; - } - } - } - - { - MutexLock l(&mutex_); - backup_in_progress_.Release_Store(NULL); - if (s.ok() && backup_deferred_delete_) { - DeleteObsoleteFiles(); - } - backup_deferred_delete_ = false; - bg_log_occupied_ = false; - bg_log_cv_.Signal(); - backup_cv_.Signal(); - } - return s; -} - -// Default implementations of convenience methods that subclasses of DB -// can call if they wish -Status DB::Put(const WriteOptions& opt, const Slice& key, const Slice& value) { - WriteBatch batch; - batch.Put(key, value); - return Write(opt, &batch); -} - -Status DB::Delete(const WriteOptions& opt, const Slice& key) { - WriteBatch batch; - batch.Delete(key); - return Write(opt, &batch); -} - -DB::~DB() { } - -Status DB::Open(const Options& options, const std::string& dbname, - DB** dbptr) { - *dbptr = NULL; - - DBImpl* impl = new DBImpl(options, dbname); - impl->mutex_.Lock(); - VersionEdit edit; - Status s = impl->Recover(&edit); // Handles create_if_missing, error_if_exists - if (s.ok()) { - uint64_t new_log_number = impl->versions_->NewFileNumber(); - WritableFile* lfile; - s = options.env->NewWritableFile(LogFileName(dbname, new_log_number), - &lfile); - if (s.ok()) { - edit.SetLogNumber(new_log_number); - impl->logfile_.reset(lfile); - impl->logfile_number_ = new_log_number; - impl->log_.reset(new log::Writer(lfile)); - s = impl->versions_->LogAndApply(&edit, &impl->mutex_, &impl->bg_log_cv_, &impl->bg_log_occupied_); - } - if (s.ok()) { - impl->DeleteObsoleteFiles(); - impl->bg_optimistic_cv_.Signal(); - impl->bg_compaction_cv_.Signal(); - impl->bg_memtable_cv_.Signal(); - } - } - impl->pending_outputs_.clear(); - impl->allow_background_activity_ = true; - impl->bg_optimistic_cv_.SignalAll(); - impl->bg_compaction_cv_.SignalAll(); - impl->bg_memtable_cv_.SignalAll(); - impl->mutex_.Unlock(); - if (s.ok()) { - *dbptr = impl; - } else { - delete impl; - } - impl->writers_upper_ = impl->versions_->LastSequence(); - return s; -} - -Snapshot::~Snapshot() { -} - -Status DestroyDB(const std::string& dbname, const Options& options) { - Env* env = options.env; - std::vector filenames; - // Ignore error in case directory does not exist - env->GetChildren(dbname, &filenames); - if (filenames.empty()) { - return Status::OK(); - } - - FileLock* lock; - const std::string lockname = LockFileName(dbname); - Status result = env->LockFile(lockname, &lock); - if (result.ok()) { - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type) && - type != kDBLockFile) { // Lock file will be deleted at end - Status del = env->DeleteFile(dbname + "/" + filenames[i]); - if (result.ok() && !del.ok()) { - result = del; - } - } - } - env->UnlockFile(lock); // Ignore error since state is already gone - env->DeleteFile(lockname); - env->DeleteDir(dbname); // Ignore error in case dir contains other files - } - return result; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/db_impl.h b/clipper/HyperLevelDB/db/db_impl.h deleted file mode 100644 index 50a3185..0000000 --- a/clipper/HyperLevelDB/db/db_impl.h +++ /dev/null @@ -1,269 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_DB_IMPL_H_ -#define STORAGE_LEVELDB_DB_DB_IMPL_H_ - -#include -#include -#include -#ifdef _LIBCPP_VERSION -#include -#else -#include -#endif -#include "db/dbformat.h" -#include "db/log_writer.h" -#include "db/replay_iterator.h" -#include "db/snapshot.h" -#include "hyperleveldb/db.h" -#include "hyperleveldb/env.h" -#include "port/port.h" -#include "port/thread_annotations.h" - -namespace leveldb { -#ifdef _LIBCPP_VERSION -#define SHARED_PTR std::shared_ptr -#else -#define SHARED_PTR std::tr1::shared_ptr -#endif - -class MemTable; -class TableCache; -class Version; -class VersionEdit; -class VersionSet; - -class DBImpl : public DB { - public: - DBImpl(const Options& options, const std::string& dbname); - virtual ~DBImpl(); - - // Implementations of the DB interface - virtual Status Put(const WriteOptions&, const Slice& key, const Slice& value); - virtual Status Delete(const WriteOptions&, const Slice& key); - virtual Status Write(const WriteOptions& options, WriteBatch* updates); - virtual Status Get(const ReadOptions& options, - const Slice& key, - std::string* value); - virtual Iterator* NewIterator(const ReadOptions&); - virtual void GetReplayTimestamp(std::string* timestamp); - virtual void AllowGarbageCollectBeforeTimestamp(const std::string& timestamp); - virtual bool ValidateTimestamp(const std::string& timestamp); - virtual int CompareTimestamps(const std::string& lhs, const std::string& rhs); - virtual Status GetReplayIterator(const std::string& timestamp, - ReplayIterator** iter); - virtual void ReleaseReplayIterator(ReplayIterator* iter); - virtual const Snapshot* GetSnapshot(); - virtual void ReleaseSnapshot(const Snapshot* snapshot); - virtual bool GetProperty(const Slice& property, std::string* value); - virtual void GetApproximateSizes(const Range* range, int n, uint64_t* sizes); - virtual void CompactRange(const Slice* begin, const Slice* end); - virtual Status LiveBackup(const Slice& name); - - // Extra methods (for testing) that are not in the public DB interface - - // Compact any files in the named level that overlap [*begin,*end] - void TEST_CompactRange(int level, const Slice* begin, const Slice* end); - - // Force current memtable contents to be compacted. - Status TEST_CompactMemTable(); - - // Return an internal iterator over the current state of the database. - // The keys of this iterator are internal keys (see format.h). - // The returned iterator should be deleted when no longer needed. - Iterator* TEST_NewInternalIterator(); - - // Return the maximum overlapping data (in bytes) at next level for any - // file at a level >= 1. - int64_t TEST_MaxNextLevelOverlappingBytes(); - - // Record a sample of bytes read at the specified internal key. - // Samples are taken approximately once every config::kReadBytesPeriod - // bytes. - void RecordReadSample(Slice key); - - // Peek at the last sequence; - // REQURES: mutex_ not held - SequenceNumber LastSequence(); - - private: - friend class DB; - struct CompactionState; - struct Writer; - - Iterator* NewInternalIterator(const ReadOptions&, uint64_t number, - SequenceNumber* latest_snapshot, - uint32_t* seed, bool external_sync); - - Status NewDB(); - - // Recover the descriptor from persistent storage. May do a significant - // amount of work to recover recently logged updates. Any changes to - // be made to the descriptor are added to *edit. - Status Recover(VersionEdit* edit) EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - void MaybeIgnoreError(Status* s) const; - - // Delete any unneeded files and stale in-memory entries. - void DeleteObsoleteFiles(); - - // A background thread to compact the in-memory write buffer to disk. - // Switches to a new log-file/memtable and writes a new descriptor iff - // successful. - static void CompactMemTableWrapper(void* db) - { reinterpret_cast(db)->CompactMemTableThread(); } - void CompactMemTableThread(); - - Status RecoverLogFile(uint64_t log_number, - VersionEdit* edit, - SequenceNumber* max_sequence) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - Status WriteLevel0Table(MemTable* mem, VersionEdit* edit, Version* base, uint64_t* number) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - Status SequenceWriteBegin(Writer* w, WriteBatch* updates) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - void SequenceWriteEnd(Writer* w) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - static void CompactLevelWrapper(void* db) - { reinterpret_cast(db)->CompactLevelThread(); } - void CompactLevelThread(); - Status BackgroundCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - static void CompactOptimisticWrapper(void* db) - { reinterpret_cast(db)->CompactOptimisticThread(); } - void CompactOptimisticThread(); - Status OptimisticCompaction() EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - void RecordBackgroundError(const Status& s); - - void CleanupCompaction(CompactionState* compact) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - Status DoCompactionWork(CompactionState* compact) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - Status OpenCompactionOutputFile(CompactionState* compact); - Status FinishCompactionOutputFile(CompactionState* compact, Iterator* input); - Status InstallCompactionResults(CompactionState* compact) - EXCLUSIVE_LOCKS_REQUIRED(mutex_); - - // Constant after construction - Env* const env_; - const InternalKeyComparator internal_comparator_; - const InternalFilterPolicy internal_filter_policy_; - const Options options_; // options_.comparator == &internal_comparator_ - bool owns_info_log_; - bool owns_cache_; - const std::string dbname_; - - // table_cache_ provides its own synchronization - TableCache* table_cache_; - - // Lock over the persistent DB state. Non-NULL iff successfully acquired. - FileLock* db_lock_; - - // State below is protected by mutex_ - port::Mutex mutex_; - port::AtomicPointer shutting_down_; - MemTable* mem_; - MemTable* imm_; // Memtable being compacted - port::AtomicPointer has_imm_; // So bg thread can detect non-NULL imm_ - SHARED_PTR logfile_; - uint64_t logfile_number_; - SHARED_PTR log_; - uint32_t seed_; // For sampling. - - // Synchronize writers - uint64_t __attribute__ ((aligned (8))) writers_upper_; - Writer** writers_tail_; - - SnapshotList snapshots_; - - // Set of table files to protect from deletion because they are - // part of ongoing compactions. - std::set pending_outputs_; - - bool allow_background_activity_; - bool levels_locked_[leveldb::config::kNumLevels]; - int num_bg_threads_; - // Tell the foreground that background has done something of note - port::CondVar bg_fg_cv_; - // Communicate with compaction background thread - port::CondVar bg_compaction_cv_; - // Communicate with memtable->L0 background thread - port::CondVar bg_memtable_cv_; - // Communicate with the optimistic background thread - bool bg_optimistic_trip_; - port::CondVar bg_optimistic_cv_; - // Mutual exlusion protecting the LogAndApply func - port::CondVar bg_log_cv_; - bool bg_log_occupied_; - - // Information for a manual compaction - struct ManualCompaction { - int level; - bool done; - const InternalKey* begin; // NULL means beginning of key range - const InternalKey* end; // NULL means end of key range - InternalKey tmp_storage; // Used to keep track of compaction progress - }; - ManualCompaction* manual_compaction_; - - // Where have we pinned tombstones? - SequenceNumber manual_garbage_cutoff_; - - // replay iterators - std::list replay_iters_; - - // how many reads have we done in a row, uninterrupted by writes - uint64_t straight_reads_; - - VersionSet* versions_; - - // Information for ongoing backup processes - port::CondVar backup_cv_; - port::AtomicPointer backup_in_progress_; // non-NULL in progress - bool backup_deferred_delete_; // DeleteObsoleteFiles delayed by backup; protect with mutex_ - - // Have we encountered a background error in paranoid mode? - Status bg_error_; - - // Per level compaction stats. stats_[level] stores the stats for - // compactions that produced data for the specified "level". - struct CompactionStats { - int64_t micros; - int64_t bytes_read; - int64_t bytes_written; - - CompactionStats() : micros(0), bytes_read(0), bytes_written(0) { } - - void Add(const CompactionStats& c) { - this->micros += c.micros; - this->bytes_read += c.bytes_read; - this->bytes_written += c.bytes_written; - } - }; - CompactionStats stats_[config::kNumLevels]; - - // No copying allowed - DBImpl(const DBImpl&); - void operator=(const DBImpl&); - - const Comparator* user_comparator() const { - return internal_comparator_.user_comparator(); - } -}; - -// Sanitize db options. The caller should delete result.info_log if -// it is not equal to src.info_log. -extern Options SanitizeOptions(const std::string& db, - const InternalKeyComparator* icmp, - const InternalFilterPolicy* ipolicy, - const Options& src); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_DB_IMPL_H_ diff --git a/clipper/HyperLevelDB/db/db_iter.cc b/clipper/HyperLevelDB/db/db_iter.cc deleted file mode 100644 index 5ebafe7..0000000 --- a/clipper/HyperLevelDB/db/db_iter.cc +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/db_iter.h" - -#include "db/filename.h" -#include "db/db_impl.h" -#include "db/dbformat.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/iterator.h" -#include "port/port.h" -#include "util/logging.h" -#include "util/mutexlock.h" -#include "util/random.h" - -namespace leveldb { - -#if 0 -static void DumpInternalIter(Iterator* iter) { - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - ParsedInternalKey k; - if (!ParseInternalKey(iter->key(), &k)) { - fprintf(stderr, "Corrupt '%s'\n", EscapeString(iter->key()).c_str()); - } else { - fprintf(stderr, "@ '%s'\n", k.DebugString().c_str()); - } - } -} -#endif - -namespace { - -// Memtables and sstables that make the DB representation contain -// (userkey,seq,type) => uservalue entries. DBIter -// combines multiple entries for the same userkey found in the DB -// representation into a single entry while accounting for sequence -// numbers, deletion markers, overwrites, etc. -class DBIter: public Iterator { - public: - // Which direction is the iterator currently moving? - // (1) When moving forward, the internal iterator is positioned at - // the exact entry that yields this->key(), this->value() - // (2) When moving backwards, the internal iterator is positioned - // just before all entries whose user key == this->key(). - enum Direction { - kForward, - kReverse - }; - - DBIter(DBImpl* db, const Comparator* cmp, Iterator* iter, SequenceNumber s, - uint32_t seed) - : db_(db), - user_comparator_(cmp), - iter_(iter), - sequence_(s), - direction_(kForward), - valid_(false), - rnd_(seed), - bytes_counter_(RandomPeriod()) { - } - virtual ~DBIter() { - delete iter_; - } - virtual bool Valid() const { return valid_; } - virtual Slice key() const { - assert(valid_); - return (direction_ == kForward) ? ExtractUserKey(iter_->key()) : saved_key_; - } - virtual Slice value() const { - assert(valid_); - return (direction_ == kForward) ? iter_->value() : saved_value_; - } - virtual Status status() const { - if (status_.ok()) { - return iter_->status(); - } else { - return status_; - } - } - - virtual void Next(); - virtual void Prev(); - virtual void Seek(const Slice& target); - virtual void SeekToFirst(); - virtual void SeekToLast(); - - private: - void FindNextUserEntry(bool skipping, std::string* skip); - void FindPrevUserEntry(); - bool ParseKey(ParsedInternalKey* key); - - inline void SaveKey(const Slice& k, std::string* dst) { - dst->assign(k.data(), k.size()); - } - - inline void ClearSavedValue() { - if (saved_value_.capacity() > 1048576) { - std::string empty; - swap(empty, saved_value_); - } else { - saved_value_.clear(); - } - } - - // Pick next gap with average value of config::kReadBytesPeriod. - ssize_t RandomPeriod() { - return rnd_.Uniform(2*config::kReadBytesPeriod); - } - - DBImpl* db_; - const Comparator* const user_comparator_; - Iterator* const iter_; - SequenceNumber const sequence_; - - Status status_; - std::string saved_key_; // == current key when direction_==kReverse - std::string saved_value_; // == current raw value when direction_==kReverse - Direction direction_; - bool valid_; - - Random rnd_; - ssize_t bytes_counter_; - - // No copying allowed - DBIter(const DBIter&); - void operator=(const DBIter&); -}; - -inline bool DBIter::ParseKey(ParsedInternalKey* ikey) { - Slice k = iter_->key(); - ssize_t n = k.size() + iter_->value().size(); - bytes_counter_ -= n; - while (bytes_counter_ < 0) { - bytes_counter_ += RandomPeriod(); - db_->RecordReadSample(k); - } - if (!ParseInternalKey(k, ikey)) { - status_ = Status::Corruption("corrupted internal key in DBIter"); - return false; - } else { - return true; - } -} - -void DBIter::Next() { - assert(valid_); - - // Temporarily use saved_key_ as storage for key to skip. - std::string* skip = &saved_key_; - - if (direction_ == kReverse) { // Switch directions? - direction_ = kForward; - // iter_ is pointing just before the entries for this->key(), - // so advance into the range of entries for this->key() and then - // use the normal skipping code below. - if (!iter_->Valid()) { - iter_->SeekToFirst(); - } else { - iter_->Next(); - } - if (!iter_->Valid()) { - valid_ = false; - saved_key_.clear(); - return; - } - // saved_key_ already contains the key to skip past. - } else { - // Store in saved_key_ the current key so we skip it below. - SaveKey(ExtractUserKey(iter_->key()), &saved_key_); - } - - FindNextUserEntry(true, &saved_key_); -} - -void DBIter::FindNextUserEntry(bool skipping, std::string* skip) { - // Loop until we hit an acceptable entry to yield - assert(iter_->Valid()); - assert(direction_ == kForward); - do { - ParsedInternalKey ikey; - if (ParseKey(&ikey) && ikey.sequence <= sequence_) { - switch (ikey.type) { - case kTypeDeletion: - // Arrange to skip all upcoming entries for this key since - // they are hidden by this deletion. - SaveKey(ikey.user_key, skip); - skipping = true; - break; - case kTypeValue: - if (skipping && - user_comparator_->Compare(ikey.user_key, *skip) <= 0) { - // Entry hidden - } else { - valid_ = true; - saved_key_.clear(); - return; - } - break; - } - } - iter_->Next(); - } while (iter_->Valid()); - saved_key_.clear(); - valid_ = false; -} - -void DBIter::Prev() { - assert(valid_); - - if (direction_ == kForward) { // Switch directions? - // iter_ is pointing at the current entry. Scan backwards until - // the key changes so we can use the normal reverse scanning code. - assert(iter_->Valid()); // Otherwise valid_ would have been false - SaveKey(ExtractUserKey(iter_->key()), &saved_key_); - while (true) { - iter_->Prev(); - if (!iter_->Valid()) { - valid_ = false; - saved_key_.clear(); - ClearSavedValue(); - return; - } - if (user_comparator_->Compare(ExtractUserKey(iter_->key()), - saved_key_) < 0) { - break; - } - } - direction_ = kReverse; - } - - FindPrevUserEntry(); -} - -void DBIter::FindPrevUserEntry() { - assert(direction_ == kReverse); - - ValueType value_type = kTypeDeletion; - if (iter_->Valid()) { - do { - ParsedInternalKey ikey; - if (ParseKey(&ikey) && ikey.sequence <= sequence_) { - if ((value_type != kTypeDeletion) && - user_comparator_->Compare(ikey.user_key, saved_key_) < 0) { - // We encountered a non-deleted value in entries for previous keys, - break; - } - value_type = ikey.type; - if (value_type == kTypeDeletion) { - saved_key_.clear(); - ClearSavedValue(); - } else { - Slice raw_value = iter_->value(); - if (saved_value_.capacity() > raw_value.size() + 1048576) { - std::string empty; - swap(empty, saved_value_); - } - SaveKey(ExtractUserKey(iter_->key()), &saved_key_); - saved_value_.assign(raw_value.data(), raw_value.size()); - } - } - iter_->Prev(); - } while (iter_->Valid()); - } - - if (value_type == kTypeDeletion) { - // End - valid_ = false; - saved_key_.clear(); - ClearSavedValue(); - direction_ = kForward; - } else { - valid_ = true; - } -} - -void DBIter::Seek(const Slice& target) { - direction_ = kForward; - ClearSavedValue(); - saved_key_.clear(); - AppendInternalKey( - &saved_key_, ParsedInternalKey(target, sequence_, kValueTypeForSeek)); - iter_->Seek(saved_key_); - if (iter_->Valid()) { - FindNextUserEntry(false, &saved_key_ /* temporary storage */); - } else { - valid_ = false; - } -} - -void DBIter::SeekToFirst() { - direction_ = kForward; - ClearSavedValue(); - iter_->SeekToFirst(); - if (iter_->Valid()) { - FindNextUserEntry(false, &saved_key_ /* temporary storage */); - } else { - valid_ = false; - } -} - -void DBIter::SeekToLast() { - direction_ = kReverse; - ClearSavedValue(); - iter_->SeekToLast(); - FindPrevUserEntry(); -} - -} // anonymous namespace - -Iterator* NewDBIterator( - DBImpl* db, - const Comparator* user_key_comparator, - Iterator* internal_iter, - SequenceNumber sequence, - uint32_t seed) { - return new DBIter(db, user_key_comparator, internal_iter, sequence, seed); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/db_iter.h b/clipper/HyperLevelDB/db/db_iter.h deleted file mode 100644 index 2abadd1..0000000 --- a/clipper/HyperLevelDB/db/db_iter.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_DB_ITER_H_ -#define STORAGE_LEVELDB_DB_DB_ITER_H_ - -#include -#include "hyperleveldb/db.h" -#include "db/dbformat.h" - -namespace leveldb { - -class DBImpl; - -// Return a new iterator that converts internal keys (yielded by -// "*internal_iter") that were live at the specified "sequence" number -// into appropriate user keys. -extern Iterator* NewDBIterator( - DBImpl* db, - const Comparator* user_key_comparator, - Iterator* internal_iter, - SequenceNumber sequence, - uint32_t seed); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_DB_ITER_H_ diff --git a/clipper/HyperLevelDB/db/db_test.cc b/clipper/HyperLevelDB/db/db_test.cc deleted file mode 100644 index b2f1bfa..0000000 --- a/clipper/HyperLevelDB/db/db_test.cc +++ /dev/null @@ -1,2228 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/db.h" -#include "hyperleveldb/filter_policy.h" -#include "db/db_impl.h" -#include "db/filename.h" -#include "db/version_set.h" -#include "db/write_batch_internal.h" -#include "hyperleveldb/cache.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/table.h" -#include "util/hash.h" -#include "util/logging.h" -#include "util/mutexlock.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -static std::string RandomString(Random* rnd, int len) { - std::string r; - test::RandomString(rnd, len, &r); - return r; -} - -namespace { -class AtomicCounter { - private: - port::Mutex mu_; - int count_; - public: - AtomicCounter() : count_(0) { } - void Increment() { - IncrementBy(1); - } - void IncrementBy(int count) { - MutexLock l(&mu_); - count_ += count; - } - int Read() { - MutexLock l(&mu_); - return count_; - } - void Reset() { - MutexLock l(&mu_); - count_ = 0; - } -}; - -void DelayMilliseconds(int millis) { - Env::Default()->SleepForMicroseconds(millis * 1000); -} -} - -// Special Env used to delay background operations -class SpecialEnv : public EnvWrapper { - public: - // sstable/log Sync() calls are blocked while this pointer is non-NULL. - port::AtomicPointer delay_data_sync_; - - // sstable/log Sync() calls return an error. - port::AtomicPointer data_sync_error_; - - // Simulate no-space errors while this pointer is non-NULL. - port::AtomicPointer no_space_; - - // Simulate non-writable file system while this pointer is non-NULL - port::AtomicPointer non_writable_; - - // Force sync of manifest files to fail while this pointer is non-NULL - port::AtomicPointer manifest_sync_error_; - - // Force write to manifest files to fail while this pointer is non-NULL - port::AtomicPointer manifest_write_error_; - - bool count_random_reads_; - AtomicCounter random_read_counter_; - - explicit SpecialEnv(Env* base) : EnvWrapper(base) { - delay_data_sync_.Release_Store(NULL); - data_sync_error_.Release_Store(NULL); - no_space_.Release_Store(NULL); - non_writable_.Release_Store(NULL); - count_random_reads_ = false; - manifest_sync_error_.Release_Store(NULL); - manifest_write_error_.Release_Store(NULL); - } - - Status NewWritableFile(const std::string& f, WritableFile** r) { - class DataFile : public WritableFile { - private: - SpecialEnv* env_; - WritableFile* base_; - - public: - DataFile(SpecialEnv* env, WritableFile* base) - : env_(env), - base_(base) { - } - ~DataFile() { delete base_; } - Status WriteAt(uint64_t offset, const Slice& data) { - if (env_->no_space_.Acquire_Load() != NULL) { - // Drop writes on the floor - return Status::OK(); - } else { - return base_->WriteAt(offset, data); - } - } - Status Append(const Slice& data) { - if (env_->no_space_.Acquire_Load() != NULL) { - // Drop writes on the floor - return Status::OK(); - } else { - return base_->Append(data); - } - } - Status Close() { return base_->Close(); } - Status Sync() { - if (env_->data_sync_error_.Acquire_Load() != NULL) { - return Status::IOError("simulated data sync error"); - } - while (env_->delay_data_sync_.Acquire_Load() != NULL) { - DelayMilliseconds(100); - } - return base_->Sync(); - } - }; - class ManifestFile : public WritableFile { - private: - SpecialEnv* env_; - WritableFile* base_; - public: - ManifestFile(SpecialEnv* env, WritableFile* b) : env_(env), base_(b) { } - ~ManifestFile() { delete base_; } - Status WriteAt(uint64_t offset, const Slice& data) { - if (env_->manifest_write_error_.Acquire_Load() != NULL) { - return Status::IOError("simulated writer error"); - } else { - return base_->WriteAt(offset, data); - } - } - Status Append(const Slice& data) { - if (env_->manifest_write_error_.Acquire_Load() != NULL) { - return Status::IOError("simulated writer error"); - } else { - return base_->Append(data); - } - } - Status Close() { return base_->Close(); } - Status Sync() { - if (env_->manifest_sync_error_.Acquire_Load() != NULL) { - return Status::IOError("simulated sync error"); - } else { - return base_->Sync(); - } - } - }; - - if (non_writable_.Acquire_Load() != NULL) { - return Status::IOError("simulated write error"); - } - - Status s = target()->NewWritableFile(f, r); - if (s.ok()) { - if (strstr(f.c_str(), ".ldb") != NULL || - strstr(f.c_str(), ".log") != NULL) { - *r = new DataFile(this, *r); - } else if (strstr(f.c_str(), "MANIFEST") != NULL) { - *r = new ManifestFile(this, *r); - } - } - return s; - } - - Status NewRandomAccessFile(const std::string& f, RandomAccessFile** r) { - class CountingFile : public RandomAccessFile { - private: - RandomAccessFile* target_; - AtomicCounter* counter_; - public: - CountingFile(RandomAccessFile* target, AtomicCounter* counter) - : target_(target), counter_(counter) { - } - virtual ~CountingFile() { delete target_; } - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const { - counter_->Increment(); - return target_->Read(offset, n, result, scratch); - } - }; - - Status s = target()->NewRandomAccessFile(f, r); - if (s.ok() && count_random_reads_) { - *r = new CountingFile(*r, &random_read_counter_); - } - return s; - } -}; - -class DBTest { - private: - const FilterPolicy* filter_policy_; - - // Sequence of option configurations to try - enum OptionConfig { - kDefault, - kFilter, - kUncompressed, - kEnd - }; - int option_config_; - - public: - std::string dbname_; - SpecialEnv* env_; - DB* db_; - - Options last_options_; - - DBTest() : option_config_(kDefault), - env_(new SpecialEnv(Env::Default())) { - filter_policy_ = NewBloomFilterPolicy(10); - dbname_ = test::TmpDir() + "/db_test"; - DestroyDB(dbname_, Options()); - db_ = NULL; - Reopen(); - } - - ~DBTest() { - delete db_; - DestroyDB(dbname_, Options()); - delete env_; - delete filter_policy_; - } - - // Switch to a fresh database with the next option configuration to - // test. Return false if there are no more configurations to test. - bool ChangeOptions() { - option_config_++; - if (option_config_ >= kEnd) { - return false; - } else { - DestroyAndReopen(); - return true; - } - } - - // Return the current option configuration. - Options CurrentOptions() { - Options options; - switch (option_config_) { - case kFilter: - options.filter_policy = filter_policy_; - break; - case kUncompressed: - options.compression = kNoCompression; - break; - default: - break; - } - return options; - } - - DBImpl* dbfull() { - return reinterpret_cast(db_); - } - - void Reopen(Options* options = NULL) { - ASSERT_OK(TryReopen(options)); - } - - void Close() { - delete db_; - db_ = NULL; - } - - void DestroyAndReopen(Options* options = NULL) { - delete db_; - db_ = NULL; - DestroyDB(dbname_, Options()); - ASSERT_OK(TryReopen(options)); - } - - Status TryReopen(Options* options) { - delete db_; - db_ = NULL; - Options opts; - if (options != NULL) { - opts = *options; - } else { - opts = CurrentOptions(); - opts.create_if_missing = true; - } - last_options_ = opts; - - return DB::Open(opts, dbname_, &db_); - } - - Status Put(const std::string& k, const std::string& v) { - return db_->Put(WriteOptions(), k, v); - } - - Status Delete(const std::string& k) { - return db_->Delete(WriteOptions(), k); - } - - std::string Get(const std::string& k, const Snapshot* snapshot = NULL) { - ReadOptions options; - options.snapshot = snapshot; - std::string result; - Status s = db_->Get(options, k, &result); - if (s.IsNotFound()) { - result = "NOT_FOUND"; - } else if (!s.ok()) { - result = s.ToString(); - } - return result; - } - - // Return a string that contains all key,value pairs in order, - // formatted like "(k1->v1)(k2->v2)". - std::string Contents() { - std::vector forward; - std::string result; - Iterator* iter = db_->NewIterator(ReadOptions()); - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - std::string s = IterStatus(iter); - result.push_back('('); - result.append(s); - result.push_back(')'); - forward.push_back(s); - } - - // Check reverse iteration results are the reverse of forward results - size_t matched = 0; - for (iter->SeekToLast(); iter->Valid(); iter->Prev()) { - ASSERT_LT(matched, forward.size()); - ASSERT_EQ(IterStatus(iter), forward[forward.size() - matched - 1]); - matched++; - } - ASSERT_EQ(matched, forward.size()); - - delete iter; - return result; - } - - std::string AllEntriesFor(const Slice& user_key) { - Iterator* iter = dbfull()->TEST_NewInternalIterator(); - InternalKey target(user_key, kMaxSequenceNumber, kTypeValue); - iter->Seek(target.Encode()); - std::string result; - if (!iter->status().ok()) { - result = iter->status().ToString(); - } else { - result = "[ "; - bool first = true; - while (iter->Valid()) { - ParsedInternalKey ikey; - if (!ParseInternalKey(iter->key(), &ikey)) { - result += "CORRUPTED"; - } else { - if (last_options_.comparator->Compare(ikey.user_key, user_key) != 0) { - break; - } - if (!first) { - result += ", "; - } - first = false; - switch (ikey.type) { - case kTypeValue: - result += iter->value().ToString(); - break; - case kTypeDeletion: - result += "DEL"; - break; - } - } - iter->Next(); - } - if (!first) { - result += " "; - } - result += "]"; - } - delete iter; - return result; - } - - int NumTableFilesAtLevel(int level) { - std::string property; - ASSERT_TRUE( - db_->GetProperty("leveldb.num-files-at-level" + NumberToString(level), - &property)); - return atoi(property.c_str()); - } - - int TotalTableFiles() { - int result = 0; - for (int level = 0; level < config::kNumLevels; level++) { - result += NumTableFilesAtLevel(level); - } - return result; - } - - // Return spread of files per level - std::string FilesPerLevel() { - std::string result; - int last_non_zero_offset = 0; - for (int level = 0; level < config::kNumLevels; level++) { - int f = NumTableFilesAtLevel(level); - char buf[100]; - snprintf(buf, sizeof(buf), "%s%d", (level ? "," : ""), f); - result += buf; - if (f > 0) { - last_non_zero_offset = result.size(); - } - } - result.resize(last_non_zero_offset); - return result; - } - - int CountFiles() { - std::vector files; - env_->GetChildren(dbname_, &files); - return static_cast(files.size()); - } - - uint64_t Size(const Slice& start, const Slice& limit) { - Range r(start, limit); - uint64_t size; - db_->GetApproximateSizes(&r, 1, &size); - return size; - } - - void Compact(const Slice& start, const Slice& limit) { - db_->CompactRange(&start, &limit); - } - - // Do n memtable compactions, each of which produces an sstable - // covering the range [small,large]. - void MakeTables(int n, const std::string& small, const std::string& large) { - for (int i = 0; i < n; i++) { - Put(small, "begin"); - Put(large, "end"); - dbfull()->TEST_CompactMemTable(); - } - } - - // Prevent pushing of new sstables into deeper levels by adding - // tables that cover a specified range to all levels. - void FillLevels(const std::string& smallest, const std::string& largest) { - MakeTables(config::kNumLevels, smallest, largest); - } - - void DumpFileCounts(const char* label) { - fprintf(stderr, "---\n%s:\n", label); - fprintf(stderr, "maxoverlap: %lld\n", - static_cast( - dbfull()->TEST_MaxNextLevelOverlappingBytes())); - for (int level = 0; level < config::kNumLevels; level++) { - int num = NumTableFilesAtLevel(level); - if (num > 0) { - fprintf(stderr, " level %3d : %d files\n", level, num); - } - } - } - - std::string DumpSSTableList() { - std::string property; - db_->GetProperty("leveldb.sstables", &property); - return property; - } - - std::string IterStatus(Iterator* iter) { - std::string result; - if (iter->Valid()) { - result = iter->key().ToString() + "->" + iter->value().ToString(); - } else { - result = "(invalid)"; - } - return result; - } - - bool DeleteAnSSTFile() { - std::vector filenames; - ASSERT_OK(env_->GetChildren(dbname_, &filenames)); - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type) && type == kTableFile) { - ASSERT_OK(env_->DeleteFile(SSTTableFileName(dbname_, number))); - return true; - } - } - return false; - } - - // Returns number of files renamed. - int RenameLDBToSST() { - std::vector filenames; - ASSERT_OK(env_->GetChildren(dbname_, &filenames)); - uint64_t number; - FileType type; - int files_renamed = 0; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type) && type == kTableFile) { - const std::string from = SSTTableFileName(dbname_, number); - const std::string to = TableFileName(dbname_, number); - ASSERT_OK(env_->RenameFile(from, to)); - files_renamed++; - } - } - return files_renamed; - } -}; - -TEST(DBTest, Empty) { - do { - ASSERT_TRUE(db_ != NULL); - ASSERT_EQ("NOT_FOUND", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, ReadWrite) { - do { - ASSERT_OK(Put("foo", "v1")); - ASSERT_EQ("v1", Get("foo")); - ASSERT_OK(Put("bar", "v2")); - ASSERT_OK(Put("foo", "v3")); - ASSERT_EQ("v3", Get("foo")); - ASSERT_EQ("v2", Get("bar")); - } while (ChangeOptions()); -} - -TEST(DBTest, PutDeleteGet) { - do { - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v1")); - ASSERT_EQ("v1", Get("foo")); - ASSERT_OK(db_->Put(WriteOptions(), "foo", "v2")); - ASSERT_EQ("v2", Get("foo")); - ASSERT_OK(db_->Delete(WriteOptions(), "foo")); - ASSERT_EQ("NOT_FOUND", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, GetFromImmutableLayer) { - do { - Options options = CurrentOptions(); - options.env = env_; - options.write_buffer_size = 100000; // Small write buffer - Reopen(&options); - - ASSERT_OK(Put("foo", "v1")); - ASSERT_EQ("v1", Get("foo")); - - env_->delay_data_sync_.Release_Store(env_); // Block sync calls - Put("k1", std::string(100000, 'x')); // Fill memtable - Put("k2", std::string(100000, 'y')); // Trigger compaction - ASSERT_EQ("v1", Get("foo")); - env_->delay_data_sync_.Release_Store(NULL); // Release sync calls - } while (ChangeOptions()); -} - -TEST(DBTest, GetFromVersions) { - do { - ASSERT_OK(Put("foo", "v1")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("v1", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, GetSnapshot) { - do { - // Try with both a short key and a long key - for (int i = 0; i < 2; i++) { - std::string key = (i == 0) ? std::string("foo") : std::string(200, 'x'); - ASSERT_OK(Put(key, "v1")); - const Snapshot* s1 = db_->GetSnapshot(); - ASSERT_OK(Put(key, "v2")); - ASSERT_EQ("v2", Get(key)); - ASSERT_EQ("v1", Get(key, s1)); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("v2", Get(key)); - ASSERT_EQ("v1", Get(key, s1)); - db_->ReleaseSnapshot(s1); - } - } while (ChangeOptions()); -} - -TEST(DBTest, GetLevel0Ordering) { - do { - // Check that we process level-0 files in correct order. The code - // below generates two level-0 files where the earlier one comes - // before the later one in the level-0 file list since the earlier - // one has a smaller "smallest" key. - ASSERT_OK(Put("bar", "b")); - ASSERT_OK(Put("foo", "v1")); - dbfull()->TEST_CompactMemTable(); - ASSERT_OK(Put("foo", "v2")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("v2", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, GetOrderedByLevels) { - do { - ASSERT_OK(Put("foo", "v1")); - Compact("a", "z"); - ASSERT_EQ("v1", Get("foo")); - ASSERT_OK(Put("foo", "v2")); - ASSERT_EQ("v2", Get("foo")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("v2", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, GetPicksCorrectFile) { - do { - // Arrange to have multiple files in a non-level-0 level. - ASSERT_OK(Put("a", "va")); - Compact("a", "b"); - ASSERT_OK(Put("x", "vx")); - Compact("x", "y"); - ASSERT_OK(Put("f", "vf")); - Compact("f", "g"); - ASSERT_EQ("va", Get("a")); - ASSERT_EQ("vf", Get("f")); - ASSERT_EQ("vx", Get("x")); - } while (ChangeOptions()); -} - -#if 0 -TEST(DBTest, GetEncountersEmptyLevel) { - do { - // Arrange for the following to happen: - // * sstable A in level 0 - // * nothing in level 1 - // * sstable B in level 2 - // Then do enough Get() calls to arrange for an automatic compaction - // of sstable A. A bug would cause the compaction to be marked as - // occuring at level 1 (instead of the correct level 0). - - // Step 1: First place sstables in levels 0 and 2 - int compaction_count = 0; - while (NumTableFilesAtLevel(0) == 0 || - NumTableFilesAtLevel(2) == 0) { - ASSERT_LE(compaction_count, 100) << "could not fill levels 0 and 2"; - compaction_count++; - Put("a", "begin"); - Put("z", "end"); - dbfull()->TEST_CompactMemTable(); - } - - // Step 2: clear level 1 if necessary. - dbfull()->TEST_CompactRange(1, NULL, NULL); - ASSERT_EQ(NumTableFilesAtLevel(0), 1); - ASSERT_EQ(NumTableFilesAtLevel(1), 0); - ASSERT_EQ(NumTableFilesAtLevel(2), 1); - - // Step 3: read a bunch of times - for (int i = 0; i < 1000; i++) { - ASSERT_EQ("NOT_FOUND", Get("missing")); - } - - // Step 4: Wait for compaction to finish - env_->SleepForMicroseconds(1000000); - - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - } while (ChangeOptions()); -} -#endif - -TEST(DBTest, IterEmpty) { - Iterator* iter = db_->NewIterator(ReadOptions()); - - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->Seek("foo"); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - delete iter; -} - -TEST(DBTest, IterSingle) { - ASSERT_OK(Put("a", "va")); - Iterator* iter = db_->NewIterator(ReadOptions()); - - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->Seek(""); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->Seek("a"); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->Seek("b"); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - delete iter; -} - -TEST(DBTest, IterMulti) { - ASSERT_OK(Put("a", "va")); - ASSERT_OK(Put("b", "vb")); - ASSERT_OK(Put("c", "vc")); - Iterator* iter = db_->NewIterator(ReadOptions()); - - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->Seek(""); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Seek("a"); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Seek("ax"); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Seek("b"); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Seek("z"); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - // Switch from reverse to forward - iter->SeekToLast(); - iter->Prev(); - iter->Prev(); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - - // Switch from forward to reverse - iter->SeekToFirst(); - iter->Next(); - iter->Next(); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - - // Make sure iter stays at snapshot - ASSERT_OK(Put("a", "va2")); - ASSERT_OK(Put("a2", "va3")); - ASSERT_OK(Put("b", "vb2")); - ASSERT_OK(Put("c", "vc2")); - ASSERT_OK(Delete("b")); - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "b->vb"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - delete iter; -} - -TEST(DBTest, IterSmallAndLargeMix) { - ASSERT_OK(Put("a", "va")); - ASSERT_OK(Put("b", std::string(100000, 'b'))); - ASSERT_OK(Put("c", "vc")); - ASSERT_OK(Put("d", std::string(100000, 'd'))); - ASSERT_OK(Put("e", std::string(100000, 'e'))); - - Iterator* iter = db_->NewIterator(ReadOptions()); - - iter->SeekToFirst(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "b->" + std::string(100000, 'b')); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "d->" + std::string(100000, 'd')); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "e->" + std::string(100000, 'e')); - iter->Next(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - iter->SeekToLast(); - ASSERT_EQ(IterStatus(iter), "e->" + std::string(100000, 'e')); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "d->" + std::string(100000, 'd')); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "b->" + std::string(100000, 'b')); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "a->va"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "(invalid)"); - - delete iter; -} - -TEST(DBTest, IterMultiWithDelete) { - do { - ASSERT_OK(Put("a", "va")); - ASSERT_OK(Put("b", "vb")); - ASSERT_OK(Put("c", "vc")); - ASSERT_OK(Delete("b")); - ASSERT_EQ("NOT_FOUND", Get("b")); - - Iterator* iter = db_->NewIterator(ReadOptions()); - iter->Seek("c"); - ASSERT_EQ(IterStatus(iter), "c->vc"); - iter->Prev(); - ASSERT_EQ(IterStatus(iter), "a->va"); - delete iter; - } while (ChangeOptions()); -} - -TEST(DBTest, Recover) { - do { - ASSERT_OK(Put("foo", "v1")); - ASSERT_OK(Put("baz", "v5")); - - Reopen(); - ASSERT_EQ("v1", Get("foo")); - - ASSERT_EQ("v1", Get("foo")); - ASSERT_EQ("v5", Get("baz")); - ASSERT_OK(Put("bar", "v2")); - ASSERT_OK(Put("foo", "v3")); - - Reopen(); - ASSERT_EQ("v3", Get("foo")); - ASSERT_OK(Put("foo", "v4")); - ASSERT_EQ("v4", Get("foo")); - ASSERT_EQ("v2", Get("bar")); - ASSERT_EQ("v5", Get("baz")); - } while (ChangeOptions()); -} - -TEST(DBTest, RecoveryWithEmptyLog) { - do { - ASSERT_OK(Put("foo", "v1")); - ASSERT_OK(Put("foo", "v2")); - Reopen(); - Reopen(); - ASSERT_OK(Put("foo", "v3")); - Reopen(); - ASSERT_EQ("v3", Get("foo")); - } while (ChangeOptions()); -} - -// Check that writes done during a memtable compaction are recovered -// if the database is shutdown during the memtable compaction. -TEST(DBTest, RecoverDuringMemtableCompaction) { - do { - Options options = CurrentOptions(); - options.env = env_; - options.write_buffer_size = 1000000; - Reopen(&options); - - // Trigger a long memtable compaction and reopen the database during it - ASSERT_OK(Put("foo", "v1")); // Goes to 1st log file - ASSERT_OK(Put("big1", std::string(10000000, 'x'))); // Fills memtable - ASSERT_OK(Put("big2", std::string(1000, 'y'))); // Triggers compaction - ASSERT_OK(Put("bar", "v2")); // Goes to new log file - - Reopen(&options); - ASSERT_EQ("v1", Get("foo")); - ASSERT_EQ("v2", Get("bar")); - ASSERT_EQ(std::string(10000000, 'x'), Get("big1")); - ASSERT_EQ(std::string(1000, 'y'), Get("big2")); - } while (ChangeOptions()); -} - -static std::string Key(int i) { - char buf[100]; - snprintf(buf, sizeof(buf), "key%06d", i); - return std::string(buf); -} - -TEST(DBTest, MinorCompactionsHappen) { - Options options = CurrentOptions(); - options.write_buffer_size = 10000; - Reopen(&options); - - const int N = 500; - - int starting_num_tables = TotalTableFiles(); - for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(i), Key(i) + std::string(1000, 'v'))); - } - int ending_num_tables = TotalTableFiles(); - ASSERT_GT(ending_num_tables, starting_num_tables); - - for (int i = 0; i < N; i++) { - ASSERT_EQ(Key(i) + std::string(1000, 'v'), Get(Key(i))); - } - - Reopen(); - - for (int i = 0; i < N; i++) { - ASSERT_EQ(Key(i) + std::string(1000, 'v'), Get(Key(i))); - } -} - -TEST(DBTest, RecoverWithLargeLog) { - { - Options options = CurrentOptions(); - Reopen(&options); - ASSERT_OK(Put("big1", std::string(200000, '1'))); - ASSERT_OK(Put("big2", std::string(200000, '2'))); - ASSERT_OK(Put("small3", std::string(10, '3'))); - ASSERT_OK(Put("small4", std::string(10, '4'))); - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - } - - // Make sure that if we re-open with a small write buffer size that - // we flush table files in the middle of a large log file. - Options options = CurrentOptions(); - options.write_buffer_size = 100000; - Reopen(&options); - ASSERT_EQ(NumTableFilesAtLevel(0), 3); - ASSERT_EQ(std::string(200000, '1'), Get("big1")); - ASSERT_EQ(std::string(200000, '2'), Get("big2")); - ASSERT_EQ(std::string(10, '3'), Get("small3")); - ASSERT_EQ(std::string(10, '4'), Get("small4")); - ASSERT_GT(NumTableFilesAtLevel(0), 1); -} - -TEST(DBTest, CompactionsGenerateMultipleFiles) { - Options options = CurrentOptions(); - options.write_buffer_size = 100000000; // Large write buffer - Reopen(&options); - - Random rnd(301); - - // Write 32MB (320 values, each 100K) - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - std::vector values; - for (int i = 0; i < 320; i++) { - values.push_back(RandomString(&rnd, 100000)); - ASSERT_OK(Put(Key(i), values[i])); - } - - // Reopening moves updates to level-0 - Reopen(&options); - dbfull()->TEST_CompactRange(0, NULL, NULL); - - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - ASSERT_GT(NumTableFilesAtLevel(1), 1); - for (int i = 0; i < 320; i++) { - ASSERT_EQ(Get(Key(i)), values[i]); - } -} - -#if 0 -// In HyperLevelDB, this test is useless because we have no "max files" cap. -TEST(DBTest, RepeatedWritesToSameKey) { - Options options = CurrentOptions(); - options.env = env_; - options.write_buffer_size = 100000; // Small write buffer - Reopen(&options); - - // We must have at most one file per level except for level-0, - // which may have up to kL0_StopWritesTrigger files. - const int kMaxFiles = config::kNumLevels + config::kL0_StopWritesTrigger; - - Random rnd(301); - std::string value = RandomString(&rnd, 2 * options.write_buffer_size); - for (int i = 0; i < 5 * kMaxFiles; i++) { - Put("key", value); - ASSERT_LE(TotalTableFiles(), kMaxFiles); - fprintf(stderr, "after %d: %d files\n", int(i+1), TotalTableFiles()); - } -} -#endif - -TEST(DBTest, SparseMerge) { - Options options = CurrentOptions(); - options.compression = kNoCompression; - Reopen(&options); - - FillLevels("A", "Z"); - - // Suppose there is: - // small amount of data with prefix A - // large amount of data with prefix B - // small amount of data with prefix C - // and that recent updates have made small changes to all three prefixes. - // Check that we do not do a compaction that merges all of B in one shot. - const std::string value(1000, 'x'); - Put("A", "va"); - // Write approximately 100MB of "B" values - for (int i = 0; i < 100000; i++) { - char key[100]; - snprintf(key, sizeof(key), "B%010d", i); - Put(key, value); - } - Put("C", "vc"); - dbfull()->TEST_CompactMemTable(); - dbfull()->TEST_CompactRange(0, NULL, NULL); - - // Make sparse update - Put("A", "va2"); - Put("B100", "bvalue2"); - Put("C", "vc2"); - dbfull()->TEST_CompactMemTable(); - - // this test used to test whether or not compactions would push as high as - // possible. - // Hint: we don't do that anymore. -} - -static bool Between(uint64_t val, uint64_t low, uint64_t high) { - bool result = (val >= low) && (val <= high); - if (!result) { - fprintf(stderr, "Value %llu is not in range [%llu, %llu]\n", - (unsigned long long)(val), - (unsigned long long)(low), - (unsigned long long)(high)); - } - return result; -} - -TEST(DBTest, ApproximateSizes) { - do { - Options options = CurrentOptions(); - options.write_buffer_size = 100000000; // Large write buffer - options.compression = kNoCompression; - DestroyAndReopen(); - - ASSERT_TRUE(Between(Size("", "xyz"), 0, 0)); - Reopen(&options); - ASSERT_TRUE(Between(Size("", "xyz"), 0, 0)); - - // Write 8MB (80 values, each 100K) - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - const int N = 80; - static const int S1 = 100000; - static const int S2 = 105000; // Allow some expansion from metadata - Random rnd(301); - for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(i), RandomString(&rnd, S1))); - } - - // 0 because GetApproximateSizes() does not account for memtable space - ASSERT_TRUE(Between(Size("", Key(50)), 0, 0)); - - // Check sizes across recovery by reopening a few times - for (int run = 0; run < 3; run++) { - Reopen(&options); - - for (int compact_start = 0; compact_start < N; compact_start += 10) { - for (int i = 0; i < N; i += 10) { - ASSERT_TRUE(Between(Size("", Key(i)), S1*i, S2*i)); - ASSERT_TRUE(Between(Size("", Key(i)+".suffix"), S1*(i+1), S2*(i+1))); - ASSERT_TRUE(Between(Size(Key(i), Key(i+10)), S1*10, S2*10)); - } - ASSERT_TRUE(Between(Size("", Key(50)), S1*50, S2*50)); - ASSERT_TRUE(Between(Size("", Key(50)+".suffix"), S1*50, S2*50)); - - std::string cstart_str = Key(compact_start); - std::string cend_str = Key(compact_start + 9); - Slice cstart = cstart_str; - Slice cend = cend_str; - dbfull()->TEST_CompactRange(0, &cstart, &cend); - } - - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - ASSERT_GT(NumTableFilesAtLevel(1), 0); - } - } while (ChangeOptions()); -} - -TEST(DBTest, ApproximateSizes_MixOfSmallAndLarge) { - do { - Options options = CurrentOptions(); - options.compression = kNoCompression; - Reopen(); - - Random rnd(301); - std::string big1 = RandomString(&rnd, 100000); - ASSERT_OK(Put(Key(0), RandomString(&rnd, 10000))); - ASSERT_OK(Put(Key(1), RandomString(&rnd, 10000))); - ASSERT_OK(Put(Key(2), big1)); - ASSERT_OK(Put(Key(3), RandomString(&rnd, 10000))); - ASSERT_OK(Put(Key(4), big1)); - ASSERT_OK(Put(Key(5), RandomString(&rnd, 10000))); - ASSERT_OK(Put(Key(6), RandomString(&rnd, 300000))); - ASSERT_OK(Put(Key(7), RandomString(&rnd, 10000))); - - // Check sizes across recovery by reopening a few times - for (int run = 0; run < 3; run++) { - Reopen(&options); - - ASSERT_TRUE(Between(Size("", Key(0)), 0, 0)); - ASSERT_TRUE(Between(Size("", Key(1)), 10000, 11000)); - ASSERT_TRUE(Between(Size("", Key(2)), 20000, 21000)); - ASSERT_TRUE(Between(Size("", Key(3)), 120000, 121000)); - ASSERT_TRUE(Between(Size("", Key(4)), 130000, 131000)); - ASSERT_TRUE(Between(Size("", Key(5)), 230000, 231000)); - ASSERT_TRUE(Between(Size("", Key(6)), 240000, 241000)); - ASSERT_TRUE(Between(Size("", Key(7)), 540000, 541000)); - ASSERT_TRUE(Between(Size("", Key(8)), 550000, 560000)); - - ASSERT_TRUE(Between(Size(Key(3), Key(5)), 110000, 111000)); - - dbfull()->TEST_CompactRange(0, NULL, NULL); - } - } while (ChangeOptions()); -} - -TEST(DBTest, IteratorPinsRef) { - Put("foo", "hello"); - - // Get iterator that will yield the current contents of the DB. - Iterator* iter = db_->NewIterator(ReadOptions()); - - // Write to force compactions - Put("foo", "newvalue1"); - for (int i = 0; i < 100; i++) { - ASSERT_OK(Put(Key(i), Key(i) + std::string(100000, 'v'))); // 100K values - } - Put("foo", "newvalue2"); - - iter->SeekToFirst(); - ASSERT_TRUE(iter->Valid()); - ASSERT_EQ("foo", iter->key().ToString()); - ASSERT_EQ("hello", iter->value().ToString()); - iter->Next(); - ASSERT_TRUE(!iter->Valid()); - delete iter; -} - -TEST(DBTest, Snapshot) { - do { - Put("foo", "v1"); - const Snapshot* s1 = db_->GetSnapshot(); - Put("foo", "v2"); - const Snapshot* s2 = db_->GetSnapshot(); - Put("foo", "v3"); - const Snapshot* s3 = db_->GetSnapshot(); - - Put("foo", "v4"); - ASSERT_EQ("v1", Get("foo", s1)); - ASSERT_EQ("v2", Get("foo", s2)); - ASSERT_EQ("v3", Get("foo", s3)); - ASSERT_EQ("v4", Get("foo")); - - db_->ReleaseSnapshot(s3); - ASSERT_EQ("v1", Get("foo", s1)); - ASSERT_EQ("v2", Get("foo", s2)); - ASSERT_EQ("v4", Get("foo")); - - db_->ReleaseSnapshot(s1); - ASSERT_EQ("v2", Get("foo", s2)); - ASSERT_EQ("v4", Get("foo")); - - db_->ReleaseSnapshot(s2); - ASSERT_EQ("v4", Get("foo")); - } while (ChangeOptions()); -} - -TEST(DBTest, HiddenValuesAreRemoved) { - do { - Random rnd(301); - FillLevels("a", "z"); - - std::string big = RandomString(&rnd, 50000); - Put("foo", big); - Put("pastfoo", "v"); - const Snapshot* snapshot = db_->GetSnapshot(); - Put("foo", "tiny"); - Put("pastfoo2", "v2"); // Advance sequence number one more - - ASSERT_OK(dbfull()->TEST_CompactMemTable()); - ASSERT_GT(NumTableFilesAtLevel(0), 0); - - ASSERT_EQ(big, Get("foo", snapshot)); - ASSERT_TRUE(Between(Size("", "pastfoo"), 50000, 60000)); - db_->ReleaseSnapshot(snapshot); - ASSERT_EQ(AllEntriesFor("foo"), "[ tiny, " + big + " ]"); - Slice x("x"); - dbfull()->TEST_CompactRange(0, NULL, &x); - ASSERT_EQ(AllEntriesFor("foo"), "[ tiny ]"); - ASSERT_EQ(NumTableFilesAtLevel(0), 0); - ASSERT_GE(NumTableFilesAtLevel(1), 1); - dbfull()->TEST_CompactRange(1, NULL, &x); - ASSERT_EQ(AllEntriesFor("foo"), "[ tiny ]"); - - ASSERT_TRUE(Between(Size("", "pastfoo"), 0, 1000)); - } while (ChangeOptions()); -} - -TEST(DBTest, DeletionMarkers1) { - Put("foo", "v1"); - ASSERT_OK(dbfull()->TEST_CompactMemTable()); - const int last = config::kMaxMemCompactLevel; - ASSERT_EQ(NumTableFilesAtLevel(last), 1); // foo => v1 is now in last level - - // Place a table at level last-1 to prevent merging with preceding mutation - Put("a", "begin"); - Put("z", "end"); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ(NumTableFilesAtLevel(last), 1); - ASSERT_EQ(NumTableFilesAtLevel(last-1), 1); - - Delete("foo"); - Put("foo", "v2"); - ASSERT_EQ(AllEntriesFor("foo"), "[ v2, DEL, v1 ]"); - ASSERT_OK(dbfull()->TEST_CompactMemTable()); // Moves to level last-2 - ASSERT_EQ(AllEntriesFor("foo"), "[ v2, DEL, v1 ]"); - Slice z("z"); - dbfull()->TEST_CompactRange(last-2, NULL, &z); - // DEL eliminated, but v1 remains because we aren't compacting that level - // (DEL can be eliminated because v2 hides v1). - ASSERT_EQ(AllEntriesFor("foo"), "[ v2, v1 ]"); - dbfull()->TEST_CompactRange(last-1, NULL, NULL); - // Merging last-1 w/ last, so we are the base level for "foo", so - // DEL is removed. (as is v1). - ASSERT_EQ(AllEntriesFor("foo"), "[ v2 ]"); -} - -TEST(DBTest, DeletionMarkers2) { - Put("foo", "v1"); - ASSERT_OK(dbfull()->TEST_CompactMemTable()); - const int last = config::kMaxMemCompactLevel; - ASSERT_EQ(NumTableFilesAtLevel(last), 1); // foo => v1 is now in last level - - // Place a table at level last-1 to prevent merging with preceding mutation - Put("a", "begin"); - Put("z", "end"); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ(NumTableFilesAtLevel(last), 1); - ASSERT_EQ(NumTableFilesAtLevel(last-1), 1); - - Delete("foo"); - ASSERT_EQ(AllEntriesFor("foo"), "[ DEL, v1 ]"); - ASSERT_OK(dbfull()->TEST_CompactMemTable()); // Moves to level last-2 - ASSERT_EQ(AllEntriesFor("foo"), "[ DEL, v1 ]"); - dbfull()->TEST_CompactRange(last-2, NULL, NULL); - // DEL kept: "last" file overlaps - ASSERT_EQ(AllEntriesFor("foo"), "[ DEL, v1 ]"); - dbfull()->TEST_CompactRange(last-1, NULL, NULL); - // Merging last-1 w/ last, so we are the base level for "foo", so - // DEL is removed. (as is v1). - ASSERT_EQ(AllEntriesFor("foo"), "[ ]"); -} - -TEST(DBTest, OverlapInLevel0) { - do { - ASSERT_EQ(config::kMaxMemCompactLevel, 2) << "Fix test to match config"; - - // Fill levels 1 and 2 to disable the pushing of new memtables to levels > 0. - ASSERT_OK(Put("100", "v100")); - ASSERT_OK(Put("999", "v999")); - dbfull()->TEST_CompactMemTable(); - ASSERT_OK(Delete("100")); - ASSERT_OK(Delete("999")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("0,1,1", FilesPerLevel()); - - // Make files spanning the following ranges in level-0: - // files[0] 200 .. 900 - // files[1] 300 .. 500 - // Note that files are sorted by smallest key. - ASSERT_OK(Put("300", "v300")); - ASSERT_OK(Put("500", "v500")); - dbfull()->TEST_CompactMemTable(); - ASSERT_OK(Put("200", "v200")); - ASSERT_OK(Put("600", "v600")); - ASSERT_OK(Put("900", "v900")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("2,1,1", FilesPerLevel()); - - // Compact away the placeholder files we created initially - dbfull()->TEST_CompactRange(1, NULL, NULL); - dbfull()->TEST_CompactRange(2, NULL, NULL); - ASSERT_EQ("2", FilesPerLevel()); - - // Do a memtable compaction. Before bug-fix, the compaction would - // not detect the overlap with level-0 files and would incorrectly place - // the deletion in a deeper level. - ASSERT_OK(Delete("600")); - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("3", FilesPerLevel()); - ASSERT_EQ("NOT_FOUND", Get("600")); - } while (ChangeOptions()); -} - -TEST(DBTest, L0_CompactionBug_Issue44_a) { - Reopen(); - ASSERT_OK(Put("b", "v")); - Reopen(); - ASSERT_OK(Delete("b")); - ASSERT_OK(Delete("a")); - Reopen(); - ASSERT_OK(Delete("a")); - Reopen(); - ASSERT_OK(Put("a", "v")); - Reopen(); - Reopen(); - ASSERT_EQ("(a->v)", Contents()); - DelayMilliseconds(1000); // Wait for compaction to finish - ASSERT_EQ("(a->v)", Contents()); -} - -TEST(DBTest, L0_CompactionBug_Issue44_b) { - Reopen(); - Put("",""); - Reopen(); - Delete("e"); - Put("",""); - Reopen(); - Put("c", "cv"); - Reopen(); - Put("",""); - Reopen(); - Put("",""); - DelayMilliseconds(1000); // Wait for compaction to finish - Reopen(); - Put("d","dv"); - Reopen(); - Put("",""); - Reopen(); - Delete("d"); - Delete("b"); - Reopen(); - ASSERT_EQ("(->)(c->cv)", Contents()); - DelayMilliseconds(1000); // Wait for compaction to finish - ASSERT_EQ("(->)(c->cv)", Contents()); -} - -TEST(DBTest, ComparatorCheck) { - class NewComparator : public Comparator { - public: - virtual const char* Name() const { return "leveldb.NewComparator"; } - virtual int Compare(const Slice& a, const Slice& b) const { - return BytewiseComparator()->Compare(a, b); - } - virtual void FindShortestSeparator(std::string* s, const Slice& l) const { - BytewiseComparator()->FindShortestSeparator(s, l); - } - virtual void FindShortSuccessor(std::string* key) const { - BytewiseComparator()->FindShortSuccessor(key); - } - }; - NewComparator cmp; - Options new_options = CurrentOptions(); - new_options.comparator = &cmp; - Status s = TryReopen(&new_options); - ASSERT_TRUE(!s.ok()); - ASSERT_TRUE(s.ToString().find("comparator") != std::string::npos) - << s.ToString(); -} - -TEST(DBTest, CustomComparator) { - class NumberComparator : public Comparator { - public: - virtual const char* Name() const { return "test.NumberComparator"; } - virtual int Compare(const Slice& a, const Slice& b) const { - return ToNumber(a) - ToNumber(b); - } - virtual void FindShortestSeparator(std::string* s, const Slice& l) const { - ToNumber(*s); // Check format - ToNumber(l); // Check format - } - virtual void FindShortSuccessor(std::string* key) const { - ToNumber(*key); // Check format - } - private: - static int ToNumber(const Slice& x) { - // Check that there are no extra characters. - ASSERT_TRUE(x.size() >= 2 && x[0] == '[' && x[x.size()-1] == ']') - << EscapeString(x); - int val; - char ignored; - ASSERT_TRUE(sscanf(x.ToString().c_str(), "[%i]%c", &val, &ignored) == 1) - << EscapeString(x); - return val; - } - }; - NumberComparator cmp; - Options new_options = CurrentOptions(); - new_options.create_if_missing = true; - new_options.comparator = &cmp; - new_options.filter_policy = NULL; // Cannot use bloom filters - new_options.write_buffer_size = 1000; // Compact more often - DestroyAndReopen(&new_options); - ASSERT_OK(Put("[10]", "ten")); - ASSERT_OK(Put("[0x14]", "twenty")); - for (int i = 0; i < 2; i++) { - ASSERT_EQ("ten", Get("[10]")); - ASSERT_EQ("ten", Get("[0xa]")); - ASSERT_EQ("twenty", Get("[20]")); - ASSERT_EQ("twenty", Get("[0x14]")); - ASSERT_EQ("NOT_FOUND", Get("[15]")); - ASSERT_EQ("NOT_FOUND", Get("[0xf]")); - Compact("[0]", "[9999]"); - } - - for (int run = 0; run < 2; run++) { - for (int i = 0; i < 1000; i++) { - char buf[100]; - snprintf(buf, sizeof(buf), "[%d]", i*10); - ASSERT_OK(Put(buf, buf)); - } - Compact("[0]", "[1000000]"); - } -} - -TEST(DBTest, ManualCompaction) { - ASSERT_EQ(config::kMaxMemCompactLevel, 2) - << "Need to update this test to match kMaxMemCompactLevel"; - - MakeTables(3, "p", "q"); - ASSERT_EQ("1,1,1", FilesPerLevel()); - - // Compaction range falls before files - Compact("", "c"); - ASSERT_EQ("1,1,1", FilesPerLevel()); - - // Compaction range falls after files - Compact("r", "z"); - ASSERT_EQ("1,1,1", FilesPerLevel()); - - // Compaction range overlaps files - Compact("p1", "p9"); - ASSERT_EQ("0,0,1", FilesPerLevel()); - - // Populate a different range - MakeTables(3, "c", "e"); - ASSERT_EQ("1,1,2", FilesPerLevel()); - - // Compact just the new range - Compact("b", "f"); - ASSERT_EQ("0,0,2", FilesPerLevel()); - - // Compact all - MakeTables(1, "a", "z"); - ASSERT_EQ("0,1,2", FilesPerLevel()); - db_->CompactRange(NULL, NULL); - ASSERT_EQ("0,0,1", FilesPerLevel()); -} - -TEST(DBTest, DBOpen_Options) { - std::string dbname = test::TmpDir() + "/db_options_test"; - DestroyDB(dbname, Options()); - - // Does not exist, and create_if_missing == false: error - DB* db = NULL; - Options opts; - opts.create_if_missing = false; - Status s = DB::Open(opts, dbname, &db); - ASSERT_TRUE(strstr(s.ToString().c_str(), "does not exist") != NULL); - ASSERT_TRUE(db == NULL); - - // Does not exist, and create_if_missing == true: OK - opts.create_if_missing = true; - s = DB::Open(opts, dbname, &db); - ASSERT_OK(s); - ASSERT_TRUE(db != NULL); - - delete db; - db = NULL; - - // Does exist, and error_if_exists == true: error - opts.create_if_missing = false; - opts.error_if_exists = true; - s = DB::Open(opts, dbname, &db); - ASSERT_TRUE(strstr(s.ToString().c_str(), "exists") != NULL); - ASSERT_TRUE(db == NULL); - - // Does exist, and error_if_exists == false: OK - opts.create_if_missing = true; - opts.error_if_exists = false; - s = DB::Open(opts, dbname, &db); - ASSERT_OK(s); - ASSERT_TRUE(db != NULL); - - delete db; - db = NULL; -} - -TEST(DBTest, Locking) { - DB* db2 = NULL; - Status s = DB::Open(CurrentOptions(), dbname_, &db2); - ASSERT_TRUE(!s.ok()) << "Locking did not prevent re-opening db"; -} - -// Check that number of files does not grow when we are out of space -TEST(DBTest, NoSpace) { - Options options = CurrentOptions(); - options.env = env_; - Reopen(&options); - - ASSERT_OK(Put("foo", "v1")); - ASSERT_EQ("v1", Get("foo")); - Compact("a", "z"); - const int num_files = CountFiles(); - env_->no_space_.Release_Store(env_); // Force out-of-space errors - for (int i = 0; i < 10; i++) { - for (int level = 0; level < config::kNumLevels-1; level++) { - dbfull()->TEST_CompactRange(level, NULL, NULL); - } - } - env_->no_space_.Release_Store(NULL); - ASSERT_LT(CountFiles(), num_files + 3); -} - -TEST(DBTest, NonWritableFileSystem) { - Options options = CurrentOptions(); - options.write_buffer_size = 1000; - options.env = env_; - Reopen(&options); - ASSERT_OK(Put("foo", "v1")); - env_->non_writable_.Release_Store(env_); // Force errors for new files - std::string big(100000, 'x'); - int errors = 0; - for (int i = 0; i < 20; i++) { - fprintf(stderr, "iter %d; errors %d\n", i, errors); - if (!Put("foo", big).ok()) { - errors++; - DelayMilliseconds(100); - } - } - ASSERT_GT(errors, 0); - env_->non_writable_.Release_Store(NULL); -} - -TEST(DBTest, WriteSyncError) { - // Check that log sync errors cause the DB to disallow future writes. - - // (a) Cause log sync calls to fail - Options options = CurrentOptions(); - options.env = env_; - Reopen(&options); - env_->data_sync_error_.Release_Store(env_); - - // (b) Normal write should succeed - WriteOptions w; - ASSERT_OK(db_->Put(w, "k1", "v1")); - ASSERT_EQ("v1", Get("k1")); - - // (c) Do a sync write; should fail - w.sync = true; - ASSERT_TRUE(!db_->Put(w, "k2", "v2").ok()); - ASSERT_EQ("v1", Get("k1")); - ASSERT_EQ("NOT_FOUND", Get("k2")); - - // (d) make sync behave normally - env_->data_sync_error_.Release_Store(NULL); - - // (e) Do a non-sync write; should fail - w.sync = false; - ASSERT_TRUE(!db_->Put(w, "k3", "v3").ok()); - ASSERT_EQ("v1", Get("k1")); - ASSERT_EQ("NOT_FOUND", Get("k2")); - ASSERT_EQ("NOT_FOUND", Get("k3")); -} - -TEST(DBTest, ManifestWriteError) { - // Test for the following problem: - // (a) Compaction produces file F - // (b) Log record containing F is written to MANIFEST file, but Sync() fails - // (c) GC deletes F - // (d) After reopening DB, reads fail since deleted F is named in log record - - // We iterate twice. In the second iteration, everything is the - // same except the log record never makes it to the MANIFEST file. - for (int iter = 0; iter < 2; iter++) { - port::AtomicPointer* error_type = (iter == 0) - ? &env_->manifest_sync_error_ - : &env_->manifest_write_error_; - - // Insert foo=>bar mapping - Options options = CurrentOptions(); - options.env = env_; - options.create_if_missing = true; - options.error_if_exists = false; - DestroyAndReopen(&options); - ASSERT_OK(Put("foo", "bar")); - ASSERT_EQ("bar", Get("foo")); - - // Memtable compaction (will succeed) - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("bar", Get("foo")); - const int last = config::kMaxMemCompactLevel; - ASSERT_EQ(NumTableFilesAtLevel(last), 1); // foo=>bar is now in last level - - // Merging compaction (will fail) - error_type->Release_Store(env_); - dbfull()->TEST_CompactRange(last, NULL, NULL); // Should fail - ASSERT_EQ("bar", Get("foo")); - - // Recovery: should not lose data - error_type->Release_Store(NULL); - Reopen(&options); - ASSERT_EQ("bar", Get("foo")); - } -} - -TEST(DBTest, MissingSSTFile) { - ASSERT_OK(Put("foo", "bar")); - ASSERT_EQ("bar", Get("foo")); - - // Dump the memtable to disk. - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("bar", Get("foo")); - - Close(); - ASSERT_TRUE(DeleteAnSSTFile()); - Options options = CurrentOptions(); - options.paranoid_checks = true; - Status s = TryReopen(&options); - ASSERT_TRUE(!s.ok()); - ASSERT_TRUE(s.ToString().find("issing") != std::string::npos) - << s.ToString(); -} - -TEST(DBTest, StillReadSST) { - ASSERT_OK(Put("foo", "bar")); - ASSERT_EQ("bar", Get("foo")); - - // Dump the memtable to disk. - dbfull()->TEST_CompactMemTable(); - ASSERT_EQ("bar", Get("foo")); - Close(); - ASSERT_GT(RenameLDBToSST(), 0); - Options options = CurrentOptions(); - options.paranoid_checks = true; - Status s = TryReopen(&options); - ASSERT_TRUE(s.ok()); - ASSERT_EQ("bar", Get("foo")); -} - -TEST(DBTest, FilesDeletedAfterCompaction) { - ASSERT_OK(Put("foo", "v2")); - Compact("a", "z"); - const int num_files = CountFiles(); - for (int i = 0; i < 10; i++) { - ASSERT_OK(Put("foo", "v2")); - Compact("a", "z"); - } - ASSERT_EQ(CountFiles(), num_files); -} - -TEST(DBTest, BloomFilter) { - env_->count_random_reads_ = true; - Options options = CurrentOptions(); - options.env = env_; - options.block_cache = NewLRUCache(0); // Prevent cache hits - options.filter_policy = NewBloomFilterPolicy(10); - Reopen(&options); - - // Populate multiple layers - const int N = 10000; - for (int i = 0; i < N; i++) { - ASSERT_OK(Put(Key(i), Key(i))); - } - Compact("a", "z"); - for (int i = 0; i < N; i += 100) { - ASSERT_OK(Put(Key(i), Key(i))); - } - dbfull()->TEST_CompactMemTable(); - - // Prevent auto compactions triggered by seeks - env_->delay_data_sync_.Release_Store(env_); - - // Lookup present keys. Should rarely read from small sstable. - env_->random_read_counter_.Reset(); - for (int i = 0; i < N; i++) { - ASSERT_EQ(Key(i), Get(Key(i))); - } - int reads = env_->random_read_counter_.Read(); - fprintf(stderr, "%d present => %d reads\n", N, reads); - ASSERT_GE(reads, N); - ASSERT_LE(reads, N + 2*N/100); - - // Lookup present keys. Should rarely read from either sstable. - env_->random_read_counter_.Reset(); - for (int i = 0; i < N; i++) { - ASSERT_EQ("NOT_FOUND", Get(Key(i) + ".missing")); - } - reads = env_->random_read_counter_.Read(); - fprintf(stderr, "%d missing => %d reads\n", N, reads); - ASSERT_LE(reads, 3*N/100); - - env_->delay_data_sync_.Release_Store(NULL); - Close(); - delete options.block_cache; - delete options.filter_policy; -} - -// Multi-threaded test: -namespace { - -static const int kNumThreads = 4; -static const int kTestSeconds = 10; -static const int kNumKeys = 1000; - -struct MTState { - DBTest* test; - port::AtomicPointer stop; - port::AtomicPointer counter[kNumThreads]; - port::AtomicPointer thread_done[kNumThreads]; -}; - -struct MTThread { - MTState* state; - int id; -}; - -static void MTThreadBody(void* arg) { - MTThread* t = reinterpret_cast(arg); - int id = t->id; - DB* db = t->state->test->db_; - uintptr_t counter = 0; - fprintf(stderr, "... starting thread %d\n", id); - Random rnd(1000 + id); - std::string value; - char valbuf[1500]; - while (t->state->stop.Acquire_Load() == NULL) { - t->state->counter[id].Release_Store(reinterpret_cast(counter)); - - int key = rnd.Uniform(kNumKeys); - char keybuf[20]; - snprintf(keybuf, sizeof(keybuf), "%016d", key); - - if (rnd.OneIn(2)) { - // Write values of the form . - // We add some padding for force compactions. - snprintf(valbuf, sizeof(valbuf), "%d.%d.%-1000d", - key, id, static_cast(counter)); - ASSERT_OK(db->Put(WriteOptions(), Slice(keybuf), Slice(valbuf))); - } else { - // Read a value and verify that it matches the pattern written above. - Status s = db->Get(ReadOptions(), Slice(keybuf), &value); - if (s.IsNotFound()) { - // Key has not yet been written - } else { - // Check that the writer thread counter is >= the counter in the value - ASSERT_OK(s); - int k, w, c; - ASSERT_EQ(3, sscanf(value.c_str(), "%d.%d.%d", &k, &w, &c)) << value; - ASSERT_EQ(k, key); - ASSERT_GE(w, 0); - ASSERT_LT(w, kNumThreads); - ASSERT_LE(static_cast(c), reinterpret_cast( - t->state->counter[w].Acquire_Load())); - } - } - counter++; - } - t->state->thread_done[id].Release_Store(t); - fprintf(stderr, "... stopping thread %d after %d ops\n", id, int(counter)); -} - -} // namespace - -TEST(DBTest, MultiThreaded) { - do { - // Initialize state - MTState mt; - mt.test = this; - mt.stop.Release_Store(0); - for (int id = 0; id < kNumThreads; id++) { - mt.counter[id].Release_Store(0); - mt.thread_done[id].Release_Store(0); - } - - // Start threads - MTThread thread[kNumThreads]; - for (int id = 0; id < kNumThreads; id++) { - thread[id].state = &mt; - thread[id].id = id; - env_->StartThread(MTThreadBody, &thread[id]); - } - - // Let them run for a while - DelayMilliseconds(kTestSeconds * 1000); - - // Stop the threads and wait for them to finish - mt.stop.Release_Store(&mt); - for (int id = 0; id < kNumThreads; id++) { - while (mt.thread_done[id].Acquire_Load() == NULL) { - DelayMilliseconds(100); - } - } - } while (ChangeOptions()); -} - -namespace { -typedef std::map KVMap; -} - -class ModelDB: public DB { - public: - class ModelSnapshot : public Snapshot { - public: - KVMap map_; - }; - - explicit ModelDB(const Options& options): options_(options) { } - ~ModelDB() { } - virtual Status Put(const WriteOptions& o, const Slice& k, const Slice& v) { - return DB::Put(o, k, v); - } - virtual Status Delete(const WriteOptions& o, const Slice& key) { - return DB::Delete(o, key); - } - virtual Status Get(const ReadOptions& options, - const Slice& key, std::string* value) { - assert(false); // Not implemented - return Status::NotFound(key); - } - virtual Iterator* NewIterator(const ReadOptions& options) { - if (options.snapshot == NULL) { - KVMap* saved = new KVMap; - *saved = map_; - return new ModelIter(saved, true); - } else { - const KVMap* snapshot_state = - &(reinterpret_cast(options.snapshot)->map_); - return new ModelIter(snapshot_state, false); - } - } - virtual void GetReplayTimestamp(std::string* timestamp) { - } - virtual void AllowGarbageCollectBeforeTimestamp(const std::string& timestamp) { - } - virtual bool ValidateTimestamp(const std::string&) { - return false; - } - virtual int CompareTimestamps(const std::string&, const std::string&) { - return 0; - } - virtual Status GetReplayIterator(const std::string& timestamp, - ReplayIterator** iter) { - *iter = NULL; - return Status::OK(); - } - virtual void ReleaseReplayIterator(ReplayIterator* iter) { - } - virtual const Snapshot* GetSnapshot() { - ModelSnapshot* snapshot = new ModelSnapshot; - snapshot->map_ = map_; - return snapshot; - } - - virtual void ReleaseSnapshot(const Snapshot* snapshot) { - delete reinterpret_cast(snapshot); - } - virtual Status Write(const WriteOptions& options, WriteBatch* batch) { - class Handler : public WriteBatch::Handler { - public: - KVMap* map_; - virtual void Put(const Slice& key, const Slice& value) { - (*map_)[key.ToString()] = value.ToString(); - } - virtual void Delete(const Slice& key) { - map_->erase(key.ToString()); - } - }; - Handler handler; - handler.map_ = &map_; - return batch->Iterate(&handler); - } - - virtual bool GetProperty(const Slice& property, std::string* value) { - return false; - } - virtual void GetApproximateSizes(const Range* r, int n, uint64_t* sizes) { - for (int i = 0; i < n; i++) { - sizes[i] = 0; - } - } - virtual void CompactRange(const Slice* start, const Slice* end) { - } - virtual Status LiveBackup(const Slice& name) { - } - - private: - class ModelIter: public Iterator { - public: - ModelIter(const KVMap* map, bool owned) - : map_(map), owned_(owned), iter_(map_->end()) { - } - ~ModelIter() { - if (owned_) delete map_; - } - virtual bool Valid() const { return iter_ != map_->end(); } - virtual void SeekToFirst() { iter_ = map_->begin(); } - virtual void SeekToLast() { - if (map_->empty()) { - iter_ = map_->end(); - } else { - iter_ = map_->find(map_->rbegin()->first); - } - } - virtual void Seek(const Slice& k) { - iter_ = map_->lower_bound(k.ToString()); - } - virtual void Next() { ++iter_; } - virtual void Prev() { --iter_; } - virtual Slice key() const { return iter_->first; } - virtual Slice value() const { return iter_->second; } - virtual Status status() const { return Status::OK(); } - private: - const KVMap* const map_; - const bool owned_; // Do we own map_ - KVMap::const_iterator iter_; - }; - const Options options_; - KVMap map_; -}; - -static std::string RandomKey(Random* rnd) { - int len = (rnd->OneIn(3) - ? 1 // Short sometimes to encourage collisions - : (rnd->OneIn(100) ? rnd->Skewed(10) : rnd->Uniform(10))); - return test::RandomKey(rnd, len); -} - -static bool CompareIterators(int step, - DB* model, - DB* db, - const Snapshot* model_snap, - const Snapshot* db_snap) { - ReadOptions options; - options.snapshot = model_snap; - Iterator* miter = model->NewIterator(options); - options.snapshot = db_snap; - Iterator* dbiter = db->NewIterator(options); - bool ok = true; - int count = 0; - for (miter->SeekToFirst(), dbiter->SeekToFirst(); - ok && miter->Valid() && dbiter->Valid(); - miter->Next(), dbiter->Next()) { - count++; - if (miter->key().compare(dbiter->key()) != 0) { - fprintf(stderr, "step %d: Key mismatch: '%s' vs. '%s'\n", - step, - EscapeString(miter->key()).c_str(), - EscapeString(dbiter->key()).c_str()); - ok = false; - break; - } - - if (miter->value().compare(dbiter->value()) != 0) { - fprintf(stderr, "step %d: Value mismatch for key '%s': '%s' vs. '%s'\n", - step, - EscapeString(miter->key()).c_str(), - EscapeString(miter->value()).c_str(), - EscapeString(miter->value()).c_str()); - ok = false; - } - } - - if (ok) { - if (miter->Valid() != dbiter->Valid()) { - fprintf(stderr, "step %d: Mismatch at end of iterators: %d vs. %d\n", - step, miter->Valid(), dbiter->Valid()); - ok = false; - } - } - fprintf(stderr, "%d entries compared: ok=%d\n", count, ok); - delete miter; - delete dbiter; - return ok; -} - -TEST(DBTest, Randomized) { - Random rnd(test::RandomSeed()); - do { - ModelDB model(CurrentOptions()); - const int N = 10000; - const Snapshot* model_snap = NULL; - const Snapshot* db_snap = NULL; - std::string k, v; - for (int step = 0; step < N; step++) { - if (step % 100 == 0) { - fprintf(stderr, "Step %d of %d\n", step, N); - } - // TODO(sanjay): Test Get() works - int p = rnd.Uniform(100); - if (p < 45) { // Put - k = RandomKey(&rnd); - v = RandomString(&rnd, - rnd.OneIn(20) - ? 100 + rnd.Uniform(100) - : rnd.Uniform(8)); - ASSERT_OK(model.Put(WriteOptions(), k, v)); - ASSERT_OK(db_->Put(WriteOptions(), k, v)); - - } else if (p < 90) { // Delete - k = RandomKey(&rnd); - ASSERT_OK(model.Delete(WriteOptions(), k)); - ASSERT_OK(db_->Delete(WriteOptions(), k)); - - - } else { // Multi-element batch - WriteBatch b; - const int num = rnd.Uniform(8); - for (int i = 0; i < num; i++) { - if (i == 0 || !rnd.OneIn(10)) { - k = RandomKey(&rnd); - } else { - // Periodically re-use the same key from the previous iter, so - // we have multiple entries in the write batch for the same key - } - if (rnd.OneIn(2)) { - v = RandomString(&rnd, rnd.Uniform(10)); - b.Put(k, v); - } else { - b.Delete(k); - } - } - ASSERT_OK(model.Write(WriteOptions(), &b)); - ASSERT_OK(db_->Write(WriteOptions(), &b)); - } - - if ((step % 100) == 0) { - ASSERT_TRUE(CompareIterators(step, &model, db_, NULL, NULL)); - ASSERT_TRUE(CompareIterators(step, &model, db_, model_snap, db_snap)); - // Save a snapshot from each DB this time that we'll use next - // time we compare things, to make sure the current state is - // preserved with the snapshot - if (model_snap != NULL) model.ReleaseSnapshot(model_snap); - if (db_snap != NULL) db_->ReleaseSnapshot(db_snap); - - Reopen(); - ASSERT_TRUE(CompareIterators(step, &model, db_, NULL, NULL)); - - model_snap = model.GetSnapshot(); - db_snap = db_->GetSnapshot(); - } - } - if (model_snap != NULL) model.ReleaseSnapshot(model_snap); - if (db_snap != NULL) db_->ReleaseSnapshot(db_snap); - } while (ChangeOptions()); -} - -TEST(DBTest, Replay) { - std::string ts; - db_->GetReplayTimestamp(&ts); - ASSERT_OK(Put("key", "v0")); - ASSERT_OK(Put("key", "v1")); - ASSERT_OK(Put("key", "v2")); - ASSERT_OK(Put("key", "v3")); - ASSERT_OK(Put("key", "v4")); - ASSERT_OK(Put("key", "v5")); - ASSERT_OK(Put("key", "v6")); - ASSERT_OK(Put("key", "v7")); - ASSERT_OK(Put("key", "v8")); - ASSERT_OK(Put("key", "v9")); - - // get the iterator - ReplayIterator* iter = NULL; - ASSERT_OK(db_->GetReplayIterator(ts, &iter)); - - // Iterate over what was there to start with - ASSERT_TRUE(iter->Valid()); - ASSERT_TRUE(iter->HasValue()); - ASSERT_EQ("key", iter->key().ToString()); - ASSERT_EQ("v9", iter->value().ToString()); - iter->Next(); - // The implementation is allowed to return things twice. - // This is a case where it will. - ASSERT_TRUE(iter->Valid()); - ASSERT_TRUE(iter->HasValue()); - ASSERT_EQ("key", iter->key().ToString()); - ASSERT_EQ("v9", iter->value().ToString()); - iter->Next(); - // Now it's no longer valid. - ASSERT_TRUE(!iter->Valid()); - ASSERT_TRUE(!iter->Valid()); - - // Add another and iterate some more - ASSERT_OK(Put("key", "v10")); - ASSERT_TRUE(iter->Valid()); - ASSERT_TRUE(iter->HasValue()); - ASSERT_EQ("key", iter->key().ToString()); - ASSERT_EQ("v10", iter->value().ToString()); - iter->Next(); - ASSERT_TRUE(!iter->Valid()); - - // Dump the memtable - dbfull()->TEST_CompactMemTable(); - - // Write into the new MemTable and iterate some more - ASSERT_OK(Put("key", "v11")); - ASSERT_TRUE(iter->Valid()); - ASSERT_TRUE(iter->HasValue()); - ASSERT_EQ("key", iter->key().ToString()); - ASSERT_EQ("v11", iter->value().ToString()); - iter->Next(); - ASSERT_TRUE(!iter->Valid()); - - // What does it do on delete? - ASSERT_OK(Delete("key")); - ASSERT_TRUE(iter->Valid()); - ASSERT_TRUE(!iter->HasValue()); - ASSERT_EQ("key", iter->key().ToString()); - iter->Next(); - ASSERT_TRUE(!iter->Valid()); -} - -std::string MakeKey(unsigned int num) { - char buf[30]; - snprintf(buf, sizeof(buf), "%016u", num); - return std::string(buf); -} - -void BM_LogAndApply(int iters, int num_base_files) { - std::string dbname = test::TmpDir() + "/leveldb_test_benchmark"; - DestroyDB(dbname, Options()); - - DB* db = NULL; - Options opts; - opts.create_if_missing = true; - Status s = DB::Open(opts, dbname, &db); - ASSERT_OK(s); - ASSERT_TRUE(db != NULL); - - delete db; - db = NULL; - - Env* env = Env::Default(); - - port::Mutex mu; - port::CondVar cv(&mu); - bool wt; - MutexLock l(&mu); - - InternalKeyComparator cmp(BytewiseComparator()); - Options options; - VersionSet vset(dbname, &options, NULL, &cmp); - ASSERT_OK(vset.Recover()); - VersionEdit vbase; - uint64_t fnum = 1; - for (int i = 0; i < num_base_files; i++) { - InternalKey start(MakeKey(2*fnum), 1, kTypeValue); - InternalKey limit(MakeKey(2*fnum+1), 1, kTypeDeletion); - vbase.AddFile(2, fnum++, 1 /* file size */, start, limit); - } - ASSERT_OK(vset.LogAndApply(&vbase, &mu, &cv, &wt)); - - uint64_t start_micros = env->NowMicros(); - - for (int i = 0; i < iters; i++) { - VersionEdit vedit; - vedit.DeleteFile(2, fnum); - InternalKey start(MakeKey(2*fnum), 1, kTypeValue); - InternalKey limit(MakeKey(2*fnum+1), 1, kTypeDeletion); - vedit.AddFile(2, fnum++, 1 /* file size */, start, limit); - vset.LogAndApply(&vedit, &mu, &cv, &wt); - } - uint64_t stop_micros = env->NowMicros(); - unsigned int us = stop_micros - start_micros; - char buf[16]; - snprintf(buf, sizeof(buf), "%d", num_base_files); - fprintf(stderr, - "BM_LogAndApply/%-6s %8d iters : %9u us (%7.0f us / iter)\n", - buf, iters, us, ((float)us) / iters); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - if (argc > 1 && std::string(argv[1]) == "--benchmark") { - leveldb::BM_LogAndApply(1000, 1); - leveldb::BM_LogAndApply(1000, 100); - leveldb::BM_LogAndApply(1000, 10000); - leveldb::BM_LogAndApply(100, 100000); - return 0; - } - - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/db/dbformat.cc b/clipper/HyperLevelDB/db/dbformat.cc deleted file mode 100644 index 20a7ca4..0000000 --- a/clipper/HyperLevelDB/db/dbformat.cc +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include "db/dbformat.h" -#include "port/port.h" -#include "util/coding.h" - -namespace leveldb { - -static uint64_t PackSequenceAndType(uint64_t seq, ValueType t) { - assert(seq <= kMaxSequenceNumber); - assert(t <= kValueTypeForSeek); - return (seq << 8) | t; -} - -void AppendInternalKey(std::string* result, const ParsedInternalKey& key) { - result->append(key.user_key.data(), key.user_key.size()); - PutFixed64(result, PackSequenceAndType(key.sequence, key.type)); -} - -std::string ParsedInternalKey::DebugString() const { - char buf[50]; - snprintf(buf, sizeof(buf), "' @ %llu : %d", - (unsigned long long) sequence, - int(type)); - std::string result = "'"; - result += EscapeString(user_key.ToString()); - result += buf; - return result; -} - -std::string InternalKey::DebugString() const { - std::string result; - ParsedInternalKey parsed; - if (ParseInternalKey(rep_, &parsed)) { - result = parsed.DebugString(); - } else { - result = "(bad)"; - result.append(EscapeString(rep_)); - } - return result; -} - -const char* InternalKeyComparator::Name() const { - return "leveldb.InternalKeyComparator"; -} - -int InternalKeyComparator::Compare(const Slice& akey, const Slice& bkey) const { - // Order by: - // increasing user key (according to user-supplied comparator) - // decreasing sequence number - // decreasing type (though sequence# should be enough to disambiguate) - int r = user_comparator_->Compare(ExtractUserKey(akey), ExtractUserKey(bkey)); - if (r == 0) { - const uint64_t anum = DecodeFixed64(akey.data() + akey.size() - 8); - const uint64_t bnum = DecodeFixed64(bkey.data() + bkey.size() - 8); - if (anum > bnum) { - r = -1; - } else if (anum < bnum) { - r = +1; - } - } - return r; -} - -void InternalKeyComparator::FindShortestSeparator( - std::string* start, - const Slice& limit) const { - // Attempt to shorten the user portion of the key - Slice user_start = ExtractUserKey(*start); - Slice user_limit = ExtractUserKey(limit); - std::string tmp(user_start.data(), user_start.size()); - user_comparator_->FindShortestSeparator(&tmp, user_limit); - if (tmp.size() < user_start.size() && - user_comparator_->Compare(user_start, tmp) < 0) { - // User key has become shorter physically, but larger logically. - // Tack on the earliest possible number to the shortened user key. - PutFixed64(&tmp, PackSequenceAndType(kMaxSequenceNumber,kValueTypeForSeek)); - assert(this->Compare(*start, tmp) < 0); - assert(this->Compare(tmp, limit) < 0); - start->swap(tmp); - } -} - -void InternalKeyComparator::FindShortSuccessor(std::string* key) const { - Slice user_key = ExtractUserKey(*key); - std::string tmp(user_key.data(), user_key.size()); - user_comparator_->FindShortSuccessor(&tmp); - if (tmp.size() < user_key.size() && - user_comparator_->Compare(user_key, tmp) < 0) { - // User key has become shorter physically, but larger logically. - // Tack on the earliest possible number to the shortened user key. - PutFixed64(&tmp, PackSequenceAndType(kMaxSequenceNumber,kValueTypeForSeek)); - assert(this->Compare(*key, tmp) < 0); - key->swap(tmp); - } -} - -const char* InternalFilterPolicy::Name() const { - return user_policy_->Name(); -} - -void InternalFilterPolicy::CreateFilter(const Slice* keys, int n, - std::string* dst) const { - // We rely on the fact that the code in table.cc does not mind us - // adjusting keys[]. - Slice* mkey = const_cast(keys); - for (int i = 0; i < n; i++) { - mkey[i] = ExtractUserKey(keys[i]); - // TODO(sanjay): Suppress dups? - } - user_policy_->CreateFilter(keys, n, dst); -} - -bool InternalFilterPolicy::KeyMayMatch(const Slice& key, const Slice& f) const { - return user_policy_->KeyMayMatch(ExtractUserKey(key), f); -} - -LookupKey::LookupKey(const Slice& user_key, SequenceNumber s) { - size_t usize = user_key.size(); - size_t needed = usize + 13; // A conservative estimate - char* dst; - if (needed <= sizeof(space_)) { - dst = space_; - } else { - dst = new char[needed]; - } - start_ = dst; - dst = EncodeVarint32(dst, usize + 8); - kstart_ = dst; - memcpy(dst, user_key.data(), usize); - dst += usize; - EncodeFixed64(dst, PackSequenceAndType(s, kValueTypeForSeek)); - dst += 8; - end_ = dst; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/dbformat.h b/clipper/HyperLevelDB/db/dbformat.h deleted file mode 100644 index d347e3b..0000000 --- a/clipper/HyperLevelDB/db/dbformat.h +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_FORMAT_H_ -#define STORAGE_LEVELDB_DB_FORMAT_H_ - -#include -#include "hyperleveldb/comparator.h" -#include "hyperleveldb/db.h" -#include "hyperleveldb/filter_policy.h" -#include "hyperleveldb/slice.h" -#include "hyperleveldb/table_builder.h" -#include "util/coding.h" -#include "util/logging.h" - -namespace leveldb { - -// Grouping of constants. We may want to make some of these -// parameters set via options. -namespace config { -static const int kNumLevels = 7; - -// Level-0 compaction is started when we hit this many files. -static const int kL0_CompactionTrigger = 4; - -// Soft limit on number of level-0 files. We could slow down writes at this -// point, but don't. -static const int kL0_SlowdownWritesTrigger = 8; - -// Maximum number of level-0 files. We could stop writes at this point, but -// don't. -static const int kL0_StopWritesTrigger = 12; - -// Maximum level to which a new compacted memtable is pushed if it -// does not create overlap. We try to push to level 2 to avoid the -// relatively expensive level 0=>1 compactions and to avoid some -// expensive manifest file operations. We do not push all the way to -// the largest level since that can generate a lot of wasted disk -// space if the same key space is being repeatedly overwritten. -static const int kMaxMemCompactLevel = 2; - -// Approximate gap in bytes between samples of data read during iteration. -static const int kReadBytesPeriod = 1048576; - -} // namespace config - -class InternalKey; - -// Value types encoded as the last component of internal keys. -// DO NOT CHANGE THESE ENUM VALUES: they are embedded in the on-disk -// data structures. -enum ValueType { - kTypeDeletion = 0x0, - kTypeValue = 0x1 -}; -// kValueTypeForSeek defines the ValueType that should be passed when -// constructing a ParsedInternalKey object for seeking to a particular -// sequence number (since we sort sequence numbers in decreasing order -// and the value type is embedded as the low 8 bits in the sequence -// number in internal keys, we need to use the highest-numbered -// ValueType, not the lowest). -static const ValueType kValueTypeForSeek = kTypeValue; - -typedef uint64_t SequenceNumber; - -// We leave eight bits empty at the bottom so a type and sequence# -// can be packed together into 64-bits. -static const SequenceNumber kMaxSequenceNumber = - ((0x1ull << 56) - 1); - -struct ParsedInternalKey { - Slice user_key; - SequenceNumber sequence; - ValueType type; - - ParsedInternalKey() { } // Intentionally left uninitialized (for speed) - ParsedInternalKey(const Slice& u, const SequenceNumber& seq, ValueType t) - : user_key(u), sequence(seq), type(t) { } - std::string DebugString() const; -}; - -// Return the length of the encoding of "key". -inline size_t InternalKeyEncodingLength(const ParsedInternalKey& key) { - return key.user_key.size() + 8; -} - -// Append the serialization of "key" to *result. -extern void AppendInternalKey(std::string* result, - const ParsedInternalKey& key); - -// Attempt to parse an internal key from "internal_key". On success, -// stores the parsed data in "*result", and returns true. -// -// On error, returns false, leaves "*result" in an undefined state. -extern bool ParseInternalKey(const Slice& internal_key, - ParsedInternalKey* result); - -// Returns the user key portion of an internal key. -inline Slice ExtractUserKey(const Slice& internal_key) { - assert(internal_key.size() >= 8); - return Slice(internal_key.data(), internal_key.size() - 8); -} - -inline ValueType ExtractValueType(const Slice& internal_key) { - assert(internal_key.size() >= 8); - const size_t n = internal_key.size(); - uint64_t num = DecodeFixed64(internal_key.data() + n - 8); - unsigned char c = num & 0xff; - return static_cast(c); -} - -// A comparator for internal keys that uses a specified comparator for -// the user key portion and breaks ties by decreasing sequence number. -class InternalKeyComparator : public Comparator { - private: - const Comparator* user_comparator_; - public: - explicit InternalKeyComparator(const Comparator* c) : user_comparator_(c) { } - virtual const char* Name() const; - virtual int Compare(const Slice& a, const Slice& b) const; - virtual void FindShortestSeparator( - std::string* start, - const Slice& limit) const; - virtual void FindShortSuccessor(std::string* key) const; - - const Comparator* user_comparator() const { return user_comparator_; } - - int Compare(const InternalKey& a, const InternalKey& b) const; -}; - -// Filter policy wrapper that converts from internal keys to user keys -class InternalFilterPolicy : public FilterPolicy { - private: - const FilterPolicy* const user_policy_; - public: - explicit InternalFilterPolicy(const FilterPolicy* p) : user_policy_(p) { } - virtual const char* Name() const; - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const; - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const; -}; - -// Modules in this directory should keep internal keys wrapped inside -// the following class instead of plain strings so that we do not -// incorrectly use string comparisons instead of an InternalKeyComparator. -class InternalKey { - private: - std::string rep_; - public: - InternalKey() { } // Leave rep_ as empty to indicate it is invalid - InternalKey(const Slice& user_key, SequenceNumber s, ValueType t) { - AppendInternalKey(&rep_, ParsedInternalKey(user_key, s, t)); - } - - void DecodeFrom(const Slice& s) { rep_.assign(s.data(), s.size()); } - Slice Encode() const { - assert(!rep_.empty()); - return rep_; - } - - Slice user_key() const { return ExtractUserKey(rep_); } - - void SetFrom(const ParsedInternalKey& p) { - rep_.clear(); - AppendInternalKey(&rep_, p); - } - - void Clear() { rep_.clear(); } - - std::string DebugString() const; -}; - -inline int InternalKeyComparator::Compare( - const InternalKey& a, const InternalKey& b) const { - return Compare(a.Encode(), b.Encode()); -} - -inline bool ParseInternalKey(const Slice& internal_key, - ParsedInternalKey* result) { - const size_t n = internal_key.size(); - if (n < 8) return false; - uint64_t num = DecodeFixed64(internal_key.data() + n - 8); - unsigned char c = num & 0xff; - result->sequence = num >> 8; - result->type = static_cast(c); - result->user_key = Slice(internal_key.data(), n - 8); - return (c <= static_cast(kTypeValue)); -} - -// A helper class useful for DBImpl::Get() -class LookupKey { - public: - // Initialize *this for looking up user_key at a snapshot with - // the specified sequence number. - LookupKey(const Slice& user_key, SequenceNumber sequence); - - ~LookupKey(); - - // Return a key suitable for lookup in a MemTable. - Slice memtable_key() const { return Slice(start_, end_ - start_); } - - // Return an internal key (suitable for passing to an internal iterator) - Slice internal_key() const { return Slice(kstart_, end_ - kstart_); } - - // Return the user key - Slice user_key() const { return Slice(kstart_, end_ - kstart_ - 8); } - - private: - // We construct a char array of the form: - // klength varint32 <-- start_ - // userkey char[klength] <-- kstart_ - // tag uint64 - // <-- end_ - // The array is a suitable MemTable key. - // The suffix starting with "userkey" can be used as an InternalKey. - const char* start_; - const char* kstart_; - const char* end_; - char space_[200]; // Avoid allocation for short keys - - // No copying allowed - LookupKey(const LookupKey&); - void operator=(const LookupKey&); -}; - -inline LookupKey::~LookupKey() { - if (start_ != space_) delete[] start_; -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_FORMAT_H_ diff --git a/clipper/HyperLevelDB/db/dbformat_test.cc b/clipper/HyperLevelDB/db/dbformat_test.cc deleted file mode 100644 index 5d82f5d..0000000 --- a/clipper/HyperLevelDB/db/dbformat_test.cc +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/dbformat.h" -#include "util/logging.h" -#include "util/testharness.h" - -namespace leveldb { - -static std::string IKey(const std::string& user_key, - uint64_t seq, - ValueType vt) { - std::string encoded; - AppendInternalKey(&encoded, ParsedInternalKey(user_key, seq, vt)); - return encoded; -} - -static std::string Shorten(const std::string& s, const std::string& l) { - std::string result = s; - InternalKeyComparator(BytewiseComparator()).FindShortestSeparator(&result, l); - return result; -} - -static std::string ShortSuccessor(const std::string& s) { - std::string result = s; - InternalKeyComparator(BytewiseComparator()).FindShortSuccessor(&result); - return result; -} - -static void TestKey(const std::string& key, - uint64_t seq, - ValueType vt) { - std::string encoded = IKey(key, seq, vt); - - Slice in(encoded); - ParsedInternalKey decoded("", 0, kTypeValue); - - ASSERT_TRUE(ParseInternalKey(in, &decoded)); - ASSERT_EQ(key, decoded.user_key.ToString()); - ASSERT_EQ(seq, decoded.sequence); - ASSERT_EQ(vt, decoded.type); - - ASSERT_TRUE(!ParseInternalKey(Slice("bar"), &decoded)); -} - -class FormatTest { }; - -TEST(FormatTest, InternalKey_EncodeDecode) { - const char* keys[] = { "", "k", "hello", "longggggggggggggggggggggg" }; - const uint64_t seq[] = { - 1, 2, 3, - (1ull << 8) - 1, 1ull << 8, (1ull << 8) + 1, - (1ull << 16) - 1, 1ull << 16, (1ull << 16) + 1, - (1ull << 32) - 1, 1ull << 32, (1ull << 32) + 1 - }; - for (int k = 0; k < sizeof(keys) / sizeof(keys[0]); k++) { - for (int s = 0; s < sizeof(seq) / sizeof(seq[0]); s++) { - TestKey(keys[k], seq[s], kTypeValue); - TestKey("hello", 1, kTypeDeletion); - } - } -} - -TEST(FormatTest, InternalKeyShortSeparator) { - // When user keys are same - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("foo", 99, kTypeValue))); - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("foo", 101, kTypeValue))); - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("foo", 100, kTypeValue))); - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("foo", 100, kTypeDeletion))); - - // When user keys are misordered - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("bar", 99, kTypeValue))); - - // When user keys are different, but correctly ordered - ASSERT_EQ(IKey("g", kMaxSequenceNumber, kValueTypeForSeek), - Shorten(IKey("foo", 100, kTypeValue), - IKey("hello", 200, kTypeValue))); - - // When start user key is prefix of limit user key - ASSERT_EQ(IKey("foo", 100, kTypeValue), - Shorten(IKey("foo", 100, kTypeValue), - IKey("foobar", 200, kTypeValue))); - - // When limit user key is prefix of start user key - ASSERT_EQ(IKey("foobar", 100, kTypeValue), - Shorten(IKey("foobar", 100, kTypeValue), - IKey("foo", 200, kTypeValue))); -} - -TEST(FormatTest, InternalKeyShortestSuccessor) { - ASSERT_EQ(IKey("g", kMaxSequenceNumber, kValueTypeForSeek), - ShortSuccessor(IKey("foo", 100, kTypeValue))); - ASSERT_EQ(IKey("\xff\xff", 100, kTypeValue), - ShortSuccessor(IKey("\xff\xff", 100, kTypeValue))); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/db/filename.cc b/clipper/HyperLevelDB/db/filename.cc deleted file mode 100644 index 14bf22a..0000000 --- a/clipper/HyperLevelDB/db/filename.cc +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include "db/filename.h" -#include "db/dbformat.h" -#include "hyperleveldb/env.h" -#include "util/logging.h" - -namespace leveldb { - -// A utility routine: write "data" to the named file and Sync() it. -extern Status WriteStringToFileSync(Env* env, const Slice& data, - const std::string& fname); - -static std::string MakeFileName(const std::string& name, uint64_t number, - const char* suffix) { - char buf[100]; - snprintf(buf, sizeof(buf), "/%06llu.%s", - static_cast(number), - suffix); - return name + buf; -} - -std::string LogFileName(const std::string& name, uint64_t number) { - assert(number > 0); - return MakeFileName(name, number, "log"); -} - -std::string TableFileName(const std::string& name, uint64_t number) { - assert(number > 0); - return MakeFileName(name, number, "ldb"); -} - -std::string SSTTableFileName(const std::string& name, uint64_t number) { - assert(number > 0); - return MakeFileName(name, number, "sst"); -} - -std::string DescriptorFileName(const std::string& dbname, uint64_t number) { - assert(number > 0); - char buf[100]; - snprintf(buf, sizeof(buf), "/MANIFEST-%06llu", - static_cast(number)); - return dbname + buf; -} - -std::string CurrentFileName(const std::string& dbname) { - return dbname + "/CURRENT"; -} - -std::string LockFileName(const std::string& dbname) { - return dbname + "/LOCK"; -} - -std::string TempFileName(const std::string& dbname, uint64_t number) { - assert(number > 0); - return MakeFileName(dbname, number, "dbtmp"); -} - -std::string InfoLogFileName(const std::string& dbname) { - return dbname + "/LOG"; -} - -// Return the name of the old info log file for "dbname". -std::string OldInfoLogFileName(const std::string& dbname) { - return dbname + "/LOG.old"; -} - - -// Owned filenames have the form: -// dbname/CURRENT -// dbname/LOCK -// dbname/LOG -// dbname/LOG.old -// dbname/MANIFEST-[0-9]+ -// dbname/[0-9]+.(log|sst|ldb) -bool ParseFileName(const std::string& fname, - uint64_t* number, - FileType* type) { - Slice rest(fname); - if (rest == "CURRENT") { - *number = 0; - *type = kCurrentFile; - } else if (rest == "LOCK") { - *number = 0; - *type = kDBLockFile; - } else if (rest == "LOG" || rest == "LOG.old") { - *number = 0; - *type = kInfoLogFile; - } else if (rest.starts_with("MANIFEST-")) { - rest.remove_prefix(strlen("MANIFEST-")); - uint64_t num; - if (!ConsumeDecimalNumber(&rest, &num)) { - return false; - } - if (!rest.empty()) { - return false; - } - *type = kDescriptorFile; - *number = num; - } else { - // Avoid strtoull() to keep filename format independent of the - // current locale - uint64_t num; - if (!ConsumeDecimalNumber(&rest, &num)) { - return false; - } - Slice suffix = rest; - if (suffix == Slice(".log")) { - *type = kLogFile; - } else if (suffix == Slice(".sst") || suffix == Slice(".ldb")) { - *type = kTableFile; - } else if (suffix == Slice(".dbtmp")) { - *type = kTempFile; - } else { - return false; - } - *number = num; - } - return true; -} - -Status SetCurrentFile(Env* env, const std::string& dbname, - uint64_t descriptor_number) { - // Remove leading "dbname/" and add newline to manifest file name - std::string manifest = DescriptorFileName(dbname, descriptor_number); - Slice contents = manifest; - assert(contents.starts_with(dbname + "/")); - contents.remove_prefix(dbname.size() + 1); - std::string tmp = TempFileName(dbname, descriptor_number); - Status s = WriteStringToFileSync(env, contents.ToString() + "\n", tmp); - if (s.ok()) { - s = env->RenameFile(tmp, CurrentFileName(dbname)); - } - if (!s.ok()) { - env->DeleteFile(tmp); - } - return s; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/filename.h b/clipper/HyperLevelDB/db/filename.h deleted file mode 100644 index 4126b95..0000000 --- a/clipper/HyperLevelDB/db/filename.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// File names used by DB code - -#ifndef STORAGE_LEVELDB_DB_FILENAME_H_ -#define STORAGE_LEVELDB_DB_FILENAME_H_ - -#include -#include -#include "hyperleveldb/slice.h" -#include "hyperleveldb/status.h" -#include "port/port.h" - -namespace leveldb { - -class Env; - -enum FileType { - kLogFile, - kDBLockFile, - kTableFile, - kDescriptorFile, - kCurrentFile, - kTempFile, - kInfoLogFile // Either the current one, or an old one -}; - -// Return the name of the log file with the specified number -// in the db named by "dbname". The result will be prefixed with -// "dbname". -extern std::string LogFileName(const std::string& dbname, uint64_t number); - -// Return the name of the sstable with the specified number -// in the db named by "dbname". The result will be prefixed with -// "dbname". -extern std::string TableFileName(const std::string& dbname, uint64_t number); - -// Return the legacy file name for an sstable with the specified number -// in the db named by "dbname". The result will be prefixed with -// "dbname". -extern std::string SSTTableFileName(const std::string& dbname, uint64_t number); - -// Return the name of the descriptor file for the db named by -// "dbname" and the specified incarnation number. The result will be -// prefixed with "dbname". -extern std::string DescriptorFileName(const std::string& dbname, - uint64_t number); - -// Return the name of the current file. This file contains the name -// of the current manifest file. The result will be prefixed with -// "dbname". -extern std::string CurrentFileName(const std::string& dbname); - -// Return the name of the lock file for the db named by -// "dbname". The result will be prefixed with "dbname". -extern std::string LockFileName(const std::string& dbname); - -// Return the name of a temporary file owned by the db named "dbname". -// The result will be prefixed with "dbname". -extern std::string TempFileName(const std::string& dbname, uint64_t number); - -// Return the name of the info log file for "dbname". -extern std::string InfoLogFileName(const std::string& dbname); - -// Return the name of the old info log file for "dbname". -extern std::string OldInfoLogFileName(const std::string& dbname); - -// If filename is a leveldb file, store the type of the file in *type. -// The number encoded in the filename is stored in *number. If the -// filename was successfully parsed, returns true. Else return false. -extern bool ParseFileName(const std::string& filename, - uint64_t* number, - FileType* type); - -// Make the CURRENT file point to the descriptor file with the -// specified number. -extern Status SetCurrentFile(Env* env, const std::string& dbname, - uint64_t descriptor_number); - - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_FILENAME_H_ diff --git a/clipper/HyperLevelDB/db/filename_test.cc b/clipper/HyperLevelDB/db/filename_test.cc deleted file mode 100644 index a32556d..0000000 --- a/clipper/HyperLevelDB/db/filename_test.cc +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/filename.h" - -#include "db/dbformat.h" -#include "port/port.h" -#include "util/logging.h" -#include "util/testharness.h" - -namespace leveldb { - -class FileNameTest { }; - -TEST(FileNameTest, Parse) { - Slice db; - FileType type; - uint64_t number; - - // Successful parses - static struct { - const char* fname; - uint64_t number; - FileType type; - } cases[] = { - { "100.log", 100, kLogFile }, - { "0.log", 0, kLogFile }, - { "0.sst", 0, kTableFile }, - { "0.ldb", 0, kTableFile }, - { "CURRENT", 0, kCurrentFile }, - { "LOCK", 0, kDBLockFile }, - { "MANIFEST-2", 2, kDescriptorFile }, - { "MANIFEST-7", 7, kDescriptorFile }, - { "LOG", 0, kInfoLogFile }, - { "LOG.old", 0, kInfoLogFile }, - { "18446744073709551615.log", 18446744073709551615ull, kLogFile }, - }; - for (int i = 0; i < sizeof(cases) / sizeof(cases[0]); i++) { - std::string f = cases[i].fname; - ASSERT_TRUE(ParseFileName(f, &number, &type)) << f; - ASSERT_EQ(cases[i].type, type) << f; - ASSERT_EQ(cases[i].number, number) << f; - } - - // Errors - static const char* errors[] = { - "", - "foo", - "foo-dx-100.log", - ".log", - "", - "manifest", - "CURREN", - "CURRENTX", - "MANIFES", - "MANIFEST", - "MANIFEST-", - "XMANIFEST-3", - "MANIFEST-3x", - "LOC", - "LOCKx", - "LO", - "LOGx", - "18446744073709551616.log", - "184467440737095516150.log", - "100", - "100.", - "100.lop" - }; - for (int i = 0; i < sizeof(errors) / sizeof(errors[0]); i++) { - std::string f = errors[i]; - ASSERT_TRUE(!ParseFileName(f, &number, &type)) << f; - } -} - -TEST(FileNameTest, Construction) { - uint64_t number; - FileType type; - std::string fname; - - fname = CurrentFileName("foo"); - ASSERT_EQ("foo/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(0, number); - ASSERT_EQ(kCurrentFile, type); - - fname = LockFileName("foo"); - ASSERT_EQ("foo/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(0, number); - ASSERT_EQ(kDBLockFile, type); - - fname = LogFileName("foo", 192); - ASSERT_EQ("foo/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(192, number); - ASSERT_EQ(kLogFile, type); - - fname = TableFileName("bar", 200); - ASSERT_EQ("bar/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(200, number); - ASSERT_EQ(kTableFile, type); - - fname = DescriptorFileName("bar", 100); - ASSERT_EQ("bar/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(100, number); - ASSERT_EQ(kDescriptorFile, type); - - fname = TempFileName("tmp", 999); - ASSERT_EQ("tmp/", std::string(fname.data(), 4)); - ASSERT_TRUE(ParseFileName(fname.c_str() + 4, &number, &type)); - ASSERT_EQ(999, number); - ASSERT_EQ(kTempFile, type); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/db/leveldb_main.cc b/clipper/HyperLevelDB/db/leveldb_main.cc deleted file mode 100644 index d34d806..0000000 --- a/clipper/HyperLevelDB/db/leveldb_main.cc +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/version_edit.h" -#include "db/write_batch_internal.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/iterator.h" -#include "hyperleveldb/options.h" -#include "hyperleveldb/status.h" -#include "hyperleveldb/table.h" -#include "hyperleveldb/write_batch.h" -#include "util/logging.h" - -namespace leveldb { - -namespace { - -bool GuessType(const std::string& fname, FileType* type) { - size_t pos = fname.rfind('/'); - std::string basename; - if (pos == std::string::npos) { - basename = fname; - } else { - basename = std::string(fname.data() + pos + 1, fname.size() - pos - 1); - } - uint64_t ignored; - return ParseFileName(basename, &ignored, type); -} - -// Notified when log reader encounters corruption. -class CorruptionReporter : public log::Reader::Reporter { - public: - virtual void Corruption(size_t bytes, const Status& status) { - printf("corruption: %d bytes; %s\n", - static_cast(bytes), - status.ToString().c_str()); - } -}; - -// Print contents of a log file. (*func)() is called on every record. -bool PrintLogContents(Env* env, const std::string& fname, - void (*func)(Slice)) { - SequentialFile* file; - Status s = env->NewSequentialFile(fname, &file); - if (!s.ok()) { - fprintf(stderr, "%s\n", s.ToString().c_str()); - return false; - } - CorruptionReporter reporter; - log::Reader reader(file, &reporter, true, 0); - Slice record; - std::string scratch; - while (reader.ReadRecord(&record, &scratch)) { - printf("--- offset %llu; ", - static_cast(reader.LastRecordOffset())); - (*func)(record); - } - delete file; - return true; -} - -// Called on every item found in a WriteBatch. -class WriteBatchItemPrinter : public WriteBatch::Handler { - public: - uint64_t offset_; - uint64_t sequence_; - - virtual void Put(const Slice& key, const Slice& value) { - printf(" put '%s' '%s'\n", - EscapeString(key).c_str(), - EscapeString(value).c_str()); - } - virtual void Delete(const Slice& key) { - printf(" del '%s'\n", - EscapeString(key).c_str()); - } -}; - - -// Called on every log record (each one of which is a WriteBatch) -// found in a kLogFile. -static void WriteBatchPrinter(Slice record) { - if (record.size() < 12) { - printf("log record length %d is too small\n", - static_cast(record.size())); - return; - } - WriteBatch batch; - WriteBatchInternal::SetContents(&batch, record); - printf("sequence %llu\n", - static_cast(WriteBatchInternal::Sequence(&batch))); - WriteBatchItemPrinter batch_item_printer; - Status s = batch.Iterate(&batch_item_printer); - if (!s.ok()) { - printf(" error: %s\n", s.ToString().c_str()); - } -} - -bool DumpLog(Env* env, const std::string& fname) { - return PrintLogContents(env, fname, WriteBatchPrinter); -} - -// Called on every log record (each one of which is a WriteBatch) -// found in a kDescriptorFile. -static void VersionEditPrinter(Slice record) { - VersionEdit edit; - Status s = edit.DecodeFrom(record); - if (!s.ok()) { - printf("%s\n", s.ToString().c_str()); - return; - } - printf("%s", edit.DebugString().c_str()); -} - -bool DumpDescriptor(Env* env, const std::string& fname) { - return PrintLogContents(env, fname, VersionEditPrinter); -} - -bool DumpTable(Env* env, const std::string& fname) { - uint64_t file_size; - RandomAccessFile* file = NULL; - Table* table = NULL; - Status s = env->GetFileSize(fname, &file_size); - if (s.ok()) { - s = env->NewRandomAccessFile(fname, &file); - } - if (s.ok()) { - // We use the default comparator, which may or may not match the - // comparator used in this database. However this should not cause - // problems since we only use Table operations that do not require - // any comparisons. In particular, we do not call Seek or Prev. - s = Table::Open(Options(), file, file_size, &table); - } - if (!s.ok()) { - fprintf(stderr, "%s\n", s.ToString().c_str()); - delete table; - delete file; - return false; - } - - ReadOptions ro; - ro.fill_cache = false; - Iterator* iter = table->NewIterator(ro); - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - ParsedInternalKey key; - if (!ParseInternalKey(iter->key(), &key)) { - printf("badkey '%s' => '%s'\n", - EscapeString(iter->key()).c_str(), - EscapeString(iter->value()).c_str()); - } else { - char kbuf[20]; - const char* type; - if (key.type == kTypeDeletion) { - type = "del"; - } else if (key.type == kTypeValue) { - type = "val"; - } else { - snprintf(kbuf, sizeof(kbuf), "%d", static_cast(key.type)); - type = kbuf; - } - printf("'%s' @ %8llu : %s => '%s'\n", - EscapeString(key.user_key).c_str(), - static_cast(key.sequence), - type, - EscapeString(iter->value()).c_str()); - } - } - s = iter->status(); - if (!s.ok()) { - printf("iterator error: %s\n", s.ToString().c_str()); - } - - delete iter; - delete table; - delete file; - return true; -} - -bool DumpFile(Env* env, const std::string& fname) { - FileType ftype; - if (!GuessType(fname, &ftype)) { - fprintf(stderr, "%s: unknown file type\n", fname.c_str()); - return false; - } - switch (ftype) { - case kLogFile: return DumpLog(env, fname); - case kDescriptorFile: return DumpDescriptor(env, fname); - case kTableFile: return DumpTable(env, fname); - - default: { - fprintf(stderr, "%s: not a dump-able file type\n", fname.c_str()); - break; - } - } - return false; -} - -bool HandleDumpCommand(Env* env, char** files, int num) { - bool ok = true; - for (int i = 0; i < num; i++) { - ok &= DumpFile(env, files[i]); - } - return ok; -} - -} -} // namespace leveldb - -static void Usage() { - fprintf( - stderr, - "Usage: leveldbutil command...\n" - " dump files... -- dump contents of specified files\n" - ); -} - -int main(int argc, char** argv) { - leveldb::Env* env = leveldb::Env::Default(); - bool ok = true; - if (argc < 2) { - Usage(); - ok = false; - } else { - std::string command = argv[1]; - if (command == "dump") { - ok = leveldb::HandleDumpCommand(env, argv+2, argc-2); - } else { - Usage(); - ok = false; - } - } - return (ok ? 0 : 1); -} diff --git a/clipper/HyperLevelDB/db/log_format.h b/clipper/HyperLevelDB/db/log_format.h deleted file mode 100644 index 2690cb9..0000000 --- a/clipper/HyperLevelDB/db/log_format.h +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Log format information shared by reader and writer. -// See ../doc/log_format.txt for more detail. - -#ifndef STORAGE_LEVELDB_DB_LOG_FORMAT_H_ -#define STORAGE_LEVELDB_DB_LOG_FORMAT_H_ - -namespace leveldb { -namespace log { - -enum RecordType { - // Zero is reserved for preallocated files - kZeroType = 0, - - kFullType = 1, - - // For fragments - kFirstType = 2, - kMiddleType = 3, - kLastType = 4 -}; -static const int kMaxRecordType = kLastType; - -static const int kBlockSize = 32768; - -// Header is checksum (4 bytes), type (1 byte), length (2 bytes). -static const int kHeaderSize = 4 + 1 + 2; - -} // namespace log -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_LOG_FORMAT_H_ diff --git a/clipper/HyperLevelDB/db/log_reader.cc b/clipper/HyperLevelDB/db/log_reader.cc deleted file mode 100644 index 46c7647..0000000 --- a/clipper/HyperLevelDB/db/log_reader.cc +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/log_reader.h" - -#include -#include "hyperleveldb/env.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { -namespace log { - -Reader::Reporter::~Reporter() { -} - -Reader::Reader(SequentialFile* file, Reporter* reporter, bool checksum, - uint64_t initial_offset) - : file_(file), - reporter_(reporter), - checksum_(checksum), - backing_store_(new char[kBlockSize]), - buffer_(), - eof_(false), - last_record_offset_(0), - end_of_buffer_offset_(0), - initial_offset_(initial_offset) { -} - -Reader::~Reader() { - delete[] backing_store_; -} - -bool Reader::SkipToInitialBlock() { - size_t offset_in_block = initial_offset_ % kBlockSize; - uint64_t block_start_location = initial_offset_ - offset_in_block; - - // Don't search a block if we'd be in the trailer - if (offset_in_block > kBlockSize - 6) { - offset_in_block = 0; - block_start_location += kBlockSize; - } - - end_of_buffer_offset_ = block_start_location; - - // Skip to start of first block that can contain the initial record - if (block_start_location > 0) { - Status skip_status = file_->Skip(block_start_location); - if (!skip_status.ok()) { - ReportDrop(block_start_location, skip_status); - return false; - } - } - - return true; -} - -bool Reader::ReadRecord(Slice* record, std::string* scratch) { - if (last_record_offset_ < initial_offset_) { - if (!SkipToInitialBlock()) { - return false; - } - } - - scratch->clear(); - record->clear(); - bool in_fragmented_record = false; - // Record offset of the logical record that we're reading - // 0 is a dummy value to make compilers happy - uint64_t prospective_record_offset = 0; - - Slice fragment; - while (true) { - uint64_t physical_record_offset = end_of_buffer_offset_ - buffer_.size(); - const unsigned int record_type = ReadPhysicalRecord(&fragment); - switch (record_type) { - case kFullType: - if (in_fragmented_record) { - // Handle bug in earlier versions of log::Writer where - // it could emit an empty kFirstType record at the tail end - // of a block followed by a kFullType or kFirstType record - // at the beginning of the next block. - if (scratch->empty()) { - in_fragmented_record = false; - } else { - ReportCorruption(scratch->size(), "partial record without end(1)"); - } - } - prospective_record_offset = physical_record_offset; - scratch->clear(); - *record = fragment; - last_record_offset_ = prospective_record_offset; - return true; - - case kFirstType: - if (in_fragmented_record) { - // Handle bug in earlier versions of log::Writer where - // it could emit an empty kFirstType record at the tail end - // of a block followed by a kFullType or kFirstType record - // at the beginning of the next block. - if (scratch->empty()) { - in_fragmented_record = false; - } else { - ReportCorruption(scratch->size(), "partial record without end(2)"); - } - } - prospective_record_offset = physical_record_offset; - scratch->assign(fragment.data(), fragment.size()); - in_fragmented_record = true; - break; - - case kMiddleType: - if (!in_fragmented_record) { - ReportCorruption(fragment.size(), - "missing start of fragmented record(1)"); - } else { - scratch->append(fragment.data(), fragment.size()); - } - break; - - case kLastType: - if (!in_fragmented_record) { - ReportCorruption(fragment.size(), - "missing start of fragmented record(2)"); - } else { - scratch->append(fragment.data(), fragment.size()); - *record = Slice(*scratch); - last_record_offset_ = prospective_record_offset; - return true; - } - break; - - case kEof: - if (in_fragmented_record) { - // This can be caused by the writer dying immediately after - // writing a physical record but before completing the next; don't - // treat it as a corruption, just ignore the entire logical record. - scratch->clear(); - } - return false; - - case kBadRecord: - if (in_fragmented_record) { - ReportCorruption(scratch->size(), "error in middle of record"); - in_fragmented_record = false; - scratch->clear(); - } - break; - - default: { - char buf[40]; - snprintf(buf, sizeof(buf), "unknown record type %u", record_type); - ReportCorruption( - (fragment.size() + (in_fragmented_record ? scratch->size() : 0)), - buf); - in_fragmented_record = false; - scratch->clear(); - break; - } - } - } - return false; -} - -uint64_t Reader::LastRecordOffset() { - return last_record_offset_; -} - -void Reader::ReportCorruption(size_t bytes, const char* reason) { - ReportDrop(bytes, Status::Corruption(reason)); -} - -void Reader::ReportDrop(size_t bytes, const Status& reason) { - if (reporter_ != NULL && - end_of_buffer_offset_ - buffer_.size() - bytes >= initial_offset_) { - reporter_->Corruption(bytes, reason); - } -} - -unsigned int Reader::ReadPhysicalRecord(Slice* result) { - while (true) { - if (buffer_.size() < kHeaderSize) { - if (!eof_) { - // Last read was a full read, so this is a trailer to skip - buffer_.clear(); - Status status = file_->Read(kBlockSize, &buffer_, backing_store_); - end_of_buffer_offset_ += buffer_.size(); - if (!status.ok()) { - buffer_.clear(); - ReportDrop(kBlockSize, status); - eof_ = true; - return kEof; - } else if (buffer_.size() < kBlockSize) { - eof_ = true; - } - continue; - } else { - // Note that if buffer_ is non-empty, we have a truncated header at the - // end of the file, which can be caused by the writer crashing in the - // middle of writing the header. Instead of considering this an error, - // just report EOF. - buffer_.clear(); - return kEof; - } - } - - // Parse the header - const char* header = buffer_.data(); - const uint32_t a = static_cast(header[4]) & 0xff; - const uint32_t b = static_cast(header[5]) & 0xff; - const unsigned int type = header[6]; - const uint32_t length = a | (b << 8); - if (kHeaderSize + length > buffer_.size()) { - size_t drop_size = buffer_.size(); - buffer_.clear(); - if (!eof_) { - ReportCorruption(drop_size, "bad record length"); - return kBadRecord; - } - // If the end of the file has been reached without reading |length| bytes - // of payload, assume the writer died in the middle of writing the record. - // Don't report a corruption. - return kEof; - } - - if (type == kZeroType && length == 0) { - // Skip zero length record without reporting any drops since - // such records are produced by the mmap based writing code in - // env_posix.cc that preallocates file regions. - buffer_.clear(); - return kBadRecord; - } - - // Check crc - if (checksum_) { - uint32_t expected_crc = crc32c::Unmask(DecodeFixed32(header)); - uint32_t actual_crc = crc32c::Value(header + 6, 1 + length); - if (actual_crc != expected_crc) { - // Drop the rest of the buffer since "length" itself may have - // been corrupted and if we trust it, we could find some - // fragment of a real log record that just happens to look - // like a valid log record. - size_t drop_size = buffer_.size(); - buffer_.clear(); - ReportCorruption(drop_size, "checksum mismatch"); - return kBadRecord; - } - } - - buffer_.remove_prefix(kHeaderSize + length); - - // Skip physical record that started before initial_offset_ - if (end_of_buffer_offset_ - buffer_.size() - kHeaderSize - length < - initial_offset_) { - result->clear(); - return kBadRecord; - } - - *result = Slice(header + kHeaderSize, length); - return type; - } -} - -} // namespace log -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/log_reader.h b/clipper/HyperLevelDB/db/log_reader.h deleted file mode 100644 index 98025f4..0000000 --- a/clipper/HyperLevelDB/db/log_reader.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_LOG_READER_H_ -#define STORAGE_LEVELDB_DB_LOG_READER_H_ - -#include - -#include "db/log_format.h" -#include "hyperleveldb/slice.h" -#include "hyperleveldb/status.h" - -namespace leveldb { - -class SequentialFile; - -namespace log { - -class Reader { - public: - // Interface for reporting errors. - class Reporter { - public: - virtual ~Reporter(); - - // Some corruption was detected. "size" is the approximate number - // of bytes dropped due to the corruption. - virtual void Corruption(size_t bytes, const Status& status) = 0; - }; - - // Create a reader that will return log records from "*file". - // "*file" must remain live while this Reader is in use. - // - // If "reporter" is non-NULL, it is notified whenever some data is - // dropped due to a detected corruption. "*reporter" must remain - // live while this Reader is in use. - // - // If "checksum" is true, verify checksums if available. - // - // The Reader will start reading at the first record located at physical - // position >= initial_offset within the file. - Reader(SequentialFile* file, Reporter* reporter, bool checksum, - uint64_t initial_offset); - - ~Reader(); - - // Read the next record into *record. Returns true if read - // successfully, false if we hit end of the input. May use - // "*scratch" as temporary storage. The contents filled in *record - // will only be valid until the next mutating operation on this - // reader or the next mutation to *scratch. - bool ReadRecord(Slice* record, std::string* scratch); - - // Returns the physical offset of the last record returned by ReadRecord. - // - // Undefined before the first call to ReadRecord. - uint64_t LastRecordOffset(); - - private: - SequentialFile* const file_; - Reporter* const reporter_; - bool const checksum_; - char* const backing_store_; - Slice buffer_; - bool eof_; // Last Read() indicated EOF by returning < kBlockSize - - // Offset of the last record returned by ReadRecord. - uint64_t last_record_offset_; - // Offset of the first location past the end of buffer_. - uint64_t end_of_buffer_offset_; - - // Offset at which to start looking for the first record to return - uint64_t const initial_offset_; - - // Extend record types with the following special values - enum { - kEof = kMaxRecordType + 1, - // Returned whenever we find an invalid physical record. - // Currently there are three situations in which this happens: - // * The record has an invalid CRC (ReadPhysicalRecord reports a drop) - // * The record is a 0-length record (No drop is reported) - // * The record is below constructor's initial_offset (No drop is reported) - kBadRecord = kMaxRecordType + 2 - }; - - // Skips all blocks that are completely before "initial_offset_". - // - // Returns true on success. Handles reporting. - bool SkipToInitialBlock(); - - // Return type, or one of the preceding special values - unsigned int ReadPhysicalRecord(Slice* result); - - // Reports dropped bytes to the reporter. - // buffer_ must be updated to remove the dropped bytes prior to invocation. - void ReportCorruption(size_t bytes, const char* reason); - void ReportDrop(size_t bytes, const Status& reason); - - // No copying allowed - Reader(const Reader&); - void operator=(const Reader&); -}; - -} // namespace log -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_LOG_READER_H_ diff --git a/clipper/HyperLevelDB/db/log_test.cc b/clipper/HyperLevelDB/db/log_test.cc deleted file mode 100644 index a42a858..0000000 --- a/clipper/HyperLevelDB/db/log_test.cc +++ /dev/null @@ -1,539 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "hyperleveldb/env.h" -#include "util/coding.h" -#include "util/crc32c.h" -#include "util/random.h" -#include "util/testharness.h" - -namespace leveldb { -namespace log { - -// Construct a string of the specified length made out of the supplied -// partial string. -static std::string BigString(const std::string& partial_string, size_t n) { - std::string result; - while (result.size() < n) { - result.append(partial_string); - } - result.resize(n); - return result; -} - -// Construct a string from a number -static std::string NumberString(int n) { - char buf[50]; - snprintf(buf, sizeof(buf), "%d.", n); - return std::string(buf); -} - -// Return a skewed potentially long string -static std::string RandomSkewedString(int i, Random* rnd) { - return BigString(NumberString(i), rnd->Skewed(17)); -} - -class LogTest { - private: - class StringDest : public WritableFile { - public: - std::string contents_; - - virtual Status Close() { return Status::OK(); } - virtual Status Flush() { return Status::OK(); } - virtual Status Sync() { return Status::OK(); } - virtual Status WriteAt(uint64_t offset, const Slice& slice) { - std::string tmp = contents_.substr(0, offset); - tmp.append(slice.data(), slice.size()); - if (contents_.size() > offset + slice.size()) { - tmp += contents_.substr(offset + slice.size()); - } - contents_ = tmp; - return Status::OK(); - } - virtual Status Append(const Slice& slice) { - contents_.append(slice.data(), slice.size()); - return Status::OK(); - } - }; - - class StringSource : public SequentialFile { - public: - Slice contents_; - bool force_error_; - bool returned_partial_; - StringSource() : force_error_(false), returned_partial_(false) { } - - virtual Status Read(size_t n, Slice* result, char* scratch) { - ASSERT_TRUE(!returned_partial_) << "must not Read() after eof/error"; - - if (force_error_) { - force_error_ = false; - returned_partial_ = true; - return Status::Corruption("read error"); - } - - if (contents_.size() < n) { - n = contents_.size(); - returned_partial_ = true; - } - *result = Slice(contents_.data(), n); - contents_.remove_prefix(n); - return Status::OK(); - } - - virtual Status Skip(uint64_t n) { - if (n > contents_.size()) { - contents_.clear(); - return Status::NotFound("in-memory file skipepd past end"); - } - - contents_.remove_prefix(n); - - return Status::OK(); - } - }; - - class ReportCollector : public Reader::Reporter { - public: - size_t dropped_bytes_; - std::string message_; - - ReportCollector() : dropped_bytes_(0) { } - virtual void Corruption(size_t bytes, const Status& status) { - dropped_bytes_ += bytes; - message_.append(status.ToString()); - } - }; - - StringDest dest_; - StringSource source_; - ReportCollector report_; - bool reading_; - Writer writer_; - Reader reader_; - - // Record metadata for testing initial offset functionality - static size_t initial_offset_record_sizes_[]; - static uint64_t initial_offset_last_record_offsets_[]; - - public: - LogTest() : reading_(false), - writer_(&dest_), - reader_(&source_, &report_, true/*checksum*/, - 0/*initial_offset*/) { - } - - void Write(const std::string& msg) { - ASSERT_TRUE(!reading_) << "Write() after starting to read"; - writer_.AddRecord(Slice(msg)); - } - - size_t WrittenBytes() const { - return dest_.contents_.size(); - } - - std::string Read() { - if (!reading_) { - reading_ = true; - source_.contents_ = Slice(dest_.contents_); - } - std::string scratch; - Slice record; - if (reader_.ReadRecord(&record, &scratch)) { - return record.ToString(); - } else { - return "EOF"; - } - } - - void IncrementByte(int offset, int delta) { - dest_.contents_[offset] += delta; - } - - void SetByte(int offset, char new_byte) { - dest_.contents_[offset] = new_byte; - } - - void ShrinkSize(int bytes) { - dest_.contents_.resize(dest_.contents_.size() - bytes); - } - - void FixChecksum(int header_offset, int len) { - // Compute crc of type/len/data - uint32_t crc = crc32c::Value(&dest_.contents_[header_offset+6], 1 + len); - crc = crc32c::Mask(crc); - EncodeFixed32(&dest_.contents_[header_offset], crc); - } - - void ForceError() { - source_.force_error_ = true; - } - - size_t DroppedBytes() const { - return report_.dropped_bytes_; - } - - std::string ReportMessage() const { - return report_.message_; - } - - // Returns OK iff recorded error message contains "msg" - std::string MatchError(const std::string& msg) const { - if (report_.message_.find(msg) == std::string::npos) { - return report_.message_; - } else { - return "OK"; - } - } - - void WriteInitialOffsetLog() { - for (int i = 0; i < 4; i++) { - std::string record(initial_offset_record_sizes_[i], - static_cast('a' + i)); - Write(record); - } - } - - void CheckOffsetPastEndReturnsNoRecords(uint64_t offset_past_end) { - WriteInitialOffsetLog(); - reading_ = true; - source_.contents_ = Slice(dest_.contents_); - Reader* offset_reader = new Reader(&source_, &report_, true/*checksum*/, - WrittenBytes() + offset_past_end); - Slice record; - std::string scratch; - ASSERT_TRUE(!offset_reader->ReadRecord(&record, &scratch)); - delete offset_reader; - } - - void CheckInitialOffsetRecord(uint64_t initial_offset, - int expected_record_offset) { - WriteInitialOffsetLog(); - reading_ = true; - source_.contents_ = Slice(dest_.contents_); - Reader* offset_reader = new Reader(&source_, &report_, true/*checksum*/, - initial_offset); - Slice record; - std::string scratch; - ASSERT_TRUE(offset_reader->ReadRecord(&record, &scratch)); - ASSERT_EQ(initial_offset_record_sizes_[expected_record_offset], - record.size()); - ASSERT_EQ(initial_offset_last_record_offsets_[expected_record_offset], - offset_reader->LastRecordOffset()); - ASSERT_EQ((char)('a' + expected_record_offset), record.data()[0]); - delete offset_reader; - } - -}; - -size_t LogTest::initial_offset_record_sizes_[] = - {10000, // Two sizable records in first block - 10000, - 2 * log::kBlockSize - 1000, // Span three blocks - 1}; - -uint64_t LogTest::initial_offset_last_record_offsets_[] = - {0, - kHeaderSize + 10000, - 2 * (kHeaderSize + 10000), - 2 * (kHeaderSize + 10000) + - (2 * log::kBlockSize - 1000) + 3 * kHeaderSize}; - - -TEST(LogTest, Empty) { - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, ReadWrite) { - Write("foo"); - Write("bar"); - Write(""); - Write("xxxx"); - ASSERT_EQ("foo", Read()); - ASSERT_EQ("bar", Read()); - ASSERT_EQ("", Read()); - ASSERT_EQ("xxxx", Read()); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ("EOF", Read()); // Make sure reads at eof work -} - -TEST(LogTest, ManyBlocks) { - for (int i = 0; i < 100000; i++) { - Write(NumberString(i)); - } - for (int i = 0; i < 100000; i++) { - ASSERT_EQ(NumberString(i), Read()); - } - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, Fragmentation) { - Write("small"); - Write(BigString("medium", 50000)); - Write(BigString("large", 100000)); - ASSERT_EQ("small", Read()); - ASSERT_EQ(BigString("medium", 50000), Read()); - ASSERT_EQ(BigString("large", 100000), Read()); - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, MarginalTrailer) { - // Make a trailer that is exactly the same length as an empty record. - const int n = kBlockSize - 2*kHeaderSize; - Write(BigString("foo", n)); - ASSERT_EQ(kBlockSize - kHeaderSize, WrittenBytes()); - Write(""); - Write("bar"); - ASSERT_EQ(BigString("foo", n), Read()); - ASSERT_EQ("", Read()); - ASSERT_EQ("bar", Read()); - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, MarginalTrailer2) { - // Make a trailer that is exactly the same length as an empty record. - const int n = kBlockSize - 2*kHeaderSize; - Write(BigString("foo", n)); - ASSERT_EQ(kBlockSize - kHeaderSize, WrittenBytes()); - Write("bar"); - ASSERT_EQ(BigString("foo", n), Read()); - ASSERT_EQ("bar", Read()); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(0, DroppedBytes()); - ASSERT_EQ("", ReportMessage()); -} - -TEST(LogTest, ShortTrailer) { - const int n = kBlockSize - 2*kHeaderSize + 4; - Write(BigString("foo", n)); - ASSERT_EQ(kBlockSize - kHeaderSize + 4, WrittenBytes()); - Write(""); - Write("bar"); - ASSERT_EQ(BigString("foo", n), Read()); - ASSERT_EQ("", Read()); - ASSERT_EQ("bar", Read()); - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, AlignedEof) { - const int n = kBlockSize - 2*kHeaderSize + 4; - Write(BigString("foo", n)); - ASSERT_EQ(kBlockSize - kHeaderSize + 4, WrittenBytes()); - ASSERT_EQ(BigString("foo", n), Read()); - ASSERT_EQ("EOF", Read()); -} - -TEST(LogTest, RandomRead) { - const int N = 500; - Random write_rnd(301); - for (int i = 0; i < N; i++) { - Write(RandomSkewedString(i, &write_rnd)); - } - Random read_rnd(301); - for (int i = 0; i < N; i++) { - ASSERT_EQ(RandomSkewedString(i, &read_rnd), Read()); - } - ASSERT_EQ("EOF", Read()); -} - -// Tests of all the error paths in log_reader.cc follow: - -TEST(LogTest, ReadError) { - Write("foo"); - ForceError(); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(kBlockSize, DroppedBytes()); - ASSERT_EQ("OK", MatchError("read error")); -} - -TEST(LogTest, BadRecordType) { - Write("foo"); - // Type is stored in header[6] - IncrementByte(6, 100); - FixChecksum(0, 3); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(3, DroppedBytes()); - ASSERT_EQ("OK", MatchError("unknown record type")); -} - -TEST(LogTest, TruncatedTrailingRecordIsIgnored) { - Write("foo"); - ShrinkSize(4); // Drop all payload as well as a header byte - ASSERT_EQ("EOF", Read()); - // Truncated last record is ignored, not treated as an error. - ASSERT_EQ(0, DroppedBytes()); - ASSERT_EQ("", ReportMessage()); -} - -TEST(LogTest, BadLength) { - const int kPayloadSize = kBlockSize - kHeaderSize; - Write(BigString("bar", kPayloadSize)); - Write("foo"); - // Least significant size byte is stored in header[4]. - IncrementByte(4, 1); - ASSERT_EQ("foo", Read()); - ASSERT_EQ(kBlockSize, DroppedBytes()); - ASSERT_EQ("OK", MatchError("bad record length")); -} - -TEST(LogTest, BadLengthAtEndIsIgnored) { - Write("foo"); - ShrinkSize(1); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(0, DroppedBytes()); - ASSERT_EQ("", ReportMessage()); -} - -TEST(LogTest, ChecksumMismatch) { - Write("foo"); - IncrementByte(0, 10); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(10, DroppedBytes()); - ASSERT_EQ("OK", MatchError("checksum mismatch")); -} - -TEST(LogTest, UnexpectedMiddleType) { - Write("foo"); - SetByte(6, kMiddleType); - FixChecksum(0, 3); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(3, DroppedBytes()); - ASSERT_EQ("OK", MatchError("missing start")); -} - -TEST(LogTest, UnexpectedLastType) { - Write("foo"); - SetByte(6, kLastType); - FixChecksum(0, 3); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(3, DroppedBytes()); - ASSERT_EQ("OK", MatchError("missing start")); -} - -TEST(LogTest, UnexpectedFullType) { - Write("foo"); - Write("bar"); - SetByte(6, kFirstType); - FixChecksum(0, 3); - ASSERT_EQ("bar", Read()); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(3, DroppedBytes()); - ASSERT_EQ("OK", MatchError("partial record without end")); -} - -TEST(LogTest, UnexpectedFirstType) { - Write("foo"); - Write(BigString("bar", 100000)); - SetByte(6, kFirstType); - FixChecksum(0, 3); - ASSERT_EQ(BigString("bar", 100000), Read()); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ(3, DroppedBytes()); - ASSERT_EQ("OK", MatchError("partial record without end")); -} - -TEST(LogTest, MissingLastIsIgnored) { - Write(BigString("bar", kBlockSize)); - // Remove the LAST block, including header. - ShrinkSize(14); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ("", ReportMessage()); - ASSERT_EQ(0, DroppedBytes()); -} - -TEST(LogTest, PartialLastIsIgnored) { - Write(BigString("bar", kBlockSize)); - // Cause a bad record length in the LAST block. - ShrinkSize(1); - ASSERT_EQ("EOF", Read()); - ASSERT_EQ("", ReportMessage()); - ASSERT_EQ(0, DroppedBytes()); -} - -TEST(LogTest, ErrorJoinsRecords) { - // Consider two fragmented records: - // first(R1) last(R1) first(R2) last(R2) - // where the middle two fragments disappear. We do not want - // first(R1),last(R2) to get joined and returned as a valid record. - - // Write records that span two blocks - Write(BigString("foo", kBlockSize)); - Write(BigString("bar", kBlockSize)); - Write("correct"); - - // Wipe the middle block - for (int offset = kBlockSize; offset < 2*kBlockSize; offset++) { - SetByte(offset, 'x'); - } - - ASSERT_EQ("correct", Read()); - ASSERT_EQ("EOF", Read()); - const int dropped = DroppedBytes(); - ASSERT_LE(dropped, 2*kBlockSize + 100); - ASSERT_GE(dropped, 2*kBlockSize); -} - -TEST(LogTest, ReadStart) { - CheckInitialOffsetRecord(0, 0); -} - -TEST(LogTest, ReadSecondOneOff) { - CheckInitialOffsetRecord(1, 1); -} - -TEST(LogTest, ReadSecondTenThousand) { - CheckInitialOffsetRecord(10000, 1); -} - -TEST(LogTest, ReadSecondStart) { - CheckInitialOffsetRecord(10007, 1); -} - -TEST(LogTest, ReadThirdOneOff) { - CheckInitialOffsetRecord(10008, 2); -} - -TEST(LogTest, ReadThirdStart) { - CheckInitialOffsetRecord(20014, 2); -} - -TEST(LogTest, ReadFourthOneOff) { - CheckInitialOffsetRecord(20015, 3); -} - -TEST(LogTest, ReadFourthFirstBlockTrailer) { - CheckInitialOffsetRecord(log::kBlockSize - 4, 3); -} - -TEST(LogTest, ReadFourthMiddleBlock) { - CheckInitialOffsetRecord(log::kBlockSize + 1, 3); -} - -TEST(LogTest, ReadFourthLastBlock) { - CheckInitialOffsetRecord(2 * log::kBlockSize + 1, 3); -} - -TEST(LogTest, ReadFourthStart) { - CheckInitialOffsetRecord( - 2 * (kHeaderSize + 1000) + (2 * log::kBlockSize - 1000) + 3 * kHeaderSize, - 3); -} - -TEST(LogTest, ReadEnd) { - CheckOffsetPastEndReturnsNoRecords(0); -} - -TEST(LogTest, ReadPastEnd) { - CheckOffsetPastEndReturnsNoRecords(5); -} - -} // namespace log -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/db/log_writer.cc b/clipper/HyperLevelDB/db/log_writer.cc deleted file mode 100644 index 6d6a8b5..0000000 --- a/clipper/HyperLevelDB/db/log_writer.cc +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/log_writer.h" - -#include -#include "hyperleveldb/env.h" -#include "util/coding.h" -#include "util/crc32c.h" -#include "util/mutexlock.h" - -namespace leveldb { -namespace log { - -Writer::Writer(WritableFile* dest) - : dest_(dest), - offset_mtx_(), - offset_(0) { - for (int i = 0; i <= kMaxRecordType; i++) { - char t = static_cast(i); - type_crc_[i] = crc32c::Value(&t, 1); - } -} - -Writer::~Writer() { -} - -Status Writer::AddRecord(const Slice& slice) { - // computation of block_offset requires a pow2 - assert(kBlockSize == 32768); - uint64_t start_offset; - uint64_t end_offset; - - { - MutexLock l(&offset_mtx_); - start_offset = offset_; - end_offset = offset_; - // compute the new offset_ - uint64_t left = slice.size(); - do { - uint64_t block_offset = end_offset & (kBlockSize - 1); - const uint64_t leftover = kBlockSize - block_offset; - assert(leftover > 0); - if (leftover < kHeaderSize) { - end_offset += leftover; - block_offset = 0; - } - // Invariant: we never leave < kHeaderSize bytes in a block. - assert(kBlockSize - block_offset - kHeaderSize >= 0); - - const uint64_t avail = kBlockSize - block_offset - kHeaderSize; - const uint64_t fragment_length = (left < avail) ? left : avail; - - end_offset += kHeaderSize + fragment_length; - left -= fragment_length; - } while (left > 0); - offset_ = end_offset; - } - - const char* ptr = slice.data(); - size_t left = slice.size(); - uint64_t offset = start_offset; - - // Fragment the record if necessary and emit it. Note that if slice - // is empty, we still want to iterate once to emit a single - // zero-length record - Status s; - bool begin = true; - do { - uint64_t block_offset = offset & (kBlockSize - 1); - const uint64_t leftover = kBlockSize - block_offset; - assert(leftover > 0); - if (leftover < kHeaderSize) { - // Switch to a new block - // Fill the trailer (literal below relies on kHeaderSize being 7) - assert(kHeaderSize == 7); - dest_->WriteAt(offset, Slice("\x00\x00\x00\x00\x00\x00", leftover)); - block_offset = 0; - offset += leftover; - } - // Invariant: we never leave < kHeaderSize bytes in a block. - assert(kBlockSize - block_offset - kHeaderSize >= 0); - - const size_t avail = kBlockSize - block_offset - kHeaderSize; - const size_t fragment_length = (left < avail) ? left : avail; - - RecordType type; - const bool end = (left == fragment_length); - if (begin && end) { - type = kFullType; - } else if (begin) { - type = kFirstType; - } else if (end) { - type = kLastType; - } else { - type = kMiddleType; - } - - s = EmitPhysicalRecordAt(type, ptr, offset, fragment_length); - offset += kHeaderSize + fragment_length; - ptr += fragment_length; - left -= fragment_length; - begin = false; - } while (s.ok() && left > 0); - return s; -} - -Status Writer::EmitPhysicalRecordAt(RecordType t, const char* ptr, uint64_t offset, size_t n) { - assert(n <= 0xffff); // Must fit in two bytes - - // Format the header - char buf[kHeaderSize]; - buf[4] = static_cast(n & 0xff); - buf[5] = static_cast(n >> 8); - buf[6] = static_cast(t); - - // Compute the crc of the record type and the payload. - uint32_t crc = crc32c::Extend(type_crc_[t], ptr, n); - crc = crc32c::Mask(crc); // Adjust for storage - EncodeFixed32(buf, crc); - - // Write the header and the payload - Status s = dest_->WriteAt(offset, Slice(buf, kHeaderSize)); - if (s.ok()) { - s = dest_->WriteAt(offset + kHeaderSize, Slice(ptr, n)); - } - return s; -} - -} // namespace log -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/log_writer.h b/clipper/HyperLevelDB/db/log_writer.h deleted file mode 100644 index 72e69fb..0000000 --- a/clipper/HyperLevelDB/db/log_writer.h +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_LOG_WRITER_H_ -#define STORAGE_LEVELDB_DB_LOG_WRITER_H_ - -#include -#include "db/log_format.h" -#include "hyperleveldb/slice.h" -#include "hyperleveldb/status.h" -#include "port/port.h" - -namespace leveldb { - -class WritableFile; - -namespace log { - -class Writer { - public: - // Create a writer that will append data to "*dest". - // "*dest" must be initially empty. - // "*dest" must remain live while this Writer is in use. - explicit Writer(WritableFile* dest); - ~Writer(); - - Status AddRecord(const Slice& slice); - - private: - WritableFile* dest_; - port::Mutex offset_mtx_; - uint64_t offset_; // Current offset in file - - // crc32c values for all supported record types. These are - // pre-computed to reduce the overhead of computing the crc of the - // record type stored in the header. - uint32_t type_crc_[kMaxRecordType + 1]; - - Status EmitPhysicalRecordAt(RecordType type, const char* ptr, uint64_t offset, size_t length); - - // No copying allowed - Writer(const Writer&); - void operator=(const Writer&); -}; - -} // namespace log -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_LOG_WRITER_H_ diff --git a/clipper/HyperLevelDB/db/memtable.cc b/clipper/HyperLevelDB/db/memtable.cc deleted file mode 100644 index 3b5adb4..0000000 --- a/clipper/HyperLevelDB/db/memtable.cc +++ /dev/null @@ -1,180 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/memtable.h" -#include "db/dbformat.h" -#include "hyperleveldb/comparator.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/iterator.h" -#include "util/coding.h" -#include "util/mutexlock.h" - -namespace leveldb { - -static Slice GetLengthPrefixedSlice(const char* data) { - uint32_t len; - const char* p = data; - p = GetVarint32Ptr(p, p + 5, &len); // +5: we assume "p" is not corrupted - return Slice(p, len); -} - -static Slice GetLengthPrefixedSlice(std::pair tk) { - return GetLengthPrefixedSlice(tk.second); -} - -MemTable::MemTable(const InternalKeyComparator& cmp) - : comparator_(cmp), - refs_(0), - table_(comparator_, &arena_) { -} - -MemTable::~MemTable() { - assert(refs_ == 0); -} - -size_t MemTable::ApproximateMemoryUsage() { - MutexLock l(&mtx_); - return arena_.MemoryUsage(); -} - -int MemTable::KeyComparator::operator()(TableKey ak, TableKey bk) - const { - if (ak.first < bk.first) { - return -1; - } else if (ak.first > bk.first) { - return 1; - } - // Internal keys are encoded as length-prefixed strings. - Slice a = GetLengthPrefixedSlice(ak); - Slice b = GetLengthPrefixedSlice(bk); - return comparator.Compare(a, b); -} - -// Encode a suitable internal key target for "target" and return it. -// Uses *scratch as scratch space, and the returned pointer will point -// into this scratch space. -static const char* EncodeKey(std::string* scratch, const Slice& target) { - scratch->clear(); - PutVarint32(scratch, target.size()); - scratch->append(target.data(), target.size()); - return scratch->data(); -} - -class MemTableIterator: public Iterator { - public: - explicit MemTableIterator(MemTable::Table* table, - MemTable::KeyComparator* cmp) - : iter_(table), comparator_(cmp) { } - - virtual bool Valid() const { return iter_.Valid(); } - virtual void Seek(const Slice& k) { - uint64_t keynum = comparator_->comparator.user_comparator()->KeyNum(Slice(k.data(), k.size() - 8)); - iter_.Seek(std::make_pair(keynum, EncodeKey(&tmp_, k))); - } - virtual void SeekToFirst() { iter_.SeekToFirst(); } - virtual void SeekToLast() { iter_.SeekToLast(); } - virtual void Next() { iter_.Next(); } - virtual void Prev() { iter_.Prev(); } - virtual Slice key() const { return GetLengthPrefixedSlice(iter_.key()); } - virtual Slice value() const { - Slice key_slice = GetLengthPrefixedSlice(iter_.key()); - return GetLengthPrefixedSlice(key_slice.data() + key_slice.size()); - } - - virtual Status status() const { return Status::OK(); } - - private: - MemTable::Table::Iterator iter_; - MemTable::KeyComparator* comparator_; - std::string tmp_; // For passing to EncodeKey - - // No copying allowed - MemTableIterator(const MemTableIterator&); - void operator=(const MemTableIterator&); -}; - -Iterator* MemTable::NewIterator() { - return new MemTableIterator(&table_, &comparator_); -} - -void MemTable::Add(SequenceNumber s, ValueType type, - const Slice& key, - const Slice& value) { - // Format of an entry is concatenation of: - // key_size : varint32 of internal_key.size() - // key bytes : char[internal_key.size()] - // value_size : varint32 of value.size() - // value bytes : char[value.size()] - size_t key_size = key.size(); - size_t val_size = value.size(); - size_t internal_key_size = key_size + 8; - const size_t encoded_len = - VarintLength(internal_key_size) + internal_key_size + - VarintLength(val_size) + val_size; - char* buf = NULL; - - { - MutexLock l(&mtx_); - buf = arena_.Allocate(encoded_len); - } - - char* p = EncodeVarint32(buf, internal_key_size); - memcpy(p, key.data(), key_size); - p += key_size; - EncodeFixed64(p, (s << 8) | type); - p += 8; - p = EncodeVarint32(p, val_size); - memcpy(p, value.data(), val_size); - assert((p + val_size) - buf == encoded_len); - uint64_t keynum = comparator_.comparator.user_comparator()->KeyNum(key); - TableKey tk(keynum, buf); - Table::InsertHint ih(&table_, tk); - - { - MutexLock l(&mtx_); - table_.InsertWithHint(&ih, tk); - } -} - -bool MemTable::Get(const LookupKey& key, std::string* value, Status* s) { - Slice memkey = key.memtable_key(); - Table::Iterator iter(&table_); - uint64_t keynum = comparator_.comparator.user_comparator()->KeyNum(key.user_key()); - TableKey tk(keynum, memkey.data()); - iter.Seek(tk); - if (iter.Valid()) { - // entry format is: - // klength varint32 - // userkey char[klength] - // tag uint64 - // vlength varint32 - // value char[vlength] - // Check that it belongs to same user key. We do not check the - // sequence number since the Seek() call above should have skipped - // all entries with overly large sequence numbers. - const char* entry = iter.key().second; - uint32_t key_length; - const char* key_ptr = GetVarint32Ptr(entry, entry+5, &key_length); - if (iter.key().first == tk.first && - comparator_.comparator.user_comparator()->Compare( - Slice(key_ptr, key_length - 8), - key.user_key()) == 0) { - // Correct user key - const uint64_t tag = DecodeFixed64(key_ptr + key_length - 8); - switch (static_cast(tag & 0xff)) { - case kTypeValue: { - Slice v = GetLengthPrefixedSlice(key_ptr + key_length); - value->assign(v.data(), v.size()); - return true; - } - case kTypeDeletion: - *s = Status::NotFound(Slice()); - return true; - } - } - } - return false; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/memtable.h b/clipper/HyperLevelDB/db/memtable.h deleted file mode 100644 index ce95c89..0000000 --- a/clipper/HyperLevelDB/db/memtable.h +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_MEMTABLE_H_ -#define STORAGE_LEVELDB_DB_MEMTABLE_H_ - -#include -#include "hyperleveldb/db.h" -#include "db/dbformat.h" -#include "db/skiplist.h" -#include "util/arena.h" - -namespace leveldb { - -class InternalKeyComparator; -class Mutex; -class MemTableIterator; - -class MemTable { - public: - // MemTables are reference counted. The initial reference count - // is zero and the caller must call Ref() at least once. - explicit MemTable(const InternalKeyComparator& comparator); - - // Increase reference count. - // XXX use a release increment if not using GCC intrinsics - void Ref() { __sync_add_and_fetch(&refs_, 1); } - - // Drop reference count. Delete if no more references exist. - // XXX use an acquire decrement if not using GCC intrinsics - void Unref() { - int refs = __sync_sub_and_fetch(&refs_, 1); - assert(refs >= 0); - if (refs <= 0) { - delete this; - } - } - - // Returns an estimate of the number of bytes of data in use by this - // data structure. - // - // REQUIRES: external synchronization to prevent simultaneous - // operations on the same MemTable. - size_t ApproximateMemoryUsage(); - - // Return an iterator that yields the contents of the memtable. - // - // The caller must ensure that the underlying MemTable remains live - // while the returned iterator is live. The keys returned by this - // iterator are internal keys encoded by AppendInternalKey in the - // db/format.{h,cc} module. - Iterator* NewIterator(); - - // Add an entry into memtable that maps key to value at the - // specified sequence number and with the specified type. - // Typically value will be empty if type==kTypeDeletion. - void Add(SequenceNumber seq, ValueType type, - const Slice& key, - const Slice& value); - - // If memtable contains a value for key, store it in *value and return true. - // If memtable contains a deletion for key, store a NotFound() error - // in *status and return true. - // Else, return false. - bool Get(const LookupKey& key, std::string* value, Status* s); - - private: - ~MemTable(); // Private since only Unref() should be used to delete it - typedef std::pair TableKey; - - struct KeyComparator { - const InternalKeyComparator comparator; - explicit KeyComparator(const InternalKeyComparator& c) : comparator(c) { } - int operator()(TableKey a, TableKey b) const; - }; - friend class MemTableIterator; - friend class MemTableBackwardIterator; - - typedef SkipList Table; - - KeyComparator comparator_; - int refs_; - port::Mutex mtx_; - Arena arena_; - Table table_; - - // No copying allowed - MemTable(const MemTable&); - void operator=(const MemTable&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_MEMTABLE_H_ diff --git a/clipper/HyperLevelDB/db/repair.cc b/clipper/HyperLevelDB/db/repair.cc deleted file mode 100644 index 0b7d209..0000000 --- a/clipper/HyperLevelDB/db/repair.cc +++ /dev/null @@ -1,461 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// We recover the contents of the descriptor from the other files we find. -// (1) Any log files are first converted to tables -// (2) We scan every table to compute -// (a) smallest/largest for the table -// (b) largest sequence number in the table -// (3) We generate descriptor contents: -// - log number is set to zero -// - next-file-number is set to 1 + largest file number we found -// - last-sequence-number is set to largest sequence# found across -// all tables (see 2c) -// - compaction pointers are cleared -// - every table file is added at level 0 -// -// Possible optimization 1: -// (a) Compute total size and use to pick appropriate max-level M -// (b) Sort tables by largest sequence# in the table -// (c) For each table: if it overlaps earlier table, place in level-0, -// else place in level-M. -// Possible optimization 2: -// Store per-table metadata (smallest, largest, largest-seq#, ...) -// in the table's meta section to speed up ScanTable. - -#include "db/builder.h" -#include "db/db_impl.h" -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "db/memtable.h" -#include "db/table_cache.h" -#include "db/version_edit.h" -#include "db/write_batch_internal.h" -#include "hyperleveldb/comparator.h" -#include "hyperleveldb/db.h" -#include "hyperleveldb/env.h" - -namespace leveldb { - -namespace { - -class Repairer { - public: - Repairer(const std::string& dbname, const Options& options) - : dbname_(dbname), - env_(options.env), - icmp_(options.comparator), - ipolicy_(options.filter_policy), - options_(SanitizeOptions(dbname, &icmp_, &ipolicy_, options)), - owns_info_log_(options_.info_log != options.info_log), - owns_cache_(options_.block_cache != options.block_cache), - next_file_number_(1) { - // TableCache can be small since we expect each table to be opened once. - table_cache_ = new TableCache(dbname_, &options_, 10); - } - - ~Repairer() { - delete table_cache_; - if (owns_info_log_) { - delete options_.info_log; - } - if (owns_cache_) { - delete options_.block_cache; - } - } - - Status Run() { - Status status = FindFiles(); - if (status.ok()) { - ConvertLogFilesToTables(); - ExtractMetaData(); - status = WriteDescriptor(); - } - if (status.ok()) { - unsigned long long bytes = 0; - for (size_t i = 0; i < tables_.size(); i++) { - bytes += tables_[i].meta.file_size; - } - Log(options_.info_log, - "**** Repaired leveldb %s; " - "recovered %d files; %llu bytes. " - "Some data may have been lost. " - "****", - dbname_.c_str(), - static_cast(tables_.size()), - bytes); - } - return status; - } - - private: - struct TableInfo { - FileMetaData meta; - SequenceNumber max_sequence; - }; - - std::string const dbname_; - Env* const env_; - InternalKeyComparator const icmp_; - InternalFilterPolicy const ipolicy_; - Options const options_; - bool owns_info_log_; - bool owns_cache_; - TableCache* table_cache_; - VersionEdit edit_; - - std::vector manifests_; - std::vector table_numbers_; - std::vector logs_; - std::vector tables_; - uint64_t next_file_number_; - - Status FindFiles() { - std::vector filenames; - Status status = env_->GetChildren(dbname_, &filenames); - if (!status.ok()) { - return status; - } - if (filenames.empty()) { - return Status::IOError(dbname_, "repair found no files"); - } - - uint64_t number; - FileType type; - for (size_t i = 0; i < filenames.size(); i++) { - if (ParseFileName(filenames[i], &number, &type)) { - if (type == kDescriptorFile) { - manifests_.push_back(filenames[i]); - } else { - if (number + 1 > next_file_number_) { - next_file_number_ = number + 1; - } - if (type == kLogFile) { - logs_.push_back(number); - } else if (type == kTableFile) { - table_numbers_.push_back(number); - } else { - // Ignore other files - } - } - } - } - return status; - } - - void ConvertLogFilesToTables() { - for (size_t i = 0; i < logs_.size(); i++) { - std::string logname = LogFileName(dbname_, logs_[i]); - Status status = ConvertLogToTable(logs_[i]); - if (!status.ok()) { - Log(options_.info_log, "Log #%llu: ignoring conversion error: %s", - (unsigned long long) logs_[i], - status.ToString().c_str()); - } - ArchiveFile(logname); - } - } - - Status ConvertLogToTable(uint64_t log) { - struct LogReporter : public log::Reader::Reporter { - Env* env; - Logger* info_log; - uint64_t lognum; - virtual void Corruption(size_t bytes, const Status& s) { - // We print error messages for corruption, but continue repairing. - Log(info_log, "Log #%llu: dropping %d bytes; %s", - (unsigned long long) lognum, - static_cast(bytes), - s.ToString().c_str()); - } - }; - - // Open the log file - std::string logname = LogFileName(dbname_, log); - SequentialFile* lfile; - Status status = env_->NewSequentialFile(logname, &lfile); - if (!status.ok()) { - return status; - } - - // Create the log reader. - LogReporter reporter; - reporter.env = env_; - reporter.info_log = options_.info_log; - reporter.lognum = log; - // We intentially make log::Reader do checksumming so that - // corruptions cause entire commits to be skipped instead of - // propagating bad information (like overly large sequence - // numbers). - log::Reader reader(lfile, &reporter, false/*do not checksum*/, - 0/*initial_offset*/); - - // Read all the records and add to a memtable - std::string scratch; - Slice record; - WriteBatch batch; - MemTable* mem = new MemTable(icmp_); - mem->Ref(); - int counter = 0; - while (reader.ReadRecord(&record, &scratch)) { - if (record.size() < 12) { - reporter.Corruption( - record.size(), Status::Corruption("log record too small")); - continue; - } - WriteBatchInternal::SetContents(&batch, record); - status = WriteBatchInternal::InsertInto(&batch, mem); - if (status.ok()) { - counter += WriteBatchInternal::Count(&batch); - } else { - Log(options_.info_log, "Log #%llu: ignoring %s", - (unsigned long long) log, - status.ToString().c_str()); - status = Status::OK(); // Keep going with rest of file - } - } - delete lfile; - - // Do not record a version edit for this conversion to a Table - // since ExtractMetaData() will also generate edits. - FileMetaData meta; - meta.number = next_file_number_++; - Iterator* iter = mem->NewIterator(); - status = BuildTable(dbname_, env_, options_, table_cache_, iter, &meta); - delete iter; - mem->Unref(); - mem = NULL; - if (status.ok()) { - if (meta.file_size > 0) { - table_numbers_.push_back(meta.number); - } - } - Log(options_.info_log, "Log #%llu: %d ops saved to Table #%llu %s", - (unsigned long long) log, - counter, - (unsigned long long) meta.number, - status.ToString().c_str()); - return status; - } - - void ExtractMetaData() { - for (size_t i = 0; i < table_numbers_.size(); i++) { - ScanTable(table_numbers_[i]); - } - } - - Iterator* NewTableIterator(const FileMetaData& meta) { - // Same as compaction iterators: if paranoid_checks are on, turn - // on checksum verification. - ReadOptions r; - r.verify_checksums = options_.paranoid_checks; - return table_cache_->NewIterator(r, meta.number, meta.file_size); - } - - void ScanTable(uint64_t number) { - TableInfo t; - t.meta.number = number; - std::string fname = SSTTableFileName(dbname_, number); - Status status = env_->GetFileSize(fname, &t.meta.file_size); - if (!status.ok()) { - // Try alternate file name. - fname = TableFileName(dbname_, number); - Status s2 = env_->GetFileSize(fname, &t.meta.file_size); - if (s2.ok()) { - status = Status::OK(); - } - } - if (!status.ok()) { - ArchiveFile(TableFileName(dbname_, number)); - ArchiveFile(SSTTableFileName(dbname_, number)); - Log(options_.info_log, "Table #%llu: dropped: %s", - (unsigned long long) t.meta.number, - status.ToString().c_str()); - return; - } - - // Extract metadata by scanning through table. - int counter = 0; - Iterator* iter = NewTableIterator(t.meta); - bool empty = true; - ParsedInternalKey parsed; - t.max_sequence = 0; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - Slice key = iter->key(); - if (!ParseInternalKey(key, &parsed)) { - Log(options_.info_log, "Table #%llu: unparsable key %s", - (unsigned long long) t.meta.number, - EscapeString(key).c_str()); - continue; - } - - counter++; - if (empty) { - empty = false; - t.meta.smallest.DecodeFrom(key); - } - t.meta.largest.DecodeFrom(key); - if (parsed.sequence > t.max_sequence) { - t.max_sequence = parsed.sequence; - } - } - if (!iter->status().ok()) { - status = iter->status(); - } - delete iter; - Log(options_.info_log, "Table #%llu: %d entries %s", - (unsigned long long) t.meta.number, - counter, - status.ToString().c_str()); - - if (status.ok()) { - tables_.push_back(t); - } else { - RepairTable(fname, t); // RepairTable archives input file. - } - } - - void RepairTable(const std::string& src, TableInfo t) { - // We will copy src contents to a new table and then rename the - // new table over the source. - - // Create builder. - std::string copy = TableFileName(dbname_, next_file_number_++); - WritableFile* file; - Status s = env_->NewWritableFile(copy, &file); - if (!s.ok()) { - return; - } - TableBuilder* builder = new TableBuilder(options_, file); - - // Copy data. - Iterator* iter = NewTableIterator(t.meta); - int counter = 0; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - builder->Add(iter->key(), iter->value()); - counter++; - } - delete iter; - - ArchiveFile(src); - if (counter == 0) { - builder->Abandon(); // Nothing to save - } else { - s = builder->Finish(); - if (s.ok()) { - t.meta.file_size = builder->FileSize(); - } - } - delete builder; - builder = NULL; - - if (s.ok()) { - s = file->Close(); - } - delete file; - file = NULL; - - if (counter > 0 && s.ok()) { - std::string orig = TableFileName(dbname_, t.meta.number); - s = env_->RenameFile(copy, orig); - if (s.ok()) { - Log(options_.info_log, "Table #%llu: %d entries repaired", - (unsigned long long) t.meta.number, counter); - tables_.push_back(t); - } - } - if (!s.ok()) { - env_->DeleteFile(copy); - } - } - - Status WriteDescriptor() { - std::string tmp = TempFileName(dbname_, 1); - WritableFile* file; - Status status = env_->NewWritableFile(tmp, &file); - if (!status.ok()) { - return status; - } - - SequenceNumber max_sequence = 0; - for (size_t i = 0; i < tables_.size(); i++) { - if (max_sequence < tables_[i].max_sequence) { - max_sequence = tables_[i].max_sequence; - } - } - - edit_.SetComparatorName(icmp_.user_comparator()->Name()); - edit_.SetLogNumber(0); - edit_.SetNextFile(next_file_number_); - edit_.SetLastSequence(max_sequence); - - for (size_t i = 0; i < tables_.size(); i++) { - // TODO(opt): separate out into multiple levels - const TableInfo& t = tables_[i]; - edit_.AddFile(0, t.meta.number, t.meta.file_size, - t.meta.smallest, t.meta.largest); - } - - //fprintf(stderr, "NewDescriptor:\n%s\n", edit_.DebugString().c_str()); - { - log::Writer log(file); - std::string record; - edit_.EncodeTo(&record); - status = log.AddRecord(record); - } - if (status.ok()) { - status = file->Close(); - } - delete file; - file = NULL; - - if (!status.ok()) { - env_->DeleteFile(tmp); - } else { - // Discard older manifests - for (size_t i = 0; i < manifests_.size(); i++) { - ArchiveFile(dbname_ + "/" + manifests_[i]); - } - - // Install new manifest - status = env_->RenameFile(tmp, DescriptorFileName(dbname_, 1)); - if (status.ok()) { - status = SetCurrentFile(env_, dbname_, 1); - } else { - env_->DeleteFile(tmp); - } - } - return status; - } - - void ArchiveFile(const std::string& fname) { - // Move into another directory. E.g., for - // dir/foo - // rename to - // dir/lost/foo - const char* slash = strrchr(fname.c_str(), '/'); - std::string new_dir; - if (slash != NULL) { - new_dir.assign(fname.data(), slash - fname.data()); - } - new_dir.append("/lost"); - env_->CreateDir(new_dir); // Ignore error - std::string new_file = new_dir; - new_file.append("/"); - new_file.append((slash == NULL) ? fname.c_str() : slash + 1); - Status s = env_->RenameFile(fname, new_file); - Log(options_.info_log, "Archiving %s: %s\n", - fname.c_str(), s.ToString().c_str()); - } -}; -} // namespace - -Status RepairDB(const std::string& dbname, const Options& options) { - Repairer repairer(dbname, options); - return repairer.Run(); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/replay_iterator.cc b/clipper/HyperLevelDB/db/replay_iterator.cc deleted file mode 100644 index 01b7731..0000000 --- a/clipper/HyperLevelDB/db/replay_iterator.cc +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright (c) 2013 The HyperLevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/replay_iterator.h" - -#include "db/filename.h" -#include "db/db_impl.h" -#include "db/dbformat.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/iterator.h" -#include "port/port.h" -#include "util/logging.h" -#include "util/mutexlock.h" -#include "util/random.h" - -namespace leveldb { - -ReplayIterator::ReplayIterator() { -} - -ReplayIterator::~ReplayIterator() { -} - -ReplayState::ReplayState(Iterator* i, SequenceNumber s, SequenceNumber l) - : mem_(NULL), - iter_(i), - seq_start_(s), - seq_limit_(l) { -} - -ReplayState::ReplayState(MemTable* m, SequenceNumber s) - : mem_(m), - iter_(NULL), - seq_start_(s), - seq_limit_(0) { -} - -ReplayIteratorImpl::ReplayIteratorImpl(DBImpl* db, port::Mutex* mutex, const Comparator* cmp, - Iterator* iter, MemTable* m, SequenceNumber s) - : ReplayIterator(), - db_(db), - mutex_(mutex), - user_comparator_(cmp), - start_at_(s), - valid_(), - status_(), - has_current_user_key_(false), - current_user_key_(), - current_user_sequence_(), - rs_(iter, s, kMaxSequenceNumber), - mems_() { - m->Ref(); - mems_.push_back(ReplayState(m, s)); -} - -ReplayIteratorImpl::~ReplayIteratorImpl() { -} - -bool ReplayIteratorImpl::Valid() { - Prime(); - return valid_; -} - -void ReplayIteratorImpl::Next() { - rs_.iter_->Next(); -} - -void ReplayIteratorImpl::SkipTo(const Slice& target) { - std::string internal_key; - AppendInternalKey(&internal_key, ParsedInternalKey(target, kMaxSequenceNumber, kValueTypeForSeek)); - rs_.iter_->Seek(internal_key); -} - -void ReplayIteratorImpl::SkipToLast() { - rs_.iter_->SeekToLast(); - while (rs_.iter_->Valid()) { - rs_.iter_->Next(); - } -} - -void SkipTo(const Slice& target) { -} - -bool ReplayIteratorImpl::HasValue() { - ParsedInternalKey ikey; - return ParseKey(&ikey) && ikey.type == kTypeValue; -} - -Slice ReplayIteratorImpl::key() const { - assert(valid_); - return ExtractUserKey(rs_.iter_->key()); -} - -Slice ReplayIteratorImpl::value() const { - assert(valid_); - return rs_.iter_->value(); -} - -Status ReplayIteratorImpl::status() const { - if (!status_.ok()) { - return status_; - } else { - return rs_.iter_->status(); - } -} - -void ReplayIteratorImpl::enqueue(MemTable* m, SequenceNumber s) { - m->Ref(); - mems_.push_back(ReplayState(m, s)); -} - -void ReplayIteratorImpl::cleanup() { - mutex_->Unlock(); - if (rs_.iter_) { - delete rs_.iter_; - } - if (rs_.mem_) { - rs_.mem_->Unref(); - } - mutex_->Lock(); - rs_.iter_ = NULL; - rs_.mem_ = NULL; - - while (!mems_.empty()) { - MemTable* mem = mems_.front().mem_; - Iterator* iter = mems_.front().iter_; - mutex_->Unlock(); - if (iter) { - delete iter; - } - if (mem) { - mem->Unref(); - } - mutex_->Lock(); - mems_.pop_front(); - } - - delete this; -} - -bool ReplayIteratorImpl::ParseKey(ParsedInternalKey* ikey) { - return ParseKey(rs_.iter_->key(), ikey); -} - -bool ReplayIteratorImpl::ParseKey(const Slice& k, ParsedInternalKey* ikey) { - if (!ParseInternalKey(k, ikey)) { - status_ = Status::Corruption("corrupted internal key in ReplayIteratorImpl"); - return false; - } else { - return true; - } -} - -void ReplayIteratorImpl::Prime() { - valid_ = false; - if (!status_.ok()) { - return; - } - while (true) { - assert(rs_.iter_); - while (rs_.iter_->Valid()) { - ParsedInternalKey ikey; - if (!ParseKey(rs_.iter_->key(), &ikey)) { - return; - } - // if we can consider this key, and it's recent enough and of the right - // type - if ((!has_current_user_key_ || - user_comparator_->Compare(ikey.user_key, - Slice(current_user_key_)) != 0 || - ikey.sequence >= current_user_sequence_) && - (ikey.sequence >= rs_.seq_start_ && - (ikey.type == kTypeDeletion || ikey.type == kTypeValue))) { - has_current_user_key_ = true; - current_user_key_.assign(ikey.user_key.data(), ikey.user_key.size()); - current_user_sequence_ = ikey.sequence; - valid_ = true; - return; - } - rs_.iter_->Next(); - } - if (!rs_.iter_->status().ok()) { - status_ = rs_.iter_->status(); - valid_ = false; - return; - } - // we're done with rs_.iter_ - has_current_user_key_ = false; - current_user_key_.assign("", 0); - current_user_sequence_ = kMaxSequenceNumber; - delete rs_.iter_; - rs_.iter_ = NULL; - { - MutexLock l(mutex_); - if (mems_.empty() || - rs_.seq_limit_ < mems_.front().seq_start_) { - rs_.seq_start_ = rs_.seq_limit_; - } else { - if (rs_.mem_) { - rs_.mem_->Unref(); - rs_.mem_ = NULL; - } - rs_.mem_ = mems_.front().mem_; - rs_.seq_start_ = mems_.front().seq_start_; - mems_.pop_front(); - } - } - rs_.seq_limit_ = db_->LastSequence(); - rs_.iter_ = rs_.mem_->NewIterator(); - rs_.iter_->SeekToFirst(); - assert(rs_.seq_start_ <= rs_.seq_limit_); - if (rs_.seq_start_ == rs_.seq_limit_) { - valid_ = false; - return; - } - } -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/replay_iterator.h b/clipper/HyperLevelDB/db/replay_iterator.h deleted file mode 100644 index 165b040..0000000 --- a/clipper/HyperLevelDB/db/replay_iterator.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2013 The HyperLevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_ROLLING_ITERATOR_H_ -#define STORAGE_LEVELDB_DB_ROLLING_ITERATOR_H_ - -#include -#include -#include "hyperleveldb/db.h" -#include "hyperleveldb/replay_iterator.h" -#include "db/dbformat.h" -#include "db/memtable.h" - -namespace leveldb { - -class DBImpl; -struct ReplayState { - ReplayState(Iterator* i, SequenceNumber s, SequenceNumber l); - ReplayState(MemTable* m, SequenceNumber s); - MemTable* mem_; - Iterator* iter_; - SequenceNumber seq_start_; - SequenceNumber seq_limit_; -}; - -class ReplayIteratorImpl : public ReplayIterator { - public: - // Refs the memtable on its own; caller must hold mutex while creating this - ReplayIteratorImpl(DBImpl* db, port::Mutex* mutex, const Comparator* cmp, - Iterator* iter, MemTable* m, SequenceNumber s); - virtual bool Valid(); - virtual void Next(); - virtual void SkipTo(const Slice& target); - virtual void SkipToLast(); - virtual bool HasValue(); - virtual Slice key() const; - virtual Slice value() const; - virtual Status status() const; - - // extra interface - - // we ref the memtable; caller holds mutex passed into ctor - // REQUIRES: caller must hold mutex passed into ctor - void enqueue(MemTable* m, SequenceNumber s); - - // REQUIRES: caller must hold mutex passed into ctor - void cleanup(); // calls delete this; - - private: - virtual ~ReplayIteratorImpl(); - bool ParseKey(ParsedInternalKey* ikey); - bool ParseKey(const Slice& k, ParsedInternalKey* ikey); - void Prime(); - - DBImpl* const db_; - port::Mutex* mutex_; - const Comparator* const user_comparator_; - SequenceNumber const start_at_; - bool valid_; - Status status_; - - bool has_current_user_key_; - std::string current_user_key_; - SequenceNumber current_user_sequence_; - - ReplayState rs_; - std::list mems_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_ROLLING_ITERATOR_H_ diff --git a/clipper/HyperLevelDB/db/skiplist.h b/clipper/HyperLevelDB/db/skiplist.h deleted file mode 100644 index 8f17ad2..0000000 --- a/clipper/HyperLevelDB/db/skiplist.h +++ /dev/null @@ -1,460 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Thread safety -// ------------- -// -// Writes require external synchronization, most likely a mutex. -// Reads require a guarantee that the SkipList will not be destroyed -// while the read is in progress. Apart from that, reads progress -// without any internal locking or synchronization. -// -// Invariants: -// -// (1) Allocated nodes are never deleted until the SkipList is -// destroyed. This is trivially guaranteed by the code since we -// never delete any skip list nodes. -// -// (2) The contents of a Node except for the next/prev pointers are -// immutable after the Node has been linked into the SkipList. -// Only Insert() modifies the list, and it is careful to initialize -// a node and use release-stores to publish the nodes in one or -// more lists. -// -// ... prev vs. next pointer ordering ... - -#include -#include -#include "port/port.h" -#include "util/arena.h" -#include "util/random.h" - -namespace leveldb { - -class Arena; - -template -class SkipList { - private: - struct Node; - enum { kMaxHeight = 12 }; - - public: - // Create a new SkipList object that will use "cmp" for comparing keys, - // and will allocate memory using "*arena". Objects allocated in the arena - // must remain allocated for the lifetime of the skiplist object. - explicit SkipList(Comparator cmp, Arena* arena); - - // Insert key into the list. - // REQUIRES: nothing that compares equal to key is currently in the list. - // REQUIRES: external synchronization. - void Insert(const Key& key); - - // Insert key into the list using the iterator as a hint. - // REQUIRES: nothing that compares equal to key is currently in the list. - // REQUIRES: external synchronization. - class InsertHint; - void InsertWithHint(InsertHint* ih, const Key& key); - - // Returns true iff an entry that compares equal to key is in the list. - bool Contains(const Key& key) const; - - // Perform expensive iteration over the skip list prior to insert so that the - // cost of a synchronized insert is reduced when the structure is full. - // REQUIRES: same synchronization as is necessary for a read. - class InsertHint { - public: - InsertHint(const SkipList* list, const Key& key); - - private: - const SkipList* list_; - Node* x_; - Node* prev_[kMaxHeight]; - Node* obs_[kMaxHeight]; - - // No copying allowed - InsertHint(const InsertHint&); - void operator=(const InsertHint&); - friend class SkipList; - }; - - // Iteration over the contents of a skip list - class Iterator { - public: - // Initialize an iterator over the specified list. - // The returned iterator is not valid. - explicit Iterator(const SkipList* list); - - // Returns true iff the iterator is positioned at a valid node. - bool Valid() const; - - // Returns the key at the current position. - // REQUIRES: Valid() - const Key& key() const; - - // Advances to the next position. - // REQUIRES: Valid() - void Next(); - - // Advances to the previous position. - // REQUIRES: Valid() - void Prev(); - - // Advance to the first entry with a key >= target - void Seek(const Key& target); - - // Position at the first entry in list. - // Final state of iterator is Valid() iff list is not empty. - void SeekToFirst(); - - // Position at the last entry in list. - // Final state of iterator is Valid() iff list is not empty. - void SeekToLast(); - - private: - const SkipList* list_; - Node* node_; - // Intentionally copyable - }; - - private: - // Immutable after construction - Comparator const compare_; - Arena* const arena_; // Arena used for allocations of nodes - - Node* const head_; - - // Modified only by Insert(). Read racily by readers, but stale - // values are ok. - port::AtomicPointer max_height_; // Height of the entire list - - inline int GetMaxHeight() const { - return static_cast( - reinterpret_cast(max_height_.NoBarrier_Load())); - } - - // Read/written only by Insert(). - Random rnd_; - - Node* NewNode(const Key& key, int height); - int RandomHeight(); - bool Equal(const Key& a, const Key& b) const { return (compare_(a, b) == 0); } - - // Return true if key is greater than the data stored in "n" - bool KeyIsAfterNode(const Key& key, Node* n) const; - - // Return the earliest node that comes at or after key. - // Return NULL if there is no such node. - // - // If prev is non-NULL, fills prev[level] with pointer to previous - // node at "level" for every level in [0..max_height_-1]. - Node* FindGreaterOrEqual(const Key& key, Node** prev, Node** obs) const; - - // Return the latest node with a key < key. - // Return head_ if there is no such node. - Node* FindLessThan(const Key& key) const; - - // Return the last node in the list. - // Return head_ if list is empty. - Node* FindLast() const; - - // Update the state of the InsertHint to reflect the latest values - void UpdateHint(InsertHint* ih, const Key& k); - - // No copying allowed - SkipList(const SkipList&); - void operator=(const SkipList&); -}; - -// Implementation details follow -template -struct SkipList::Node { - explicit Node(const Key& k) : key(k) { } - - Key const key; - - // Accessors/mutators for links. Wrapped in methods so we can - // add the appropriate barriers as necessary. - Node* Next(int n) { - assert(n >= 0); - // Use an 'acquire load' so that we observe a fully initialized - // version of the returned Node. - return reinterpret_cast(next_[n].Acquire_Load()); - } - void SetNext(int n, Node* x) { - assert(n >= 0); - // Use a 'release store' so that anybody who reads through this - // pointer observes a fully initialized version of the inserted node. - next_[n].Release_Store(x); - } - - // No-barrier variants that can be safely used in a few locations. - Node* NoBarrier_Next(int n) { - assert(n >= 0); - return reinterpret_cast(next_[n].NoBarrier_Load()); - } - void NoBarrier_SetNext(int n, Node* x) { - assert(n >= 0); - next_[n].NoBarrier_Store(x); - } - - private: - // Array of length equal to the node height. next_[0] is lowest level link. - port::AtomicPointer next_[1]; -}; - -template -typename SkipList::Node* -SkipList::NewNode(const Key& key, int height) { - char* mem = arena_->AllocateAligned( - sizeof(Node) + sizeof(port::AtomicPointer) * (height - 1)); - return new (mem) Node(key); -} - -template -inline SkipList::Iterator::Iterator(const SkipList* list) { - list_ = list; - node_ = NULL; -} - -template -inline bool SkipList::Iterator::Valid() const { - return node_ != NULL; -} - -template -inline const Key& SkipList::Iterator::key() const { - assert(Valid()); - return node_->key; -} - -template -inline void SkipList::Iterator::Next() { - assert(Valid()); - node_ = node_->Next(0); -} - -template -inline void SkipList::Iterator::Prev() { - // Instead of using explicit "prev" links, we just search for the - // last node that falls before key. - assert(Valid()); - node_ = list_->FindLessThan(node_->key); - if (node_ == list_->head_) { - node_ = NULL; - } -} - -template -inline void SkipList::Iterator::Seek(const Key& target) { - node_ = list_->FindGreaterOrEqual(target, NULL, NULL); -} - -template -inline void SkipList::Iterator::SeekToFirst() { - node_ = list_->head_->Next(0); -} - -template -inline void SkipList::Iterator::SeekToLast() { - node_ = list_->FindLast(); - if (node_ == list_->head_) { - node_ = NULL; - } -} - -template -int SkipList::RandomHeight() { - // Increase height with probability 1 in kBranching - static const unsigned int kBranching = 4; - int height = 1; - while (height < kMaxHeight && ((rnd_.Next() % kBranching) == 0)) { - height++; - } - assert(height > 0); - assert(height <= kMaxHeight); - return height; -} - -template -bool SkipList::KeyIsAfterNode(const Key& key, Node* n) const { - // NULL n is considered infinite - return (n != NULL) && (compare_(n->key, key) < 0); -} - -template -typename SkipList::Node* SkipList::FindGreaterOrEqual(const Key& key, Node** prev, Node** obs) - const { - Node* x = head_; - int level = GetMaxHeight() - 1; - while (true) { - Node* next = x->Next(level); - if (KeyIsAfterNode(key, next)) { - // Keep searching in this list - x = next; - } else { - if (prev != NULL) prev[level] = x; - if (obs != NULL) obs[level] = next; - if (level == 0) { - return next; - } else { - // Switch to next list - level--; - } - } - } -} - -template -typename SkipList::Node* -SkipList::FindLessThan(const Key& key) const { - Node* x = head_; - int level = GetMaxHeight() - 1; - while (true) { - assert(x == head_ || compare_(x->key, key) < 0); - Node* next = x->Next(level); - if (next == NULL || compare_(next->key, key) >= 0) { - if (level == 0) { - return x; - } else { - // Switch to next list - level--; - } - } else { - x = next; - } - } -} - -template -typename SkipList::Node* SkipList::FindLast() - const { - Node* x = head_; - int level = GetMaxHeight() - 1; - while (true) { - Node* next = x->Next(level); - if (next == NULL) { - if (level == 0) { - return x; - } else { - // Switch to next list - level--; - } - } else { - x = next; - } - } -} - -template -SkipList::SkipList(Comparator cmp, Arena* arena) - : compare_(cmp), - arena_(arena), - head_(NewNode(Key(), kMaxHeight)), - max_height_(reinterpret_cast(1)), - rnd_(0xdeadbeef) { - for (int i = 0; i < kMaxHeight; i++) { - head_->SetNext(i, NULL); - } -} - -template -void SkipList::Insert(const Key& key) { - InsertHint ih(this, key); - return InsertWithHint(&ih, key); -} - -template -SkipList::InsertHint::InsertHint(const SkipList* list, const Key& key) - : list_(list), - x_(NULL) { - for (int i = 0; i < kMaxHeight; ++i) - { - prev_[i] = list_->head_; - obs_[i] = NULL; - } - x_ = list_->FindGreaterOrEqual(key, prev_, obs_); -} - -template -void SkipList::UpdateHint(InsertHint* ih, const Key& key) { - // TODO(opt): We can be smarter here by using the skip list structure to - // advance. It's assumed that a small number of insertions to the SkipList - // happen between the time ih was created and now. - for (int level = 0; level < kMaxHeight; ++level) { - Node* x = ih->prev_[level]; - while (true) { - Node* next = x->Next(level); - if (next == ih->obs_[level] || !KeyIsAfterNode(key, next)) { - ih->prev_[level] = x; - ih->obs_[level] = next; - break; - } - x = next; - } - } - ih->x_ = ih->obs_[0]; -} - -template -void SkipList::InsertWithHint(InsertHint* ih, const Key& key) { - // Advance pointers to account for any data written between the creation of - // the InsertHint and this call. - UpdateHint(ih, key); - Node* prev[kMaxHeight]; - Node* x = ih->x_; - for (int i = 0; i < kMaxHeight; ++i) { - prev[i] = ih->prev_[i]; - } - -#if 0 - Node* check_prev[kMaxHeight]; - Node* check_x = FindGreaterOrEqual(key, check_prev, NULL); - - for (int i = 0; i < GetMaxHeight(); ++i) { - assert(check_prev[i] == prev[i]); - assert(check_x == x); - } -#endif - - // Our data structure does not allow duplicate insertion - assert(x == NULL || !Equal(key, x->key)); - - int height = RandomHeight(); - if (height > GetMaxHeight()) { - for (int i = GetMaxHeight(); i < height; i++) { - prev[i] = head_; - } - //fprintf(stderr, "Change height from %d to %d\n", max_height_, height); - - // It is ok to mutate max_height_ without any synchronization - // with concurrent readers. A concurrent reader that observes - // the new value of max_height_ will see either the old value of - // new level pointers from head_ (NULL), or a new value set in - // the loop below. In the former case the reader will - // immediately drop to the next level since NULL sorts after all - // keys. In the latter case the reader will use the new node. - max_height_.NoBarrier_Store(reinterpret_cast(height)); - } - - x = NewNode(key, height); - for (int i = 0; i < height; i++) { - // NoBarrier_SetNext() suffices since we will add a barrier when - // we publish a pointer to "x" in prev[i]. - x->NoBarrier_SetNext(i, prev[i]->NoBarrier_Next(i)); - prev[i]->SetNext(i, x); - } -} - -template -bool SkipList::Contains(const Key& key) const { - Node* x = FindGreaterOrEqual(key, NULL, NULL); - if (x != NULL && Equal(key, x->key)) { - return true; - } else { - return false; - } -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/skiplist_test.cc b/clipper/HyperLevelDB/db/skiplist_test.cc deleted file mode 100644 index ce3a259..0000000 --- a/clipper/HyperLevelDB/db/skiplist_test.cc +++ /dev/null @@ -1,378 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/skiplist.h" -#include -#include "hyperleveldb/env.h" -#include "util/arena.h" -#include "util/hash.h" -#include "util/random.h" -#include "util/testharness.h" - -namespace leveldb { - -typedef uint64_t Key; - -struct Comparator { - int operator()(const Key& a, const Key& b) const { - if (a < b) { - return -1; - } else if (a > b) { - return +1; - } else { - return 0; - } - } -}; - -class SkipTest { }; - -TEST(SkipTest, Empty) { - Arena arena; - Comparator cmp; - SkipList list(cmp, &arena); - ASSERT_TRUE(!list.Contains(10)); - - SkipList::Iterator iter(&list); - ASSERT_TRUE(!iter.Valid()); - iter.SeekToFirst(); - ASSERT_TRUE(!iter.Valid()); - iter.Seek(100); - ASSERT_TRUE(!iter.Valid()); - iter.SeekToLast(); - ASSERT_TRUE(!iter.Valid()); -} - -TEST(SkipTest, InsertAndLookup) { - const int N = 2000; - const int R = 5000; - Random rnd(1000); - std::set keys; - Arena arena; - Comparator cmp; - SkipList list(cmp, &arena); - for (int i = 0; i < N; i++) { - Key key = rnd.Next() % R; - if (keys.insert(key).second) { - list.Insert(key); - } - } - - for (int i = 0; i < R; i++) { - if (list.Contains(i)) { - ASSERT_EQ(keys.count(i), 1); - } else { - ASSERT_EQ(keys.count(i), 0); - } - } - - // Simple iterator tests - { - SkipList::Iterator iter(&list); - ASSERT_TRUE(!iter.Valid()); - - iter.Seek(0); - ASSERT_TRUE(iter.Valid()); - ASSERT_EQ(*(keys.begin()), iter.key()); - - iter.SeekToFirst(); - ASSERT_TRUE(iter.Valid()); - ASSERT_EQ(*(keys.begin()), iter.key()); - - iter.SeekToLast(); - ASSERT_TRUE(iter.Valid()); - ASSERT_EQ(*(keys.rbegin()), iter.key()); - } - - // Forward iteration test - for (int i = 0; i < R; i++) { - SkipList::Iterator iter(&list); - iter.Seek(i); - - // Compare against model iterator - std::set::iterator model_iter = keys.lower_bound(i); - for (int j = 0; j < 3; j++) { - if (model_iter == keys.end()) { - ASSERT_TRUE(!iter.Valid()); - break; - } else { - ASSERT_TRUE(iter.Valid()); - ASSERT_EQ(*model_iter, iter.key()); - ++model_iter; - iter.Next(); - } - } - } - - // Backward iteration test - { - SkipList::Iterator iter(&list); - iter.SeekToLast(); - - // Compare against model iterator - for (std::set::reverse_iterator model_iter = keys.rbegin(); - model_iter != keys.rend(); - ++model_iter) { - ASSERT_TRUE(iter.Valid()); - ASSERT_EQ(*model_iter, iter.key()); - iter.Prev(); - } - ASSERT_TRUE(!iter.Valid()); - } -} - -// We want to make sure that with a single writer and multiple -// concurrent readers (with no synchronization other than when a -// reader's iterator is created), the reader always observes all the -// data that was present in the skip list when the iterator was -// constructor. Because insertions are happening concurrently, we may -// also observe new values that were inserted since the iterator was -// constructed, but we should never miss any values that were present -// at iterator construction time. -// -// We generate multi-part keys: -// -// where: -// key is in range [0..K-1] -// gen is a generation number for key -// hash is hash(key,gen) -// -// The insertion code picks a random key, sets gen to be 1 + the last -// generation number inserted for that key, and sets hash to Hash(key,gen). -// -// At the beginning of a read, we snapshot the last inserted -// generation number for each key. We then iterate, including random -// calls to Next() and Seek(). For every key we encounter, we -// check that it is either expected given the initial snapshot or has -// been concurrently added since the iterator started. -class ConcurrentTest { - private: - static const uint32_t K = 4; - - static uint64_t key(Key key) { return (key >> 40); } - static uint64_t gen(Key key) { return (key >> 8) & 0xffffffffu; } - static uint64_t hash(Key key) { return key & 0xff; } - - static uint64_t HashNumbers(uint64_t k, uint64_t g) { - uint64_t data[2] = { k, g }; - return Hash(reinterpret_cast(data), sizeof(data), 0); - } - - static Key MakeKey(uint64_t k, uint64_t g) { - assert(sizeof(Key) == sizeof(uint64_t)); - assert(k <= K); // We sometimes pass K to seek to the end of the skiplist - assert(g <= 0xffffffffu); - return ((k << 40) | (g << 8) | (HashNumbers(k, g) & 0xff)); - } - - static bool IsValidKey(Key k) { - return hash(k) == (HashNumbers(key(k), gen(k)) & 0xff); - } - - static Key RandomTarget(Random* rnd) { - switch (rnd->Next() % 10) { - case 0: - // Seek to beginning - return MakeKey(0, 0); - case 1: - // Seek to end - return MakeKey(K, 0); - default: - // Seek to middle - return MakeKey(rnd->Next() % K, 0); - } - } - - // Per-key generation - struct State { - port::AtomicPointer generation[K]; - void Set(int k, intptr_t v) { - generation[k].Release_Store(reinterpret_cast(v)); - } - intptr_t Get(int k) { - return reinterpret_cast(generation[k].Acquire_Load()); - } - - State() { - for (int k = 0; k < K; k++) { - Set(k, 0); - } - } - }; - - // Current state of the test - State current_; - - Arena arena_; - - // SkipList is not protected by mu_. We just use a single writer - // thread to modify it. - SkipList list_; - - public: - ConcurrentTest() : list_(Comparator(), &arena_) { } - - // REQUIRES: External synchronization - void WriteStep(Random* rnd) { - const uint32_t k = rnd->Next() % K; - const intptr_t g = current_.Get(k) + 1; - const Key key = MakeKey(k, g); - list_.Insert(key); - current_.Set(k, g); - } - - void ReadStep(Random* rnd) { - // Remember the initial committed state of the skiplist. - State initial_state; - for (int k = 0; k < K; k++) { - initial_state.Set(k, current_.Get(k)); - } - - Key pos = RandomTarget(rnd); - SkipList::Iterator iter(&list_); - iter.Seek(pos); - while (true) { - Key current; - if (!iter.Valid()) { - current = MakeKey(K, 0); - } else { - current = iter.key(); - ASSERT_TRUE(IsValidKey(current)) << current; - } - ASSERT_LE(pos, current) << "should not go backwards"; - - // Verify that everything in [pos,current) was not present in - // initial_state. - while (pos < current) { - ASSERT_LT(key(pos), K) << pos; - - // Note that generation 0 is never inserted, so it is ok if - // <*,0,*> is missing. - ASSERT_TRUE((gen(pos) == 0) || - (gen(pos) > initial_state.Get(key(pos))) - ) << "key: " << key(pos) - << "; gen: " << gen(pos) - << "; initgen: " - << initial_state.Get(key(pos)); - - // Advance to next key in the valid key space - if (key(pos) < key(current)) { - pos = MakeKey(key(pos) + 1, 0); - } else { - pos = MakeKey(key(pos), gen(pos) + 1); - } - } - - if (!iter.Valid()) { - break; - } - - if (rnd->Next() % 2) { - iter.Next(); - pos = MakeKey(key(pos), gen(pos) + 1); - } else { - Key new_target = RandomTarget(rnd); - if (new_target > pos) { - pos = new_target; - iter.Seek(new_target); - } - } - } - } -}; -const uint32_t ConcurrentTest::K; - -// Simple test that does single-threaded testing of the ConcurrentTest -// scaffolding. -TEST(SkipTest, ConcurrentWithoutThreads) { - ConcurrentTest test; - Random rnd(test::RandomSeed()); - for (int i = 0; i < 10000; i++) { - test.ReadStep(&rnd); - test.WriteStep(&rnd); - } -} - -class TestState { - public: - ConcurrentTest t_; - int seed_; - port::AtomicPointer quit_flag_; - - enum ReaderState { - STARTING, - RUNNING, - DONE - }; - - explicit TestState(int s) - : seed_(s), - quit_flag_(NULL), - state_(STARTING), - state_cv_(&mu_) {} - - void Wait(ReaderState s) { - mu_.Lock(); - while (state_ != s) { - state_cv_.Wait(); - } - mu_.Unlock(); - } - - void Change(ReaderState s) { - mu_.Lock(); - state_ = s; - state_cv_.Signal(); - mu_.Unlock(); - } - - private: - port::Mutex mu_; - ReaderState state_; - port::CondVar state_cv_; -}; - -static void ConcurrentReader(void* arg) { - TestState* state = reinterpret_cast(arg); - Random rnd(state->seed_); - int64_t reads = 0; - state->Change(TestState::RUNNING); - while (!state->quit_flag_.Acquire_Load()) { - state->t_.ReadStep(&rnd); - ++reads; - } - state->Change(TestState::DONE); -} - -static void RunConcurrent(int run) { - const int seed = test::RandomSeed() + (run * 100); - Random rnd(seed); - const int N = 1000; - const int kSize = 1000; - for (int i = 0; i < N; i++) { - if ((i % 100) == 0) { - fprintf(stderr, "Run %d of %d\n", i, N); - } - TestState state(seed + 1); - Env::Default()->Schedule(ConcurrentReader, &state); - state.Wait(TestState::RUNNING); - for (int i = 0; i < kSize; i++) { - state.t_.WriteStep(&rnd); - } - state.quit_flag_.Release_Store(&state); // Any non-NULL arg will do - state.Wait(TestState::DONE); - } -} - -TEST(SkipTest, Concurrent1) { RunConcurrent(1); } -TEST(SkipTest, Concurrent2) { RunConcurrent(2); } -TEST(SkipTest, Concurrent3) { RunConcurrent(3); } -TEST(SkipTest, Concurrent4) { RunConcurrent(4); } -TEST(SkipTest, Concurrent5) { RunConcurrent(5); } - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/db/snapshot.h b/clipper/HyperLevelDB/db/snapshot.h deleted file mode 100644 index 29196e4..0000000 --- a/clipper/HyperLevelDB/db/snapshot.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_SNAPSHOT_H_ -#define STORAGE_LEVELDB_DB_SNAPSHOT_H_ - -#include "hyperleveldb/db.h" - -namespace leveldb { - -class SnapshotList; - -// Snapshots are kept in a doubly-linked list in the DB. -// Each SnapshotImpl corresponds to a particular sequence number. -class SnapshotImpl : public Snapshot { - public: - SequenceNumber number_; // const after creation - - private: - friend class SnapshotList; - - // SnapshotImpl is kept in a doubly-linked circular list - SnapshotImpl* prev_; - SnapshotImpl* next_; - - SnapshotList* list_; // just for sanity checks -}; - -class SnapshotList { - public: - SnapshotList() { - list_.prev_ = &list_; - list_.next_ = &list_; - } - - bool empty() const { return list_.next_ == &list_; } - SnapshotImpl* oldest() const { assert(!empty()); return list_.next_; } - SnapshotImpl* newest() const { assert(!empty()); return list_.prev_; } - - const SnapshotImpl* New(SequenceNumber seq) { - SnapshotImpl* s = new SnapshotImpl; - s->number_ = seq; - s->list_ = this; - s->next_ = &list_; - s->prev_ = list_.prev_; - s->prev_->next_ = s; - s->next_->prev_ = s; - return s; - } - - void Delete(const SnapshotImpl* s) { - assert(s->list_ == this); - s->prev_->next_ = s->next_; - s->next_->prev_ = s->prev_; - delete s; - } - - private: - // Dummy head of doubly-linked list of snapshots - SnapshotImpl list_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_SNAPSHOT_H_ diff --git a/clipper/HyperLevelDB/db/table_cache.cc b/clipper/HyperLevelDB/db/table_cache.cc deleted file mode 100644 index 8418495..0000000 --- a/clipper/HyperLevelDB/db/table_cache.cc +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/table_cache.h" - -#include "db/filename.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/table.h" -#include "util/coding.h" - -namespace leveldb { - -struct TableAndFile { - RandomAccessFile* file; - Table* table; -}; - -static void DeleteEntry(const Slice& key, void* value) { - TableAndFile* tf = reinterpret_cast(value); - delete tf->table; - delete tf->file; - delete tf; -} - -static void UnrefEntry(void* arg1, void* arg2) { - Cache* cache = reinterpret_cast(arg1); - Cache::Handle* h = reinterpret_cast(arg2); - cache->Release(h); -} - -TableCache::TableCache(const std::string& dbname, - const Options* options, - int entries) - : env_(options->env), - dbname_(dbname), - options_(options), - cache_(NewLRUCache(entries)) { -} - -TableCache::~TableCache() { - delete cache_; -} - -Status TableCache::FindTable(uint64_t file_number, uint64_t file_size, - Cache::Handle** handle) { - Status s; - char buf[sizeof(file_number)]; - EncodeFixed64(buf, file_number); - Slice key(buf, sizeof(buf)); - *handle = cache_->Lookup(key); - if (*handle == NULL) { - std::string fname = SSTTableFileName(dbname_, file_number); - RandomAccessFile* file = NULL; - Table* table = NULL; - s = env_->NewRandomAccessFile(fname, &file); - if (!s.ok()) { - std::string old_fname = TableFileName(dbname_, file_number); - if (env_->NewRandomAccessFile(old_fname, &file).ok()) { - s = Status::OK(); - } - } - if (s.ok()) { - s = Table::Open(*options_, file, file_size, &table); - } - - if (!s.ok()) { - assert(table == NULL); - delete file; - // We do not cache error results so that if the error is transient, - // or somebody repairs the file, we recover automatically. - } else { - TableAndFile* tf = new TableAndFile; - tf->file = file; - tf->table = table; - *handle = cache_->Insert(key, tf, 1, &DeleteEntry); - } - } - return s; -} - -Iterator* TableCache::NewIterator(const ReadOptions& options, - uint64_t file_number, - uint64_t file_size, - Table** tableptr) { - if (tableptr != NULL) { - *tableptr = NULL; - } - - Cache::Handle* handle = NULL; - Status s = FindTable(file_number, file_size, &handle); - if (!s.ok()) { - return NewErrorIterator(s); - } - - Table* table = reinterpret_cast(cache_->Value(handle))->table; - Iterator* result = table->NewIterator(options); - result->RegisterCleanup(&UnrefEntry, cache_, handle); - if (tableptr != NULL) { - *tableptr = table; - } - return result; -} - -Status TableCache::Get(const ReadOptions& options, - uint64_t file_number, - uint64_t file_size, - const Slice& k, - void* arg, - void (*saver)(void*, const Slice&, const Slice&)) { - Cache::Handle* handle = NULL; - Status s = FindTable(file_number, file_size, &handle); - if (s.ok()) { - Table* t = reinterpret_cast(cache_->Value(handle))->table; - s = t->InternalGet(options, k, arg, saver); - cache_->Release(handle); - } - return s; -} - -void TableCache::Evict(uint64_t file_number) { - char buf[sizeof(file_number)]; - EncodeFixed64(buf, file_number); - cache_->Erase(Slice(buf, sizeof(buf))); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/table_cache.h b/clipper/HyperLevelDB/db/table_cache.h deleted file mode 100644 index 7f25cc5..0000000 --- a/clipper/HyperLevelDB/db/table_cache.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Thread-safe (provides internal synchronization) - -#ifndef STORAGE_LEVELDB_DB_TABLE_CACHE_H_ -#define STORAGE_LEVELDB_DB_TABLE_CACHE_H_ - -#include -#include -#include "db/dbformat.h" -#include "hyperleveldb/cache.h" -#include "hyperleveldb/table.h" -#include "port/port.h" - -namespace leveldb { - -class Env; - -class TableCache { - public: - TableCache(const std::string& dbname, const Options* options, int entries); - ~TableCache(); - - // Return an iterator for the specified file number (the corresponding - // file length must be exactly "file_size" bytes). If "tableptr" is - // non-NULL, also sets "*tableptr" to point to the Table object - // underlying the returned iterator, or NULL if no Table object underlies - // the returned iterator. The returned "*tableptr" object is owned by - // the cache and should not be deleted, and is valid for as long as the - // returned iterator is live. - Iterator* NewIterator(const ReadOptions& options, - uint64_t file_number, - uint64_t file_size, - Table** tableptr = NULL); - - // If a seek to internal key "k" in specified file finds an entry, - // call (*handle_result)(arg, found_key, found_value). - Status Get(const ReadOptions& options, - uint64_t file_number, - uint64_t file_size, - const Slice& k, - void* arg, - void (*handle_result)(void*, const Slice&, const Slice&)); - - // Evict any entry for the specified file number - void Evict(uint64_t file_number); - - private: - Env* const env_; - const std::string dbname_; - const Options* options_; - Cache* cache_; - - Status FindTable(uint64_t file_number, uint64_t file_size, Cache::Handle**); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_TABLE_CACHE_H_ diff --git a/clipper/HyperLevelDB/db/version_edit.cc b/clipper/HyperLevelDB/db/version_edit.cc deleted file mode 100644 index f10a2d5..0000000 --- a/clipper/HyperLevelDB/db/version_edit.cc +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/version_edit.h" - -#include "db/version_set.h" -#include "util/coding.h" - -namespace leveldb { - -// Tag numbers for serialized VersionEdit. These numbers are written to -// disk and should not be changed. -enum Tag { - kComparator = 1, - kLogNumber = 2, - kNextFileNumber = 3, - kLastSequence = 4, - kCompactPointer = 5, - kDeletedFile = 6, - kNewFile = 7, - // 8 was used for large value refs - kPrevLogNumber = 9 -}; - -void VersionEdit::Clear() { - comparator_.clear(); - log_number_ = 0; - prev_log_number_ = 0; - last_sequence_ = 0; - next_file_number_ = 0; - has_comparator_ = false; - has_log_number_ = false; - has_prev_log_number_ = false; - has_next_file_number_ = false; - has_last_sequence_ = false; - deleted_files_.clear(); - new_files_.clear(); -} - -void VersionEdit::EncodeTo(std::string* dst) const { - if (has_comparator_) { - PutVarint32(dst, kComparator); - PutLengthPrefixedSlice(dst, comparator_); - } - if (has_log_number_) { - PutVarint32(dst, kLogNumber); - PutVarint64(dst, log_number_); - } - if (has_prev_log_number_) { - PutVarint32(dst, kPrevLogNumber); - PutVarint64(dst, prev_log_number_); - } - if (has_next_file_number_) { - PutVarint32(dst, kNextFileNumber); - PutVarint64(dst, next_file_number_); - } - if (has_last_sequence_) { - PutVarint32(dst, kLastSequence); - PutVarint64(dst, last_sequence_); - } - - for (size_t i = 0; i < compact_pointers_.size(); i++) { - PutVarint32(dst, kCompactPointer); - PutVarint32(dst, compact_pointers_[i].first); // level - PutLengthPrefixedSlice(dst, compact_pointers_[i].second.Encode()); - } - - for (DeletedFileSet::const_iterator iter = deleted_files_.begin(); - iter != deleted_files_.end(); - ++iter) { - PutVarint32(dst, kDeletedFile); - PutVarint32(dst, iter->first); // level - PutVarint64(dst, iter->second); // file number - } - - for (size_t i = 0; i < new_files_.size(); i++) { - const FileMetaData& f = new_files_[i].second; - PutVarint32(dst, kNewFile); - PutVarint32(dst, new_files_[i].first); // level - PutVarint64(dst, f.number); - PutVarint64(dst, f.file_size); - PutLengthPrefixedSlice(dst, f.smallest.Encode()); - PutLengthPrefixedSlice(dst, f.largest.Encode()); - } -} - -static bool GetInternalKey(Slice* input, InternalKey* dst) { - Slice str; - if (GetLengthPrefixedSlice(input, &str)) { - dst->DecodeFrom(str); - return true; - } else { - return false; - } -} - -static bool GetLevel(Slice* input, int* level) { - uint32_t v; - if (GetVarint32(input, &v) && - v < config::kNumLevels) { - *level = v; - return true; - } else { - return false; - } -} - -Status VersionEdit::DecodeFrom(const Slice& src) { - Clear(); - Slice input = src; - const char* msg = NULL; - uint32_t tag; - - // Temporary storage for parsing - int level; - uint64_t number; - FileMetaData f; - Slice str; - InternalKey key; - - while (msg == NULL && GetVarint32(&input, &tag)) { - switch (tag) { - case kComparator: - if (GetLengthPrefixedSlice(&input, &str)) { - comparator_ = str.ToString(); - has_comparator_ = true; - } else { - msg = "comparator name"; - } - break; - - case kLogNumber: - if (GetVarint64(&input, &log_number_)) { - has_log_number_ = true; - } else { - msg = "log number"; - } - break; - - case kPrevLogNumber: - if (GetVarint64(&input, &prev_log_number_)) { - has_prev_log_number_ = true; - } else { - msg = "previous log number"; - } - break; - - case kNextFileNumber: - if (GetVarint64(&input, &next_file_number_)) { - has_next_file_number_ = true; - } else { - msg = "next file number"; - } - break; - - case kLastSequence: - if (GetVarint64(&input, &last_sequence_)) { - has_last_sequence_ = true; - } else { - msg = "last sequence number"; - } - break; - - case kCompactPointer: - if (GetLevel(&input, &level) && - GetInternalKey(&input, &key)) { - compact_pointers_.push_back(std::make_pair(level, key)); - } else { - msg = "compaction pointer"; - } - break; - - case kDeletedFile: - if (GetLevel(&input, &level) && - GetVarint64(&input, &number)) { - deleted_files_.insert(std::make_pair(level, number)); - } else { - msg = "deleted file"; - } - break; - - case kNewFile: - if (GetLevel(&input, &level) && - GetVarint64(&input, &f.number) && - GetVarint64(&input, &f.file_size) && - GetInternalKey(&input, &f.smallest) && - GetInternalKey(&input, &f.largest)) { - new_files_.push_back(std::make_pair(level, f)); - } else { - msg = "new-file entry"; - } - break; - - default: - msg = "unknown tag"; - break; - } - } - - if (msg == NULL && !input.empty()) { - msg = "invalid tag"; - } - - Status result; - if (msg != NULL) { - result = Status::Corruption("VersionEdit", msg); - } - return result; -} - -std::string VersionEdit::DebugString() const { - std::string r; - r.append("VersionEdit {"); - if (has_comparator_) { - r.append("\n Comparator: "); - r.append(comparator_); - } - if (has_log_number_) { - r.append("\n LogNumber: "); - AppendNumberTo(&r, log_number_); - } - if (has_prev_log_number_) { - r.append("\n PrevLogNumber: "); - AppendNumberTo(&r, prev_log_number_); - } - if (has_next_file_number_) { - r.append("\n NextFile: "); - AppendNumberTo(&r, next_file_number_); - } - if (has_last_sequence_) { - r.append("\n LastSeq: "); - AppendNumberTo(&r, last_sequence_); - } - for (size_t i = 0; i < compact_pointers_.size(); i++) { - r.append("\n CompactPointer: "); - AppendNumberTo(&r, compact_pointers_[i].first); - r.append(" "); - r.append(compact_pointers_[i].second.DebugString()); - } - for (DeletedFileSet::const_iterator iter = deleted_files_.begin(); - iter != deleted_files_.end(); - ++iter) { - r.append("\n DeleteFile: "); - AppendNumberTo(&r, iter->first); - r.append(" "); - AppendNumberTo(&r, iter->second); - } - for (size_t i = 0; i < new_files_.size(); i++) { - const FileMetaData& f = new_files_[i].second; - r.append("\n AddFile: "); - AppendNumberTo(&r, new_files_[i].first); - r.append(" "); - AppendNumberTo(&r, f.number); - r.append(" "); - AppendNumberTo(&r, f.file_size); - r.append(" "); - r.append(f.smallest.DebugString()); - r.append(" .. "); - r.append(f.largest.DebugString()); - } - r.append("\n}\n"); - return r; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/version_edit.h b/clipper/HyperLevelDB/db/version_edit.h deleted file mode 100644 index eaef77b..0000000 --- a/clipper/HyperLevelDB/db/version_edit.h +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_VERSION_EDIT_H_ -#define STORAGE_LEVELDB_DB_VERSION_EDIT_H_ - -#include -#include -#include -#include "db/dbformat.h" - -namespace leveldb { - -class VersionSet; - -struct FileMetaData { - int refs; - int allowed_seeks; // Seeks allowed until compaction - uint64_t number; - uint64_t file_size; // File size in bytes - InternalKey smallest; // Smallest internal key served by table - InternalKey largest; // Largest internal key served by table - - FileMetaData() : refs(0), allowed_seeks(1 << 30), file_size(0) { } -}; - -class VersionEdit { - public: - VersionEdit() { Clear(); } - ~VersionEdit() { } - - void Clear(); - - void SetComparatorName(const Slice& name) { - has_comparator_ = true; - comparator_ = name.ToString(); - } - void SetLogNumber(uint64_t num) { - has_log_number_ = true; - log_number_ = num; - } - void SetPrevLogNumber(uint64_t num) { - has_prev_log_number_ = true; - prev_log_number_ = num; - } - void SetNextFile(uint64_t num) { - has_next_file_number_ = true; - next_file_number_ = num; - } - void SetLastSequence(SequenceNumber seq) { - has_last_sequence_ = true; - last_sequence_ = seq; - } - void SetCompactPointer(int level, const InternalKey& key) { - compact_pointers_.push_back(std::make_pair(level, key)); - } - - // Add the specified file at the specified number. - // REQUIRES: This version has not been saved (see VersionSet::SaveTo) - // REQUIRES: "smallest" and "largest" are smallest and largest keys in file - void AddFile(int level, uint64_t file, - uint64_t file_size, - const InternalKey& smallest, - const InternalKey& largest) { - FileMetaData f; - f.number = file; - f.file_size = file_size; - f.smallest = smallest; - f.largest = largest; - new_files_.push_back(std::make_pair(level, f)); - } - - // Delete the specified "file" from the specified "level". - void DeleteFile(int level, uint64_t file) { - deleted_files_.insert(std::make_pair(level, file)); - } - - void EncodeTo(std::string* dst) const; - Status DecodeFrom(const Slice& src); - - std::string DebugString() const; - - private: - friend class VersionSet; - - typedef std::set< std::pair > DeletedFileSet; - - std::string comparator_; - uint64_t log_number_; - uint64_t prev_log_number_; - uint64_t next_file_number_; - SequenceNumber last_sequence_; - bool has_comparator_; - bool has_log_number_; - bool has_prev_log_number_; - bool has_next_file_number_; - bool has_last_sequence_; - - std::vector< std::pair > compact_pointers_; - DeletedFileSet deleted_files_; - std::vector< std::pair > new_files_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_VERSION_EDIT_H_ diff --git a/clipper/HyperLevelDB/db/version_edit_test.cc b/clipper/HyperLevelDB/db/version_edit_test.cc deleted file mode 100644 index 280310b..0000000 --- a/clipper/HyperLevelDB/db/version_edit_test.cc +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/version_edit.h" -#include "util/testharness.h" - -namespace leveldb { - -static void TestEncodeDecode(const VersionEdit& edit) { - std::string encoded, encoded2; - edit.EncodeTo(&encoded); - VersionEdit parsed; - Status s = parsed.DecodeFrom(encoded); - ASSERT_TRUE(s.ok()) << s.ToString(); - parsed.EncodeTo(&encoded2); - ASSERT_EQ(encoded, encoded2); -} - -class VersionEditTest { }; - -TEST(VersionEditTest, EncodeDecode) { - static const uint64_t kBig = 1ull << 50; - - VersionEdit edit; - for (int i = 0; i < 4; i++) { - TestEncodeDecode(edit); - edit.AddFile(3, kBig + 300 + i, kBig + 400 + i, - InternalKey("foo", kBig + 500 + i, kTypeValue), - InternalKey("zoo", kBig + 600 + i, kTypeDeletion)); - edit.DeleteFile(4, kBig + 700 + i); - edit.SetCompactPointer(i, InternalKey("x", kBig + 900 + i, kTypeValue)); - } - - edit.SetComparatorName("foo"); - edit.SetLogNumber(kBig + 100); - edit.SetNextFile(kBig + 200); - edit.SetLastSequence(kBig + 1000); - TestEncodeDecode(edit); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/db/version_set.cc b/clipper/HyperLevelDB/db/version_set.cc deleted file mode 100644 index 2a17a9e..0000000 --- a/clipper/HyperLevelDB/db/version_set.cc +++ /dev/null @@ -1,1584 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/version_set.h" - -#include -#include -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/log_writer.h" -#include "db/memtable.h" -#include "db/table_cache.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/table_builder.h" -#include "table/merger.h" -#include "table/two_level_iterator.h" -#include "util/coding.h" -#include "util/logging.h" - -namespace leveldb { - -static double MaxBytesForLevel(int level) { - assert(level < leveldb::config::kNumLevels); - static const double bytes[] = {10 * 1048576.0, - 100 * 1048576.0, - 100 * 1048576.0, - 1000 * 1048576.0, - 10000 * 1048576.0, - 100000 * 1048576.0, - 1000000 * 1048576.0}; - return bytes[level]; -} - -static uint64_t MaxFileSizeForLevel(int level) { - assert(level < leveldb::config::kNumLevels); - static const uint64_t bytes[] = {8 * 1048576, - 8 * 1048576, - 8 * 1048576, - 8 * 1048576, - 8 * 1048576, - 8 * 1048576, - 8 * 1048576}; - return bytes[level]; -} - -static uint64_t MaxCompactionBytesForLevel(int level) { - assert(level < leveldb::config::kNumLevels); - static const uint64_t bytes[] = {128 * 1048576, - 128 * 1048576, - 128 * 1048576, - 256 * 1048576, - 256 * 1048576, - 256 * 1048576, - 256 * 1048576}; - return bytes[level]; -} - -static int64_t TotalFileSize(const std::vector& files) { - int64_t sum = 0; - for (size_t i = 0; i < files.size(); i++) { - sum += files[i]->file_size; - } - return sum; -} - -Version::~Version() { - assert(refs_ == 0); - - // Remove from linked list - prev_->next_ = next_; - next_->prev_ = prev_; - - // Drop references to files - for (int level = 0; level < config::kNumLevels; level++) { - for (size_t i = 0; i < files_[level].size(); i++) { - FileMetaData* f = files_[level][i]; - assert(f->refs > 0); - f->refs--; - if (f->refs <= 0) { - delete f; - } - } - } -} - -int FindFile(const InternalKeyComparator& icmp, - const std::vector& files, - const Slice& key) { - uint32_t left = 0; - uint32_t right = files.size(); - while (left < right) { - uint32_t mid = (left + right) / 2; - const FileMetaData* f = files[mid]; - if (icmp.InternalKeyComparator::Compare(f->largest.Encode(), key) < 0) { - // Key at "mid.largest" is < "target". Therefore all - // files at or before "mid" are uninteresting. - left = mid + 1; - } else { - // Key at "mid.largest" is >= "target". Therefore all files - // after "mid" are uninteresting. - right = mid; - } - } - return right; -} - -static bool AfterFile(const Comparator* ucmp, - const Slice* user_key, const FileMetaData* f) { - // NULL user_key occurs before all keys and is therefore never after *f - return (user_key != NULL && - ucmp->Compare(*user_key, f->largest.user_key()) > 0); -} - -static bool BeforeFile(const Comparator* ucmp, - const Slice* user_key, const FileMetaData* f) { - // NULL user_key occurs after all keys and is therefore never before *f - return (user_key != NULL && - ucmp->Compare(*user_key, f->smallest.user_key()) < 0); -} - -bool SomeFileOverlapsRange( - const InternalKeyComparator& icmp, - bool disjoint_sorted_files, - const std::vector& files, - const Slice* smallest_user_key, - const Slice* largest_user_key) { - const Comparator* ucmp = icmp.user_comparator(); - if (!disjoint_sorted_files) { - // Need to check against all files - for (size_t i = 0; i < files.size(); i++) { - const FileMetaData* f = files[i]; - if (AfterFile(ucmp, smallest_user_key, f) || - BeforeFile(ucmp, largest_user_key, f)) { - // No overlap - } else { - return true; // Overlap - } - } - return false; - } - - // Binary search over file list - uint32_t index = 0; - if (smallest_user_key != NULL) { - // Find the earliest possible internal key for smallest_user_key - InternalKey small(*smallest_user_key, kMaxSequenceNumber,kValueTypeForSeek); - index = FindFile(icmp, files, small.Encode()); - } - - if (index >= files.size()) { - // beginning of range is after all files, so no overlap. - return false; - } - - return !BeforeFile(ucmp, largest_user_key, files[index]); -} - -// An internal iterator. For a given version/level pair, yields -// information about the files in the level. For a given entry, key() -// is the largest key that occurs in the file, and value() is an -// 16-byte value containing the file number and file size, both -// encoded using EncodeFixed64. -// -// If num != 0, then do not call SeekToLast, Prev -class Version::LevelFileNumIterator : public Iterator { - public: - LevelFileNumIterator(const InternalKeyComparator& icmp, - const std::vector* flist, - uint64_t num) - : icmp_(icmp), - flist_(flist), - index_(flist->size()), // Marks as invalid - number_(num) { - } - virtual bool Valid() const { - return index_ < flist_->size(); - } - virtual void Seek(const Slice& target) { - index_ = FindFile(icmp_, *flist_, target); - Bump(); - } - virtual void SeekToFirst() { - index_ = 0; - Bump(); - } - virtual void SeekToLast() { - index_ = flist_->empty() ? 0 : flist_->size() - 1; - Bump(); - } - virtual void Next() { - assert(Valid()); - index_++; - Bump(); - } - virtual void Prev() { - assert(Valid()); - assert(number_ == 0); - if (index_ == 0) { - index_ = flist_->size(); // Marks as invalid - } else { - index_--; - } - } - Slice key() const { - assert(Valid()); - return (*flist_)[index_]->largest.Encode(); - } - Slice value() const { - assert(Valid()); - EncodeFixed64(value_buf_, (*flist_)[index_]->number); - EncodeFixed64(value_buf_+8, (*flist_)[index_]->file_size); - return Slice(value_buf_, sizeof(value_buf_)); - } - virtual Status status() const { return Status::OK(); } - private: - void Bump() { - while (index_ < flist_->size() && - (*flist_)[index_]->number < number_) { - ++index_; - } - } - const InternalKeyComparator icmp_; - const std::vector* const flist_; - uint32_t index_; - uint64_t number_; - - // Backing store for value(). Holds the file number and size. - mutable char value_buf_[16]; -}; - -static Iterator* GetFileIterator(void* arg, - const ReadOptions& options, - const Slice& file_value) { - TableCache* cache = reinterpret_cast(arg); - if (file_value.size() != 16) { - return NewErrorIterator( - Status::Corruption("FileReader invoked with unexpected value")); - } else { - return cache->NewIterator(options, - DecodeFixed64(file_value.data()), - DecodeFixed64(file_value.data() + 8)); - } -} - -Iterator* Version::NewConcatenatingIterator(const ReadOptions& options, - int level, uint64_t num) const { - return NewTwoLevelIterator( - new LevelFileNumIterator(vset_->icmp_, &files_[level], num), - &GetFileIterator, vset_->table_cache_, options); -} - -void Version::AddIterators(const ReadOptions& options, - std::vector* iters) { - return AddSomeIterators(options, 0, iters); -} - -void Version::AddSomeIterators(const ReadOptions& options, uint64_t num, - std::vector* iters) { - // Merge all level zero files together since they may overlap - for (size_t i = 0; i < files_[0].size(); i++) { - iters->push_back( - vset_->table_cache_->NewIterator( - options, files_[0][i]->number, files_[0][i]->file_size)); - } - - // For levels > 0, we can use a concatenating iterator that sequentially - // walks through the non-overlapping files in the level, opening them - // lazily. - for (int level = 1; level < config::kNumLevels; level++) { - if (!files_[level].empty()) { - iters->push_back(NewConcatenatingIterator(options, level, num)); - } - } -} - -// Callback from TableCache::Get() -namespace { -enum SaverState { - kNotFound, - kFound, - kDeleted, - kCorrupt, -}; -struct Saver { - SaverState state; - const Comparator* ucmp; - Slice user_key; - std::string* value; -}; -} -static void SaveValue(void* arg, const Slice& ikey, const Slice& v) { - Saver* s = reinterpret_cast(arg); - ParsedInternalKey parsed_key; - if (!ParseInternalKey(ikey, &parsed_key)) { - s->state = kCorrupt; - } else { - if (s->ucmp->Compare(parsed_key.user_key, s->user_key) == 0) { - s->state = (parsed_key.type == kTypeValue) ? kFound : kDeleted; - if (s->state == kFound) { - s->value->assign(v.data(), v.size()); - } - } - } -} - -static bool NewestFirst(FileMetaData* a, FileMetaData* b) { - return a->number > b->number; -} - -void Version::ForEachOverlapping(Slice user_key, Slice internal_key, - void* arg, - bool (*func)(void*, int, FileMetaData*)) { - // TODO(sanjay): Change Version::Get() to use this function. - const Comparator* ucmp = vset_->icmp_.user_comparator(); - - // Search level-0 in order from newest to oldest. - std::vector tmp; - tmp.reserve(files_[0].size()); - for (uint32_t i = 0; i < files_[0].size(); i++) { - FileMetaData* f = files_[0][i]; - if (ucmp->Compare(user_key, f->smallest.user_key()) >= 0 && - ucmp->Compare(user_key, f->largest.user_key()) <= 0) { - tmp.push_back(f); - } - } - if (!tmp.empty()) { - std::sort(tmp.begin(), tmp.end(), NewestFirst); - for (uint32_t i = 0; i < tmp.size(); i++) { - if (!(*func)(arg, 0, tmp[i])) { - return; - } - } - } - - // Search other levels. - for (int level = 1; level < config::kNumLevels; level++) { - size_t num_files = files_[level].size(); - if (num_files == 0) continue; - - // Binary search to find earliest index whose largest key >= internal_key. - uint32_t index = FindFile(vset_->icmp_, files_[level], internal_key); - if (index < num_files) { - FileMetaData* f = files_[level][index]; - if (ucmp->Compare(user_key, f->smallest.user_key()) < 0) { - // All of "f" is past any data for user_key - } else { - if (!(*func)(arg, level, f)) { - return; - } - } - } - } -} - -Status Version::Get(const ReadOptions& options, - const LookupKey& k, - std::string* value, - GetStats* stats) { - Slice ikey = k.internal_key(); - Slice user_key = k.user_key(); - const Comparator* ucmp = vset_->icmp_.user_comparator(); - Status s; - - stats->seek_file = NULL; - stats->seek_file_level = -1; - FileMetaData* last_file_read = NULL; - int last_file_read_level = -1; - - // We can search level-by-level since entries never hop across - // levels. Therefore we are guaranteed that if we find data - // in an smaller level, later levels are irrelevant. - std::vector tmp; - FileMetaData* tmp2; - for (int level = 0; level < config::kNumLevels; level++) { - size_t num_files = files_[level].size(); - if (num_files == 0) continue; - - // Get the list of files to search in this level - FileMetaData* const* files = &files_[level][0]; - if (level == 0) { - // Level-0 files may overlap each other. Find all files that - // overlap user_key and process them in order from newest to oldest. - tmp.reserve(num_files); - for (uint32_t i = 0; i < num_files; i++) { - FileMetaData* f = files[i]; - if (ucmp->Compare(user_key, f->smallest.user_key()) >= 0 && - ucmp->Compare(user_key, f->largest.user_key()) <= 0) { - tmp.push_back(f); - } - } - if (tmp.empty()) continue; - - std::sort(tmp.begin(), tmp.end(), NewestFirst); - files = &tmp[0]; - num_files = tmp.size(); - } else { - // Binary search to find earliest index whose largest key >= ikey. - uint32_t index = FindFile(vset_->icmp_, files_[level], ikey); - if (index >= num_files) { - files = NULL; - num_files = 0; - } else { - tmp2 = files[index]; - if (ucmp->Compare(user_key, tmp2->smallest.user_key()) < 0) { - // All of "tmp2" is past any data for user_key - files = NULL; - num_files = 0; - } else { - files = &tmp2; - num_files = 1; - } - } - } - - for (uint32_t i = 0; i < num_files; ++i) { - if (last_file_read != NULL && stats->seek_file == NULL) { - // We have had more than one seek for this read. Charge the 1st file. - stats->seek_file = last_file_read; - stats->seek_file_level = last_file_read_level; - } - - FileMetaData* f = files[i]; - last_file_read = f; - last_file_read_level = level; - - Saver saver; - saver.state = kNotFound; - saver.ucmp = ucmp; - saver.user_key = user_key; - saver.value = value; - s = vset_->table_cache_->Get(options, f->number, f->file_size, - ikey, &saver, SaveValue); - if (!s.ok()) { - return s; - } - switch (saver.state) { - case kNotFound: - break; // Keep searching in other files - case kFound: - return s; - case kDeleted: - s = Status::NotFound(Slice()); // Use empty error message for speed - return s; - case kCorrupt: - s = Status::Corruption("corrupted key for ", user_key); - return s; - } - } - } - - return Status::NotFound(Slice()); // Use an empty error message for speed -} - -bool Version::UpdateStats(const GetStats& stats) { - FileMetaData* f = stats.seek_file; - if (f != NULL) { - f->allowed_seeks--; - if (f->allowed_seeks <= 0 && file_to_compact_ == NULL) { - file_to_compact_ = f; - file_to_compact_level_ = stats.seek_file_level; - return true; - } - } - return false; -} - -bool Version::RecordReadSample(Slice internal_key) { - ParsedInternalKey ikey; - if (!ParseInternalKey(internal_key, &ikey)) { - return false; - } - - struct State { - GetStats stats; // Holds first matching file - int matches; - - static bool Match(void* arg, int level, FileMetaData* f) { - State* state = reinterpret_cast(arg); - state->matches++; - if (state->matches == 1) { - // Remember first match. - state->stats.seek_file = f; - state->stats.seek_file_level = level; - } - // We can stop iterating once we have a second match. - return state->matches < 2; - } - }; - - State state; - state.matches = 0; - ForEachOverlapping(ikey.user_key, internal_key, &state, &State::Match); - - // Must have at least two matches since we want to merge across - // files. But what if we have a single file that contains many - // overwrites and deletions? Should we have another mechanism for - // finding such files? - if (state.matches >= 2) { - // 1MB cost is about 1 seek (see comment in Builder::Apply). - return UpdateStats(state.stats); - } - return false; -} - -void Version::Ref() { - ++refs_; -} - -void Version::Unref() { - assert(this != &vset_->dummy_versions_); - assert(refs_ >= 1); - --refs_; - if (refs_ == 0) { - delete this; - } -} - -bool Version::OverlapInLevel(int level, - const Slice* smallest_user_key, - const Slice* largest_user_key) { - return SomeFileOverlapsRange(vset_->icmp_, (level > 0), files_[level], - smallest_user_key, largest_user_key); -} - -int Version::PickLevelForMemTableOutput( - const Slice& smallest_user_key, - const Slice& largest_user_key) { - int level = 0; - if (!OverlapInLevel(0, &smallest_user_key, &largest_user_key)) { - // Push to next level if there is no overlap in next level, - // and the #bytes overlapping in the level after that are limited. - InternalKey start(smallest_user_key, kMaxSequenceNumber, kValueTypeForSeek); - InternalKey limit(largest_user_key, 0, static_cast(0)); - std::vector overlaps; - while (level < config::kMaxMemCompactLevel) { - if (OverlapInLevel(level + 1, &smallest_user_key, &largest_user_key)) { - break; - } - GetOverlappingInputs(level + 2, &start, &limit, &overlaps); - level++; - } - } - return level; -} - -// Store in "*inputs" all files in "level" that overlap [begin,end] -void Version::GetOverlappingInputs( - int level, - const InternalKey* begin, - const InternalKey* end, - std::vector* inputs) { - assert(level >= 0); - assert(level < config::kNumLevels); - inputs->clear(); - Slice user_begin, user_end; - if (begin != NULL) { - user_begin = begin->user_key(); - } - if (end != NULL) { - user_end = end->user_key(); - } - const Comparator* user_cmp = vset_->icmp_.user_comparator(); - for (size_t i = 0; i < files_[level].size(); ) { - FileMetaData* f = files_[level][i++]; - const Slice file_start = f->smallest.user_key(); - const Slice file_limit = f->largest.user_key(); - if (begin != NULL && user_cmp->Compare(file_limit, user_begin) < 0) { - // "f" is completely before specified range; skip it - } else if (end != NULL && user_cmp->Compare(file_start, user_end) > 0) { - // "f" is completely after specified range; skip it - } else { - inputs->push_back(f); - if (level == 0) { - // Level-0 files may overlap each other. So check if the newly - // added file has expanded the range. If so, restart search. - if (begin != NULL && user_cmp->Compare(file_start, user_begin) < 0) { - user_begin = file_start; - inputs->clear(); - i = 0; - } else if (end != NULL && user_cmp->Compare(file_limit, user_end) > 0) { - user_end = file_limit; - inputs->clear(); - i = 0; - } - } - } - } -} - -std::string Version::DebugString() const { - std::string r; - for (int level = 0; level < config::kNumLevels; level++) { - // E.g., - // --- level 1 --- - // 17:123['a' .. 'd'] - // 20:43['e' .. 'g'] - r.append("--- level "); - AppendNumberTo(&r, level); - r.append(" ---\n"); - const std::vector& files = files_[level]; - for (size_t i = 0; i < files.size(); i++) { - r.push_back(' '); - AppendNumberTo(&r, files[i]->number); - r.push_back(':'); - AppendNumberTo(&r, files[i]->file_size); - r.append("["); - r.append(files[i]->smallest.DebugString()); - r.append(" .. "); - r.append(files[i]->largest.DebugString()); - r.append("]\n"); - } - } - return r; -} - -// A helper class so we can efficiently apply a whole sequence -// of edits to a particular state without creating intermediate -// Versions that contain full copies of the intermediate state. -class VersionSet::Builder { - private: - // Helper to sort by v->files_[file_number].smallest - struct BySmallestKey { - const InternalKeyComparator* internal_comparator; - - bool operator()(FileMetaData* f1, FileMetaData* f2) const { - int r = internal_comparator->Compare(f1->smallest, f2->smallest); - if (r != 0) { - return (r < 0); - } else { - // Break ties by file number - return (f1->number < f2->number); - } - } - }; - - typedef std::set FileSet; - struct LevelState { - std::set deleted_files; - FileSet* added_files; - }; - - VersionSet* vset_; - Version* base_; - LevelState levels_[config::kNumLevels]; - - public: - // Initialize a builder with the files from *base and other info from *vset - Builder(VersionSet* vset, Version* base) - : vset_(vset), - base_(base) { - base_->Ref(); - BySmallestKey cmp; - cmp.internal_comparator = &vset_->icmp_; - for (int level = 0; level < config::kNumLevels; level++) { - levels_[level].added_files = new FileSet(cmp); - } - } - - ~Builder() { - for (int level = 0; level < config::kNumLevels; level++) { - const FileSet* added = levels_[level].added_files; - std::vector to_unref; - to_unref.reserve(added->size()); - for (FileSet::const_iterator it = added->begin(); - it != added->end(); ++it) { - to_unref.push_back(*it); - } - delete added; - for (uint32_t i = 0; i < to_unref.size(); i++) { - FileMetaData* f = to_unref[i]; - f->refs--; - if (f->refs <= 0) { - delete f; - } - } - } - base_->Unref(); - } - - // Apply all of the edits in *edit to the current state. - void Apply(VersionEdit* edit) { - // Update compaction pointers - for (size_t i = 0; i < edit->compact_pointers_.size(); i++) { - const int level = edit->compact_pointers_[i].first; - vset_->compact_pointer_[level] = - edit->compact_pointers_[i].second.Encode().ToString(); - } - - // Delete files - const VersionEdit::DeletedFileSet& del = edit->deleted_files_; - for (VersionEdit::DeletedFileSet::const_iterator iter = del.begin(); - iter != del.end(); - ++iter) { - const int level = iter->first; - const uint64_t number = iter->second; - levels_[level].deleted_files.insert(number); - } - - // Add new files - for (size_t i = 0; i < edit->new_files_.size(); i++) { - const int level = edit->new_files_[i].first; - FileMetaData* f = new FileMetaData(edit->new_files_[i].second); - f->refs = 1; - - // We arrange to automatically compact this file after - // a certain number of seeks. Let's assume: - // (1) One seek costs 10ms - // (2) Writing or reading 1MB costs 10ms (100MB/s) - // (3) A compaction of 1MB does 25MB of IO: - // 1MB read from this level - // 10-12MB read from next level (boundaries may be misaligned) - // 10-12MB written to next level - // This implies that 25 seeks cost the same as the compaction - // of 1MB of data. I.e., one seek costs approximately the - // same as the compaction of 40KB of data. We are a little - // conservative and allow approximately one seek for every 16KB - // of data before triggering a compaction. - f->allowed_seeks = (f->file_size / 16384); - if (f->allowed_seeks < 100) f->allowed_seeks = 100; - - levels_[level].deleted_files.erase(f->number); - levels_[level].added_files->insert(f); - } - } - - // Save the current state in *v. - void SaveTo(Version* v) { - BySmallestKey cmp; - cmp.internal_comparator = &vset_->icmp_; - for (int level = 0; level < config::kNumLevels; level++) { - // Merge the set of added files with the set of pre-existing files. - // Drop any deleted files. Store the result in *v. - const std::vector& base_files = base_->files_[level]; - std::vector::const_iterator base_iter = base_files.begin(); - std::vector::const_iterator base_end = base_files.end(); - const FileSet* added = levels_[level].added_files; - v->files_[level].reserve(base_files.size() + added->size()); - for (FileSet::const_iterator added_iter = added->begin(); - added_iter != added->end(); - ++added_iter) { - // Add all smaller files listed in base_ - for (std::vector::const_iterator bpos - = std::upper_bound(base_iter, base_end, *added_iter, cmp); - base_iter != bpos; - ++base_iter) { - MaybeAddFile(v, level, *base_iter); - } - - MaybeAddFile(v, level, *added_iter); - } - - // Add remaining base files - for (; base_iter != base_end; ++base_iter) { - MaybeAddFile(v, level, *base_iter); - } - -#ifndef NDEBUG - // Make sure there is no overlap in levels > 0 - if (level > 0) { - for (uint32_t i = 1; i < v->files_[level].size(); i++) { - const InternalKey& prev_end = v->files_[level][i-1]->largest; - const InternalKey& this_begin = v->files_[level][i]->smallest; - if (vset_->icmp_.Compare(prev_end, this_begin) >= 0) { - fprintf(stderr, "overlapping ranges in same level %s vs. %s\n", - prev_end.DebugString().c_str(), - this_begin.DebugString().c_str()); - abort(); - } - } - } -#endif - } - } - - void MaybeAddFile(Version* v, int level, FileMetaData* f) { - if (levels_[level].deleted_files.count(f->number) > 0) { - // File is deleted: do nothing - } else { - std::vector* files = &v->files_[level]; - if (level > 0 && !files->empty()) { - // Must not overlap - assert(vset_->icmp_.Compare((*files)[files->size()-1]->largest, - f->smallest) < 0); - } - f->refs++; - files->push_back(f); - } - } -}; - -VersionSet::VersionSet(const std::string& dbname, - const Options* options, - TableCache* table_cache, - const InternalKeyComparator* cmp) - : env_(options->env), - dbname_(dbname), - options_(options), - table_cache_(table_cache), - icmp_(*cmp), - next_file_number_(2), - manifest_file_number_(0), // Filled by Recover() - last_sequence_(0), - log_number_(0), - prev_log_number_(0), - descriptor_file_(NULL), - descriptor_log_(NULL), - dummy_versions_(this), - current_(NULL) { - AppendVersion(new Version(this)); -} - -VersionSet::~VersionSet() { - current_->Unref(); - assert(dummy_versions_.next_ == &dummy_versions_); // List must be empty - delete descriptor_log_; - delete descriptor_file_; -} - -void VersionSet::AppendVersion(Version* v) { - // Make "v" current - assert(v->refs_ == 0); - assert(v != current_); - if (current_ != NULL) { - current_->Unref(); - } - current_ = v; - v->Ref(); - - // Append to linked list - v->prev_ = dummy_versions_.prev_; - v->next_ = &dummy_versions_; - v->prev_->next_ = v; - v->next_->prev_ = v; -} - -Status VersionSet::LogAndApply(VersionEdit* edit, port::Mutex* mu, port::CondVar* cv, bool* wt) { - while (*wt) { - cv->Wait(); - } - *wt = true; - if (edit->has_log_number_) { - assert(edit->log_number_ >= log_number_); - assert(edit->log_number_ < next_file_number_); - } else { - edit->SetLogNumber(log_number_); - } - - if (!edit->has_prev_log_number_) { - edit->SetPrevLogNumber(prev_log_number_); - } - - edit->SetNextFile(next_file_number_); - edit->SetLastSequence(last_sequence_); - - Version* v = new Version(this); - { - Builder builder(this, current_); - builder.Apply(edit); - builder.SaveTo(v); - } - Finalize(v); - - // Initialize new descriptor log file if necessary by creating - // a temporary file that contains a snapshot of the current version. - std::string new_manifest_file; - Status s; - if (descriptor_log_ == NULL) { - // No reason to unlock *mu here since we only hit this path in the - // first call to LogAndApply (when opening the database). - assert(descriptor_file_ == NULL); - new_manifest_file = DescriptorFileName(dbname_, manifest_file_number_); - edit->SetNextFile(next_file_number_); - s = env_->NewWritableFile(new_manifest_file, &descriptor_file_); - if (s.ok()) { - descriptor_log_ = new log::Writer(descriptor_file_); - s = WriteSnapshot(descriptor_log_); - } - } - - // Unlock during expensive MANIFEST log write - { - mu->Unlock(); - - // Write new record to MANIFEST log - if (s.ok()) { - std::string record; - edit->EncodeTo(&record); - s = descriptor_log_->AddRecord(record); - if (s.ok()) { - // XXX Unlock during expensive MANIFEST log write - s = descriptor_file_->Sync(); - } - if (!s.ok()) { - Log(options_->info_log, "MANIFEST write: %s\n", s.ToString().c_str()); - } - } - - // If we just created a new descriptor file, install it by writing a - // new CURRENT file that points to it. - if (s.ok() && !new_manifest_file.empty()) { - s = SetCurrentFile(env_, dbname_, manifest_file_number_); - } - - mu->Lock(); - } - - // Install the new version - if (s.ok()) { - AppendVersion(v); - log_number_ = edit->log_number_; - prev_log_number_ = edit->prev_log_number_; - } else { - delete v; - if (!new_manifest_file.empty()) { - delete descriptor_log_; - delete descriptor_file_; - descriptor_log_ = NULL; - descriptor_file_ = NULL; - env_->DeleteFile(new_manifest_file); - } - } - - *wt = false; - cv->Signal(); - return s; -} - -Status VersionSet::Recover() { - struct LogReporter : public log::Reader::Reporter { - Status* status; - virtual void Corruption(size_t bytes, const Status& s) { - if (this->status->ok()) *this->status = s; - } - }; - - // Read "CURRENT" file, which contains a pointer to the current manifest file - std::string current; - Status s = ReadFileToString(env_, CurrentFileName(dbname_), ¤t); - if (!s.ok()) { - return s; - } - if (current.empty() || current[current.size()-1] != '\n') { - return Status::Corruption("CURRENT file does not end with newline"); - } - current.resize(current.size() - 1); - - std::string dscname = dbname_ + "/" + current; - SequentialFile* file; - s = env_->NewSequentialFile(dscname, &file); - if (!s.ok()) { - return s; - } - - bool have_log_number = false; - bool have_prev_log_number = false; - bool have_next_file = false; - bool have_last_sequence = false; - uint64_t next_file = 0; - uint64_t last_sequence = 0; - uint64_t log_number = 0; - uint64_t prev_log_number = 0; - Builder builder(this, current_); - - { - LogReporter reporter; - reporter.status = &s; - log::Reader reader(file, &reporter, true/*checksum*/, 0/*initial_offset*/); - Slice record; - std::string scratch; - while (reader.ReadRecord(&record, &scratch) && s.ok()) { - VersionEdit edit; - s = edit.DecodeFrom(record); - if (s.ok()) { - if (edit.has_comparator_ && - edit.comparator_ != icmp_.user_comparator()->Name()) { - s = Status::InvalidArgument( - edit.comparator_ + " does not match existing comparator ", - icmp_.user_comparator()->Name()); - } - } - - if (s.ok()) { - builder.Apply(&edit); - } - - if (edit.has_log_number_) { - log_number = edit.log_number_; - have_log_number = true; - } - - if (edit.has_prev_log_number_) { - prev_log_number = edit.prev_log_number_; - have_prev_log_number = true; - } - - if (edit.has_next_file_number_) { - next_file = edit.next_file_number_; - have_next_file = true; - } - - if (edit.has_last_sequence_) { - last_sequence = edit.last_sequence_; - have_last_sequence = true; - } - } - } - delete file; - file = NULL; - - if (s.ok()) { - if (!have_next_file) { - s = Status::Corruption("no meta-nextfile entry in descriptor"); - } else if (!have_log_number) { - s = Status::Corruption("no meta-lognumber entry in descriptor"); - } else if (!have_last_sequence) { - s = Status::Corruption("no last-sequence-number entry in descriptor"); - } - - if (!have_prev_log_number) { - prev_log_number = 0; - } - - MarkFileNumberUsed(prev_log_number); - MarkFileNumberUsed(log_number); - } - - if (s.ok()) { - Version* v = new Version(this); - builder.SaveTo(v); - // Install recovered version - Finalize(v); - AppendVersion(v); - manifest_file_number_ = next_file; - next_file_number_ = next_file + 1; - last_sequence_ = last_sequence; - log_number_ = log_number; - prev_log_number_ = prev_log_number; - } - - return s; -} - -void VersionSet::MarkFileNumberUsed(uint64_t number) { - if (next_file_number_ <= number) { - next_file_number_ = number + 1; - } -} - -void VersionSet::Finalize(Version* v) { - // Compute the ratio of disk usage to its limit - for (int level = 0; level + 1 < config::kNumLevels; ++level) { - double score; - if (level == 0) { - // We treat level-0 specially by bounding the number of files - // instead of number of bytes for two reasons: - // - // (1) With larger write-buffer sizes, it is nice not to do too - // many level-0 compactions. - // - // (2) The files in level-0 are merged on every read and - // therefore we wish to avoid too many files when the individual - // file size is small (perhaps because of a small write-buffer - // setting, or very high compression ratios, or lots of - // overwrites/deletions). - score = v->files_[level].size() / - static_cast(config::kL0_CompactionTrigger); - } else { - // Compute the ratio of current size to size limit. - const uint64_t level_bytes = TotalFileSize(v->files_[level]); - score = static_cast(level_bytes) / MaxBytesForLevel(level); - } - v->compaction_scores_[level] = score; - } -} - -Status VersionSet::WriteSnapshot(log::Writer* log) { - // TODO: Break up into multiple records to reduce memory usage on recovery? - - // Save metadata - VersionEdit edit; - edit.SetComparatorName(icmp_.user_comparator()->Name()); - - // Save compaction pointers - for (int level = 0; level < config::kNumLevels; level++) { - if (!compact_pointer_[level].empty()) { - InternalKey key; - key.DecodeFrom(compact_pointer_[level]); - edit.SetCompactPointer(level, key); - } - } - - // Save files - for (int level = 0; level < config::kNumLevels; level++) { - const std::vector& files = current_->files_[level]; - for (size_t i = 0; i < files.size(); i++) { - const FileMetaData* f = files[i]; - edit.AddFile(level, f->number, f->file_size, f->smallest, f->largest); - } - } - - std::string record; - edit.EncodeTo(&record); - return log->AddRecord(record); -} - -int VersionSet::NumLevelFiles(int level) const { - assert(level >= 0); - assert(level < config::kNumLevels); - return current_->files_[level].size(); -} - -const char* VersionSet::LevelSummary(LevelSummaryStorage* scratch) const { - // Update code if kNumLevels changes - assert(config::kNumLevels == 7); - snprintf(scratch->buffer, sizeof(scratch->buffer), - "files[ %d %d %d %d %d %d %d ]", - int(current_->files_[0].size()), - int(current_->files_[1].size()), - int(current_->files_[2].size()), - int(current_->files_[3].size()), - int(current_->files_[4].size()), - int(current_->files_[5].size()), - int(current_->files_[6].size())); - return scratch->buffer; -} - -uint64_t VersionSet::ApproximateOffsetOf(Version* v, const InternalKey& ikey) { - uint64_t result = 0; - for (int level = 0; level < config::kNumLevels; level++) { - const std::vector& files = v->files_[level]; - for (size_t i = 0; i < files.size(); i++) { - if (icmp_.Compare(files[i]->largest, ikey) <= 0) { - // Entire file is before "ikey", so just add the file size - result += files[i]->file_size; - } else if (icmp_.Compare(files[i]->smallest, ikey) > 0) { - // Entire file is after "ikey", so ignore - if (level > 0) { - // Files other than level 0 are sorted by meta->smallest, so - // no further files in this level will contain data for - // "ikey". - break; - } - } else { - // "ikey" falls in the range for this table. Add the - // approximate offset of "ikey" within the table. - Table* tableptr; - Iterator* iter = table_cache_->NewIterator( - ReadOptions(), files[i]->number, files[i]->file_size, &tableptr); - if (tableptr != NULL) { - result += tableptr->ApproximateOffsetOf(ikey.Encode()); - } - delete iter; - } - } - } - return result; -} - -void VersionSet::AddLiveFiles(std::set* live) { - for (Version* v = dummy_versions_.next_; - v != &dummy_versions_; - v = v->next_) { - for (int level = 0; level < config::kNumLevels; level++) { - const std::vector& files = v->files_[level]; - for (size_t i = 0; i < files.size(); i++) { - live->insert(files[i]->number); - } - } - } -} - -int64_t VersionSet::NumLevelBytes(int level) const { - assert(level >= 0); - assert(level < config::kNumLevels); - return TotalFileSize(current_->files_[level]); -} - -int64_t VersionSet::MaxNextLevelOverlappingBytes() { - int64_t result = 0; - std::vector overlaps; - for (int level = 1; level < config::kNumLevels - 1; level++) { - for (size_t i = 0; i < current_->files_[level].size(); i++) { - const FileMetaData* f = current_->files_[level][i]; - current_->GetOverlappingInputs(level+1, &f->smallest, &f->largest, - &overlaps); - const int64_t sum = TotalFileSize(overlaps); - if (sum > result) { - result = sum; - } - } - } - return result; -} - -// Stores the minimal range that covers all entries in inputs in -// *smallest, *largest. -// REQUIRES: inputs is not empty -void VersionSet::GetRange(const std::vector& inputs, - InternalKey* smallest, - InternalKey* largest) { - assert(!inputs.empty()); - smallest->Clear(); - largest->Clear(); - for (size_t i = 0; i < inputs.size(); i++) { - FileMetaData* f = inputs[i]; - if (i == 0) { - *smallest = f->smallest; - *largest = f->largest; - } else { - if (icmp_.Compare(f->smallest, *smallest) < 0) { - *smallest = f->smallest; - } - if (icmp_.Compare(f->largest, *largest) > 0) { - *largest = f->largest; - } - } - } -} - -// Stores the minimal range that covers all entries in inputs1 and inputs2 -// in *smallest, *largest. -// REQUIRES: inputs is not empty -void VersionSet::GetRange2(const std::vector& inputs1, - const std::vector& inputs2, - InternalKey* smallest, - InternalKey* largest) { - std::vector all = inputs1; - all.insert(all.end(), inputs2.begin(), inputs2.end()); - GetRange(all, smallest, largest); -} - -Iterator* VersionSet::MakeInputIterator(Compaction* c) { - ReadOptions options; - options.verify_checksums = options_->paranoid_checks; - options.fill_cache = false; - - // Level-0 files have to be merged together. For other levels, - // we will make a concatenating iterator per level. - // TODO(opt): use concatenating iterator for level-0 if there is no overlap - const int space = (c->level() == 0 ? c->inputs_[0].size() + 1 : 2); - Iterator** list = new Iterator*[space]; - int num = 0; - for (int which = 0; which < 2; which++) { - if (!c->inputs_[which].empty()) { - if (c->level() + which == 0) { - const std::vector& files = c->inputs_[which]; - for (size_t i = 0; i < files.size(); i++) { - list[num++] = table_cache_->NewIterator( - options, files[i]->number, files[i]->file_size); - } - } else { - // Create concatenating iterator for the files from this level - list[num++] = NewTwoLevelIterator( - new Version::LevelFileNumIterator(icmp_, &c->inputs_[which], 0), - &GetFileIterator, table_cache_, options); - } - } - } - assert(num <= space); - Iterator* result = NewMergingIterator(&icmp_, list, num); - delete[] list; - return result; -} - -struct CompactionBoundary { - size_t start; - size_t limit; - CompactionBoundary() : start(0), limit(0) {} - CompactionBoundary(size_t s, size_t l) : start(s), limit(l) {} -}; - -struct CmpByRange { - CmpByRange(const InternalKeyComparator* cmp) : cmp_(cmp) {} - bool operator () (const FileMetaData* lhs, const FileMetaData* rhs) { - int smallest = cmp_->Compare(lhs->smallest, rhs->smallest); - if (smallest == 0) { - return cmp_->Compare(lhs->largest, rhs->largest) < 0; - } - return smallest < 0; - } - private: - const InternalKeyComparator* cmp_; -}; - -// Stores the compaction boundaries between level and level + 1 -void VersionSet::GetCompactionBoundaries(Version* v, - int level, - std::vector* LA, - std::vector* LB, - std::vector* LA_sizes, - std::vector* LB_sizes, - std::vector* boundaries) -{ - const Comparator* user_cmp = icmp_.user_comparator(); - *LA = v->files_[level + 0]; - *LB = v->files_[level + 1]; - *LA_sizes = std::vector(LA->size() + 1, 0); - *LB_sizes = std::vector(LB->size() + 1, 0); - std::sort(LA->begin(), LA->end(), CmpByRange(&icmp_)); - std::sort(LB->begin(), LB->end(), CmpByRange(&icmp_)); - boundaries->resize(LA->size()); - - // compute sizes - for (size_t i = 0; i < LA->size(); ++i) { - (*LA_sizes)[i + 1] = (*LA_sizes)[i] + (*LA)[i]->file_size; - } - for (size_t i = 0; i < LB->size(); ++i) { - (*LB_sizes)[i + 1] = (*LB_sizes)[i] + (*LB)[i]->file_size; - } - - // compute boundaries - size_t start = 0; - size_t limit = 0; - // figure out which range of LB each LA covers - for (size_t i = 0; i < LA->size(); ++i) { - // find smallest start s.t. LB[start] overlaps LA[i] - while (start < LB->size() && - user_cmp->Compare((*LB)[start]->largest.user_key(), - (*LA)[i]->smallest.user_key()) < 0) { - ++start; - } - limit = std::max(start, limit); - // find smallest limit >= start s.t. LB[limit] does not overlap LA[i] - while (limit < LB->size() && - user_cmp->Compare((*LB)[limit]->smallest.user_key(), - (*LA)[i]->largest.user_key()) <= 0) { - ++limit; - } - (*boundaries)[i].start = start; - (*boundaries)[i].limit = limit; - } -} - -int VersionSet::PickCompactionLevel(bool* locked, bool seek_driven) const { - // Find an unlocked level has score >= 1 where level + 1 has score < 1. - int level = config::kNumLevels; - for (int i = 0; i + 1 < config::kNumLevels; ++i) { - if (locked[i] || locked[i + 1]) { - continue; - } - if (current_->compaction_scores_[i + 0] >= 1.0 && - (i + 2 >= config::kNumLevels || - current_->compaction_scores_[i + 1] < 1.0)) { - level = i; - break; - } - } - if (seek_driven && - level == config::kNumLevels && - current_->file_to_compact_ != NULL && - !locked[current_->file_to_compact_level_ + 0] && - !locked[current_->file_to_compact_level_ + 1]) { - level = current_->file_to_compact_level_; - } - return level; -} - -static bool OldestFirst(FileMetaData* a, FileMetaData* b) { - return a->number < b->number; -} - -Compaction* VersionSet::PickCompaction(Version* v, int level) { - assert(0 <= level && level < config::kNumLevels); - bool trivial = false; - - if (v->files_[level].empty()) { - return NULL; - } - - Compaction* c = new Compaction(level); - c->input_version_ = v; - c->input_version_->Ref(); - - if (level > 0) { - std::vector LA; - std::vector LB; - std::vector LA_sizes; - std::vector LB_sizes; - std::vector boundaries; - GetCompactionBoundaries(v, level, &LA, &LB, &LA_sizes, &LB_sizes, &boundaries); - - // find the best set of files: maximize the ratio of sizeof(LA)/sizeof(LB) - // while keeping sizeof(LA)+sizeof(LB) < some threshold. If there's a tie - // for ratio, minimize size. - size_t best_idx_start = 0; - size_t best_idx_limit = 0; - uint64_t best_size = 0; - double best_ratio = -1; - for (size_t i = 0; i < boundaries.size(); ++i) { - for (size_t j = i; j < boundaries.size(); ++j) { - uint64_t sz_a = LA_sizes[j + 1] - LA_sizes[i]; - uint64_t sz_b = LB_sizes[boundaries[j].limit] - LB_sizes[boundaries[i].start]; - if (boundaries[j].start == boundaries[j].limit) { - trivial = true; - break; - } - if (sz_a + sz_b >= MaxCompactionBytesForLevel(level)) { - break; - } - assert(sz_b > 0); // true because we exclude trivial moves - double ratio = double(sz_a) / double(sz_b); - if (ratio > best_ratio || - (ratio == best_ratio && sz_a + sz_b < best_size)) { - best_ratio = ratio; - best_size = sz_a + sz_b; - best_idx_start = i; - best_idx_limit = j + 1; - } - } - } - - // Trivial moves have a near-0 cost, so do them first. - if (trivial) { - for (size_t i = 0; i < LA.size(); ++i) { - if (boundaries[i].start == boundaries[i].limit) { - c->inputs_[0].push_back(LA[i]); - } - } - trivial = level != 0; - c->SetRatio(1.0); - // If the best we could do would be wasteful and the best level has more - // data in it than the next level would have, move it all - } else if (level < 4 && best_ratio >= 0.0 && - LA_sizes.back() * best_ratio >= LB_sizes.back()) { - for (size_t i = 0 ; i < LA.size(); ++i) { - c->inputs_[0].push_back(LA[i]); - } - c->SetRatio(double(LA_sizes.back()) / double(LB_sizes.back())); - // otherwise go with the best ratio - } else if (best_ratio >= 0.0) { - for (size_t i = best_idx_start; i < best_idx_limit; ++i) { - assert(i >= 0 && i < LA.size()); - c->inputs_[0].push_back(LA[i]); - } - for (size_t i = boundaries[best_idx_start].start; - i < boundaries[best_idx_limit - 1].limit; ++i) { - assert(i >= 0 && i < LB.size()); - c->inputs_[1].push_back(LB[i]); - } - c->SetRatio(best_ratio); - // pick the file to compact in this level - } else if (v->file_to_compact_ != NULL) { - c->inputs_[0].push_back(v->file_to_compact_); - // otherwise just pick the file with least overlap - } else { - assert(level >= 0); - assert(level+1 < config::kNumLevels); - // Pick the file that overlaps with the fewest files in the next level - size_t smallest = boundaries.size(); - for (size_t i = 0; i < boundaries.size(); ++i) { - if (smallest == boundaries.size() || - boundaries[smallest].limit - boundaries[smallest].start > - boundaries[i].limit - boundaries[i].start) { - smallest = i; - } - } - assert(smallest < boundaries.size()); - c->inputs_[0].push_back(LA[smallest]); - for (size_t i = boundaries[smallest].start; i < boundaries[smallest].limit; ++i) { - c->inputs_[1].push_back(LB[i]); - } - } - } else { - std::vector tmp(v->files_[0]); - std::sort(tmp.begin(), tmp.end(), OldestFirst); - for (size_t i = 0; i < tmp.size() && c->inputs_[0].size() < 32; ++i) { - c->inputs_[0].push_back(tmp[i]); - } - } - - if (!trivial) { - SetupOtherInputs(c); - } - return c; -} - -void VersionSet::SetupOtherInputs(Compaction* c) { - const int level = c->level(); - InternalKey smallest, largest; - GetRange(c->inputs_[0], &smallest, &largest); - c->input_version_->GetOverlappingInputs(level+1, &smallest, &largest, &c->inputs_[1]); - - // Update the place where we will do the next compaction for this level. - // We update this immediately instead of waiting for the VersionEdit - // to be applied so that if the compaction fails, we will try a different - // key range next time. - //compact_pointer_[level] = largest.Encode().ToString(); - c->edit_.SetCompactPointer(level, largest); -} - -Compaction* VersionSet::CompactRange( - int level, - const InternalKey* begin, - const InternalKey* end) { - std::vector inputs; - current_->GetOverlappingInputs(level, begin, end, &inputs); - if (inputs.empty()) { - return NULL; - } - - // Avoid compacting too much in one shot in case the range is large. - // But we cannot do this for level-0 since level-0 files can overlap - // and we must not pick one file and drop another older file if the - // two files overlap. - if (level > 0) { - const uint64_t limit = MaxFileSizeForLevel(level); - uint64_t total = 0; - for (size_t i = 0; i < inputs.size(); i++) { - uint64_t s = inputs[i]->file_size; - total += s; - if (total >= limit) { - inputs.resize(i + 1); - break; - } - } - } - - Compaction* c = new Compaction(level); - c->input_version_ = current_; - c->input_version_->Ref(); - c->inputs_[0] = inputs; - SetupOtherInputs(c); - return c; -} - -Compaction::Compaction(int level) - : level_(level), - max_output_file_size_(MaxFileSizeForLevel(level)), - input_version_(NULL), - ratio_(0) { - for (int i = 0; i < config::kNumLevels; i++) { - level_ptrs_[i] = 0; - } -} - -Compaction::~Compaction() { - if (input_version_ != NULL) { - input_version_->Unref(); - } -} - -bool Compaction::IsTrivialMove() const { - return num_input_files(1) == 0; -} - -void Compaction::AddInputDeletions(VersionEdit* edit) { - for (int which = 0; which < 2; which++) { - for (size_t i = 0; i < inputs_[which].size(); i++) { - edit->DeleteFile(level_ + which, inputs_[which][i]->number); - } - } -} - -bool Compaction::IsBaseLevelForKey(const Slice& user_key) { - // Maybe use binary search to find right entry instead of linear search? - const Comparator* user_cmp = input_version_->vset_->icmp_.user_comparator(); - for (int lvl = level_ + 2; lvl < config::kNumLevels; lvl++) { - const std::vector& files = input_version_->files_[lvl]; - for (; level_ptrs_[lvl] < files.size(); ) { - FileMetaData* f = files[level_ptrs_[lvl]]; - if (user_cmp->Compare(user_key, f->largest.user_key()) <= 0) { - // We've advanced far enough - if (user_cmp->Compare(user_key, f->smallest.user_key()) >= 0) { - // Key falls in this file's range, so definitely not base level - return false; - } - break; - } - level_ptrs_[lvl]++; - } - } - return true; -} - -void Compaction::ReleaseInputs() { - if (input_version_ != NULL) { - input_version_->Unref(); - input_version_ = NULL; - } -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/version_set.h b/clipper/HyperLevelDB/db/version_set.h deleted file mode 100644 index 2a97e32..0000000 --- a/clipper/HyperLevelDB/db/version_set.h +++ /dev/null @@ -1,412 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// The representation of a DBImpl consists of a set of Versions. The -// newest version is called "current". Older versions may be kept -// around to provide a consistent view to live iterators. -// -// Each Version keeps track of a set of Table files per level. The -// entire set of versions is maintained in a VersionSet. -// -// Version,VersionSet are thread-compatible, but require external -// synchronization on all accesses. - -#ifndef STORAGE_LEVELDB_DB_VERSION_SET_H_ -#define STORAGE_LEVELDB_DB_VERSION_SET_H_ - -#include -#include -#include -#include "db/dbformat.h" -#include "db/version_edit.h" -#include "port/port.h" -#include "port/thread_annotations.h" - -namespace leveldb { - -namespace log { class Writer; } - -class Compaction; -class CompactionBoundary; -class Iterator; -class MemTable; -class TableBuilder; -class TableCache; -class Version; -class VersionSet; -class WritableFile; - -// Return the smallest index i such that files[i]->largest >= key. -// Return files.size() if there is no such file. -// REQUIRES: "files" contains a sorted list of non-overlapping files. -extern int FindFile(const InternalKeyComparator& icmp, - const std::vector& files, - const Slice& key); - -// Returns true iff some file in "files" overlaps the user key range -// [*smallest,*largest]. -// smallest==NULL represents a key smaller than all keys in the DB. -// largest==NULL represents a key largest than all keys in the DB. -// REQUIRES: If disjoint_sorted_files, files[] contains disjoint ranges -// in sorted order. -extern bool SomeFileOverlapsRange( - const InternalKeyComparator& icmp, - bool disjoint_sorted_files, - const std::vector& files, - const Slice* smallest_user_key, - const Slice* largest_user_key); - -class Version { - public: - // Append to *iters a sequence of iterators that will - // yield the contents of this Version when merged together. - // REQUIRES: This version has been saved (see VersionSet::SaveTo) - void AddIterators(const ReadOptions&, std::vector* iters); - - // Append to *iters a sequence of iterators that will - // yield a subset of the contents of this Version when merged together. - // Yields only files with number greater or equal to num - // REQUIRES: This version has been saved (see VersionSet::SaveTo) - void AddSomeIterators(const ReadOptions&, uint64_t num, std::vector* iters); - - // Lookup the value for key. If found, store it in *val and - // return OK. Else return a non-OK status. Fills *stats. - // REQUIRES: lock is not held - struct GetStats { - FileMetaData* seek_file; - int seek_file_level; - }; - Status Get(const ReadOptions&, const LookupKey& key, std::string* val, - GetStats* stats); - - // Adds "stats" into the current state. Returns true if a new - // compaction may need to be triggered, false otherwise. - // REQUIRES: lock is held - bool UpdateStats(const GetStats& stats); - - // Record a sample of bytes read at the specified internal key. - // Samples are taken approximately once every config::kReadBytesPeriod - // bytes. Returns true if a new compaction may need to be triggered. - // REQUIRES: lock is held - bool RecordReadSample(Slice key); - - // Reference count management (so Versions do not disappear out from - // under live iterators) - void Ref(); - void Unref(); - - void GetOverlappingInputs( - int level, - const InternalKey* begin, // NULL means before all keys - const InternalKey* end, // NULL means after all keys - std::vector* inputs); - - // Returns true iff some file in the specified level overlaps - // some part of [*smallest_user_key,*largest_user_key]. - // smallest_user_key==NULL represents a key smaller than all keys in the DB. - // largest_user_key==NULL represents a key largest than all keys in the DB. - bool OverlapInLevel(int level, - const Slice* smallest_user_key, - const Slice* largest_user_key); - - // Return the level at which we should place a new memtable compaction - // result that covers the range [smallest_user_key,largest_user_key]. - int PickLevelForMemTableOutput(const Slice& smallest_user_key, - const Slice& largest_user_key); - - int NumFiles(int level) const { return files_[level].size(); } - - // Return a human readable string that describes this version's contents. - std::string DebugString() const; - - private: - friend class Compaction; - friend class VersionSet; - - class LevelFileNumIterator; - Iterator* NewConcatenatingIterator(const ReadOptions&, int level, uint64_t num) const; - - // Call func(arg, level, f) for every file that overlaps user_key in - // order from newest to oldest. If an invocation of func returns - // false, makes no more calls. - // - // REQUIRES: user portion of internal_key == user_key. - void ForEachOverlapping(Slice user_key, Slice internal_key, - void* arg, - bool (*func)(void*, int, FileMetaData*)); - - VersionSet* vset_; // VersionSet to which this Version belongs - Version* next_; // Next version in linked list - Version* prev_; // Previous version in linked list - int refs_; // Number of live refs to this version - - // List of files per level - std::vector files_[config::kNumLevels]; - - // Next file to compact based on seek stats. - FileMetaData* file_to_compact_; - int file_to_compact_level_; - - // Level that should be compacted next and its compaction score. - // Score < 1 means compaction is not strictly needed. These fields - // are initialized by Finalize(). - double compaction_scores_[config::kNumLevels]; - - explicit Version(VersionSet* vset) - : vset_(vset), next_(this), prev_(this), refs_(0), - file_to_compact_(NULL), - file_to_compact_level_(-1) { - for (int i = 0; i < config::kNumLevels; ++i) { - compaction_scores_[i] = -1; - } - } - - ~Version(); - - // No copying allowed - Version(const Version&); - void operator=(const Version&); -}; - -class VersionSet { - public: - VersionSet(const std::string& dbname, - const Options* options, - TableCache* table_cache, - const InternalKeyComparator*); - ~VersionSet(); - - // Apply *edit to the current version to form a new descriptor that - // is both saved to persistent state and installed as the new - // current version. Will release *mu while actually writing to the file. - // REQUIRES: *mu is held on entry. - // REQUIRES: no other thread concurrently calls LogAndApply() - Status LogAndApply(VersionEdit* edit, port::Mutex* mu, port::CondVar* cv, bool* wt) - EXCLUSIVE_LOCKS_REQUIRED(mu); - - // Recover the last saved descriptor from persistent storage. - Status Recover(); - - // Return the current version. - Version* current() const { return current_; } - - // Return the current manifest file number - uint64_t ManifestFileNumber() const { return manifest_file_number_; } - - // Allocate and return a new file number - uint64_t NewFileNumber() { return next_file_number_++; } - - // Arrange to reuse "file_number" unless a newer file number has - // already been allocated. - // REQUIRES: "file_number" was returned by a call to NewFileNumber(). - void ReuseFileNumber(uint64_t file_number) { - if (next_file_number_ == file_number + 1) { - next_file_number_ = file_number; - } - } - - // Return the number of Table files at the specified level. - int NumLevelFiles(int level) const; - - // Return the combined file size of all files at the specified level. - int64_t NumLevelBytes(int level) const; - - // Return the last sequence number. - uint64_t LastSequence() const { return last_sequence_; } - - // Set the last sequence number to s. - void SetLastSequence(uint64_t s) { - assert(s >= last_sequence_); - last_sequence_ = s; - } - - // Mark the specified file number as used. - void MarkFileNumberUsed(uint64_t number); - - // Return the current log file number. - uint64_t LogNumber() const { return log_number_; } - - // Return the log file number for the log file that is currently - // being compacted, or zero if there is no such log file. - uint64_t PrevLogNumber() const { return prev_log_number_; } - - // Pick level for a new compaction. - // Returns kNumLevels if there is no compaction to be done. - // Otherwise returns the lowest unlocked level that may compact upwards. - int PickCompactionLevel(bool* locked, bool seek_driven) const; - - // Pick inputs for a new compaction at the specified level. - // Returns NULL if there is no compaction to be done. - // Otherwise returns a pointer to a heap-allocated object that - // describes the compaction. Caller should delete the result. - Compaction* PickCompaction(Version* v, int level); - - // Return a compaction object for compacting the range [begin,end] in - // the specified level. Returns NULL if there is nothing in that - // level that overlaps the specified range. Caller should delete - // the result. - Compaction* CompactRange( - int level, - const InternalKey* begin, - const InternalKey* end); - - // Return the maximum overlapping data (in bytes) at next level for any - // file at a level >= 1. - int64_t MaxNextLevelOverlappingBytes(); - - // Create an iterator that reads over the compaction inputs for "*c". - // The caller should delete the iterator when no longer needed. - Iterator* MakeInputIterator(Compaction* c); - - // Returns true iff some level needs a compaction. - bool NeedsCompaction(bool* levels, bool seek_driven) const { - return PickCompactionLevel(levels, seek_driven) != config::kNumLevels; - } - - // Add all files listed in any live version to *live. - // May also mutate some internal state. - void AddLiveFiles(std::set* live); - - // Return the approximate offset in the database of the data for - // "key" as of version "v". - uint64_t ApproximateOffsetOf(Version* v, const InternalKey& key); - - // Return a human-readable short (single-line) summary of the number - // of files per level. Uses *scratch as backing store. - struct LevelSummaryStorage { - char buffer[100]; - }; - const char* LevelSummary(LevelSummaryStorage* scratch) const; - - private: - class Builder; - - friend class Compaction; - friend class Version; - - void Finalize(Version* v); - - void GetRange(const std::vector& inputs, - InternalKey* smallest, - InternalKey* largest); - - void GetRange2(const std::vector& inputs1, - const std::vector& inputs2, - InternalKey* smallest, - InternalKey* largest); - - void GetCompactionBoundaries(Version* version, - int level, - std::vector* LA, - std::vector* LB, - std::vector* LA_sizes, - std::vector* LB_sizes, - std::vector* boundaries); - - void SetupOtherInputs(Compaction* c); - - // Save current contents to *log - Status WriteSnapshot(log::Writer* log); - - void AppendVersion(Version* v); - - Env* const env_; - const std::string dbname_; - const Options* const options_; - TableCache* const table_cache_; - const InternalKeyComparator icmp_; - uint64_t next_file_number_; - uint64_t manifest_file_number_; - uint64_t last_sequence_; - uint64_t log_number_; - uint64_t prev_log_number_; // 0 or backing store for memtable being compacted - - // Opened lazily - WritableFile* descriptor_file_; - log::Writer* descriptor_log_; - Version dummy_versions_; // Head of circular doubly-linked list of versions. - Version* current_; // == dummy_versions_.prev_ - - // Per-level key at which the next compaction at that level should start. - // Either an empty string, or a valid InternalKey. - std::string compact_pointer_[config::kNumLevels]; - - // No copying allowed - VersionSet(const VersionSet&); - void operator=(const VersionSet&); -}; - -// A Compaction encapsulates information about a compaction. -class Compaction { - public: - ~Compaction(); - - // Return the level that is being compacted. Inputs from "level" - // and "level+1" will be merged to produce a set of "level+1" files. - int level() const { return level_; } - - // Return the object that holds the edits to the descriptor done - // by this compaction. - VersionEdit* edit() { return &edit_; } - - // "which" must be either 0 or 1 - int num_input_files(int which) const { return inputs_[which].size(); } - - // Return the ith input file at "level()+which" ("which" must be 0 or 1). - FileMetaData* input(int which, int i) const { return inputs_[which][i]; } - - // Maximum size of files to build during this compaction. - uint64_t MaxOutputFileSize() const { return max_output_file_size_; } - - // Is this a trivial compaction that can be implemented by just - // moving a single input file to the next level (no merging or splitting) - bool IsTrivialMove() const; - - // Add all inputs to this compaction as delete operations to *edit. - void AddInputDeletions(VersionEdit* edit); - - // Returns true if the information we have available guarantees that - // the compaction is producing data in "level+1" for which no data exists - // in levels greater than "level+1". - bool IsBaseLevelForKey(const Slice& user_key); - - // Release the input version for the compaction, once the compaction - // is successful. - void ReleaseInputs(); - - // Set and get the ratio of inputs to outputs. - // If nonzero, this is the ratio of inputs to outputs. If zero, it indicates - // that the compaction was chosen without concern for the ratio of inputs to - // outputs. - void SetRatio(double ratio) { ratio_ = ratio; } - double ratio() { return ratio_; } - - private: - friend class Version; - friend class VersionSet; - - explicit Compaction(int level); - - int level_; - uint64_t max_output_file_size_; - Version* input_version_; - VersionEdit edit_; - - double ratio_; - - // Each compaction reads inputs from "level_" and "level_+1" - std::vector inputs_[2]; // The two sets of inputs - - // State for implementing IsBaseLevelForKey - - // level_ptrs_ holds indices into input_version_->levels_: our state - // is that we are positioned at one of the file ranges for each - // higher level than the ones involved in this compaction (i.e. for - // all L >= level_ + 2). - size_t level_ptrs_[config::kNumLevels]; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_DB_VERSION_SET_H_ diff --git a/clipper/HyperLevelDB/db/version_set_test.cc b/clipper/HyperLevelDB/db/version_set_test.cc deleted file mode 100644 index 501e34d..0000000 --- a/clipper/HyperLevelDB/db/version_set_test.cc +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "db/version_set.h" -#include "util/logging.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -class FindFileTest { - public: - std::vector files_; - bool disjoint_sorted_files_; - - FindFileTest() : disjoint_sorted_files_(true) { } - - ~FindFileTest() { - for (int i = 0; i < files_.size(); i++) { - delete files_[i]; - } - } - - void Add(const char* smallest, const char* largest, - SequenceNumber smallest_seq = 100, - SequenceNumber largest_seq = 100) { - FileMetaData* f = new FileMetaData; - f->number = files_.size() + 1; - f->smallest = InternalKey(smallest, smallest_seq, kTypeValue); - f->largest = InternalKey(largest, largest_seq, kTypeValue); - files_.push_back(f); - } - - int Find(const char* key) { - InternalKey target(key, 100, kTypeValue); - InternalKeyComparator cmp(BytewiseComparator()); - return FindFile(cmp, files_, target.Encode()); - } - - bool Overlaps(const char* smallest, const char* largest) { - InternalKeyComparator cmp(BytewiseComparator()); - Slice s(smallest != NULL ? smallest : ""); - Slice l(largest != NULL ? largest : ""); - return SomeFileOverlapsRange(cmp, disjoint_sorted_files_, files_, - (smallest != NULL ? &s : NULL), - (largest != NULL ? &l : NULL)); - } -}; - -TEST(FindFileTest, Empty) { - ASSERT_EQ(0, Find("foo")); - ASSERT_TRUE(! Overlaps("a", "z")); - ASSERT_TRUE(! Overlaps(NULL, "z")); - ASSERT_TRUE(! Overlaps("a", NULL)); - ASSERT_TRUE(! Overlaps(NULL, NULL)); -} - -TEST(FindFileTest, Single) { - Add("p", "q"); - ASSERT_EQ(0, Find("a")); - ASSERT_EQ(0, Find("p")); - ASSERT_EQ(0, Find("p1")); - ASSERT_EQ(0, Find("q")); - ASSERT_EQ(1, Find("q1")); - ASSERT_EQ(1, Find("z")); - - ASSERT_TRUE(! Overlaps("a", "b")); - ASSERT_TRUE(! Overlaps("z1", "z2")); - ASSERT_TRUE(Overlaps("a", "p")); - ASSERT_TRUE(Overlaps("a", "q")); - ASSERT_TRUE(Overlaps("a", "z")); - ASSERT_TRUE(Overlaps("p", "p1")); - ASSERT_TRUE(Overlaps("p", "q")); - ASSERT_TRUE(Overlaps("p", "z")); - ASSERT_TRUE(Overlaps("p1", "p2")); - ASSERT_TRUE(Overlaps("p1", "z")); - ASSERT_TRUE(Overlaps("q", "q")); - ASSERT_TRUE(Overlaps("q", "q1")); - - ASSERT_TRUE(! Overlaps(NULL, "j")); - ASSERT_TRUE(! Overlaps("r", NULL)); - ASSERT_TRUE(Overlaps(NULL, "p")); - ASSERT_TRUE(Overlaps(NULL, "p1")); - ASSERT_TRUE(Overlaps("q", NULL)); - ASSERT_TRUE(Overlaps(NULL, NULL)); -} - - -TEST(FindFileTest, Multiple) { - Add("150", "200"); - Add("200", "250"); - Add("300", "350"); - Add("400", "450"); - ASSERT_EQ(0, Find("100")); - ASSERT_EQ(0, Find("150")); - ASSERT_EQ(0, Find("151")); - ASSERT_EQ(0, Find("199")); - ASSERT_EQ(0, Find("200")); - ASSERT_EQ(1, Find("201")); - ASSERT_EQ(1, Find("249")); - ASSERT_EQ(1, Find("250")); - ASSERT_EQ(2, Find("251")); - ASSERT_EQ(2, Find("299")); - ASSERT_EQ(2, Find("300")); - ASSERT_EQ(2, Find("349")); - ASSERT_EQ(2, Find("350")); - ASSERT_EQ(3, Find("351")); - ASSERT_EQ(3, Find("400")); - ASSERT_EQ(3, Find("450")); - ASSERT_EQ(4, Find("451")); - - ASSERT_TRUE(! Overlaps("100", "149")); - ASSERT_TRUE(! Overlaps("251", "299")); - ASSERT_TRUE(! Overlaps("451", "500")); - ASSERT_TRUE(! Overlaps("351", "399")); - - ASSERT_TRUE(Overlaps("100", "150")); - ASSERT_TRUE(Overlaps("100", "200")); - ASSERT_TRUE(Overlaps("100", "300")); - ASSERT_TRUE(Overlaps("100", "400")); - ASSERT_TRUE(Overlaps("100", "500")); - ASSERT_TRUE(Overlaps("375", "400")); - ASSERT_TRUE(Overlaps("450", "450")); - ASSERT_TRUE(Overlaps("450", "500")); -} - -TEST(FindFileTest, MultipleNullBoundaries) { - Add("150", "200"); - Add("200", "250"); - Add("300", "350"); - Add("400", "450"); - ASSERT_TRUE(! Overlaps(NULL, "149")); - ASSERT_TRUE(! Overlaps("451", NULL)); - ASSERT_TRUE(Overlaps(NULL, NULL)); - ASSERT_TRUE(Overlaps(NULL, "150")); - ASSERT_TRUE(Overlaps(NULL, "199")); - ASSERT_TRUE(Overlaps(NULL, "200")); - ASSERT_TRUE(Overlaps(NULL, "201")); - ASSERT_TRUE(Overlaps(NULL, "400")); - ASSERT_TRUE(Overlaps(NULL, "800")); - ASSERT_TRUE(Overlaps("100", NULL)); - ASSERT_TRUE(Overlaps("200", NULL)); - ASSERT_TRUE(Overlaps("449", NULL)); - ASSERT_TRUE(Overlaps("450", NULL)); -} - -TEST(FindFileTest, OverlapSequenceChecks) { - Add("200", "200", 5000, 3000); - ASSERT_TRUE(! Overlaps("199", "199")); - ASSERT_TRUE(! Overlaps("201", "300")); - ASSERT_TRUE(Overlaps("200", "200")); - ASSERT_TRUE(Overlaps("190", "200")); - ASSERT_TRUE(Overlaps("200", "210")); -} - -TEST(FindFileTest, OverlappingFiles) { - Add("150", "600"); - Add("400", "500"); - disjoint_sorted_files_ = false; - ASSERT_TRUE(! Overlaps("100", "149")); - ASSERT_TRUE(! Overlaps("601", "700")); - ASSERT_TRUE(Overlaps("100", "150")); - ASSERT_TRUE(Overlaps("100", "200")); - ASSERT_TRUE(Overlaps("100", "300")); - ASSERT_TRUE(Overlaps("100", "400")); - ASSERT_TRUE(Overlaps("100", "500")); - ASSERT_TRUE(Overlaps("375", "400")); - ASSERT_TRUE(Overlaps("450", "450")); - ASSERT_TRUE(Overlaps("450", "500")); - ASSERT_TRUE(Overlaps("450", "700")); - ASSERT_TRUE(Overlaps("600", "700")); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/db/write_batch.cc b/clipper/HyperLevelDB/db/write_batch.cc deleted file mode 100644 index 5a3e021..0000000 --- a/clipper/HyperLevelDB/db/write_batch.cc +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// WriteBatch::rep_ := -// sequence: fixed64 -// count: fixed32 -// data: record[count] -// record := -// kTypeValue varstring varstring | -// kTypeDeletion varstring -// varstring := -// len: varint32 -// data: uint8[len] - -#include "hyperleveldb/write_batch.h" - -#include "hyperleveldb/db.h" -#include "db/dbformat.h" -#include "db/memtable.h" -#include "db/write_batch_internal.h" -#include "util/coding.h" - -namespace leveldb { - -// WriteBatch header has an 8-byte sequence number followed by a 4-byte count. -static const size_t kHeader = 12; - -WriteBatch::WriteBatch() { - Clear(); -} - -WriteBatch::~WriteBatch() { } - -WriteBatch::Handler::~Handler() { } - -void WriteBatch::Clear() { - rep_.clear(); - rep_.resize(kHeader); -} - -Status WriteBatch::Iterate(Handler* handler) const { - Slice input(rep_); - if (input.size() < kHeader) { - return Status::Corruption("malformed WriteBatch (too small)"); - } - - input.remove_prefix(kHeader); - Slice key, value; - int found = 0; - while (!input.empty()) { - found++; - char tag = input[0]; - input.remove_prefix(1); - switch (tag) { - case kTypeValue: - if (GetLengthPrefixedSlice(&input, &key) && - GetLengthPrefixedSlice(&input, &value)) { - handler->Put(key, value); - } else { - return Status::Corruption("bad WriteBatch Put"); - } - break; - case kTypeDeletion: - if (GetLengthPrefixedSlice(&input, &key)) { - handler->Delete(key); - } else { - return Status::Corruption("bad WriteBatch Delete"); - } - break; - default: - return Status::Corruption("unknown WriteBatch tag"); - } - } - if (found != WriteBatchInternal::Count(this)) { - return Status::Corruption("WriteBatch has wrong count"); - } else { - return Status::OK(); - } -} - -int WriteBatchInternal::Count(const WriteBatch* b) { - return DecodeFixed32(b->rep_.data() + 8); -} - -void WriteBatchInternal::SetCount(WriteBatch* b, int n) { - EncodeFixed32(&b->rep_[8], n); -} - -SequenceNumber WriteBatchInternal::Sequence(const WriteBatch* b) { - return SequenceNumber(DecodeFixed64(b->rep_.data())); -} - -void WriteBatchInternal::SetSequence(WriteBatch* b, SequenceNumber seq) { - EncodeFixed64(&b->rep_[0], seq); -} - -void WriteBatch::Put(const Slice& key, const Slice& value) { - WriteBatchInternal::SetCount(this, WriteBatchInternal::Count(this) + 1); - rep_.push_back(static_cast(kTypeValue)); - PutLengthPrefixedSlice(&rep_, key); - PutLengthPrefixedSlice(&rep_, value); -} - -void WriteBatch::Delete(const Slice& key) { - WriteBatchInternal::SetCount(this, WriteBatchInternal::Count(this) + 1); - rep_.push_back(static_cast(kTypeDeletion)); - PutLengthPrefixedSlice(&rep_, key); -} - -namespace { -class MemTableInserter : public WriteBatch::Handler { - public: - SequenceNumber sequence_; - MemTable* mem_; - - virtual void Put(const Slice& key, const Slice& value) { - mem_->Add(sequence_, kTypeValue, key, value); - sequence_++; - } - virtual void Delete(const Slice& key) { - mem_->Add(sequence_, kTypeDeletion, key, Slice()); - sequence_++; - } -}; -} // namespace - -Status WriteBatchInternal::InsertInto(const WriteBatch* b, - MemTable* memtable) { - MemTableInserter inserter; - inserter.sequence_ = WriteBatchInternal::Sequence(b); - inserter.mem_ = memtable; - return b->Iterate(&inserter); -} - -void WriteBatchInternal::SetContents(WriteBatch* b, const Slice& contents) { - assert(contents.size() >= kHeader); - b->rep_.assign(contents.data(), contents.size()); -} - -void WriteBatchInternal::Append(WriteBatch* dst, const WriteBatch* src) { - SetCount(dst, Count(dst) + Count(src)); - assert(src->rep_.size() >= kHeader); - dst->rep_.append(src->rep_.data() + kHeader, src->rep_.size() - kHeader); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/db/write_batch_internal.h b/clipper/HyperLevelDB/db/write_batch_internal.h deleted file mode 100644 index 48ec885..0000000 --- a/clipper/HyperLevelDB/db/write_batch_internal.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_ -#define STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_ - -#include "hyperleveldb/write_batch.h" - -namespace leveldb { - -class MemTable; - -// WriteBatchInternal provides static methods for manipulating a -// WriteBatch that we don't want in the public WriteBatch interface. -class WriteBatchInternal { - public: - // Return the number of entries in the batch. - static int Count(const WriteBatch* batch); - - // Set the count for the number of entries in the batch. - static void SetCount(WriteBatch* batch, int n); - - // Return the seqeunce number for the start of this batch. - static SequenceNumber Sequence(const WriteBatch* batch); - - // Store the specified number as the seqeunce number for the start of - // this batch. - static void SetSequence(WriteBatch* batch, SequenceNumber seq); - - static Slice Contents(const WriteBatch* batch) { - return Slice(batch->rep_); - } - - static size_t ByteSize(const WriteBatch* batch) { - return batch->rep_.size(); - } - - static void SetContents(WriteBatch* batch, const Slice& contents); - - static Status InsertInto(const WriteBatch* batch, MemTable* memtable); - - static void Append(WriteBatch* dst, const WriteBatch* src); -}; - -} // namespace leveldb - - -#endif // STORAGE_LEVELDB_DB_WRITE_BATCH_INTERNAL_H_ diff --git a/clipper/HyperLevelDB/db/write_batch_test.cc b/clipper/HyperLevelDB/db/write_batch_test.cc deleted file mode 100644 index b150542..0000000 --- a/clipper/HyperLevelDB/db/write_batch_test.cc +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/db.h" - -#include "db/memtable.h" -#include "db/write_batch_internal.h" -#include "hyperleveldb/env.h" -#include "util/logging.h" -#include "util/testharness.h" - -namespace leveldb { - -static std::string PrintContents(WriteBatch* b) { - InternalKeyComparator cmp(BytewiseComparator()); - MemTable* mem = new MemTable(cmp); - mem->Ref(); - std::string state; - Status s = WriteBatchInternal::InsertInto(b, mem); - int count = 0; - Iterator* iter = mem->NewIterator(); - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - ParsedInternalKey ikey; - ASSERT_TRUE(ParseInternalKey(iter->key(), &ikey)); - switch (ikey.type) { - case kTypeValue: - state.append("Put("); - state.append(ikey.user_key.ToString()); - state.append(", "); - state.append(iter->value().ToString()); - state.append(")"); - count++; - break; - case kTypeDeletion: - state.append("Delete("); - state.append(ikey.user_key.ToString()); - state.append(")"); - count++; - break; - } - state.append("@"); - state.append(NumberToString(ikey.sequence)); - } - delete iter; - if (!s.ok()) { - state.append("ParseError()"); - } else if (count != WriteBatchInternal::Count(b)) { - state.append("CountMismatch()"); - } - mem->Unref(); - return state; -} - -class WriteBatchTest { }; - -TEST(WriteBatchTest, Empty) { - WriteBatch batch; - ASSERT_EQ("", PrintContents(&batch)); - ASSERT_EQ(0, WriteBatchInternal::Count(&batch)); -} - -TEST(WriteBatchTest, Multiple) { - WriteBatch batch; - batch.Put(Slice("foo"), Slice("bar")); - batch.Delete(Slice("box")); - batch.Put(Slice("baz"), Slice("boo")); - WriteBatchInternal::SetSequence(&batch, 100); - ASSERT_EQ(100, WriteBatchInternal::Sequence(&batch)); - ASSERT_EQ(3, WriteBatchInternal::Count(&batch)); - ASSERT_EQ("Put(baz, boo)@102" - "Delete(box)@101" - "Put(foo, bar)@100", - PrintContents(&batch)); -} - -TEST(WriteBatchTest, Corruption) { - WriteBatch batch; - batch.Put(Slice("foo"), Slice("bar")); - batch.Delete(Slice("box")); - WriteBatchInternal::SetSequence(&batch, 200); - Slice contents = WriteBatchInternal::Contents(&batch); - WriteBatchInternal::SetContents(&batch, - Slice(contents.data(),contents.size()-1)); - ASSERT_EQ("Put(foo, bar)@200" - "ParseError()", - PrintContents(&batch)); -} - -TEST(WriteBatchTest, Append) { - WriteBatch b1, b2; - WriteBatchInternal::SetSequence(&b1, 200); - WriteBatchInternal::SetSequence(&b2, 300); - WriteBatchInternal::Append(&b1, &b2); - ASSERT_EQ("", - PrintContents(&b1)); - b2.Put("a", "va"); - WriteBatchInternal::Append(&b1, &b2); - ASSERT_EQ("Put(a, va)@200", - PrintContents(&b1)); - b2.Clear(); - b2.Put("b", "vb"); - WriteBatchInternal::Append(&b1, &b2); - ASSERT_EQ("Put(a, va)@200" - "Put(b, vb)@201", - PrintContents(&b1)); - b2.Delete("foo"); - WriteBatchInternal::Append(&b1, &b2); - ASSERT_EQ("Put(a, va)@200" - "Put(b, vb)@202" - "Put(b, vb)@201" - "Delete(foo)@203", - PrintContents(&b1)); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/doc/bench/db_bench_sqlite3.cc b/clipper/HyperLevelDB/doc/bench/db_bench_sqlite3.cc deleted file mode 100644 index e63aaa8..0000000 --- a/clipper/HyperLevelDB/doc/bench/db_bench_sqlite3.cc +++ /dev/null @@ -1,718 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include -#include "util/histogram.h" -#include "util/random.h" -#include "util/testutil.h" - -// Comma-separated list of operations to run in the specified order -// Actual benchmarks: -// -// fillseq -- write N values in sequential key order in async mode -// fillseqsync -- write N/100 values in sequential key order in sync mode -// fillseqbatch -- batch write N values in sequential key order in async mode -// fillrandom -- write N values in random key order in async mode -// fillrandsync -- write N/100 values in random key order in sync mode -// fillrandbatch -- batch write N values in sequential key order in async mode -// overwrite -- overwrite N values in random key order in async mode -// fillrand100K -- write N/1000 100K values in random order in async mode -// fillseq100K -- write N/1000 100K values in sequential order in async mode -// readseq -- read N times sequentially -// readrandom -- read N times in random order -// readrand100K -- read N/1000 100K values in sequential order in async mode -static const char* FLAGS_benchmarks = - "fillseq," - "fillseqsync," - "fillseqbatch," - "fillrandom," - "fillrandsync," - "fillrandbatch," - "overwrite," - "overwritebatch," - "readrandom," - "readseq," - "fillrand100K," - "fillseq100K," - "readseq," - "readrand100K," - ; - -// Number of key/values to place in database -static int FLAGS_num = 1000000; - -// Number of read operations to do. If negative, do FLAGS_num reads. -static int FLAGS_reads = -1; - -// Size of each value -static int FLAGS_value_size = 100; - -// Print histogram of operation timings -static bool FLAGS_histogram = false; - -// Arrange to generate values that shrink to this fraction of -// their original size after compression -static double FLAGS_compression_ratio = 0.5; - -// Page size. Default 1 KB. -static int FLAGS_page_size = 1024; - -// Number of pages. -// Default cache size = FLAGS_page_size * FLAGS_num_pages = 4 MB. -static int FLAGS_num_pages = 4096; - -// If true, do not destroy the existing database. If you set this -// flag and also specify a benchmark that wants a fresh database, that -// benchmark will fail. -static bool FLAGS_use_existing_db = false; - -// If true, we allow batch writes to occur -static bool FLAGS_transaction = true; - -// If true, we enable Write-Ahead Logging -static bool FLAGS_WAL_enabled = true; - -// Use the db with the following name. -static const char* FLAGS_db = NULL; - -inline -static void ExecErrorCheck(int status, char *err_msg) { - if (status != SQLITE_OK) { - fprintf(stderr, "SQL error: %s\n", err_msg); - sqlite3_free(err_msg); - exit(1); - } -} - -inline -static void StepErrorCheck(int status) { - if (status != SQLITE_DONE) { - fprintf(stderr, "SQL step error: status = %d\n", status); - exit(1); - } -} - -inline -static void ErrorCheck(int status) { - if (status != SQLITE_OK) { - fprintf(stderr, "sqlite3 error: status = %d\n", status); - exit(1); - } -} - -inline -static void WalCheckpoint(sqlite3* db_) { - // Flush all writes to disk - if (FLAGS_WAL_enabled) { - sqlite3_wal_checkpoint_v2(db_, NULL, SQLITE_CHECKPOINT_FULL, NULL, NULL); - } -} - -namespace leveldb { - -// Helper for quickly generating random data. -namespace { -class RandomGenerator { - private: - std::string data_; - int pos_; - - public: - RandomGenerator() { - // We use a limited amount of data over and over again and ensure - // that it is larger than the compression window (32KB), and also - // large enough to serve all typical value sizes we want to write. - Random rnd(301); - std::string piece; - while (data_.size() < 1048576) { - // Add a short fragment that is as compressible as specified - // by FLAGS_compression_ratio. - test::CompressibleString(&rnd, FLAGS_compression_ratio, 100, &piece); - data_.append(piece); - } - pos_ = 0; - } - - Slice Generate(int len) { - if (pos_ + len > data_.size()) { - pos_ = 0; - assert(len < data_.size()); - } - pos_ += len; - return Slice(data_.data() + pos_ - len, len); - } -}; - -static Slice TrimSpace(Slice s) { - int start = 0; - while (start < s.size() && isspace(s[start])) { - start++; - } - int limit = s.size(); - while (limit > start && isspace(s[limit-1])) { - limit--; - } - return Slice(s.data() + start, limit - start); -} - -} // namespace - -class Benchmark { - private: - sqlite3* db_; - int db_num_; - int num_; - int reads_; - double start_; - double last_op_finish_; - int64_t bytes_; - std::string message_; - Histogram hist_; - RandomGenerator gen_; - Random rand_; - - // State kept for progress messages - int done_; - int next_report_; // When to report next - - void PrintHeader() { - const int kKeySize = 16; - PrintEnvironment(); - fprintf(stdout, "Keys: %d bytes each\n", kKeySize); - fprintf(stdout, "Values: %d bytes each\n", FLAGS_value_size); - fprintf(stdout, "Entries: %d\n", num_); - fprintf(stdout, "RawSize: %.1f MB (estimated)\n", - ((static_cast(kKeySize + FLAGS_value_size) * num_) - / 1048576.0)); - PrintWarnings(); - fprintf(stdout, "------------------------------------------------\n"); - } - - void PrintWarnings() { -#if defined(__GNUC__) && !defined(__OPTIMIZE__) - fprintf(stdout, - "WARNING: Optimization is disabled: benchmarks unnecessarily slow\n" - ); -#endif -#ifndef NDEBUG - fprintf(stdout, - "WARNING: Assertions are enabled; benchmarks unnecessarily slow\n"); -#endif - } - - void PrintEnvironment() { - fprintf(stderr, "SQLite: version %s\n", SQLITE_VERSION); - -#if defined(__linux) - time_t now = time(NULL); - fprintf(stderr, "Date: %s", ctime(&now)); // ctime() adds newline - - FILE* cpuinfo = fopen("/proc/cpuinfo", "r"); - if (cpuinfo != NULL) { - char line[1000]; - int num_cpus = 0; - std::string cpu_type; - std::string cache_size; - while (fgets(line, sizeof(line), cpuinfo) != NULL) { - const char* sep = strchr(line, ':'); - if (sep == NULL) { - continue; - } - Slice key = TrimSpace(Slice(line, sep - 1 - line)); - Slice val = TrimSpace(Slice(sep + 1)); - if (key == "model name") { - ++num_cpus; - cpu_type = val.ToString(); - } else if (key == "cache size") { - cache_size = val.ToString(); - } - } - fclose(cpuinfo); - fprintf(stderr, "CPU: %d * %s\n", num_cpus, cpu_type.c_str()); - fprintf(stderr, "CPUCache: %s\n", cache_size.c_str()); - } -#endif - } - - void Start() { - start_ = Env::Default()->NowMicros() * 1e-6; - bytes_ = 0; - message_.clear(); - last_op_finish_ = start_; - hist_.Clear(); - done_ = 0; - next_report_ = 100; - } - - void FinishedSingleOp() { - if (FLAGS_histogram) { - double now = Env::Default()->NowMicros() * 1e-6; - double micros = (now - last_op_finish_) * 1e6; - hist_.Add(micros); - if (micros > 20000) { - fprintf(stderr, "long op: %.1f micros%30s\r", micros, ""); - fflush(stderr); - } - last_op_finish_ = now; - } - - done_++; - if (done_ >= next_report_) { - if (next_report_ < 1000) next_report_ += 100; - else if (next_report_ < 5000) next_report_ += 500; - else if (next_report_ < 10000) next_report_ += 1000; - else if (next_report_ < 50000) next_report_ += 5000; - else if (next_report_ < 100000) next_report_ += 10000; - else if (next_report_ < 500000) next_report_ += 50000; - else next_report_ += 100000; - fprintf(stderr, "... finished %d ops%30s\r", done_, ""); - fflush(stderr); - } - } - - void Stop(const Slice& name) { - double finish = Env::Default()->NowMicros() * 1e-6; - - // Pretend at least one op was done in case we are running a benchmark - // that does not call FinishedSingleOp(). - if (done_ < 1) done_ = 1; - - if (bytes_ > 0) { - char rate[100]; - snprintf(rate, sizeof(rate), "%6.1f MB/s", - (bytes_ / 1048576.0) / (finish - start_)); - if (!message_.empty()) { - message_ = std::string(rate) + " " + message_; - } else { - message_ = rate; - } - } - - fprintf(stdout, "%-12s : %11.3f micros/op;%s%s\n", - name.ToString().c_str(), - (finish - start_) * 1e6 / done_, - (message_.empty() ? "" : " "), - message_.c_str()); - if (FLAGS_histogram) { - fprintf(stdout, "Microseconds per op:\n%s\n", hist_.ToString().c_str()); - } - fflush(stdout); - } - - public: - enum Order { - SEQUENTIAL, - RANDOM - }; - enum DBState { - FRESH, - EXISTING - }; - - Benchmark() - : db_(NULL), - db_num_(0), - num_(FLAGS_num), - reads_(FLAGS_reads < 0 ? FLAGS_num : FLAGS_reads), - bytes_(0), - rand_(301) { - std::vector files; - std::string test_dir; - Env::Default()->GetTestDirectory(&test_dir); - Env::Default()->GetChildren(test_dir, &files); - if (!FLAGS_use_existing_db) { - for (int i = 0; i < files.size(); i++) { - if (Slice(files[i]).starts_with("dbbench_sqlite3")) { - std::string file_name(test_dir); - file_name += "/"; - file_name += files[i]; - Env::Default()->DeleteFile(file_name.c_str()); - } - } - } - } - - ~Benchmark() { - int status = sqlite3_close(db_); - ErrorCheck(status); - } - - void Run() { - PrintHeader(); - Open(); - - const char* benchmarks = FLAGS_benchmarks; - while (benchmarks != NULL) { - const char* sep = strchr(benchmarks, ','); - Slice name; - if (sep == NULL) { - name = benchmarks; - benchmarks = NULL; - } else { - name = Slice(benchmarks, sep - benchmarks); - benchmarks = sep + 1; - } - - bytes_ = 0; - Start(); - - bool known = true; - bool write_sync = false; - if (name == Slice("fillseq")) { - Write(write_sync, SEQUENTIAL, FRESH, num_, FLAGS_value_size, 1); - WalCheckpoint(db_); - } else if (name == Slice("fillseqbatch")) { - Write(write_sync, SEQUENTIAL, FRESH, num_, FLAGS_value_size, 1000); - WalCheckpoint(db_); - } else if (name == Slice("fillrandom")) { - Write(write_sync, RANDOM, FRESH, num_, FLAGS_value_size, 1); - WalCheckpoint(db_); - } else if (name == Slice("fillrandbatch")) { - Write(write_sync, RANDOM, FRESH, num_, FLAGS_value_size, 1000); - WalCheckpoint(db_); - } else if (name == Slice("overwrite")) { - Write(write_sync, RANDOM, EXISTING, num_, FLAGS_value_size, 1); - WalCheckpoint(db_); - } else if (name == Slice("overwritebatch")) { - Write(write_sync, RANDOM, EXISTING, num_, FLAGS_value_size, 1000); - WalCheckpoint(db_); - } else if (name == Slice("fillrandsync")) { - write_sync = true; - Write(write_sync, RANDOM, FRESH, num_ / 100, FLAGS_value_size, 1); - WalCheckpoint(db_); - } else if (name == Slice("fillseqsync")) { - write_sync = true; - Write(write_sync, SEQUENTIAL, FRESH, num_ / 100, FLAGS_value_size, 1); - WalCheckpoint(db_); - } else if (name == Slice("fillrand100K")) { - Write(write_sync, RANDOM, FRESH, num_ / 1000, 100 * 1000, 1); - WalCheckpoint(db_); - } else if (name == Slice("fillseq100K")) { - Write(write_sync, SEQUENTIAL, FRESH, num_ / 1000, 100 * 1000, 1); - WalCheckpoint(db_); - } else if (name == Slice("readseq")) { - ReadSequential(); - } else if (name == Slice("readrandom")) { - Read(RANDOM, 1); - } else if (name == Slice("readrand100K")) { - int n = reads_; - reads_ /= 1000; - Read(RANDOM, 1); - reads_ = n; - } else { - known = false; - if (name != Slice()) { // No error message for empty name - fprintf(stderr, "unknown benchmark '%s'\n", name.ToString().c_str()); - } - } - if (known) { - Stop(name); - } - } - } - - void Open() { - assert(db_ == NULL); - - int status; - char file_name[100]; - char* err_msg = NULL; - db_num_++; - - // Open database - std::string tmp_dir; - Env::Default()->GetTestDirectory(&tmp_dir); - snprintf(file_name, sizeof(file_name), - "%s/dbbench_sqlite3-%d.db", - tmp_dir.c_str(), - db_num_); - status = sqlite3_open(file_name, &db_); - if (status) { - fprintf(stderr, "open error: %s\n", sqlite3_errmsg(db_)); - exit(1); - } - - // Change SQLite cache size - char cache_size[100]; - snprintf(cache_size, sizeof(cache_size), "PRAGMA cache_size = %d", - FLAGS_num_pages); - status = sqlite3_exec(db_, cache_size, NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - - // FLAGS_page_size is defaulted to 1024 - if (FLAGS_page_size != 1024) { - char page_size[100]; - snprintf(page_size, sizeof(page_size), "PRAGMA page_size = %d", - FLAGS_page_size); - status = sqlite3_exec(db_, page_size, NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - } - - // Change journal mode to WAL if WAL enabled flag is on - if (FLAGS_WAL_enabled) { - std::string WAL_stmt = "PRAGMA journal_mode = WAL"; - - // LevelDB's default cache size is a combined 4 MB - std::string WAL_checkpoint = "PRAGMA wal_autocheckpoint = 4096"; - status = sqlite3_exec(db_, WAL_stmt.c_str(), NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - status = sqlite3_exec(db_, WAL_checkpoint.c_str(), NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - } - - // Change locking mode to exclusive and create tables/index for database - std::string locking_stmt = "PRAGMA locking_mode = EXCLUSIVE"; - std::string create_stmt = - "CREATE TABLE test (key blob, value blob, PRIMARY KEY(key))"; - std::string stmt_array[] = { locking_stmt, create_stmt }; - int stmt_array_length = sizeof(stmt_array) / sizeof(std::string); - for (int i = 0; i < stmt_array_length; i++) { - status = sqlite3_exec(db_, stmt_array[i].c_str(), NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - } - } - - void Write(bool write_sync, Order order, DBState state, - int num_entries, int value_size, int entries_per_batch) { - // Create new database if state == FRESH - if (state == FRESH) { - if (FLAGS_use_existing_db) { - message_ = "skipping (--use_existing_db is true)"; - return; - } - sqlite3_close(db_); - db_ = NULL; - Open(); - Start(); - } - - if (num_entries != num_) { - char msg[100]; - snprintf(msg, sizeof(msg), "(%d ops)", num_entries); - message_ = msg; - } - - char* err_msg = NULL; - int status; - - sqlite3_stmt *replace_stmt, *begin_trans_stmt, *end_trans_stmt; - std::string replace_str = "REPLACE INTO test (key, value) VALUES (?, ?)"; - std::string begin_trans_str = "BEGIN TRANSACTION;"; - std::string end_trans_str = "END TRANSACTION;"; - - // Check for synchronous flag in options - std::string sync_stmt = (write_sync) ? "PRAGMA synchronous = FULL" : - "PRAGMA synchronous = OFF"; - status = sqlite3_exec(db_, sync_stmt.c_str(), NULL, NULL, &err_msg); - ExecErrorCheck(status, err_msg); - - // Preparing sqlite3 statements - status = sqlite3_prepare_v2(db_, replace_str.c_str(), -1, - &replace_stmt, NULL); - ErrorCheck(status); - status = sqlite3_prepare_v2(db_, begin_trans_str.c_str(), -1, - &begin_trans_stmt, NULL); - ErrorCheck(status); - status = sqlite3_prepare_v2(db_, end_trans_str.c_str(), -1, - &end_trans_stmt, NULL); - ErrorCheck(status); - - bool transaction = (entries_per_batch > 1); - for (int i = 0; i < num_entries; i += entries_per_batch) { - // Begin write transaction - if (FLAGS_transaction && transaction) { - status = sqlite3_step(begin_trans_stmt); - StepErrorCheck(status); - status = sqlite3_reset(begin_trans_stmt); - ErrorCheck(status); - } - - // Create and execute SQL statements - for (int j = 0; j < entries_per_batch; j++) { - const char* value = gen_.Generate(value_size).data(); - - // Create values for key-value pair - const int k = (order == SEQUENTIAL) ? i + j : - (rand_.Next() % num_entries); - char key[100]; - snprintf(key, sizeof(key), "%016d", k); - - // Bind KV values into replace_stmt - status = sqlite3_bind_blob(replace_stmt, 1, key, 16, SQLITE_STATIC); - ErrorCheck(status); - status = sqlite3_bind_blob(replace_stmt, 2, value, - value_size, SQLITE_STATIC); - ErrorCheck(status); - - // Execute replace_stmt - bytes_ += value_size + strlen(key); - status = sqlite3_step(replace_stmt); - StepErrorCheck(status); - - // Reset SQLite statement for another use - status = sqlite3_clear_bindings(replace_stmt); - ErrorCheck(status); - status = sqlite3_reset(replace_stmt); - ErrorCheck(status); - - FinishedSingleOp(); - } - - // End write transaction - if (FLAGS_transaction && transaction) { - status = sqlite3_step(end_trans_stmt); - StepErrorCheck(status); - status = sqlite3_reset(end_trans_stmt); - ErrorCheck(status); - } - } - - status = sqlite3_finalize(replace_stmt); - ErrorCheck(status); - status = sqlite3_finalize(begin_trans_stmt); - ErrorCheck(status); - status = sqlite3_finalize(end_trans_stmt); - ErrorCheck(status); - } - - void Read(Order order, int entries_per_batch) { - int status; - sqlite3_stmt *read_stmt, *begin_trans_stmt, *end_trans_stmt; - - std::string read_str = "SELECT * FROM test WHERE key = ?"; - std::string begin_trans_str = "BEGIN TRANSACTION;"; - std::string end_trans_str = "END TRANSACTION;"; - - // Preparing sqlite3 statements - status = sqlite3_prepare_v2(db_, begin_trans_str.c_str(), -1, - &begin_trans_stmt, NULL); - ErrorCheck(status); - status = sqlite3_prepare_v2(db_, end_trans_str.c_str(), -1, - &end_trans_stmt, NULL); - ErrorCheck(status); - status = sqlite3_prepare_v2(db_, read_str.c_str(), -1, &read_stmt, NULL); - ErrorCheck(status); - - bool transaction = (entries_per_batch > 1); - for (int i = 0; i < reads_; i += entries_per_batch) { - // Begin read transaction - if (FLAGS_transaction && transaction) { - status = sqlite3_step(begin_trans_stmt); - StepErrorCheck(status); - status = sqlite3_reset(begin_trans_stmt); - ErrorCheck(status); - } - - // Create and execute SQL statements - for (int j = 0; j < entries_per_batch; j++) { - // Create key value - char key[100]; - int k = (order == SEQUENTIAL) ? i + j : (rand_.Next() % reads_); - snprintf(key, sizeof(key), "%016d", k); - - // Bind key value into read_stmt - status = sqlite3_bind_blob(read_stmt, 1, key, 16, SQLITE_STATIC); - ErrorCheck(status); - - // Execute read statement - while ((status = sqlite3_step(read_stmt)) == SQLITE_ROW) {} - StepErrorCheck(status); - - // Reset SQLite statement for another use - status = sqlite3_clear_bindings(read_stmt); - ErrorCheck(status); - status = sqlite3_reset(read_stmt); - ErrorCheck(status); - FinishedSingleOp(); - } - - // End read transaction - if (FLAGS_transaction && transaction) { - status = sqlite3_step(end_trans_stmt); - StepErrorCheck(status); - status = sqlite3_reset(end_trans_stmt); - ErrorCheck(status); - } - } - - status = sqlite3_finalize(read_stmt); - ErrorCheck(status); - status = sqlite3_finalize(begin_trans_stmt); - ErrorCheck(status); - status = sqlite3_finalize(end_trans_stmt); - ErrorCheck(status); - } - - void ReadSequential() { - int status; - sqlite3_stmt *pStmt; - std::string read_str = "SELECT * FROM test ORDER BY key"; - - status = sqlite3_prepare_v2(db_, read_str.c_str(), -1, &pStmt, NULL); - ErrorCheck(status); - for (int i = 0; i < reads_ && SQLITE_ROW == sqlite3_step(pStmt); i++) { - bytes_ += sqlite3_column_bytes(pStmt, 1) + sqlite3_column_bytes(pStmt, 2); - FinishedSingleOp(); - } - - status = sqlite3_finalize(pStmt); - ErrorCheck(status); - } - -}; - -} // namespace leveldb - -int main(int argc, char** argv) { - std::string default_db_path; - for (int i = 1; i < argc; i++) { - double d; - int n; - char junk; - if (leveldb::Slice(argv[i]).starts_with("--benchmarks=")) { - FLAGS_benchmarks = argv[i] + strlen("--benchmarks="); - } else if (sscanf(argv[i], "--histogram=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_histogram = n; - } else if (sscanf(argv[i], "--compression_ratio=%lf%c", &d, &junk) == 1) { - FLAGS_compression_ratio = d; - } else if (sscanf(argv[i], "--use_existing_db=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_use_existing_db = n; - } else if (sscanf(argv[i], "--num=%d%c", &n, &junk) == 1) { - FLAGS_num = n; - } else if (sscanf(argv[i], "--reads=%d%c", &n, &junk) == 1) { - FLAGS_reads = n; - } else if (sscanf(argv[i], "--value_size=%d%c", &n, &junk) == 1) { - FLAGS_value_size = n; - } else if (leveldb::Slice(argv[i]) == leveldb::Slice("--no_transaction")) { - FLAGS_transaction = false; - } else if (sscanf(argv[i], "--page_size=%d%c", &n, &junk) == 1) { - FLAGS_page_size = n; - } else if (sscanf(argv[i], "--num_pages=%d%c", &n, &junk) == 1) { - FLAGS_num_pages = n; - } else if (sscanf(argv[i], "--WAL_enabled=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_WAL_enabled = n; - } else if (strncmp(argv[i], "--db=", 5) == 0) { - FLAGS_db = argv[i] + 5; - } else { - fprintf(stderr, "Invalid flag '%s'\n", argv[i]); - exit(1); - } - } - - // Choose a location for the test database if none given with --db= - if (FLAGS_db == NULL) { - leveldb::Env::Default()->GetTestDirectory(&default_db_path); - default_db_path += "/dbbench"; - FLAGS_db = default_db_path.c_str(); - } - - leveldb::Benchmark benchmark; - benchmark.Run(); - return 0; -} diff --git a/clipper/HyperLevelDB/doc/bench/db_bench_tree_db.cc b/clipper/HyperLevelDB/doc/bench/db_bench_tree_db.cc deleted file mode 100644 index ed86f03..0000000 --- a/clipper/HyperLevelDB/doc/bench/db_bench_tree_db.cc +++ /dev/null @@ -1,528 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include -#include "util/histogram.h" -#include "util/random.h" -#include "util/testutil.h" - -// Comma-separated list of operations to run in the specified order -// Actual benchmarks: -// -// fillseq -- write N values in sequential key order in async mode -// fillrandom -- write N values in random key order in async mode -// overwrite -- overwrite N values in random key order in async mode -// fillseqsync -- write N/100 values in sequential key order in sync mode -// fillrandsync -- write N/100 values in random key order in sync mode -// fillrand100K -- write N/1000 100K values in random order in async mode -// fillseq100K -- write N/1000 100K values in seq order in async mode -// readseq -- read N times sequentially -// readseq100K -- read N/1000 100K values in sequential order in async mode -// readrand100K -- read N/1000 100K values in sequential order in async mode -// readrandom -- read N times in random order -static const char* FLAGS_benchmarks = - "fillseq," - "fillseqsync," - "fillrandsync," - "fillrandom," - "overwrite," - "readrandom," - "readseq," - "fillrand100K," - "fillseq100K," - "readseq100K," - "readrand100K," - ; - -// Number of key/values to place in database -static int FLAGS_num = 1000000; - -// Number of read operations to do. If negative, do FLAGS_num reads. -static int FLAGS_reads = -1; - -// Size of each value -static int FLAGS_value_size = 100; - -// Arrange to generate values that shrink to this fraction of -// their original size after compression -static double FLAGS_compression_ratio = 0.5; - -// Print histogram of operation timings -static bool FLAGS_histogram = false; - -// Cache size. Default 4 MB -static int FLAGS_cache_size = 4194304; - -// Page size. Default 1 KB -static int FLAGS_page_size = 1024; - -// If true, do not destroy the existing database. If you set this -// flag and also specify a benchmark that wants a fresh database, that -// benchmark will fail. -static bool FLAGS_use_existing_db = false; - -// Compression flag. If true, compression is on. If false, compression -// is off. -static bool FLAGS_compression = true; - -// Use the db with the following name. -static const char* FLAGS_db = NULL; - -inline -static void DBSynchronize(kyotocabinet::TreeDB* db_) -{ - // Synchronize will flush writes to disk - if (!db_->synchronize()) { - fprintf(stderr, "synchronize error: %s\n", db_->error().name()); - } -} - -namespace leveldb { - -// Helper for quickly generating random data. -namespace { -class RandomGenerator { - private: - std::string data_; - int pos_; - - public: - RandomGenerator() { - // We use a limited amount of data over and over again and ensure - // that it is larger than the compression window (32KB), and also - // large enough to serve all typical value sizes we want to write. - Random rnd(301); - std::string piece; - while (data_.size() < 1048576) { - // Add a short fragment that is as compressible as specified - // by FLAGS_compression_ratio. - test::CompressibleString(&rnd, FLAGS_compression_ratio, 100, &piece); - data_.append(piece); - } - pos_ = 0; - } - - Slice Generate(int len) { - if (pos_ + len > data_.size()) { - pos_ = 0; - assert(len < data_.size()); - } - pos_ += len; - return Slice(data_.data() + pos_ - len, len); - } -}; - -static Slice TrimSpace(Slice s) { - int start = 0; - while (start < s.size() && isspace(s[start])) { - start++; - } - int limit = s.size(); - while (limit > start && isspace(s[limit-1])) { - limit--; - } - return Slice(s.data() + start, limit - start); -} - -} // namespace - -class Benchmark { - private: - kyotocabinet::TreeDB* db_; - int db_num_; - int num_; - int reads_; - double start_; - double last_op_finish_; - int64_t bytes_; - std::string message_; - Histogram hist_; - RandomGenerator gen_; - Random rand_; - kyotocabinet::LZOCompressor comp_; - - // State kept for progress messages - int done_; - int next_report_; // When to report next - - void PrintHeader() { - const int kKeySize = 16; - PrintEnvironment(); - fprintf(stdout, "Keys: %d bytes each\n", kKeySize); - fprintf(stdout, "Values: %d bytes each (%d bytes after compression)\n", - FLAGS_value_size, - static_cast(FLAGS_value_size * FLAGS_compression_ratio + 0.5)); - fprintf(stdout, "Entries: %d\n", num_); - fprintf(stdout, "RawSize: %.1f MB (estimated)\n", - ((static_cast(kKeySize + FLAGS_value_size) * num_) - / 1048576.0)); - fprintf(stdout, "FileSize: %.1f MB (estimated)\n", - (((kKeySize + FLAGS_value_size * FLAGS_compression_ratio) * num_) - / 1048576.0)); - PrintWarnings(); - fprintf(stdout, "------------------------------------------------\n"); - } - - void PrintWarnings() { -#if defined(__GNUC__) && !defined(__OPTIMIZE__) - fprintf(stdout, - "WARNING: Optimization is disabled: benchmarks unnecessarily slow\n" - ); -#endif -#ifndef NDEBUG - fprintf(stdout, - "WARNING: Assertions are enabled; benchmarks unnecessarily slow\n"); -#endif - } - - void PrintEnvironment() { - fprintf(stderr, "Kyoto Cabinet: version %s, lib ver %d, lib rev %d\n", - kyotocabinet::VERSION, kyotocabinet::LIBVER, kyotocabinet::LIBREV); - -#if defined(__linux) - time_t now = time(NULL); - fprintf(stderr, "Date: %s", ctime(&now)); // ctime() adds newline - - FILE* cpuinfo = fopen("/proc/cpuinfo", "r"); - if (cpuinfo != NULL) { - char line[1000]; - int num_cpus = 0; - std::string cpu_type; - std::string cache_size; - while (fgets(line, sizeof(line), cpuinfo) != NULL) { - const char* sep = strchr(line, ':'); - if (sep == NULL) { - continue; - } - Slice key = TrimSpace(Slice(line, sep - 1 - line)); - Slice val = TrimSpace(Slice(sep + 1)); - if (key == "model name") { - ++num_cpus; - cpu_type = val.ToString(); - } else if (key == "cache size") { - cache_size = val.ToString(); - } - } - fclose(cpuinfo); - fprintf(stderr, "CPU: %d * %s\n", num_cpus, cpu_type.c_str()); - fprintf(stderr, "CPUCache: %s\n", cache_size.c_str()); - } -#endif - } - - void Start() { - start_ = Env::Default()->NowMicros() * 1e-6; - bytes_ = 0; - message_.clear(); - last_op_finish_ = start_; - hist_.Clear(); - done_ = 0; - next_report_ = 100; - } - - void FinishedSingleOp() { - if (FLAGS_histogram) { - double now = Env::Default()->NowMicros() * 1e-6; - double micros = (now - last_op_finish_) * 1e6; - hist_.Add(micros); - if (micros > 20000) { - fprintf(stderr, "long op: %.1f micros%30s\r", micros, ""); - fflush(stderr); - } - last_op_finish_ = now; - } - - done_++; - if (done_ >= next_report_) { - if (next_report_ < 1000) next_report_ += 100; - else if (next_report_ < 5000) next_report_ += 500; - else if (next_report_ < 10000) next_report_ += 1000; - else if (next_report_ < 50000) next_report_ += 5000; - else if (next_report_ < 100000) next_report_ += 10000; - else if (next_report_ < 500000) next_report_ += 50000; - else next_report_ += 100000; - fprintf(stderr, "... finished %d ops%30s\r", done_, ""); - fflush(stderr); - } - } - - void Stop(const Slice& name) { - double finish = Env::Default()->NowMicros() * 1e-6; - - // Pretend at least one op was done in case we are running a benchmark - // that does not call FinishedSingleOp(). - if (done_ < 1) done_ = 1; - - if (bytes_ > 0) { - char rate[100]; - snprintf(rate, sizeof(rate), "%6.1f MB/s", - (bytes_ / 1048576.0) / (finish - start_)); - if (!message_.empty()) { - message_ = std::string(rate) + " " + message_; - } else { - message_ = rate; - } - } - - fprintf(stdout, "%-12s : %11.3f micros/op;%s%s\n", - name.ToString().c_str(), - (finish - start_) * 1e6 / done_, - (message_.empty() ? "" : " "), - message_.c_str()); - if (FLAGS_histogram) { - fprintf(stdout, "Microseconds per op:\n%s\n", hist_.ToString().c_str()); - } - fflush(stdout); - } - - public: - enum Order { - SEQUENTIAL, - RANDOM - }; - enum DBState { - FRESH, - EXISTING - }; - - Benchmark() - : db_(NULL), - num_(FLAGS_num), - reads_(FLAGS_reads < 0 ? FLAGS_num : FLAGS_reads), - bytes_(0), - rand_(301) { - std::vector files; - std::string test_dir; - Env::Default()->GetTestDirectory(&test_dir); - Env::Default()->GetChildren(test_dir.c_str(), &files); - if (!FLAGS_use_existing_db) { - for (int i = 0; i < files.size(); i++) { - if (Slice(files[i]).starts_with("dbbench_polyDB")) { - std::string file_name(test_dir); - file_name += "/"; - file_name += files[i]; - Env::Default()->DeleteFile(file_name.c_str()); - } - } - } - } - - ~Benchmark() { - if (!db_->close()) { - fprintf(stderr, "close error: %s\n", db_->error().name()); - } - } - - void Run() { - PrintHeader(); - Open(false); - - const char* benchmarks = FLAGS_benchmarks; - while (benchmarks != NULL) { - const char* sep = strchr(benchmarks, ','); - Slice name; - if (sep == NULL) { - name = benchmarks; - benchmarks = NULL; - } else { - name = Slice(benchmarks, sep - benchmarks); - benchmarks = sep + 1; - } - - Start(); - - bool known = true; - bool write_sync = false; - if (name == Slice("fillseq")) { - Write(write_sync, SEQUENTIAL, FRESH, num_, FLAGS_value_size, 1); - - } else if (name == Slice("fillrandom")) { - Write(write_sync, RANDOM, FRESH, num_, FLAGS_value_size, 1); - DBSynchronize(db_); - } else if (name == Slice("overwrite")) { - Write(write_sync, RANDOM, EXISTING, num_, FLAGS_value_size, 1); - DBSynchronize(db_); - } else if (name == Slice("fillrandsync")) { - write_sync = true; - Write(write_sync, RANDOM, FRESH, num_ / 100, FLAGS_value_size, 1); - DBSynchronize(db_); - } else if (name == Slice("fillseqsync")) { - write_sync = true; - Write(write_sync, SEQUENTIAL, FRESH, num_ / 100, FLAGS_value_size, 1); - DBSynchronize(db_); - } else if (name == Slice("fillrand100K")) { - Write(write_sync, RANDOM, FRESH, num_ / 1000, 100 * 1000, 1); - DBSynchronize(db_); - } else if (name == Slice("fillseq100K")) { - Write(write_sync, SEQUENTIAL, FRESH, num_ / 1000, 100 * 1000, 1); - DBSynchronize(db_); - } else if (name == Slice("readseq")) { - ReadSequential(); - } else if (name == Slice("readrandom")) { - ReadRandom(); - } else if (name == Slice("readrand100K")) { - int n = reads_; - reads_ /= 1000; - ReadRandom(); - reads_ = n; - } else if (name == Slice("readseq100K")) { - int n = reads_; - reads_ /= 1000; - ReadSequential(); - reads_ = n; - } else { - known = false; - if (name != Slice()) { // No error message for empty name - fprintf(stderr, "unknown benchmark '%s'\n", name.ToString().c_str()); - } - } - if (known) { - Stop(name); - } - } - } - - private: - void Open(bool sync) { - assert(db_ == NULL); - - // Initialize db_ - db_ = new kyotocabinet::TreeDB(); - char file_name[100]; - db_num_++; - std::string test_dir; - Env::Default()->GetTestDirectory(&test_dir); - snprintf(file_name, sizeof(file_name), - "%s/dbbench_polyDB-%d.kct", - test_dir.c_str(), - db_num_); - - // Create tuning options and open the database - int open_options = kyotocabinet::PolyDB::OWRITER | - kyotocabinet::PolyDB::OCREATE; - int tune_options = kyotocabinet::TreeDB::TSMALL | - kyotocabinet::TreeDB::TLINEAR; - if (FLAGS_compression) { - tune_options |= kyotocabinet::TreeDB::TCOMPRESS; - db_->tune_compressor(&comp_); - } - db_->tune_options(tune_options); - db_->tune_page_cache(FLAGS_cache_size); - db_->tune_page(FLAGS_page_size); - db_->tune_map(256LL<<20); - if (sync) { - open_options |= kyotocabinet::PolyDB::OAUTOSYNC; - } - if (!db_->open(file_name, open_options)) { - fprintf(stderr, "open error: %s\n", db_->error().name()); - } - } - - void Write(bool sync, Order order, DBState state, - int num_entries, int value_size, int entries_per_batch) { - // Create new database if state == FRESH - if (state == FRESH) { - if (FLAGS_use_existing_db) { - message_ = "skipping (--use_existing_db is true)"; - return; - } - delete db_; - db_ = NULL; - Open(sync); - Start(); // Do not count time taken to destroy/open - } - - if (num_entries != num_) { - char msg[100]; - snprintf(msg, sizeof(msg), "(%d ops)", num_entries); - message_ = msg; - } - - // Write to database - for (int i = 0; i < num_entries; i++) - { - const int k = (order == SEQUENTIAL) ? i : (rand_.Next() % num_entries); - char key[100]; - snprintf(key, sizeof(key), "%016d", k); - bytes_ += value_size + strlen(key); - std::string cpp_key = key; - if (!db_->set(cpp_key, gen_.Generate(value_size).ToString())) { - fprintf(stderr, "set error: %s\n", db_->error().name()); - } - FinishedSingleOp(); - } - } - - void ReadSequential() { - kyotocabinet::DB::Cursor* cur = db_->cursor(); - cur->jump(); - std::string ckey, cvalue; - while (cur->get(&ckey, &cvalue, true)) { - bytes_ += ckey.size() + cvalue.size(); - FinishedSingleOp(); - } - delete cur; - } - - void ReadRandom() { - std::string value; - for (int i = 0; i < reads_; i++) { - char key[100]; - const int k = rand_.Next() % reads_; - snprintf(key, sizeof(key), "%016d", k); - db_->get(key, &value); - FinishedSingleOp(); - } - } -}; - -} // namespace leveldb - -int main(int argc, char** argv) { - std::string default_db_path; - for (int i = 1; i < argc; i++) { - double d; - int n; - char junk; - if (leveldb::Slice(argv[i]).starts_with("--benchmarks=")) { - FLAGS_benchmarks = argv[i] + strlen("--benchmarks="); - } else if (sscanf(argv[i], "--compression_ratio=%lf%c", &d, &junk) == 1) { - FLAGS_compression_ratio = d; - } else if (sscanf(argv[i], "--histogram=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_histogram = n; - } else if (sscanf(argv[i], "--num=%d%c", &n, &junk) == 1) { - FLAGS_num = n; - } else if (sscanf(argv[i], "--reads=%d%c", &n, &junk) == 1) { - FLAGS_reads = n; - } else if (sscanf(argv[i], "--value_size=%d%c", &n, &junk) == 1) { - FLAGS_value_size = n; - } else if (sscanf(argv[i], "--cache_size=%d%c", &n, &junk) == 1) { - FLAGS_cache_size = n; - } else if (sscanf(argv[i], "--page_size=%d%c", &n, &junk) == 1) { - FLAGS_page_size = n; - } else if (sscanf(argv[i], "--compression=%d%c", &n, &junk) == 1 && - (n == 0 || n == 1)) { - FLAGS_compression = (n == 1) ? true : false; - } else if (strncmp(argv[i], "--db=", 5) == 0) { - FLAGS_db = argv[i] + 5; - } else { - fprintf(stderr, "Invalid flag '%s'\n", argv[i]); - exit(1); - } - } - - // Choose a location for the test database if none given with --db= - if (FLAGS_db == NULL) { - leveldb::Env::Default()->GetTestDirectory(&default_db_path); - default_db_path += "/dbbench"; - FLAGS_db = default_db_path.c_str(); - } - - leveldb::Benchmark benchmark; - benchmark.Run(); - return 0; -} diff --git a/clipper/HyperLevelDB/doc/benchmark.html b/clipper/HyperLevelDB/doc/benchmark.html deleted file mode 100644 index c463977..0000000 --- a/clipper/HyperLevelDB/doc/benchmark.html +++ /dev/null @@ -1,459 +0,0 @@ - - - -LevelDB Benchmarks - - - - -

LevelDB Benchmarks

-

Google, July 2011

-
- -

In order to test LevelDB's performance, we benchmark it against other well-established database implementations. We compare LevelDB (revision 39) against SQLite3 (version 3.7.6.3) and Kyoto Cabinet's (version 1.2.67) TreeDB (a B+Tree based key-value store). We would like to acknowledge Scott Hess and Mikio Hirabayashi for their suggestions and contributions to the SQLite3 and Kyoto Cabinet benchmarks, respectively.

- -

Benchmarks were all performed on a six-core Intel(R) Xeon(R) CPU X5650 @ 2.67GHz, with 12288 KB of total L3 cache and 12 GB of DDR3 RAM at 1333 MHz. (Note that LevelDB uses at most two CPUs since the benchmarks are single threaded: one to run the benchmark, and one for background compactions.) We ran the benchmarks on two machines (with identical processors), one with an Ext3 file system and one with an Ext4 file system. The machine with the Ext3 file system has a SATA Hitachi HDS721050CLA362 hard drive. The machine with the Ext4 file system has a SATA Samsung HD502HJ hard drive. Both hard drives spin at 7200 RPM and have hard drive write-caching enabled (using `hdparm -W 1 [device]`). The numbers reported below are the median of three measurements.

- -

Benchmark Source Code

-

We wrote benchmark tools for SQLite and Kyoto TreeDB based on LevelDB's db_bench. The code for each of the benchmarks resides here:

- - -

Custom Build Specifications

-
    -
  • LevelDB: LevelDB was compiled with the tcmalloc library and the Snappy compression library (revision 33). Assertions were disabled.
  • -
  • TreeDB: TreeDB was compiled using the LZO compression library (version 2.03). Furthermore, we enabled the TSMALL and TLINEAR options when opening the database in order to reduce the footprint of each record.
  • -
  • SQLite: We tuned SQLite's performance, by setting its locking mode to exclusive. We also enabled SQLite's write-ahead logging.
  • -
- -

1. Baseline Performance

-

This section gives the baseline performance of all the -databases. Following sections show how performance changes as various -parameters are varied. For the baseline:

-
    -
  • Each database is allowed 4 MB of cache memory.
  • -
  • Databases are opened in asynchronous write mode. - (LevelDB's sync option, TreeDB's OAUTOSYNC option, and - SQLite3's synchronous options are all turned off). I.e., - every write is pushed to the operating system, but the - benchmark does not wait for the write to reach the disk.
  • -
  • Keys are 16 bytes each.
  • -
  • Value are 100 bytes each (with enough redundancy so that - a simple compressor shrinks them to 50% of their original - size).
  • -
  • Sequential reads/writes traverse the key space in increasing order.
  • -
  • Random reads/writes traverse the key space in random order.
  • -
- -

A. Sequential Reads

- - - - - - - - - - -
LevelDB4,030,000 ops/sec
 
Kyoto TreeDB1,010,000 ops/sec
 
SQLite3383,000 ops/sec
 
-

B. Random Reads

- - - - - - - - - - -
LevelDB129,000 ops/sec
 
Kyoto TreeDB151,000 ops/sec
 
SQLite3134,000 ops/sec
 
-

C. Sequential Writes

- - - - - - - - - - -
LevelDB779,000 ops/sec
 
Kyoto TreeDB342,000 ops/sec
 
SQLite348,600 ops/sec
 
-

D. Random Writes

- - - - - - - - - - -
LevelDB164,000 ops/sec
 
Kyoto TreeDB88,500 ops/sec
 
SQLite39,860 ops/sec
 
- -

LevelDB outperforms both SQLite3 and TreeDB in sequential and random write operations and sequential read operations. Kyoto Cabinet has the fastest random read operations.

- -

2. Write Performance under Different Configurations

-

A. Large Values

-

For this benchmark, we start with an empty database, and write 100,000 byte values (~50% compressible). To keep the benchmark running time reasonable, we stop after writing 1000 values.

-

Sequential Writes

- - - - - - - - - - -
LevelDB1,100 ops/sec
 
Kyoto TreeDB1,000 ops/sec
 
SQLite31,600 ops/sec
 
-

Random Writes

- - - - - - - - - - -
LevelDB480 ops/sec
 
Kyoto TreeDB1,100 ops/sec
 
SQLite31,600 ops/sec
 
-

LevelDB doesn't perform as well with large values of 100,000 bytes each. This is because LevelDB writes keys and values at least twice: first time to the transaction log, and second time (during a compaction) to a sorted file. -With larger values, LevelDB's per-operation efficiency is swamped by the -cost of extra copies of large values.

-

B. Batch Writes

-

A batch write is a set of writes that are applied atomically to the underlying database. A single batch of N writes may be significantly faster than N individual writes. The following benchmark writes one thousand batches where each batch contains one thousand 100-byte values. TreeDB does not support batch writes and is omitted from this benchmark.

-

Sequential Writes

- - - - - - - - - -
LevelDB840,000 entries/sec
 
(1.08x baseline)
SQLite3124,000 entries/sec
 
(2.55x baseline)
-

Random Writes

- - - - - - - - - -
LevelDB221,000 entries/sec
 
(1.35x baseline)
SQLite322,000 entries/sec
 
(2.23x baseline)
- -

Because of the way LevelDB persistent storage is organized, batches of -random writes are not much slower (only a factor of 4x) than batches -of sequential writes.

- -

C. Synchronous Writes

-

In the following benchmark, we enable the synchronous writing modes -of all of the databases. Since this change significantly slows down the -benchmark, we stop after 10,000 writes. For synchronous write tests, we've -disabled hard drive write-caching (using `hdparm -W 0 [device]`).

-
    -
  • For LevelDB, we set WriteOptions.sync = true.
  • -
  • In TreeDB, we enabled TreeDB's OAUTOSYNC option.
  • -
  • For SQLite3, we set "PRAGMA synchronous = FULL".
  • -
-

Sequential Writes

- - - - - - - - - - - - - -
LevelDB100 ops/sec
 
(0.003x baseline)
Kyoto TreeDB7 ops/sec
 
(0.0004x baseline)
SQLite388 ops/sec
 
(0.002x baseline)
-

Random Writes

- - - - - - - - - - - - - -
LevelDB100 ops/sec
 
(0.015x baseline)
Kyoto TreeDB8 ops/sec
 
(0.001x baseline)
SQLite388 ops/sec
 
(0.009x baseline)
- -

Also see the ext4 performance numbers below -since synchronous writes behave significantly differently -on ext3 and ext4.

- -

D. Turning Compression Off

- -

In the baseline measurements, LevelDB and TreeDB were using -light-weight compression -(Snappy for LevelDB, -and LZO for -TreeDB). SQLite3, by default does not use compression. The -experiments below show what happens when compression is disabled in -all of the databases (the SQLite3 numbers are just a copy of -its baseline measurements):

- -

Sequential Writes

- - - - - - - - - - - - - -
LevelDB594,000 ops/sec
 
(0.76x baseline)
Kyoto TreeDB485,000 ops/sec
 
(1.42x baseline)
SQLite348,600 ops/sec
 
(1.00x baseline)
-

Random Writes

- - - - - - - - - - - - - -
LevelDB135,000 ops/sec
 
(0.82x baseline)
Kyoto TreeDB159,000 ops/sec
 
(1.80x baseline)
SQLite39,860 ops/sec
 
(1.00x baseline)
- -

LevelDB's write performance is better with compression than without -since compression decreases the amount of data that has to be written -to disk. Therefore LevelDB users can leave compression enabled in -most scenarios without having worry about a tradeoff between space -usage and performance. TreeDB's performance on the other hand is -better without compression than with compression. Presumably this is -because TreeDB's compression library (LZO) is more expensive than -LevelDB's compression library (Snappy).

- -

E. Using More Memory

-

We increased the overall cache size for each database to 128 MB. For LevelDB, we partitioned 128 MB into a 120 MB write buffer and 8 MB of cache (up from 2 MB of write buffer and 2 MB of cache). For SQLite3, we kept the page size at 1024 bytes, but increased the number of pages to 131,072 (up from 4096). For TreeDB, we also kept the page size at 1024 bytes, but increased the cache size to 128 MB (up from 4 MB).

-

Sequential Writes

- - - - - - - - - - - - - -
LevelDB812,000 ops/sec
 
(1.04x baseline)
Kyoto TreeDB321,000 ops/sec
 
(0.94x baseline)
SQLite348,500 ops/sec
 
(1.00x baseline)
-

Random Writes

- - - - - - - - - - - - - -
LevelDB355,000 ops/sec
 
(2.16x baseline)
Kyoto TreeDB284,000 ops/sec
 
(3.21x baseline)
SQLite39,670 ops/sec
 
(0.98x baseline)
- -

SQLite's performance does not change substantially when compared to -the baseline, but the random write performance for both LevelDB and -TreeDB increases significantly. LevelDB's performance improves -because a larger write buffer reduces the need to merge sorted files -(since it creates a smaller number of larger sorted files). TreeDB's -performance goes up because the entire database is available in memory -for fast in-place updates.

- -

3. Read Performance under Different Configurations

-

A. Larger Caches

-

We increased the overall memory usage to 128 MB for each database. -For LevelDB, we allocated 8 MB to LevelDB's write buffer and 120 MB -to LevelDB's cache. The other databases don't differentiate between a -write buffer and a cache, so we simply set their cache size to 128 -MB.

-

Sequential Reads

- - - - - - - - - - - - - -
LevelDB5,210,000 ops/sec
 
(1.29x baseline)
Kyoto TreeDB1,070,000 ops/sec
 
(1.06x baseline)
SQLite3609,000 ops/sec
 
(1.59x baseline)
- -

Random Reads

- - - - - - - - - - - - - -
LevelDB190,000 ops/sec
 
(1.47x baseline)
Kyoto TreeDB463,000 ops/sec
 
(3.07x baseline)
SQLite3186,000 ops/sec
 
(1.39x baseline)
- -

As expected, the read performance of all of the databases increases -when the caches are enlarged. In particular, TreeDB seems to make -very effective use of a cache that is large enough to hold the entire -database.

- -

B. No Compression Reads

-

For this benchmark, we populated a database with 1 million entries consisting of 16 byte keys and 100 byte values. We compiled LevelDB and Kyoto Cabinet without compression support, so results that are read out from the database are already uncompressed. We've listed the SQLite3 baseline read performance as a point of comparison.

-

Sequential Reads

- - - - - - - - - - - - - -
LevelDB4,880,000 ops/sec
 
(1.21x baseline)
Kyoto TreeDB1,230,000 ops/sec
 
(3.60x baseline)
SQLite3383,000 ops/sec
 
(1.00x baseline)
-

Random Reads

- - - - - - - - - - - - - -
LevelDB149,000 ops/sec
 
(1.16x baseline)
Kyoto TreeDB175,000 ops/sec
 
(1.16x baseline)
SQLite3134,000 ops/sec
 
(1.00x baseline)
- -

Performance of both LevelDB and TreeDB improves a small amount when -compression is disabled. Note however that under different workloads, -performance may very well be better with compression if it allows more -of the working set to fit in memory.

- -

Note about Ext4 Filesystems

-

The preceding numbers are for an ext3 file system. Synchronous writes are much slower under ext4 (LevelDB drops to ~31 writes / second and TreeDB drops to ~5 writes / second; SQLite3's synchronous writes do not noticeably drop) due to ext4's different handling of fsync / msync calls. Even LevelDB's asynchronous write performance drops somewhat since it spreads its storage across multiple files and issues fsync calls when switching to a new file.

- -

Acknowledgements

-

Jeff Dean and Sanjay Ghemawat wrote LevelDB. Kevin Tseng wrote and compiled these benchmarks. Mikio Hirabayashi, Scott Hess, and Gabor Cselle provided help and advice.

- - diff --git a/clipper/HyperLevelDB/doc/doc.css b/clipper/HyperLevelDB/doc/doc.css deleted file mode 100644 index 700c564..0000000 --- a/clipper/HyperLevelDB/doc/doc.css +++ /dev/null @@ -1,89 +0,0 @@ -body { - margin-left: 0.5in; - margin-right: 0.5in; - background: white; - color: black; -} - -h1 { - margin-left: -0.2in; - font-size: 14pt; -} -h2 { - margin-left: -0in; - font-size: 12pt; -} -h3 { - margin-left: -0in; -} -h4 { - margin-left: -0in; -} -hr { - margin-left: -0in; -} - -/* Definition lists: definition term bold */ -dt { - font-weight: bold; -} - -address { - text-align: center; -} -code,samp,var { - color: blue; -} -kbd { - color: #600000; -} -div.note p { - float: right; - width: 3in; - margin-right: 0%; - padding: 1px; - border: 2px solid #6060a0; - background-color: #fffff0; -} - -ul { - margin-top: -0em; - margin-bottom: -0em; -} - -ol { - margin-top: -0em; - margin-bottom: -0em; -} - -UL.nobullets { - list-style-type: none; - list-style-image: none; - margin-left: -1em; -} - -p { - margin: 1em 0 1em 0; - padding: 0 0 0 0; -} - -pre { - line-height: 1.3em; - padding: 0.4em 0 0.8em 0; - margin: 0 0 0 0; - border: 0 0 0 0; - color: blue; -} - -.datatable { - margin-left: auto; - margin-right: auto; - margin-top: 2em; - margin-bottom: 2em; - border: 1px solid; -} - -.datatable td,th { - padding: 0 0.5em 0 0.5em; - text-align: right; -} diff --git a/clipper/HyperLevelDB/doc/impl.html b/clipper/HyperLevelDB/doc/impl.html deleted file mode 100644 index 28817fe..0000000 --- a/clipper/HyperLevelDB/doc/impl.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - -Leveldb file layout and compactions - - - - -

Files

- -The implementation of leveldb is similar in spirit to the -representation of a single - -Bigtable tablet (section 5.3). -However the organization of the files that make up the representation -is somewhat different and is explained below. - -

-Each database is represented by a set of files stored in a directory. -There are several different types of files as documented below: -

-

Log files

-

-A log file (*.log) stores a sequence of recent updates. Each update -is appended to the current log file. When the log file reaches a -pre-determined size (approximately 4MB by default), it is converted -to a sorted table (see below) and a new log file is created for future -updates. -

-A copy of the current log file is kept in an in-memory structure (the -memtable). This copy is consulted on every read so that read -operations reflect all logged updates. -

-

Sorted tables

-

-A sorted table (*.sst) stores a sequence of entries sorted by key. -Each entry is either a value for the key, or a deletion marker for the -key. (Deletion markers are kept around to hide obsolete values -present in older sorted tables). -

-The set of sorted tables are organized into a sequence of levels. The -sorted table generated from a log file is placed in a special young -level (also called level-0). When the number of young files exceeds a -certain threshold (currently four), all of the young files are merged -together with all of the overlapping level-1 files to produce a -sequence of new level-1 files (we create a new level-1 file for every -2MB of data.) -

-Files in the young level may contain overlapping keys. However files -in other levels have distinct non-overlapping key ranges. Consider -level number L where L >= 1. When the combined size of files in -level-L exceeds (10^L) MB (i.e., 10MB for level-1, 100MB for level-2, -...), one file in level-L, and all of the overlapping files in -level-(L+1) are merged to form a set of new files for level-(L+1). -These merges have the effect of gradually migrating new updates from -the young level to the largest level using only bulk reads and writes -(i.e., minimizing expensive seeks). - -

Manifest

-

-A MANIFEST file lists the set of sorted tables that make up each -level, the corresponding key ranges, and other important metadata. -A new MANIFEST file (with a new number embedded in the file name) -is created whenever the database is reopened. The MANIFEST file is -formatted as a log, and changes made to the serving state (as files -are added or removed) are appended to this log. -

-

Current

-

-CURRENT is a simple text file that contains the name of the latest -MANIFEST file. -

-

Info logs

-

-Informational messages are printed to files named LOG and LOG.old. -

-

Others

-

-Other files used for miscellaneous purposes may also be present -(LOCK, *.dbtmp). - -

Level 0

-When the log file grows above a certain size (1MB by default): -
    -
  • Create a brand new memtable and log file and direct future updates here -
  • In the background: -
      -
    • Write the contents of the previous memtable to an sstable -
    • Discard the memtable -
    • Delete the old log file and the old memtable -
    • Add the new sstable to the young (level-0) level. -
    -
- -

Compactions

- -

-When the size of level L exceeds its limit, we compact it in a -background thread. The compaction picks a file from level L and all -overlapping files from the next level L+1. Note that if a level-L -file overlaps only part of a level-(L+1) file, the entire file at -level-(L+1) is used as an input to the compaction and will be -discarded after the compaction. Aside: because level-0 is special -(files in it may overlap each other), we treat compactions from -level-0 to level-1 specially: a level-0 compaction may pick more than -one level-0 file in case some of these files overlap each other. - -

-A compaction merges the contents of the picked files to produce a -sequence of level-(L+1) files. We switch to producing a new -level-(L+1) file after the current output file has reached the target -file size (2MB). We also switch to a new output file when the key -range of the current output file has grown enough to overlap more then -ten level-(L+2) files. This last rule ensures that a later compaction -of a level-(L+1) file will not pick up too much data from level-(L+2). - -

-The old files are discarded and the new files are added to the serving -state. - -

-Compactions for a particular level rotate through the key space. In -more detail, for each level L, we remember the ending key of the last -compaction at level L. The next compaction for level L will pick the -first file that starts after this key (wrapping around to the -beginning of the key space if there is no such file). - -

-Compactions drop overwritten values. They also drop deletion markers -if there are no higher numbered levels that contain a file whose range -overlaps the current key. - -

Timing

- -Level-0 compactions will read up to four 1MB files from level-0, and -at worst all the level-1 files (10MB). I.e., we will read 14MB and -write 14MB. - -

-Other than the special level-0 compactions, we will pick one 2MB file -from level L. In the worst case, this will overlap ~ 12 files from -level L+1 (10 because level-(L+1) is ten times the size of level-L, -and another two at the boundaries since the file ranges at level-L -will usually not be aligned with the file ranges at level-L+1). The -compaction will therefore read 26MB and write 26MB. Assuming a disk -IO rate of 100MB/s (ballpark range for modern drives), the worst -compaction cost will be approximately 0.5 second. - -

-If we throttle the background writing to something small, say 10% of -the full 100MB/s speed, a compaction may take up to 5 seconds. If the -user is writing at 10MB/s, we might build up lots of level-0 files -(~50 to hold the 5*10MB). This may signficantly increase the cost of -reads due to the overhead of merging more files together on every -read. - -

-Solution 1: To reduce this problem, we might want to increase the log -switching threshold when the number of level-0 files is large. Though -the downside is that the larger this threshold, the more memory we will -need to hold the corresponding memtable. - -

-Solution 2: We might want to decrease write rate artificially when the -number of level-0 files goes up. - -

-Solution 3: We work on reducing the cost of very wide merges. -Perhaps most of the level-0 files will have their blocks sitting -uncompressed in the cache and we will only need to worry about the -O(N) complexity in the merging iterator. - -

Number of files

- -Instead of always making 2MB files, we could make larger files for -larger levels to reduce the total file count, though at the expense of -more bursty compactions. Alternatively, we could shard the set of -files into multiple directories. - -

-An experiment on an ext3 filesystem on Feb 04, 2011 shows -the following timings to do 100K file opens in directories with -varying number of files: - - - - - -
Files in directoryMicroseconds to open a file
10009
1000010
10000016
-So maybe even the sharding is not necessary on modern filesystems? - -

Recovery

- -
    -
  • Read CURRENT to find name of the latest committed MANIFEST -
  • Read the named MANIFEST file -
  • Clean up stale files -
  • We could open all sstables here, but it is probably better to be lazy... -
  • Convert log chunk to a new level-0 sstable -
  • Start directing new writes to a new log file with recovered sequence# -
- -

Garbage collection of files

- -DeleteObsoleteFiles() is called at the end of every -compaction and at the end of recovery. It finds the names of all -files in the database. It deletes all log files that are not the -current log file. It deletes all table files that are not referenced -from some level and are not the output of an active compaction. - - - diff --git a/clipper/HyperLevelDB/doc/index.html b/clipper/HyperLevelDB/doc/index.html deleted file mode 100644 index 3ed0ed9..0000000 --- a/clipper/HyperLevelDB/doc/index.html +++ /dev/null @@ -1,549 +0,0 @@ - - - - -Leveldb - - - -

Leveldb

-
Jeff Dean, Sanjay Ghemawat
-

-The leveldb library provides a persistent key value store. Keys and -values are arbitrary byte arrays. The keys are ordered within the key -value store according to a user-specified comparator function. - -

-

Opening A Database

-

-A leveldb database has a name which corresponds to a file system -directory. All of the contents of database are stored in this -directory. The following example shows how to open a database, -creating it if necessary: -

-

-  #include <assert>
-  #include "leveldb/db.h"
-
-  leveldb::DB* db;
-  leveldb::Options options;
-  options.create_if_missing = true;
-  leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
-  assert(status.ok());
-  ...
-
-If you want to raise an error if the database already exists, add -the following line before the leveldb::DB::Open call: -
-  options.error_if_exists = true;
-
-

Status

-

-You may have noticed the leveldb::Status type above. Values of this -type are returned by most functions in leveldb that may encounter an -error. You can check if such a result is ok, and also print an -associated error message: -

-

-   leveldb::Status s = ...;
-   if (!s.ok()) cerr << s.ToString() << endl;
-
-

Closing A Database

-

-When you are done with a database, just delete the database object. -Example: -

-

-  ... open the db as described above ...
-  ... do something with db ...
-  delete db;
-
-

Reads And Writes

-

-The database provides Put, Delete, and Get methods to -modify/query the database. For example, the following code -moves the value stored under key1 to key2. -

-  std::string value;
-  leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
-  if (s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);
-  if (s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);
-
- -

Atomic Updates

-

-Note that if the process dies after the Put of key2 but before the -delete of key1, the same value may be left stored under multiple keys. -Such problems can be avoided by using the WriteBatch class to -atomically apply a set of updates: -

-

-  #include "leveldb/write_batch.h"
-  ...
-  std::string value;
-  leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
-  if (s.ok()) {
-    leveldb::WriteBatch batch;
-    batch.Delete(key1);
-    batch.Put(key2, value);
-    s = db->Write(leveldb::WriteOptions(), &batch);
-  }
-
-The WriteBatch holds a sequence of edits to be made to the database, -and these edits within the batch are applied in order. Note that we -called Delete before Put so that if key1 is identical to key2, -we do not end up erroneously dropping the value entirely. -

-Apart from its atomicity benefits, WriteBatch may also be used to -speed up bulk updates by placing lots of individual mutations into the -same batch. - -

Synchronous Writes

-By default, each write to leveldb is asynchronous: it -returns after pushing the write from the process into the operating -system. The transfer from operating system memory to the underlying -persistent storage happens asynchronously. The sync flag -can be turned on for a particular write to make the write operation -not return until the data being written has been pushed all the way to -persistent storage. (On Posix systems, this is implemented by calling -either fsync(...) or fdatasync(...) or -msync(..., MS_SYNC) before the write operation returns.) -
-  leveldb::WriteOptions write_options;
-  write_options.sync = true;
-  db->Put(write_options, ...);
-
-Asynchronous writes are often more than a thousand times as fast as -synchronous writes. The downside of asynchronous writes is that a -crash of the machine may cause the last few updates to be lost. Note -that a crash of just the writing process (i.e., not a reboot) will not -cause any loss since even when sync is false, an update -is pushed from the process memory into the operating system before it -is considered done. - -

-Asynchronous writes can often be used safely. For example, when -loading a large amount of data into the database you can handle lost -updates by restarting the bulk load after a crash. A hybrid scheme is -also possible where every Nth write is synchronous, and in the event -of a crash, the bulk load is restarted just after the last synchronous -write finished by the previous run. (The synchronous write can update -a marker that describes where to restart on a crash.) - -

-WriteBatch provides an alternative to asynchronous writes. -Multiple updates may be placed in the same WriteBatch and -applied together using a synchronous write (i.e., -write_options.sync is set to true). The extra cost of -the synchronous write will be amortized across all of the writes in -the batch. - -

-

Concurrency

-

-A database may only be opened by one process at a time. -The leveldb implementation acquires a lock from the -operating system to prevent misuse. Within a single process, the -same leveldb::DB object may be safely shared by multiple -concurrent threads. I.e., different threads may write into or fetch -iterators or call Get on the same database without any -external synchronization (the leveldb implementation will -automatically do the required synchronization). However other objects -(like Iterator and WriteBatch) may require external synchronization. -If two threads share such an object, they must protect access to it -using their own locking protocol. More details are available in -the public header files. -

-

Iteration

-

-The following example demonstrates how to print all key,value pairs -in a database. -

-

-  leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions());
-  for (it->SeekToFirst(); it->Valid(); it->Next()) {
-    cout << it->key().ToString() << ": "  << it->value().ToString() << endl;
-  }
-  assert(it->status().ok());  // Check for any errors found during the scan
-  delete it;
-
-The following variation shows how to process just the keys in the -range [start,limit): -

-

-  for (it->Seek(start);
-       it->Valid() && it->key().ToString() < limit;
-       it->Next()) {
-    ...
-  }
-
-You can also process entries in reverse order. (Caveat: reverse -iteration may be somewhat slower than forward iteration.) -

-

-  for (it->SeekToLast(); it->Valid(); it->Prev()) {
-    ...
-  }
-
-

Snapshots

-

-Snapshots provide consistent read-only views over the entire state of -the key-value store. ReadOptions::snapshot may be non-NULL to indicate -that a read should operate on a particular version of the DB state. -If ReadOptions::snapshot is NULL, the read will operate on an -implicit snapshot of the current state. -

-Snapshots are created by the DB::GetSnapshot() method: -

-

-  leveldb::ReadOptions options;
-  options.snapshot = db->GetSnapshot();
-  ... apply some updates to db ...
-  leveldb::Iterator* iter = db->NewIterator(options);
-  ... read using iter to view the state when the snapshot was created ...
-  delete iter;
-  db->ReleaseSnapshot(options.snapshot);
-
-Note that when a snapshot is no longer needed, it should be released -using the DB::ReleaseSnapshot interface. This allows the -implementation to get rid of state that was being maintained just to -support reading as of that snapshot. -

Slice

-

-The return value of the it->key() and it->value() calls above -are instances of the leveldb::Slice type. Slice is a simple -structure that contains a length and a pointer to an external byte -array. Returning a Slice is a cheaper alternative to returning a -std::string since we do not need to copy potentially large keys and -values. In addition, leveldb methods do not return null-terminated -C-style strings since leveldb keys and values are allowed to -contain '\0' bytes. -

-C++ strings and null-terminated C-style strings can be easily converted -to a Slice: -

-

-   leveldb::Slice s1 = "hello";
-
-   std::string str("world");
-   leveldb::Slice s2 = str;
-
-A Slice can be easily converted back to a C++ string: -
-   std::string str = s1.ToString();
-   assert(str == std::string("hello"));
-
-Be careful when using Slices since it is up to the caller to ensure that -the external byte array into which the Slice points remains live while -the Slice is in use. For example, the following is buggy: -

-

-   leveldb::Slice slice;
-   if (...) {
-     std::string str = ...;
-     slice = str;
-   }
-   Use(slice);
-
-When the if statement goes out of scope, str will be destroyed and the -backing storage for slice will disappear. -

-

Comparators

-

-The preceding examples used the default ordering function for key, -which orders bytes lexicographically. You can however supply a custom -comparator when opening a database. For example, suppose each -database key consists of two numbers and we should sort by the first -number, breaking ties by the second number. First, define a proper -subclass of leveldb::Comparator that expresses these rules: -

-

-  class TwoPartComparator : public leveldb::Comparator {
-   public:
-    // Three-way comparison function:
-    //   if a < b: negative result
-    //   if a > b: positive result
-    //   else: zero result
-    int Compare(const leveldb::Slice& a, const leveldb::Slice& b) const {
-      int a1, a2, b1, b2;
-      ParseKey(a, &a1, &a2);
-      ParseKey(b, &b1, &b2);
-      if (a1 < b1) return -1;
-      if (a1 > b1) return +1;
-      if (a2 < b2) return -1;
-      if (a2 > b2) return +1;
-      return 0;
-    }
-
-    // Ignore the following methods for now:
-    const char* Name() const { return "TwoPartComparator"; }
-    void FindShortestSeparator(std::string*, const leveldb::Slice&) const { }
-    void FindShortSuccessor(std::string*) const { }
-  };
-
-Now create a database using this custom comparator: -

-

-  TwoPartComparator cmp;
-  leveldb::DB* db;
-  leveldb::Options options;
-  options.create_if_missing = true;
-  options.comparator = &cmp;
-  leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
-  ...
-
-

Backwards compatibility

-

-The result of the comparator's Name method is attached to the -database when it is created, and is checked on every subsequent -database open. If the name changes, the leveldb::DB::Open call will -fail. Therefore, change the name if and only if the new key format -and comparison function are incompatible with existing databases, and -it is ok to discard the contents of all existing databases. -

-You can however still gradually evolve your key format over time with -a little bit of pre-planning. For example, you could store a version -number at the end of each key (one byte should suffice for most uses). -When you wish to switch to a new key format (e.g., adding an optional -third part to the keys processed by TwoPartComparator), -(a) keep the same comparator name (b) increment the version number -for new keys (c) change the comparator function so it uses the -version numbers found in the keys to decide how to interpret them. -

-

Performance

-

-Performance can be tuned by changing the default values of the -types defined in include/leveldb/options.h. - -

-

Block size

-

-leveldb groups adjacent keys together into the same block and such a -block is the unit of transfer to and from persistent storage. The -default block size is approximately 4096 uncompressed bytes. -Applications that mostly do bulk scans over the contents of the -database may wish to increase this size. Applications that do a lot -of point reads of small values may wish to switch to a smaller block -size if performance measurements indicate an improvement. There isn't -much benefit in using blocks smaller than one kilobyte, or larger than -a few megabytes. Also note that compression will be more effective -with larger block sizes. -

-

Compression

-

-Each block is individually compressed before being written to -persistent storage. Compression is on by default since the default -compression method is very fast, and is automatically disabled for -uncompressible data. In rare cases, applications may want to disable -compression entirely, but should only do so if benchmarks show a -performance improvement: -

-

-  leveldb::Options options;
-  options.compression = leveldb::kNoCompression;
-  ... leveldb::DB::Open(options, name, ...) ....
-
-

Cache

-

-The contents of the database are stored in a set of files in the -filesystem and each file stores a sequence of compressed blocks. If -options.cache is non-NULL, it is used to cache frequently used -uncompressed block contents. -

-

-  #include "leveldb/cache.h"
-
-  leveldb::Options options;
-  options.cache = leveldb::NewLRUCache(100 * 1048576);  // 100MB cache
-  leveldb::DB* db;
-  leveldb::DB::Open(options, name, &db);
-  ... use the db ...
-  delete db
-  delete options.cache;
-
-Note that the cache holds uncompressed data, and therefore it should -be sized according to application level data sizes, without any -reduction from compression. (Caching of compressed blocks is left to -the operating system buffer cache, or any custom Env -implementation provided by the client.) -

-When performing a bulk read, the application may wish to disable -caching so that the data processed by the bulk read does not end up -displacing most of the cached contents. A per-iterator option can be -used to achieve this: -

-

-  leveldb::ReadOptions options;
-  options.fill_cache = false;
-  leveldb::Iterator* it = db->NewIterator(options);
-  for (it->SeekToFirst(); it->Valid(); it->Next()) {
-    ...
-  }
-
-

Key Layout

-

-Note that the unit of disk transfer and caching is a block. Adjacent -keys (according to the database sort order) will usually be placed in -the same block. Therefore the application can improve its performance -by placing keys that are accessed together near each other and placing -infrequently used keys in a separate region of the key space. -

-For example, suppose we are implementing a simple file system on top -of leveldb. The types of entries we might wish to store are: -

-

-   filename -> permission-bits, length, list of file_block_ids
-   file_block_id -> data
-
-We might want to prefix filename keys with one letter (say '/') and the -file_block_id keys with a different letter (say '0') so that scans -over just the metadata do not force us to fetch and cache bulky file -contents. -

-

Filters

-

-Because of the way leveldb data is organized on disk, -a single Get() call may involve multiple reads from disk. -The optional FilterPolicy mechanism can be used to reduce -the number of disk reads substantially. -

-   leveldb::Options options;
-   options.filter_policy = NewBloomFilterPolicy(10);
-   leveldb::DB* db;
-   leveldb::DB::Open(options, "/tmp/testdb", &db);
-   ... use the database ...
-   delete db;
-   delete options.filter_policy;
-
-The preceding code associates a -Bloom filter -based filtering policy with the database. Bloom filter based -filtering relies on keeping some number of bits of data in memory per -key (in this case 10 bits per key since that is the argument we passed -to NewBloomFilterPolicy). This filter will reduce the number of unnecessary -disk reads needed for Get() calls by a factor of -approximately a 100. Increasing the bits per key will lead to a -larger reduction at the cost of more memory usage. We recommend that -applications whose working set does not fit in memory and that do a -lot of random reads set a filter policy. -

-If you are using a custom comparator, you should ensure that the filter -policy you are using is compatible with your comparator. For example, -consider a comparator that ignores trailing spaces when comparing keys. -NewBloomFilterPolicy must not be used with such a comparator. -Instead, the application should provide a custom filter policy that -also ignores trailing spaces. For example: -

-  class CustomFilterPolicy : public leveldb::FilterPolicy {
-   private:
-    FilterPolicy* builtin_policy_;
-   public:
-    CustomFilterPolicy() : builtin_policy_(NewBloomFilterPolicy(10)) { }
-    ~CustomFilterPolicy() { delete builtin_policy_; }
-
-    const char* Name() const { return "IgnoreTrailingSpacesFilter"; }
-
-    void CreateFilter(const Slice* keys, int n, std::string* dst) const {
-      // Use builtin bloom filter code after removing trailing spaces
-      std::vector<Slice> trimmed(n);
-      for (int i = 0; i < n; i++) {
-        trimmed[i] = RemoveTrailingSpaces(keys[i]);
-      }
-      return builtin_policy_->CreateFilter(&trimmed[i], n, dst);
-    }
-
-    bool KeyMayMatch(const Slice& key, const Slice& filter) const {
-      // Use builtin bloom filter code after removing trailing spaces
-      return builtin_policy_->KeyMayMatch(RemoveTrailingSpaces(key), filter);
-    }
-  };
-
-

-Advanced applications may provide a filter policy that does not use -a bloom filter but uses some other mechanism for summarizing a set -of keys. See leveldb/filter_policy.h for detail. -

-

Checksums

-

-leveldb associates checksums with all data it stores in the file system. -There are two separate controls provided over how aggressively these -checksums are verified: -

-

    -
  • ReadOptions::verify_checksums may be set to true to force - checksum verification of all data that is read from the file system on - behalf of a particular read. By default, no such verification is - done. -

    -

  • Options::paranoid_checks may be set to true before opening a - database to make the database implementation raise an error as soon as - it detects an internal corruption. Depending on which portion of the - database has been corrupted, the error may be raised when the database - is opened, or later by another database operation. By default, - paranoid checking is off so that the database can be used even if - parts of its persistent storage have been corrupted. -

    - If a database is corrupted (perhaps it cannot be opened when - paranoid checking is turned on), the leveldb::RepairDB function - may be used to recover as much of the data as possible -

    -

-

Approximate Sizes

-

-The GetApproximateSizes method can used to get the approximate -number of bytes of file system space used by one or more key ranges. -

-

-   leveldb::Range ranges[2];
-   ranges[0] = leveldb::Range("a", "c");
-   ranges[1] = leveldb::Range("x", "z");
-   uint64_t sizes[2];
-   leveldb::Status s = db->GetApproximateSizes(ranges, 2, sizes);
-
-The preceding call will set sizes[0] to the approximate number of -bytes of file system space used by the key range [a..c) and -sizes[1] to the approximate number of bytes used by the key range -[x..z). -

-

Environment

-

-All file operations (and other operating system calls) issued by the -leveldb implementation are routed through a leveldb::Env object. -Sophisticated clients may wish to provide their own Env -implementation to get better control. For example, an application may -introduce artificial delays in the file IO paths to limit the impact -of leveldb on other activities in the system. -

-

-  class SlowEnv : public leveldb::Env {
-    .. implementation of the Env interface ...
-  };
-
-  SlowEnv env;
-  leveldb::Options options;
-  options.env = &env;
-  Status s = leveldb::DB::Open(options, ...);
-
-

Porting

-

-leveldb may be ported to a new platform by providing platform -specific implementations of the types/methods/functions exported by -leveldb/port/port.h. See leveldb/port/port_example.h for more -details. -

-In addition, the new platform may need a new default leveldb::Env -implementation. See leveldb/util/env_posix.h for an example. - -

Other Information

- -

-Details about the leveldb implementation may be found in -the following documents: -

- - - diff --git a/clipper/HyperLevelDB/doc/log_format.txt b/clipper/HyperLevelDB/doc/log_format.txt deleted file mode 100644 index 5228f62..0000000 --- a/clipper/HyperLevelDB/doc/log_format.txt +++ /dev/null @@ -1,75 +0,0 @@ -The log file contents are a sequence of 32KB blocks. The only -exception is that the tail of the file may contain a partial block. - -Each block consists of a sequence of records: - block := record* trailer? - record := - checksum: uint32 // crc32c of type and data[] ; little-endian - length: uint16 // little-endian - type: uint8 // One of FULL, FIRST, MIDDLE, LAST - data: uint8[length] - -A record never starts within the last six bytes of a block (since it -won't fit). Any leftover bytes here form the trailer, which must -consist entirely of zero bytes and must be skipped by readers. - -Aside: if exactly seven bytes are left in the current block, and a new -non-zero length record is added, the writer must emit a FIRST record -(which contains zero bytes of user data) to fill up the trailing seven -bytes of the block and then emit all of the user data in subsequent -blocks. - -More types may be added in the future. Some Readers may skip record -types they do not understand, others may report that some data was -skipped. - -FULL == 1 -FIRST == 2 -MIDDLE == 3 -LAST == 4 - -The FULL record contains the contents of an entire user record. - -FIRST, MIDDLE, LAST are types used for user records that have been -split into multiple fragments (typically because of block boundaries). -FIRST is the type of the first fragment of a user record, LAST is the -type of the last fragment of a user record, and MID is the type of all -interior fragments of a user record. - -Example: consider a sequence of user records: - A: length 1000 - B: length 97270 - C: length 8000 -A will be stored as a FULL record in the first block. - -B will be split into three fragments: first fragment occupies the rest -of the first block, second fragment occupies the entirety of the -second block, and the third fragment occupies a prefix of the third -block. This will leave six bytes free in the third block, which will -be left empty as the trailer. - -C will be stored as a FULL record in the fourth block. - -=================== - -Some benefits over the recordio format: - -(1) We do not need any heuristics for resyncing - just go to next -block boundary and scan. If there is a corruption, skip to the next -block. As a side-benefit, we do not get confused when part of the -contents of one log file are embedded as a record inside another log -file. - -(2) Splitting at approximate boundaries (e.g., for mapreduce) is -simple: find the next block boundary and skip records until we -hit a FULL or FIRST record. - -(3) We do not need extra buffering for large records. - -Some downsides compared to recordio format: - -(1) No packing of tiny records. This could be fixed by adding a new -record type, so it is a shortcoming of the current implementation, -not necessarily the format. - -(2) No compression. Again, this could be fixed by adding new record types. diff --git a/clipper/HyperLevelDB/doc/table_format.txt b/clipper/HyperLevelDB/doc/table_format.txt deleted file mode 100644 index ca8f9b4..0000000 --- a/clipper/HyperLevelDB/doc/table_format.txt +++ /dev/null @@ -1,104 +0,0 @@ -File format -=========== - - - [data block 1] - [data block 2] - ... - [data block N] - [meta block 1] - ... - [meta block K] - [metaindex block] - [index block] - [Footer] (fixed size; starts at file_size - sizeof(Footer)) - - -The file contains internal pointers. Each such pointer is called -a BlockHandle and contains the following information: - offset: varint64 - size: varint64 -See https://developers.google.com/protocol-buffers/docs/encoding#varints -for an explanation of varint64 format. - -(1) The sequence of key/value pairs in the file are stored in sorted -order and partitioned into a sequence of data blocks. These blocks -come one after another at the beginning of the file. Each data block -is formatted according to the code in block_builder.cc, and then -optionally compressed. - -(2) After the data blocks we store a bunch of meta blocks. The -supported meta block types are described below. More meta block types -may be added in the future. Each meta block is again formatted using -block_builder.cc and then optionally compressed. - -(3) A "metaindex" block. It contains one entry for every other meta -block where the key is the name of the meta block and the value is a -BlockHandle pointing to that meta block. - -(4) An "index" block. This block contains one entry per data block, -where the key is a string >= last key in that data block and before -the first key in the successive data block. The value is the -BlockHandle for the data block. - -(6) At the very end of the file is a fixed length footer that contains -the BlockHandle of the metaindex and index blocks as well as a magic number. - metaindex_handle: char[p]; // Block handle for metaindex - index_handle: char[q]; // Block handle for index - padding: char[40-p-q]; // zeroed bytes to make fixed length - // (40==2*BlockHandle::kMaxEncodedLength) - magic: fixed64; // == 0xdb4775248b80fb57 (little-endian) - -"filter" Meta Block -------------------- - -If a "FilterPolicy" was specified when the database was opened, a -filter block is stored in each table. The "metaindex" block contains -an entry that maps from "filter." to the BlockHandle for the filter -block where "" is the string returned by the filter policy's -"Name()" method. - -The filter block stores a sequence of filters, where filter i contains -the output of FilterPolicy::CreateFilter() on all keys that are stored -in a block whose file offset falls within the range - - [ i*base ... (i+1)*base-1 ] - -Currently, "base" is 2KB. So for example, if blocks X and Y start in -the range [ 0KB .. 2KB-1 ], all of the keys in X and Y will be -converted to a filter by calling FilterPolicy::CreateFilter(), and the -resulting filter will be stored as the first filter in the filter -block. - -The filter block is formatted as follows: - - [filter 0] - [filter 1] - [filter 2] - ... - [filter N-1] - - [offset of filter 0] : 4 bytes - [offset of filter 1] : 4 bytes - [offset of filter 2] : 4 bytes - ... - [offset of filter N-1] : 4 bytes - - [offset of beginning of offset array] : 4 bytes - lg(base) : 1 byte - -The offset array at the end of the filter block allows efficient -mapping from a data block offset to the corresponding filter. - -"stats" Meta Block ------------------- - -This meta block contains a bunch of stats. The key is the name -of the statistic. The value contains the statistic. -TODO(postrelease): record following stats. - data size - index size - key size (uncompressed) - value size (uncompressed) - number of entries - number of data blocks diff --git a/clipper/HyperLevelDB/helpers/memenv/memenv.cc b/clipper/HyperLevelDB/helpers/memenv/memenv.cc deleted file mode 100644 index c933656..0000000 --- a/clipper/HyperLevelDB/helpers/memenv/memenv.cc +++ /dev/null @@ -1,383 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "helpers/memenv/memenv.h" - -#include "hyperleveldb/env.h" -#include "hyperleveldb/status.h" -#include "port/port.h" -#include "util/mutexlock.h" -#include -#include -#include -#include - -namespace leveldb { - -namespace { - -class FileState { - public: - // FileStates are reference counted. The initial reference count is zero - // and the caller must call Ref() at least once. - FileState() : refs_(0), size_(0) {} - - // Increase the reference count. - void Ref() { - MutexLock lock(&refs_mutex_); - ++refs_; - } - - // Decrease the reference count. Delete if this is the last reference. - void Unref() { - bool do_delete = false; - - { - MutexLock lock(&refs_mutex_); - --refs_; - assert(refs_ >= 0); - if (refs_ <= 0) { - do_delete = true; - } - } - - if (do_delete) { - delete this; - } - } - - uint64_t Size() const { return size_; } - - Status Read(uint64_t offset, size_t n, Slice* result, char* scratch) const { - if (offset > size_) { - return Status::IOError("Offset greater than file size."); - } - const uint64_t available = size_ - offset; - if (n > available) { - n = available; - } - if (n == 0) { - *result = Slice(); - return Status::OK(); - } - - size_t block = offset / kBlockSize; - size_t block_offset = offset % kBlockSize; - - if (n <= kBlockSize - block_offset) { - // The requested bytes are all in the first block. - *result = Slice(blocks_[block] + block_offset, n); - return Status::OK(); - } - - size_t bytes_to_copy = n; - char* dst = scratch; - - while (bytes_to_copy > 0) { - size_t avail = kBlockSize - block_offset; - if (avail > bytes_to_copy) { - avail = bytes_to_copy; - } - memcpy(dst, blocks_[block] + block_offset, avail); - - bytes_to_copy -= avail; - dst += avail; - block++; - block_offset = 0; - } - - *result = Slice(scratch, n); - return Status::OK(); - } - - Status Append(const Slice& data) { - const char* src = data.data(); - size_t src_len = data.size(); - - while (src_len > 0) { - size_t avail; - size_t offset = size_ % kBlockSize; - - if (offset != 0) { - // There is some room in the last block. - avail = kBlockSize - offset; - } else { - // No room in the last block; push new one. - blocks_.push_back(new char[kBlockSize]); - avail = kBlockSize; - } - - if (avail > src_len) { - avail = src_len; - } - memcpy(blocks_.back() + offset, src, avail); - src_len -= avail; - src += avail; - size_ += avail; - } - - return Status::OK(); - } - - private: - // Private since only Unref() should be used to delete it. - ~FileState() { - for (std::vector::iterator i = blocks_.begin(); i != blocks_.end(); - ++i) { - delete [] *i; - } - } - - // No copying allowed. - FileState(const FileState&); - void operator=(const FileState&); - - port::Mutex refs_mutex_; - int refs_; // Protected by refs_mutex_; - - // The following fields are not protected by any mutex. They are only mutable - // while the file is being written, and concurrent access is not allowed - // to writable files. - std::vector blocks_; - uint64_t size_; - - enum { kBlockSize = 8 * 1024 }; -}; - -class SequentialFileImpl : public SequentialFile { - public: - explicit SequentialFileImpl(FileState* file) : file_(file), pos_(0) { - file_->Ref(); - } - - ~SequentialFileImpl() { - file_->Unref(); - } - - virtual Status Read(size_t n, Slice* result, char* scratch) { - Status s = file_->Read(pos_, n, result, scratch); - if (s.ok()) { - pos_ += result->size(); - } - return s; - } - - virtual Status Skip(uint64_t n) { - if (pos_ > file_->Size()) { - return Status::IOError("pos_ > file_->Size()"); - } - const size_t available = file_->Size() - pos_; - if (n > available) { - n = available; - } - pos_ += n; - return Status::OK(); - } - - private: - FileState* file_; - size_t pos_; -}; - -class RandomAccessFileImpl : public RandomAccessFile { - public: - explicit RandomAccessFileImpl(FileState* file) : file_(file) { - file_->Ref(); - } - - ~RandomAccessFileImpl() { - file_->Unref(); - } - - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const { - return file_->Read(offset, n, result, scratch); - } - - private: - FileState* file_; -}; - -class WritableFileImpl : public WritableFile { - public: - WritableFileImpl(FileState* file) : file_(file) { - file_->Ref(); - } - - ~WritableFileImpl() { - file_->Unref(); - } - - virtual Status Append(const Slice& data) { - return file_->Append(data); - } - - virtual Status Close() { return Status::OK(); } - virtual Status Sync() { return Status::OK(); } - - private: - FileState* file_; -}; - -class NoOpLogger : public Logger { - public: - virtual void Logv(const char* format, va_list ap) { } -}; - -class InMemoryEnv : public EnvWrapper { - public: - explicit InMemoryEnv(Env* base_env) : EnvWrapper(base_env) { } - - virtual ~InMemoryEnv() { - for (FileSystem::iterator i = file_map_.begin(); i != file_map_.end(); ++i){ - i->second->Unref(); - } - } - - // Partial implementation of the Env interface. - virtual Status NewSequentialFile(const std::string& fname, - SequentialFile** result) { - MutexLock lock(&mutex_); - if (file_map_.find(fname) == file_map_.end()) { - *result = NULL; - return Status::IOError(fname, "File not found"); - } - - *result = new SequentialFileImpl(file_map_[fname]); - return Status::OK(); - } - - virtual Status NewRandomAccessFile(const std::string& fname, - RandomAccessFile** result) { - MutexLock lock(&mutex_); - if (file_map_.find(fname) == file_map_.end()) { - *result = NULL; - return Status::IOError(fname, "File not found"); - } - - *result = new RandomAccessFileImpl(file_map_[fname]); - return Status::OK(); - } - - virtual Status NewWritableFile(const std::string& fname, - WritableFile** result) { - MutexLock lock(&mutex_); - if (file_map_.find(fname) != file_map_.end()) { - DeleteFileInternal(fname); - } - - FileState* file = new FileState(); - file->Ref(); - file_map_[fname] = file; - - *result = new WritableFileImpl(file); - return Status::OK(); - } - - virtual bool FileExists(const std::string& fname) { - MutexLock lock(&mutex_); - return file_map_.find(fname) != file_map_.end(); - } - - virtual Status GetChildren(const std::string& dir, - std::vector* result) { - MutexLock lock(&mutex_); - result->clear(); - - for (FileSystem::iterator i = file_map_.begin(); i != file_map_.end(); ++i){ - const std::string& filename = i->first; - - if (filename.size() >= dir.size() + 1 && filename[dir.size()] == '/' && - Slice(filename).starts_with(Slice(dir))) { - result->push_back(filename.substr(dir.size() + 1)); - } - } - - return Status::OK(); - } - - void DeleteFileInternal(const std::string& fname) { - if (file_map_.find(fname) == file_map_.end()) { - return; - } - - file_map_[fname]->Unref(); - file_map_.erase(fname); - } - - virtual Status DeleteFile(const std::string& fname) { - MutexLock lock(&mutex_); - if (file_map_.find(fname) == file_map_.end()) { - return Status::IOError(fname, "File not found"); - } - - DeleteFileInternal(fname); - return Status::OK(); - } - - virtual Status CreateDir(const std::string& dirname) { - return Status::OK(); - } - - virtual Status DeleteDir(const std::string& dirname) { - return Status::OK(); - } - - virtual Status GetFileSize(const std::string& fname, uint64_t* file_size) { - MutexLock lock(&mutex_); - if (file_map_.find(fname) == file_map_.end()) { - return Status::IOError(fname, "File not found"); - } - - *file_size = file_map_[fname]->Size(); - return Status::OK(); - } - - virtual Status RenameFile(const std::string& src, - const std::string& target) { - MutexLock lock(&mutex_); - if (file_map_.find(src) == file_map_.end()) { - return Status::IOError(src, "File not found"); - } - - DeleteFileInternal(target); - file_map_[target] = file_map_[src]; - file_map_.erase(src); - return Status::OK(); - } - - virtual Status LockFile(const std::string& fname, FileLock** lock) { - *lock = new FileLock; - return Status::OK(); - } - - virtual Status UnlockFile(FileLock* lock) { - delete lock; - return Status::OK(); - } - - virtual Status GetTestDirectory(std::string* path) { - *path = "/test"; - return Status::OK(); - } - - virtual Status NewLogger(const std::string& fname, Logger** result) { - *result = new NoOpLogger; - return Status::OK(); - } - - private: - // Map from filenames to FileState objects, representing a simple file system. - typedef std::map FileSystem; - port::Mutex mutex_; - FileSystem file_map_; // Protected by mutex_. -}; - -} // namespace - -Env* NewMemEnv(Env* base_env) { - return new InMemoryEnv(base_env); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/helpers/memenv/memenv.h b/clipper/HyperLevelDB/helpers/memenv/memenv.h deleted file mode 100644 index 03b88de..0000000 --- a/clipper/HyperLevelDB/helpers/memenv/memenv.h +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_HELPERS_MEMENV_MEMENV_H_ -#define STORAGE_LEVELDB_HELPERS_MEMENV_MEMENV_H_ - -namespace leveldb { - -class Env; - -// Returns a new environment that stores its data in memory and delegates -// all non-file-storage tasks to base_env. The caller must delete the result -// when it is no longer needed. -// *base_env must remain live while the result is in use. -Env* NewMemEnv(Env* base_env); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_HELPERS_MEMENV_MEMENV_H_ diff --git a/clipper/HyperLevelDB/helpers/memenv/memenv_test.cc b/clipper/HyperLevelDB/helpers/memenv/memenv_test.cc deleted file mode 100644 index a8b00fc..0000000 --- a/clipper/HyperLevelDB/helpers/memenv/memenv_test.cc +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "helpers/memenv/memenv.h" - -#include "db/db_impl.h" -#include "hyperleveldb/db.h" -#include "hyperleveldb/env.h" -#include "util/testharness.h" -#include -#include - -namespace leveldb { - -class MemEnvTest { - public: - Env* env_; - - MemEnvTest() - : env_(NewMemEnv(Env::Default())) { - } - ~MemEnvTest() { - delete env_; - } -}; - -TEST(MemEnvTest, Basics) { - uint64_t file_size; - WritableFile* writable_file; - std::vector children; - - ASSERT_OK(env_->CreateDir("/dir")); - - // Check that the directory is empty. - ASSERT_TRUE(!env_->FileExists("/dir/non_existent")); - ASSERT_TRUE(!env_->GetFileSize("/dir/non_existent", &file_size).ok()); - ASSERT_OK(env_->GetChildren("/dir", &children)); - ASSERT_EQ(0, children.size()); - - // Create a file. - ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); - delete writable_file; - - // Check that the file exists. - ASSERT_TRUE(env_->FileExists("/dir/f")); - ASSERT_OK(env_->GetFileSize("/dir/f", &file_size)); - ASSERT_EQ(0, file_size); - ASSERT_OK(env_->GetChildren("/dir", &children)); - ASSERT_EQ(1, children.size()); - ASSERT_EQ("f", children[0]); - - // Write to the file. - ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); - ASSERT_OK(writable_file->Append("abc")); - delete writable_file; - - // Check for expected size. - ASSERT_OK(env_->GetFileSize("/dir/f", &file_size)); - ASSERT_EQ(3, file_size); - - // Check that renaming works. - ASSERT_TRUE(!env_->RenameFile("/dir/non_existent", "/dir/g").ok()); - ASSERT_OK(env_->RenameFile("/dir/f", "/dir/g")); - ASSERT_TRUE(!env_->FileExists("/dir/f")); - ASSERT_TRUE(env_->FileExists("/dir/g")); - ASSERT_OK(env_->GetFileSize("/dir/g", &file_size)); - ASSERT_EQ(3, file_size); - - // Check that opening non-existent file fails. - SequentialFile* seq_file; - RandomAccessFile* rand_file; - ASSERT_TRUE(!env_->NewSequentialFile("/dir/non_existent", &seq_file).ok()); - ASSERT_TRUE(!seq_file); - ASSERT_TRUE(!env_->NewRandomAccessFile("/dir/non_existent", &rand_file).ok()); - ASSERT_TRUE(!rand_file); - - // Check that deleting works. - ASSERT_TRUE(!env_->DeleteFile("/dir/non_existent").ok()); - ASSERT_OK(env_->DeleteFile("/dir/g")); - ASSERT_TRUE(!env_->FileExists("/dir/g")); - ASSERT_OK(env_->GetChildren("/dir", &children)); - ASSERT_EQ(0, children.size()); - ASSERT_OK(env_->DeleteDir("/dir")); -} - -TEST(MemEnvTest, ReadWrite) { - WritableFile* writable_file; - SequentialFile* seq_file; - RandomAccessFile* rand_file; - Slice result; - char scratch[100]; - - ASSERT_OK(env_->CreateDir("/dir")); - - ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); - ASSERT_OK(writable_file->Append("hello ")); - ASSERT_OK(writable_file->Append("world")); - delete writable_file; - - // Read sequentially. - ASSERT_OK(env_->NewSequentialFile("/dir/f", &seq_file)); - ASSERT_OK(seq_file->Read(5, &result, scratch)); // Read "hello". - ASSERT_EQ(0, result.compare("hello")); - ASSERT_OK(seq_file->Skip(1)); - ASSERT_OK(seq_file->Read(1000, &result, scratch)); // Read "world". - ASSERT_EQ(0, result.compare("world")); - ASSERT_OK(seq_file->Read(1000, &result, scratch)); // Try reading past EOF. - ASSERT_EQ(0, result.size()); - ASSERT_OK(seq_file->Skip(100)); // Try to skip past end of file. - ASSERT_OK(seq_file->Read(1000, &result, scratch)); - ASSERT_EQ(0, result.size()); - delete seq_file; - - // Random reads. - ASSERT_OK(env_->NewRandomAccessFile("/dir/f", &rand_file)); - ASSERT_OK(rand_file->Read(6, 5, &result, scratch)); // Read "world". - ASSERT_EQ(0, result.compare("world")); - ASSERT_OK(rand_file->Read(0, 5, &result, scratch)); // Read "hello". - ASSERT_EQ(0, result.compare("hello")); - ASSERT_OK(rand_file->Read(10, 100, &result, scratch)); // Read "d". - ASSERT_EQ(0, result.compare("d")); - - // Too high offset. - ASSERT_TRUE(!rand_file->Read(1000, 5, &result, scratch).ok()); - delete rand_file; -} - -TEST(MemEnvTest, Locks) { - FileLock* lock; - - // These are no-ops, but we test they return success. - ASSERT_OK(env_->LockFile("some file", &lock)); - ASSERT_OK(env_->UnlockFile(lock)); -} - -TEST(MemEnvTest, Misc) { - std::string test_dir; - ASSERT_OK(env_->GetTestDirectory(&test_dir)); - ASSERT_TRUE(!test_dir.empty()); - - WritableFile* writable_file; - ASSERT_OK(env_->NewWritableFile("/a/b", &writable_file)); - - // These are no-ops, but we test they return success. - ASSERT_OK(writable_file->Sync()); - ASSERT_OK(writable_file->Flush()); - ASSERT_OK(writable_file->Close()); - delete writable_file; -} - -TEST(MemEnvTest, LargeWrite) { - const size_t kWriteSize = 300 * 1024; - char* scratch = new char[kWriteSize * 2]; - - std::string write_data; - for (size_t i = 0; i < kWriteSize; ++i) { - write_data.append(1, static_cast(i)); - } - - WritableFile* writable_file; - ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); - ASSERT_OK(writable_file->Append("foo")); - ASSERT_OK(writable_file->Append(write_data)); - delete writable_file; - - SequentialFile* seq_file; - Slice result; - ASSERT_OK(env_->NewSequentialFile("/dir/f", &seq_file)); - ASSERT_OK(seq_file->Read(3, &result, scratch)); // Read "foo". - ASSERT_EQ(0, result.compare("foo")); - - size_t read = 0; - std::string read_data; - while (read < kWriteSize) { - ASSERT_OK(seq_file->Read(kWriteSize - read, &result, scratch)); - read_data.append(result.data(), result.size()); - read += result.size(); - } - ASSERT_TRUE(write_data == read_data); - delete seq_file; - delete [] scratch; -} - -TEST(MemEnvTest, DBTest) { - Options options; - options.create_if_missing = true; - options.env = env_; - DB* db; - - const Slice keys[] = {Slice("aaa"), Slice("bbb"), Slice("ccc")}; - const Slice vals[] = {Slice("foo"), Slice("bar"), Slice("baz")}; - - ASSERT_OK(DB::Open(options, "/dir/db", &db)); - for (size_t i = 0; i < 3; ++i) { - ASSERT_OK(db->Put(WriteOptions(), keys[i], vals[i])); - } - - for (size_t i = 0; i < 3; ++i) { - std::string res; - ASSERT_OK(db->Get(ReadOptions(), keys[i], &res)); - ASSERT_TRUE(res == vals[i]); - } - - Iterator* iterator = db->NewIterator(ReadOptions()); - iterator->SeekToFirst(); - for (size_t i = 0; i < 3; ++i) { - ASSERT_TRUE(iterator->Valid()); - ASSERT_TRUE(keys[i] == iterator->key()); - ASSERT_TRUE(vals[i] == iterator->value()); - iterator->Next(); - } - ASSERT_TRUE(!iterator->Valid()); - delete iterator; - - DBImpl* dbi = reinterpret_cast(db); - ASSERT_OK(dbi->TEST_CompactMemTable()); - - for (size_t i = 0; i < 3; ++i) { - std::string res; - ASSERT_OK(db->Get(ReadOptions(), keys[i], &res)); - ASSERT_TRUE(res == vals[i]); - } - - delete db; -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/hyperleveldb.upack.in b/clipper/HyperLevelDB/hyperleveldb.upack.in deleted file mode 100644 index 3920a76..0000000 --- a/clipper/HyperLevelDB/hyperleveldb.upack.in +++ /dev/null @@ -1,41 +0,0 @@ -package hyperleveldb -| source="hyperleveldb" -| debian name="libhyperleveldb0" -| version="@VERSION@" -| release="1" -| license="BSD" -| copyright="2011-2013 The LevelDB Authors" -| homepage="http://hyperdex.org" -| tarball="http://hyperdex.org/src/hyperleveldb-{version}.tar.gz" -| debian section="libs" -| configure="--disable-static" -| summary="A fast key-value storage library" -+ {libdir}/libhyperleveldb.so.0 -+ {libdir}/libhyperleveldb.so.0.0.0 -'''LevelDB is a fast key-value storage library written at Google that provides -an ordered mapping from string keys to string values.''' - -subpackage hyperleveldb-devel -| debian name="libhyperleveldb-dev" -| debian section="libdevel" -| debian requires="libhyperleveldb0{self}" -| fedora requires="hyperleveldb{self}" -| summary="A fast key-value storage library (development files)" -+ {includedir}/hyperleveldb/cache.h -+ {includedir}/hyperleveldb/c.h -+ {includedir}/hyperleveldb/comparator.h -+ {includedir}/hyperleveldb/db.h -+ {includedir}/hyperleveldb/env.h -+ {includedir}/hyperleveldb/filter_policy.h -+ {includedir}/hyperleveldb/iterator.h -+ {includedir}/hyperleveldb/options.h -+ {includedir}/hyperleveldb/replay_iterator.h -+ {includedir}/hyperleveldb/slice.h -+ {includedir}/hyperleveldb/status.h -+ {includedir}/hyperleveldb/table_builder.h -+ {includedir}/hyperleveldb/table.h -+ {includedir}/hyperleveldb/write_batch.h -+ {libdir}/libhyperleveldb.so -+ {libdir}/pkgconfig/libhyperleveldb.pc - -exclude {libdir}/libhyperleveldb.la diff --git a/clipper/HyperLevelDB/include/hyperleveldb/c.h b/clipper/HyperLevelDB/include/hyperleveldb/c.h deleted file mode 100644 index 1048fe3..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/c.h +++ /dev/null @@ -1,290 +0,0 @@ -/* Copyright (c) 2011 The LevelDB Authors. All rights reserved. - Use of this source code is governed by a BSD-style license that can be - found in the LICENSE file. See the AUTHORS file for names of contributors. - - C bindings for leveldb. May be useful as a stable ABI that can be - used by programs that keep leveldb in a shared library, or for - a JNI api. - - Does not support: - . getters for the option types - . custom comparators that implement key shortening - . custom iter, db, env, cache implementations using just the C bindings - - Some conventions: - - (1) We expose just opaque struct pointers and functions to clients. - This allows us to change internal representations without having to - recompile clients. - - (2) For simplicity, there is no equivalent to the Slice type. Instead, - the caller has to pass the pointer and length as separate - arguments. - - (3) Errors are represented by a null-terminated c string. NULL - means no error. All operations that can raise an error are passed - a "char** errptr" as the last argument. One of the following must - be true on entry: - *errptr == NULL - *errptr points to a malloc()ed null-terminated error message - (On Windows, *errptr must have been malloc()-ed by this library.) - On success, a leveldb routine leaves *errptr unchanged. - On failure, leveldb frees the old value of *errptr and - set *errptr to a malloc()ed error message. - - (4) Bools have the type unsigned char (0 == false; rest == true) - - (5) All of the pointer arguments must be non-NULL. -*/ - -#ifndef STORAGE_LEVELDB_INCLUDE_C_H_ -#define STORAGE_LEVELDB_INCLUDE_C_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -/* Exported types */ - -typedef struct leveldb_t leveldb_t; -typedef struct leveldb_cache_t leveldb_cache_t; -typedef struct leveldb_comparator_t leveldb_comparator_t; -typedef struct leveldb_env_t leveldb_env_t; -typedef struct leveldb_filelock_t leveldb_filelock_t; -typedef struct leveldb_filterpolicy_t leveldb_filterpolicy_t; -typedef struct leveldb_iterator_t leveldb_iterator_t; -typedef struct leveldb_logger_t leveldb_logger_t; -typedef struct leveldb_options_t leveldb_options_t; -typedef struct leveldb_randomfile_t leveldb_randomfile_t; -typedef struct leveldb_readoptions_t leveldb_readoptions_t; -typedef struct leveldb_seqfile_t leveldb_seqfile_t; -typedef struct leveldb_snapshot_t leveldb_snapshot_t; -typedef struct leveldb_writablefile_t leveldb_writablefile_t; -typedef struct leveldb_writebatch_t leveldb_writebatch_t; -typedef struct leveldb_writeoptions_t leveldb_writeoptions_t; - -/* DB operations */ - -extern leveldb_t* leveldb_open( - const leveldb_options_t* options, - const char* name, - char** errptr); - -extern void leveldb_close(leveldb_t* db); - -extern void leveldb_put( - leveldb_t* db, - const leveldb_writeoptions_t* options, - const char* key, size_t keylen, - const char* val, size_t vallen, - char** errptr); - -extern void leveldb_delete( - leveldb_t* db, - const leveldb_writeoptions_t* options, - const char* key, size_t keylen, - char** errptr); - -extern void leveldb_write( - leveldb_t* db, - const leveldb_writeoptions_t* options, - leveldb_writebatch_t* batch, - char** errptr); - -/* Returns NULL if not found. A malloc()ed array otherwise. - Stores the length of the array in *vallen. */ -extern char* leveldb_get( - leveldb_t* db, - const leveldb_readoptions_t* options, - const char* key, size_t keylen, - size_t* vallen, - char** errptr); - -extern leveldb_iterator_t* leveldb_create_iterator( - leveldb_t* db, - const leveldb_readoptions_t* options); - -extern const leveldb_snapshot_t* leveldb_create_snapshot( - leveldb_t* db); - -extern void leveldb_release_snapshot( - leveldb_t* db, - const leveldb_snapshot_t* snapshot); - -/* Returns NULL if property name is unknown. - Else returns a pointer to a malloc()-ed null-terminated value. */ -extern char* leveldb_property_value( - leveldb_t* db, - const char* propname); - -extern void leveldb_approximate_sizes( - leveldb_t* db, - int num_ranges, - const char* const* range_start_key, const size_t* range_start_key_len, - const char* const* range_limit_key, const size_t* range_limit_key_len, - uint64_t* sizes); - -extern void leveldb_compact_range( - leveldb_t* db, - const char* start_key, size_t start_key_len, - const char* limit_key, size_t limit_key_len); - -/* Management operations */ - -extern void leveldb_destroy_db( - const leveldb_options_t* options, - const char* name, - char** errptr); - -extern void leveldb_repair_db( - const leveldb_options_t* options, - const char* name, - char** errptr); - -/* Iterator */ - -extern void leveldb_iter_destroy(leveldb_iterator_t*); -extern unsigned char leveldb_iter_valid(const leveldb_iterator_t*); -extern void leveldb_iter_seek_to_first(leveldb_iterator_t*); -extern void leveldb_iter_seek_to_last(leveldb_iterator_t*); -extern void leveldb_iter_seek(leveldb_iterator_t*, const char* k, size_t klen); -extern void leveldb_iter_next(leveldb_iterator_t*); -extern void leveldb_iter_prev(leveldb_iterator_t*); -extern const char* leveldb_iter_key(const leveldb_iterator_t*, size_t* klen); -extern const char* leveldb_iter_value(const leveldb_iterator_t*, size_t* vlen); -extern void leveldb_iter_get_error(const leveldb_iterator_t*, char** errptr); - -/* Write batch */ - -extern leveldb_writebatch_t* leveldb_writebatch_create(); -extern void leveldb_writebatch_destroy(leveldb_writebatch_t*); -extern void leveldb_writebatch_clear(leveldb_writebatch_t*); -extern void leveldb_writebatch_put( - leveldb_writebatch_t*, - const char* key, size_t klen, - const char* val, size_t vlen); -extern void leveldb_writebatch_delete( - leveldb_writebatch_t*, - const char* key, size_t klen); -extern void leveldb_writebatch_iterate( - leveldb_writebatch_t*, - void* state, - void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen), - void (*deleted)(void*, const char* k, size_t klen)); - -/* Options */ - -extern leveldb_options_t* leveldb_options_create(); -extern void leveldb_options_destroy(leveldb_options_t*); -extern void leveldb_options_set_comparator( - leveldb_options_t*, - leveldb_comparator_t*); -extern void leveldb_options_set_filter_policy( - leveldb_options_t*, - leveldb_filterpolicy_t*); -extern void leveldb_options_set_create_if_missing( - leveldb_options_t*, unsigned char); -extern void leveldb_options_set_error_if_exists( - leveldb_options_t*, unsigned char); -extern void leveldb_options_set_paranoid_checks( - leveldb_options_t*, unsigned char); -extern void leveldb_options_set_env(leveldb_options_t*, leveldb_env_t*); -extern void leveldb_options_set_info_log(leveldb_options_t*, leveldb_logger_t*); -extern void leveldb_options_set_write_buffer_size(leveldb_options_t*, size_t); -extern void leveldb_options_set_max_open_files(leveldb_options_t*, int); -extern void leveldb_options_set_cache(leveldb_options_t*, leveldb_cache_t*); -extern void leveldb_options_set_block_size(leveldb_options_t*, size_t); -extern void leveldb_options_set_block_restart_interval(leveldb_options_t*, int); - -enum { - leveldb_no_compression = 0, - leveldb_snappy_compression = 1 -}; -extern void leveldb_options_set_compression(leveldb_options_t*, int); - -/* Comparator */ - -extern leveldb_comparator_t* leveldb_comparator_create( - void* state, - void (*destructor)(void*), - int (*compare)( - void*, - const char* a, size_t alen, - const char* b, size_t blen), - const char* (*name)(void*)); -extern void leveldb_comparator_destroy(leveldb_comparator_t*); - -/* Filter policy */ - -extern leveldb_filterpolicy_t* leveldb_filterpolicy_create( - void* state, - void (*destructor)(void*), - char* (*create_filter)( - void*, - const char* const* key_array, const size_t* key_length_array, - int num_keys, - size_t* filter_length), - unsigned char (*key_may_match)( - void*, - const char* key, size_t length, - const char* filter, size_t filter_length), - const char* (*name)(void*)); -extern void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t*); - -extern leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom( - int bits_per_key); - -/* Read options */ - -extern leveldb_readoptions_t* leveldb_readoptions_create(); -extern void leveldb_readoptions_destroy(leveldb_readoptions_t*); -extern void leveldb_readoptions_set_verify_checksums( - leveldb_readoptions_t*, - unsigned char); -extern void leveldb_readoptions_set_fill_cache( - leveldb_readoptions_t*, unsigned char); -extern void leveldb_readoptions_set_snapshot( - leveldb_readoptions_t*, - const leveldb_snapshot_t*); - -/* Write options */ - -extern leveldb_writeoptions_t* leveldb_writeoptions_create(); -extern void leveldb_writeoptions_destroy(leveldb_writeoptions_t*); -extern void leveldb_writeoptions_set_sync( - leveldb_writeoptions_t*, unsigned char); - -/* Cache */ - -extern leveldb_cache_t* leveldb_cache_create_lru(size_t capacity); -extern void leveldb_cache_destroy(leveldb_cache_t* cache); - -/* Env */ - -extern leveldb_env_t* leveldb_create_default_env(); -extern void leveldb_env_destroy(leveldb_env_t*); - -/* Utility */ - -/* Calls free(ptr). - REQUIRES: ptr was malloc()-ed and returned by one of the routines - in this file. Note that in certain cases (typically on Windows), you - may need to call this routine instead of free(ptr) to dispose of - malloc()-ed memory returned by this library. */ -extern void leveldb_free(void* ptr); - -/* Return the major version number for this release. */ -extern int leveldb_major_version(); - -/* Return the minor version number for this release. */ -extern int leveldb_minor_version(); - -#ifdef __cplusplus -} /* end extern "C" */ -#endif - -#endif /* STORAGE_LEVELDB_INCLUDE_C_H_ */ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/cache.h b/clipper/HyperLevelDB/include/hyperleveldb/cache.h deleted file mode 100644 index 56c1c04..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/cache.h +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A Cache is an interface that maps keys to values. It has internal -// synchronization and may be safely accessed concurrently from -// multiple threads. It may automatically evict entries to make room -// for new entries. Values have a specified charge against the cache -// capacity. For example, a cache where the values are variable -// length strings, may use the length of the string as the charge for -// the string. -// -// A builtin cache implementation with a least-recently-used eviction -// policy is provided. Clients may use their own implementations if -// they want something more sophisticated (like scan-resistance, a -// custom eviction policy, variable cache sizing, etc.) - -#ifndef STORAGE_LEVELDB_INCLUDE_CACHE_H_ -#define STORAGE_LEVELDB_INCLUDE_CACHE_H_ - -#include -#include "hyperleveldb/slice.h" - -namespace leveldb { - -class Cache; - -// Create a new cache with a fixed size capacity. This implementation -// of Cache uses a least-recently-used eviction policy. -extern Cache* NewLRUCache(size_t capacity); - -class Cache { - public: - Cache() { } - - // Destroys all existing entries by calling the "deleter" - // function that was passed to the constructor. - virtual ~Cache(); - - // Opaque handle to an entry stored in the cache. - struct Handle { }; - - // Insert a mapping from key->value into the cache and assign it - // the specified charge against the total cache capacity. - // - // Returns a handle that corresponds to the mapping. The caller - // must call this->Release(handle) when the returned mapping is no - // longer needed. - // - // When the inserted entry is no longer needed, the key and - // value will be passed to "deleter". - virtual Handle* Insert(const Slice& key, void* value, size_t charge, - void (*deleter)(const Slice& key, void* value)) = 0; - - // If the cache has no mapping for "key", returns NULL. - // - // Else return a handle that corresponds to the mapping. The caller - // must call this->Release(handle) when the returned mapping is no - // longer needed. - virtual Handle* Lookup(const Slice& key) = 0; - - // Release a mapping returned by a previous Lookup(). - // REQUIRES: handle must not have been released yet. - // REQUIRES: handle must have been returned by a method on *this. - virtual void Release(Handle* handle) = 0; - - // Return the value encapsulated in a handle returned by a - // successful Lookup(). - // REQUIRES: handle must not have been released yet. - // REQUIRES: handle must have been returned by a method on *this. - virtual void* Value(Handle* handle) = 0; - - // If the cache contains entry for key, erase it. Note that the - // underlying entry will be kept around until all existing handles - // to it have been released. - virtual void Erase(const Slice& key) = 0; - - // Return a new numeric id. May be used by multiple clients who are - // sharing the same cache to partition the key space. Typically the - // client will allocate a new id at startup and prepend the id to - // its cache keys. - virtual uint64_t NewId() = 0; - - private: - void LRU_Remove(Handle* e); - void LRU_Append(Handle* e); - void Unref(Handle* e); - - struct Rep; - Rep* rep_; - - // No copying allowed - Cache(const Cache&); - void operator=(const Cache&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_CACHE_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/comparator.h b/clipper/HyperLevelDB/include/hyperleveldb/comparator.h deleted file mode 100644 index 24cefe3..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/comparator.h +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_ -#define STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_ - -#include -#include - -namespace leveldb { - -class Slice; - -// A Comparator object provides a total order across slices that are -// used as keys in an sstable or a database. A Comparator implementation -// must be thread-safe since leveldb may invoke its methods concurrently -// from multiple threads. -class Comparator { - public: - virtual ~Comparator(); - - // Three-way comparison. Returns value: - // < 0 iff "a" < "b", - // == 0 iff "a" == "b", - // > 0 iff "a" > "b" - virtual int Compare(const Slice& a, const Slice& b) const = 0; - - // The name of the comparator. Used to check for comparator - // mismatches (i.e., a DB created with one comparator is - // accessed using a different comparator. - // - // The client of this package should switch to a new name whenever - // the comparator implementation changes in a way that will cause - // the relative ordering of any two keys to change. - // - // Names starting with "leveldb." are reserved and should not be used - // by any clients of this package. - virtual const char* Name() const = 0; - - // Advanced functions: these are used to reduce the space requirements - // for internal data structures like index blocks. - - // If *start < limit, changes *start to a short string in [start,limit). - // Simple comparator implementations may return with *start unchanged, - // i.e., an implementation of this method that does nothing is correct. - virtual void FindShortestSeparator( - std::string* start, - const Slice& limit) const = 0; - - // Changes *key to a short string >= *key. - // Simple comparator implementations may return with *key unchanged, - // i.e., an implementation of this method that does nothing is correct. - virtual void FindShortSuccessor(std::string* key) const = 0; - - // If unsure, return 0; - virtual uint64_t KeyNum(const Slice& key) const; -}; - -// Return a builtin comparator that uses lexicographic byte-wise -// ordering. The result remains the property of this module and -// must not be deleted. -extern const Comparator* BytewiseComparator(); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_COMPARATOR_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/db.h b/clipper/HyperLevelDB/include/hyperleveldb/db.h deleted file mode 100644 index 894bde6..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/db.h +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_DB_H_ -#define STORAGE_LEVELDB_INCLUDE_DB_H_ - -#include -#include -#include "hyperleveldb/iterator.h" -#include "hyperleveldb/options.h" -#include "hyperleveldb/replay_iterator.h" - -namespace leveldb { - -// Update Makefile if you change these -static const int kMajorVersion = 1; -static const int kMinorVersion = 16; - -struct Options; -struct ReadOptions; -struct WriteOptions; -class WriteBatch; - -// Abstract handle to particular state of a DB. -// A Snapshot is an immutable object and can therefore be safely -// accessed from multiple threads without any external synchronization. -class Snapshot { - protected: - virtual ~Snapshot(); -}; - -// A range of keys -struct Range { - Slice start; // Included in the range - Slice limit; // Not included in the range - - Range() : start(), limit() { } - Range(const Slice& s, const Slice& l) : start(s), limit(l) { } -}; - -// A DB is a persistent ordered map from keys to values. -// A DB is safe for concurrent access from multiple threads without -// any external synchronization. -class DB { - public: - // Open the database with the specified "name". - // Stores a pointer to a heap-allocated database in *dbptr and returns - // OK on success. - // Stores NULL in *dbptr and returns a non-OK status on error. - // Caller should delete *dbptr when it is no longer needed. - static Status Open(const Options& options, - const std::string& name, - DB** dbptr); - - DB() { } - virtual ~DB(); - - // Set the database entry for "key" to "value". Returns OK on success, - // and a non-OK status on error. - // Note: consider setting options.sync = true. - virtual Status Put(const WriteOptions& options, - const Slice& key, - const Slice& value) = 0; - - // Remove the database entry (if any) for "key". Returns OK on - // success, and a non-OK status on error. It is not an error if "key" - // did not exist in the database. - // Note: consider setting options.sync = true. - virtual Status Delete(const WriteOptions& options, const Slice& key) = 0; - - // Apply the specified updates to the database. - // Returns OK on success, non-OK on failure. - // Note: consider setting options.sync = true. - virtual Status Write(const WriteOptions& options, WriteBatch* updates) = 0; - - // If the database contains an entry for "key" store the - // corresponding value in *value and return OK. - // - // If there is no entry for "key" leave *value unchanged and return - // a status for which Status::IsNotFound() returns true. - // - // May return some other Status on an error. - virtual Status Get(const ReadOptions& options, - const Slice& key, std::string* value) = 0; - - // Return a heap-allocated iterator over the contents of the database. - // The result of NewIterator() is initially invalid (caller must - // call one of the Seek methods on the iterator before using it). - // - // Caller should delete the iterator when it is no longer needed. - // The returned iterator should be deleted before this db is deleted. - virtual Iterator* NewIterator(const ReadOptions& options) = 0; - - // Return a handle to the current DB state. Iterators created with - // this handle will all observe a stable snapshot of the current DB - // state. The caller must call ReleaseSnapshot(result) when the - // snapshot is no longer needed. - virtual const Snapshot* GetSnapshot() = 0; - - // Release a previously acquired snapshot. The caller must not - // use "snapshot" after this call. - virtual void ReleaseSnapshot(const Snapshot* snapshot) = 0; - - // DB implementations can export properties about their state - // via this method. If "property" is a valid property understood by this - // DB implementation, fills "*value" with its current value and returns - // true. Otherwise returns false. - // - // - // Valid property names include: - // - // "leveldb.num-files-at-level" - return the number of files at level , - // where is an ASCII representation of a level number (e.g. "0"). - // "leveldb.stats" - returns a multi-line string that describes statistics - // about the internal operation of the DB. - // "leveldb.sstables" - returns a multi-line string that describes all - // of the sstables that make up the db contents. - virtual bool GetProperty(const Slice& property, std::string* value) = 0; - - // For each i in [0,n-1], store in "sizes[i]", the approximate - // file system space used by keys in "[range[i].start .. range[i].limit)". - // - // Note that the returned sizes measure file system space usage, so - // if the user data compresses by a factor of ten, the returned - // sizes will be one-tenth the size of the corresponding user data size. - // - // The results may not include the sizes of recently written data. - virtual void GetApproximateSizes(const Range* range, int n, - uint64_t* sizes) = 0; - - // Compact the underlying storage for the key range [*begin,*end]. - // In particular, deleted and overwritten versions are discarded, - // and the data is rearranged to reduce the cost of operations - // needed to access the data. This operation should typically only - // be invoked by users who understand the underlying implementation. - // - // begin==NULL is treated as a key before all keys in the database. - // end==NULL is treated as a key after all keys in the database. - // Therefore the following call will compact the entire database: - // db->CompactRange(NULL, NULL); - virtual void CompactRange(const Slice* begin, const Slice* end) = 0; - - // Create a live backup of a live LevelDB instance. - // The backup is stored in a directory named "backup-" under the top - // level of the open LevelDB database. The implementation is permitted, and - // even encouraged, to improve the performance of this call through - // hard-links. - virtual Status LiveBackup(const Slice& name) = 0; - - // Return an opaque timestamp that identifies the current point in time of the - // database. This timestamp may be subsequently presented to the - // NewReplayIterator method to create a ReplayIterator. - virtual void GetReplayTimestamp(std::string* timestamp) = 0; - - // Set the lower bound for manual garbage collection. This method only takes - // effect when Options.manual_garbage_collection is true. - virtual void AllowGarbageCollectBeforeTimestamp(const std::string& timestamp) = 0; - - // Validate the timestamp - virtual bool ValidateTimestamp(const std::string& timestamp) = 0; - - // Compare two timestamps and return -1, 0, 1 for lt, eq, gt - virtual int CompareTimestamps(const std::string& lhs, const std::string& rhs) = 0; - - // Return a ReplayIterator that returns every write operation performed after - // the timestamp. - virtual Status GetReplayIterator(const std::string& timestamp, - ReplayIterator** iter) = 0; - - // Release a previously allocated replay iterator. - virtual void ReleaseReplayIterator(ReplayIterator* iter) = 0; - - private: - // No copying allowed - DB(const DB&); - void operator=(const DB&); -}; - -// Destroy the contents of the specified database. -// Be very careful using this method. -Status DestroyDB(const std::string& name, const Options& options); - -// If a DB cannot be opened, you may attempt to call this method to -// resurrect as much of the contents of the database as possible. -// Some data may be lost, so be careful when calling this function -// on a database that contains important information. -Status RepairDB(const std::string& dbname, const Options& options); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_DB_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/env.h b/clipper/HyperLevelDB/include/hyperleveldb/env.h deleted file mode 100644 index 11a1e5b..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/env.h +++ /dev/null @@ -1,352 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// An Env is an interface used by the leveldb implementation to access -// operating system functionality like the filesystem etc. Callers -// may wish to provide a custom Env object when opening a database to -// get fine gain control; e.g., to rate limit file system operations. -// -// All Env implementations are safe for concurrent access from -// multiple threads without any external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_ENV_H_ -#define STORAGE_LEVELDB_INCLUDE_ENV_H_ - -#include -#include -#include -#include -#include "hyperleveldb/status.h" - -namespace leveldb { - -class FileLock; -class Logger; -class RandomAccessFile; -class SequentialFile; -class Slice; -class WritableFile; - -class Env { - public: - Env() { } - virtual ~Env(); - - // Return a default environment suitable for the current operating - // system. Sophisticated users may wish to provide their own Env - // implementation instead of relying on this default environment. - // - // The result of Default() belongs to leveldb and must never be deleted. - static Env* Default(); - - // Create a brand new sequentially-readable file with the specified name. - // On success, stores a pointer to the new file in *result and returns OK. - // On failure stores NULL in *result and returns non-OK. If the file does - // not exist, returns a non-OK status. - // - // The returned file will only be accessed by one thread at a time. - virtual Status NewSequentialFile(const std::string& fname, - SequentialFile** result) = 0; - - // Create a brand new random access read-only file with the - // specified name. On success, stores a pointer to the new file in - // *result and returns OK. On failure stores NULL in *result and - // returns non-OK. If the file does not exist, returns a non-OK - // status. - // - // The returned file may be concurrently accessed by multiple threads. - virtual Status NewRandomAccessFile(const std::string& fname, - RandomAccessFile** result) = 0; - - // Create an object that writes to a new file with the specified - // name. Deletes any existing file with the same name and creates a - // new file. On success, stores a pointer to the new file in - // *result and returns OK. On failure stores NULL in *result and - // returns non-OK. - // - // The returned file will only be accessed by one thread at a time. - virtual Status NewWritableFile(const std::string& fname, - WritableFile** result) = 0; - - // Returns true iff the named file exists. - virtual bool FileExists(const std::string& fname) = 0; - - // Store in *result the names of the children of the specified directory. - // The names are relative to "dir". - // Original contents of *results are dropped. - virtual Status GetChildren(const std::string& dir, - std::vector* result) = 0; - - // Delete the named file. - virtual Status DeleteFile(const std::string& fname) = 0; - - // Create the specified directory. - virtual Status CreateDir(const std::string& dirname) = 0; - - // Delete the specified directory. - virtual Status DeleteDir(const std::string& dirname) = 0; - - // Store the size of fname in *file_size. - virtual Status GetFileSize(const std::string& fname, uint64_t* file_size) = 0; - - // Rename file src to target. - virtual Status RenameFile(const std::string& src, - const std::string& target) = 0; - - // Copy file src to target. - virtual Status CopyFile(const std::string& src, - const std::string& target) = 0; - - // Link file src to target. - virtual Status LinkFile(const std::string& src, - const std::string& target) = 0; - - - // Lock the specified file. Used to prevent concurrent access to - // the same db by multiple processes. On failure, stores NULL in - // *lock and returns non-OK. - // - // On success, stores a pointer to the object that represents the - // acquired lock in *lock and returns OK. The caller should call - // UnlockFile(*lock) to release the lock. If the process exits, - // the lock will be automatically released. - // - // If somebody else already holds the lock, finishes immediately - // with a failure. I.e., this call does not wait for existing locks - // to go away. - // - // May create the named file if it does not already exist. - virtual Status LockFile(const std::string& fname, FileLock** lock) = 0; - - // Release the lock acquired by a previous successful call to LockFile. - // REQUIRES: lock was returned by a successful LockFile() call - // REQUIRES: lock has not already been unlocked. - virtual Status UnlockFile(FileLock* lock) = 0; - - // Arrange to run "(*function)(arg)" once in a background thread. - // - // "function" may run in an unspecified thread. Multiple functions - // added to the same Env may run concurrently in different threads. - // I.e., the caller may not assume that background work items are - // serialized. - virtual void Schedule( - void (*function)(void* arg), - void* arg) = 0; - - // Start a new thread, invoking "function(arg)" within the new thread. - // When "function(arg)" returns, the thread will be destroyed. - virtual void StartThread(void (*function)(void* arg), void* arg) = 0; - - // *path is set to a temporary directory that can be used for testing. It may - // or many not have just been created. The directory may or may not differ - // between runs of the same process, but subsequent calls will return the - // same directory. - virtual Status GetTestDirectory(std::string* path) = 0; - - // Create and return a log file for storing informational messages. - virtual Status NewLogger(const std::string& fname, Logger** result) = 0; - - // Returns the number of micro-seconds since some fixed point in time. Only - // useful for computing deltas of time. - virtual uint64_t NowMicros() = 0; - - // Sleep/delay the thread for the perscribed number of micro-seconds. - virtual void SleepForMicroseconds(int micros) = 0; - - private: - // No copying allowed - Env(const Env&); - void operator=(const Env&); -}; - -// A file abstraction for reading sequentially through a file -class SequentialFile { - public: - SequentialFile() { } - virtual ~SequentialFile(); - - // Read up to "n" bytes from the file. "scratch[0..n-1]" may be - // written by this routine. Sets "*result" to the data that was - // read (including if fewer than "n" bytes were successfully read). - // May set "*result" to point at data in "scratch[0..n-1]", so - // "scratch[0..n-1]" must be live when "*result" is used. - // If an error was encountered, returns a non-OK status. - // - // REQUIRES: External synchronization - virtual Status Read(size_t n, Slice* result, char* scratch) = 0; - - // Skip "n" bytes from the file. This is guaranteed to be no - // slower that reading the same data, but may be faster. - // - // If end of file is reached, skipping will stop at the end of the - // file, and Skip will return OK. - // - // REQUIRES: External synchronization - virtual Status Skip(uint64_t n) = 0; - - private: - // No copying allowed - SequentialFile(const SequentialFile&); - void operator=(const SequentialFile&); -}; - -// A file abstraction for randomly reading the contents of a file. -class RandomAccessFile { - public: - RandomAccessFile() { } - virtual ~RandomAccessFile(); - - // Read up to "n" bytes from the file starting at "offset". - // "scratch[0..n-1]" may be written by this routine. Sets "*result" - // to the data that was read (including if fewer than "n" bytes were - // successfully read). May set "*result" to point at data in - // "scratch[0..n-1]", so "scratch[0..n-1]" must be live when - // "*result" is used. If an error was encountered, returns a non-OK - // status. - // - // Safe for concurrent use by multiple threads. - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const = 0; - - private: - // No copying allowed - RandomAccessFile(const RandomAccessFile&); - void operator=(const RandomAccessFile&); -}; - -// A file abstraction for sequential writing. The implementation -// must provide buffering since callers may append small fragments -// at a time to the file. -class WritableFile { - public: - WritableFile() { } - virtual ~WritableFile(); - - // Allows concurrent writers - // REQUIRES: The range of data falling in [offset, offset + data.size()) must - // only be written once. - virtual Status WriteAt(uint64_t offset, const Slice& data) = 0; - // REQUIRES: external synchronization - virtual Status Append(const Slice& data) = 0; - virtual Status Close() = 0; - virtual Status Sync() = 0; - - private: - // No copying allowed - WritableFile(const WritableFile&); - void operator=(const WritableFile&); -}; - -// An interface for writing log messages. -class Logger { - public: - Logger() { } - virtual ~Logger(); - - // Write an entry to the log file with the specified format. - virtual void Logv(const char* format, va_list ap) = 0; - - private: - // No copying allowed - Logger(const Logger&); - void operator=(const Logger&); -}; - - -// Identifies a locked file. -class FileLock { - public: - FileLock() { } - virtual ~FileLock(); - private: - // No copying allowed - FileLock(const FileLock&); - void operator=(const FileLock&); -}; - -// Log the specified data to *info_log if info_log is non-NULL. -extern void Log(Logger* info_log, const char* format, ...) -# if defined(__GNUC__) || defined(__clang__) - __attribute__((__format__ (__printf__, 2, 3))) -# endif - ; - -// A utility routine: write "data" to the named file. -extern Status WriteStringToFile(Env* env, const Slice& data, - const std::string& fname); - -// A utility routine: read contents of named file into *data -extern Status ReadFileToString(Env* env, const std::string& fname, - std::string* data); - -// An implementation of Env that forwards all calls to another Env. -// May be useful to clients who wish to override just part of the -// functionality of another Env. -class EnvWrapper : public Env { - public: - // Initialize an EnvWrapper that delegates all calls to *t - explicit EnvWrapper(Env* t) : target_(t) { } - virtual ~EnvWrapper(); - - // Return the target to which this Env forwards all calls - Env* target() const { return target_; } - - // The following text is boilerplate that forwards all methods to target() - Status NewSequentialFile(const std::string& f, SequentialFile** r) { - return target_->NewSequentialFile(f, r); - } - Status NewRandomAccessFile(const std::string& f, RandomAccessFile** r) { - return target_->NewRandomAccessFile(f, r); - } - Status NewWritableFile(const std::string& f, WritableFile** r) { - return target_->NewWritableFile(f, r); - } - bool FileExists(const std::string& f) { return target_->FileExists(f); } - Status GetChildren(const std::string& dir, std::vector* r) { - return target_->GetChildren(dir, r); - } - Status DeleteFile(const std::string& f) { return target_->DeleteFile(f); } - Status CreateDir(const std::string& d) { return target_->CreateDir(d); } - Status DeleteDir(const std::string& d) { return target_->DeleteDir(d); } - Status GetFileSize(const std::string& f, uint64_t* s) { - return target_->GetFileSize(f, s); - } - Status RenameFile(const std::string& s, const std::string& t) { - return target_->RenameFile(s, t); - } - Status CopyFile(const std::string& s, const std::string& t) { - return target_->CopyFile(s, t); - } - Status LinkFile(const std::string& s, const std::string& t) { - return target_->LinkFile(s, t); - } - Status LockFile(const std::string& f, FileLock** l) { - return target_->LockFile(f, l); - } - Status UnlockFile(FileLock* l) { return target_->UnlockFile(l); } - void Schedule(void (*f)(void*), void* a) { - return target_->Schedule(f, a); - } - void StartThread(void (*f)(void*), void* a) { - return target_->StartThread(f, a); - } - virtual Status GetTestDirectory(std::string* path) { - return target_->GetTestDirectory(path); - } - virtual Status NewLogger(const std::string& fname, Logger** result) { - return target_->NewLogger(fname, result); - } - uint64_t NowMicros() { - return target_->NowMicros(); - } - void SleepForMicroseconds(int micros) { - target_->SleepForMicroseconds(micros); - } - private: - Env* target_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_ENV_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/filter_policy.h b/clipper/HyperLevelDB/include/hyperleveldb/filter_policy.h deleted file mode 100644 index 1fba080..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/filter_policy.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A database can be configured with a custom FilterPolicy object. -// This object is responsible for creating a small filter from a set -// of keys. These filters are stored in leveldb and are consulted -// automatically by leveldb to decide whether or not to read some -// information from disk. In many cases, a filter can cut down the -// number of disk seeks form a handful to a single disk seek per -// DB::Get() call. -// -// Most people will want to use the builtin bloom filter support (see -// NewBloomFilterPolicy() below). - -#ifndef STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ -#define STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ - -#include - -namespace leveldb { - -class Slice; - -class FilterPolicy { - public: - virtual ~FilterPolicy(); - - // Return the name of this policy. Note that if the filter encoding - // changes in an incompatible way, the name returned by this method - // must be changed. Otherwise, old incompatible filters may be - // passed to methods of this type. - virtual const char* Name() const = 0; - - // keys[0,n-1] contains a list of keys (potentially with duplicates) - // that are ordered according to the user supplied comparator. - // Append a filter that summarizes keys[0,n-1] to *dst. - // - // Warning: do not change the initial contents of *dst. Instead, - // append the newly constructed filter to *dst. - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) - const = 0; - - // "filter" contains the data appended by a preceding call to - // CreateFilter() on this class. This method must return true if - // the key was in the list of keys passed to CreateFilter(). - // This method may return true or false if the key was not on the - // list, but it should aim to return false with a high probability. - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const = 0; -}; - -// Return a new filter policy that uses a bloom filter with approximately -// the specified number of bits per key. A good value for bits_per_key -// is 10, which yields a filter with ~ 1% false positive rate. -// -// Callers must delete the result after any database that is using the -// result has been closed. -// -// Note: if you are using a custom comparator that ignores some parts -// of the keys being compared, you must not use NewBloomFilterPolicy() -// and must provide your own FilterPolicy that also ignores the -// corresponding parts of the keys. For example, if the comparator -// ignores trailing spaces, it would be incorrect to use a -// FilterPolicy (like NewBloomFilterPolicy) that does not ignore -// trailing spaces in keys. -extern const FilterPolicy* NewBloomFilterPolicy(int bits_per_key); - -} - -#endif // STORAGE_LEVELDB_INCLUDE_FILTER_POLICY_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/iterator.h b/clipper/HyperLevelDB/include/hyperleveldb/iterator.h deleted file mode 100644 index 36ef1e5..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/iterator.h +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// An iterator yields a sequence of key/value pairs from a source. -// The following class defines the interface. Multiple implementations -// are provided by this library. In particular, iterators are provided -// to access the contents of a Table or a DB. -// -// Multiple threads can invoke const methods on an Iterator without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same Iterator must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_ITERATOR_H_ -#define STORAGE_LEVELDB_INCLUDE_ITERATOR_H_ - -#include "hyperleveldb/slice.h" -#include "hyperleveldb/status.h" - -namespace leveldb { - -class Iterator { - public: - Iterator(); - virtual ~Iterator(); - - // An iterator is either positioned at a key/value pair, or - // not valid. This method returns true iff the iterator is valid. - virtual bool Valid() const = 0; - - // Position at the first key in the source. The iterator is Valid() - // after this call iff the source is not empty. - virtual void SeekToFirst() = 0; - - // Position at the last key in the source. The iterator is - // Valid() after this call iff the source is not empty. - virtual void SeekToLast() = 0; - - // Position at the first key in the source that at or past target - // The iterator is Valid() after this call iff the source contains - // an entry that comes at or past target. - virtual void Seek(const Slice& target) = 0; - - // Moves to the next entry in the source. After this call, Valid() is - // true iff the iterator was not positioned at the last entry in the source. - // REQUIRES: Valid() - virtual void Next() = 0; - - // Moves to the previous entry in the source. After this call, Valid() is - // true iff the iterator was not positioned at the first entry in source. - // REQUIRES: Valid() - virtual void Prev() = 0; - - // Return the key for the current entry. The underlying storage for - // the returned slice is valid only until the next modification of - // the iterator. - // REQUIRES: Valid() - virtual Slice key() const = 0; - - // Return the value for the current entry. The underlying storage for - // the returned slice is valid only until the next modification of - // the iterator. - // REQUIRES: !AtEnd() && !AtStart() - virtual Slice value() const = 0; - - // If an error has occurred, return it. Else return an ok status. - virtual Status status() const = 0; - - // Clients are allowed to register function/arg1/arg2 triples that - // will be invoked when this iterator is destroyed. - // - // Note that unlike all of the preceding methods, this method is - // not abstract and therefore clients should not override it. - typedef void (*CleanupFunction)(void* arg1, void* arg2); - void RegisterCleanup(CleanupFunction function, void* arg1, void* arg2); - - private: - struct Cleanup { - CleanupFunction function; - void* arg1; - void* arg2; - Cleanup* next; - }; - Cleanup cleanup_; - - // No copying allowed - Iterator(const Iterator&); - void operator=(const Iterator&); -}; - -// Return an empty iterator (yields nothing). -extern Iterator* NewEmptyIterator(); - -// Return an empty iterator with the specified status. -extern Iterator* NewErrorIterator(const Status& status); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_ITERATOR_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/options.h b/clipper/HyperLevelDB/include/hyperleveldb/options.h deleted file mode 100644 index 3ba3536..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/options.h +++ /dev/null @@ -1,206 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_OPTIONS_H_ -#define STORAGE_LEVELDB_INCLUDE_OPTIONS_H_ - -#include - -namespace leveldb { - -class Cache; -class Comparator; -class Env; -class FilterPolicy; -class Logger; -class Snapshot; - -// DB contents are stored in a set of blocks, each of which holds a -// sequence of key,value pairs. Each block may be compressed before -// being stored in a file. The following enum describes which -// compression method (if any) is used to compress a block. -enum CompressionType { - // NOTE: do not change the values of existing entries, as these are - // part of the persistent format on disk. - kNoCompression = 0x0, - kSnappyCompression = 0x1 -}; - -// Options to control the behavior of a database (passed to DB::Open) -struct Options { - // ------------------- - // Parameters that affect behavior - - // Comparator used to define the order of keys in the table. - // Default: a comparator that uses lexicographic byte-wise ordering - // - // REQUIRES: The client must ensure that the comparator supplied - // here has the same name and orders keys *exactly* the same as the - // comparator provided to previous open calls on the same DB. - const Comparator* comparator; - - // If true, the database will be created if it is missing. - // Default: false - bool create_if_missing; - - // If true, an error is raised if the database already exists. - // Default: false - bool error_if_exists; - - // If true, the implementation will do aggressive checking of the - // data it is processing and will stop early if it detects any - // errors. This may have unforeseen ramifications: for example, a - // corruption of one DB entry may cause a large number of entries to - // become unreadable or for the entire DB to become unopenable. - // Default: false - bool paranoid_checks; - - // Use the specified object to interact with the environment, - // e.g. to read/write files, schedule background work, etc. - // Default: Env::Default() - Env* env; - - // Any internal progress/error information generated by the db will - // be written to info_log if it is non-NULL, or to a file stored - // in the same directory as the DB contents if info_log is NULL. - // Default: NULL - Logger* info_log; - - // ------------------- - // Parameters that affect performance - - // Amount of data to build up in memory (backed by an unsorted log - // on disk) before converting to a sorted on-disk file. - // - // Larger values increase performance, especially during bulk loads. - // Up to two write buffers may be held in memory at the same time, - // so you may wish to adjust this parameter to control memory usage. - // Also, a larger write buffer will result in a longer recovery time - // the next time the database is opened. - // - // Default: 4MB - size_t write_buffer_size; - - // Number of open files that can be used by the DB. You may need to - // increase this if your database has a large working set (budget - // one open file per 2MB of working set). - // - // Default: 1000 - int max_open_files; - - // Control over blocks (user data is stored in a set of blocks, and - // a block is the unit of reading from disk). - - // If non-NULL, use the specified cache for blocks. - // If NULL, leveldb will automatically create and use an 8MB internal cache. - // Default: NULL - Cache* block_cache; - - // Approximate size of user data packed per block. Note that the - // block size specified here corresponds to uncompressed data. The - // actual size of the unit read from disk may be smaller if - // compression is enabled. This parameter can be changed dynamically. - // - // Default: 4K - size_t block_size; - - // Number of keys between restart points for delta encoding of keys. - // This parameter can be changed dynamically. Most clients should - // leave this parameter alone. - // - // Default: 16 - int block_restart_interval; - - // Compress blocks using the specified compression algorithm. This - // parameter can be changed dynamically. - // - // Default: kSnappyCompression, which gives lightweight but fast - // compression. - // - // Typical speeds of kSnappyCompression on an Intel(R) Core(TM)2 2.4GHz: - // ~200-500MB/s compression - // ~400-800MB/s decompression - // Note that these speeds are significantly faster than most - // persistent storage speeds, and therefore it is typically never - // worth switching to kNoCompression. Even if the input data is - // incompressible, the kSnappyCompression implementation will - // efficiently detect that and will switch to uncompressed mode. - CompressionType compression; - - // If non-NULL, use the specified filter policy to reduce disk reads. - // Many applications will benefit from passing the result of - // NewBloomFilterPolicy() here. - // - // Default: NULL - const FilterPolicy* filter_policy; - - // Is the database used with the Replay mechanism? If yes, the lower bound on - // values to compact is (somewhat) left up to the application; if no, then - // LevelDB functions as usual, and uses snapshots to determine the lower - // bound. HyperLevelDB will always maintain the integrity of snapshots, so - // the application merely has the option to hold data as if it's holding a - // snapshot. This just prevents compaction from grabbing data before the app - // can get a snapshot. - // - // Default: false/no. - bool manual_garbage_collection; - - // Create an Options object with default values for all fields. - Options(); -}; - -// Options that control read operations -struct ReadOptions { - // If true, all data read from underlying storage will be - // verified against corresponding checksums. - // Default: false - bool verify_checksums; - - // Should the data read for this iteration be cached in memory? - // Callers may wish to set this field to false for bulk scans. - // Default: true - bool fill_cache; - - // If "snapshot" is non-NULL, read as of the supplied snapshot - // (which must belong to the DB that is being read and which must - // not have been released). If "snapshot" is NULL, use an impliicit - // snapshot of the state at the beginning of this read operation. - // Default: NULL - const Snapshot* snapshot; - - ReadOptions() - : verify_checksums(false), - fill_cache(true), - snapshot(NULL) { - } -}; - -// Options that control write operations -struct WriteOptions { - // If true, the write will be flushed from the operating system - // buffer cache (by calling WritableFile::Sync()) before the write - // is considered complete. If this flag is true, writes will be - // slower. - // - // If this flag is false, and the machine crashes, some recent - // writes may be lost. Note that if it is just the process that - // crashes (i.e., the machine does not reboot), no writes will be - // lost even if sync==false. - // - // In other words, a DB write with sync==false has similar - // crash semantics as the "write()" system call. A DB write - // with sync==true has similar crash semantics to a "write()" - // system call followed by "fsync()". - // - // Default: false - bool sync; - - WriteOptions() - : sync(false) { - } -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_OPTIONS_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/replay_iterator.h b/clipper/HyperLevelDB/include/hyperleveldb/replay_iterator.h deleted file mode 100644 index 3748fb1..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/replay_iterator.h +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2013 The HyperLevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_REPLAY_ITERATOR_H_ -#define STORAGE_LEVELDB_INCLUDE_REPLAY_ITERATOR_H_ - -#include "hyperleveldb/slice.h" -#include "hyperleveldb/status.h" - -namespace leveldb { - -class ReplayIterator { - public: - ReplayIterator(); - - // An iterator is either positioned at a deleted key, present key/value pair, - // or not valid. This method returns true iff the iterator is valid. - virtual bool Valid() = 0; - - // Moves to the next entry in the source. After this call, Valid() is - // true iff the iterator was not positioned at the last entry in the source. - // REQUIRES: Valid() - virtual void Next() = 0; - - // Position at the first key in the source that at or past target for this - // pass. Note that this is unlike the Seek call, as the ReplayIterator is - // unsorted. - // The iterator is Valid() after this call iff the source contains - // an entry that comes at or past target. - virtual void SkipTo(const Slice& target) = 0; - virtual void SkipToLast() = 0; - - // Return true if the current entry points to a key-value pair. If this - // returns false, it means the current entry is a deleted entry. - virtual bool HasValue() = 0; - - // Return the key for the current entry. The underlying storage for - // the returned slice is valid only until the next modification of - // the iterator. - // REQUIRES: Valid() - virtual Slice key() const = 0; - - // Return the value for the current entry. The underlying storage for - // the returned slice is valid only until the next modification of - // the iterator. - // REQUIRES: !AtEnd() && !AtStart() - virtual Slice value() const = 0; - - // If an error has occurred, return it. Else return an ok status. - virtual Status status() const = 0; - - protected: - // must be released by giving it back to the DB - virtual ~ReplayIterator(); - - private: - // No copying allowed - ReplayIterator(const ReplayIterator&); - void operator=(const ReplayIterator&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_REPLAY_ITERATOR_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/slice.h b/clipper/HyperLevelDB/include/hyperleveldb/slice.h deleted file mode 100644 index 74ea8fa..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/slice.h +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Slice is a simple structure containing a pointer into some external -// storage and a size. The user of a Slice must ensure that the slice -// is not used after the corresponding external storage has been -// deallocated. -// -// Multiple threads can invoke const methods on a Slice without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same Slice must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_SLICE_H_ -#define STORAGE_LEVELDB_INCLUDE_SLICE_H_ - -#include -#include -#include -#include - -namespace leveldb { - -class Slice { - public: - // Create an empty slice. - Slice() : data_(""), size_(0) { } - - // Create a slice that refers to d[0,n-1]. - Slice(const char* d, size_t n) : data_(d), size_(n) { } - - // Create a slice that refers to the contents of "s" - Slice(const std::string& s) : data_(s.data()), size_(s.size()) { } - - // Create a slice that refers to s[0,strlen(s)-1] - Slice(const char* s) : data_(s), size_(strlen(s)) { } - - // Return a pointer to the beginning of the referenced data - const char* data() const { return data_; } - - // Return the length (in bytes) of the referenced data - size_t size() const { return size_; } - - // Return true iff the length of the referenced data is zero - bool empty() const { return size_ == 0; } - - // Return the ith byte in the referenced data. - // REQUIRES: n < size() - char operator[](size_t n) const { - assert(n < size()); - return data_[n]; - } - - // Change this slice to refer to an empty array - void clear() { data_ = ""; size_ = 0; } - - // Drop the first "n" bytes from this slice. - void remove_prefix(size_t n) { - assert(n <= size()); - data_ += n; - size_ -= n; - } - - // Return a string that contains the copy of the referenced data. - std::string ToString() const { return std::string(data_, size_); } - - // Three-way comparison. Returns value: - // < 0 iff "*this" < "b", - // == 0 iff "*this" == "b", - // > 0 iff "*this" > "b" - int compare(const Slice& b) const; - - // Return true iff "x" is a prefix of "*this" - bool starts_with(const Slice& x) const { - return ((size_ >= x.size_) && - (memcmp(data_, x.data_, x.size_) == 0)); - } - - private: - const char* data_; - size_t size_; - - // Intentionally copyable -}; - -inline bool operator==(const Slice& x, const Slice& y) { - return ((x.size() == y.size()) && - (memcmp(x.data(), y.data(), x.size()) == 0)); -} - -inline bool operator!=(const Slice& x, const Slice& y) { - return !(x == y); -} - -inline int Slice::compare(const Slice& b) const { - const int min_len = (size_ < b.size_) ? size_ : b.size_; - int r = memcmp(data_, b.data_, min_len); - if (r == 0) { - if (size_ < b.size_) r = -1; - else if (size_ > b.size_) r = +1; - } - return r; -} - -} // namespace leveldb - - -#endif // STORAGE_LEVELDB_INCLUDE_SLICE_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/status.h b/clipper/HyperLevelDB/include/hyperleveldb/status.h deleted file mode 100644 index cb8c141..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/status.h +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A Status encapsulates the result of an operation. It may indicate success, -// or it may indicate an error with an associated error message. -// -// Multiple threads can invoke const methods on a Status without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same Status must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_STATUS_H_ -#define STORAGE_LEVELDB_INCLUDE_STATUS_H_ - -#include -#include "hyperleveldb/slice.h" - -namespace leveldb { - -class Status { - public: - // Create a success status. - Status() : state_(NULL) { } - ~Status() { delete[] state_; } - - // Copy the specified status. - Status(const Status& s); - Status& operator=(const Status& s); - - // Return a success status. - static Status OK() { return Status(); } - - // Return error status of an appropriate type. - static Status NotFound(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kNotFound, msg, msg2); - } - static Status Corruption(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kCorruption, msg, msg2); - } - static Status NotSupported(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kNotSupported, msg, msg2); - } - static Status InvalidArgument(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kInvalidArgument, msg, msg2); - } - static Status IOError(const Slice& msg, const Slice& msg2 = Slice()) { - return Status(kIOError, msg, msg2); - } - - // Returns true iff the status indicates success. - bool ok() const { return (state_ == NULL); } - - // Returns true iff the status indicates a NotFound error. - bool IsNotFound() const { return code() == kNotFound; } - - // Returns true iff the status indicates a Corruption error. - bool IsCorruption() const { return code() == kCorruption; } - - // Returns true iff the status indicates an IOError. - bool IsIOError() const { return code() == kIOError; } - - // Return a string representation of this status suitable for printing. - // Returns the string "OK" for success. - std::string ToString() const; - - private: - // OK status has a NULL state_. Otherwise, state_ is a new[] array - // of the following form: - // state_[0..3] == length of message - // state_[4] == code - // state_[5..] == message - const char* state_; - - enum Code { - kOk = 0, - kNotFound = 1, - kCorruption = 2, - kNotSupported = 3, - kInvalidArgument = 4, - kIOError = 5 - }; - - Code code() const { - return (state_ == NULL) ? kOk : static_cast(state_[4]); - } - - Status(Code code, const Slice& msg, const Slice& msg2); - static const char* CopyState(const char* s); -}; - -inline Status::Status(const Status& s) : state_(NULL) { - state_ = (s.state_ == NULL) ? NULL : CopyState(s.state_); -} -inline Status& Status::operator=(const Status& s) { - // The following condition catches both aliasing (when this == &s), - // and the common case where both s and *this are ok. - if (state_ != s.state_) { - delete[] state_; - state_ = (s.state_ == NULL) ? NULL : CopyState(s.state_); - } - return *this; -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_STATUS_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/table.h b/clipper/HyperLevelDB/include/hyperleveldb/table.h deleted file mode 100644 index d43db13..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/table.h +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_INCLUDE_TABLE_H_ -#define STORAGE_LEVELDB_INCLUDE_TABLE_H_ - -#include -#include "hyperleveldb/iterator.h" - -namespace leveldb { - -class Block; -class BlockHandle; -class Footer; -struct Options; -class RandomAccessFile; -struct ReadOptions; -class TableCache; - -// A Table is a sorted map from strings to strings. Tables are -// immutable and persistent. A Table may be safely accessed from -// multiple threads without external synchronization. -class Table { - public: - // Attempt to open the table that is stored in bytes [0..file_size) - // of "file", and read the metadata entries necessary to allow - // retrieving data from the table. - // - // If successful, returns ok and sets "*table" to the newly opened - // table. The client should delete "*table" when no longer needed. - // If there was an error while initializing the table, sets "*table" - // to NULL and returns a non-ok status. Does not take ownership of - // "*source", but the client must ensure that "source" remains live - // for the duration of the returned table's lifetime. - // - // *file must remain live while this Table is in use. - static Status Open(const Options& options, - RandomAccessFile* file, - uint64_t file_size, - Table** table); - - ~Table(); - - // Returns a new iterator over the table contents. - // The result of NewIterator() is initially invalid (caller must - // call one of the Seek methods on the iterator before using it). - Iterator* NewIterator(const ReadOptions&) const; - - // Given a key, return an approximate byte offset in the file where - // the data for that key begins (or would begin if the key were - // present in the file). The returned value is in terms of file - // bytes, and so includes effects like compression of the underlying data. - // E.g., the approximate offset of the last key in the table will - // be close to the file length. - uint64_t ApproximateOffsetOf(const Slice& key) const; - - private: - struct Rep; - Rep* rep_; - - explicit Table(Rep* rep) { rep_ = rep; } - static Iterator* BlockReader(void*, const ReadOptions&, const Slice&); - - // Calls (*handle_result)(arg, ...) with the entry found after a call - // to Seek(key). May not make such a call if filter policy says - // that key is not present. - friend class TableCache; - Status InternalGet( - const ReadOptions&, const Slice& key, - void* arg, - void (*handle_result)(void* arg, const Slice& k, const Slice& v)); - - - void ReadMeta(const Footer& footer); - void ReadFilter(const Slice& filter_handle_value); - - // No copying allowed - Table(const Table&); - void operator=(const Table&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_TABLE_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/table_builder.h b/clipper/HyperLevelDB/include/hyperleveldb/table_builder.h deleted file mode 100644 index 493a7db..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/table_builder.h +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// TableBuilder provides the interface used to build a Table -// (an immutable and sorted map from keys to values). -// -// Multiple threads can invoke const methods on a TableBuilder without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same TableBuilder must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_ -#define STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_ - -#include -#include "hyperleveldb/options.h" -#include "hyperleveldb/status.h" - -namespace leveldb { - -class BlockBuilder; -class BlockHandle; -class WritableFile; - -class TableBuilder { - public: - // Create a builder that will store the contents of the table it is - // building in *file. Does not close the file. It is up to the - // caller to close the file after calling Finish(). - TableBuilder(const Options& options, WritableFile* file); - - // REQUIRES: Either Finish() or Abandon() has been called. - ~TableBuilder(); - - // Change the options used by this builder. Note: only some of the - // option fields can be changed after construction. If a field is - // not allowed to change dynamically and its value in the structure - // passed to the constructor is different from its value in the - // structure passed to this method, this method will return an error - // without changing any fields. - Status ChangeOptions(const Options& options); - - // Add key,value to the table being constructed. - // REQUIRES: key is after any previously added key according to comparator. - // REQUIRES: Finish(), Abandon() have not been called - void Add(const Slice& key, const Slice& value); - - // Advanced operation: flush any buffered key/value pairs to file. - // Can be used to ensure that two adjacent entries never live in - // the same data block. Most clients should not need to use this method. - // REQUIRES: Finish(), Abandon() have not been called - void Flush(); - - // Return non-ok iff some error has been detected. - Status status() const; - - // Finish building the table. Stops using the file passed to the - // constructor after this function returns. - // REQUIRES: Finish(), Abandon() have not been called - Status Finish(); - - // Indicate that the contents of this builder should be abandoned. Stops - // using the file passed to the constructor after this function returns. - // If the caller is not going to call Finish(), it must call Abandon() - // before destroying this builder. - // REQUIRES: Finish(), Abandon() have not been called - void Abandon(); - - // Number of calls to Add() so far. - uint64_t NumEntries() const; - - // Size of the file generated so far. If invoked after a successful - // Finish() call, returns the size of the final generated file. - uint64_t FileSize() const; - - private: - bool ok() const { return status().ok(); } - void WriteBlock(BlockBuilder* block, BlockHandle* handle); - void WriteRawBlock(const Slice& data, CompressionType, BlockHandle* handle); - - struct Rep; - Rep* rep_; - - // No copying allowed - TableBuilder(const TableBuilder&); - void operator=(const TableBuilder&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_TABLE_BUILDER_H_ diff --git a/clipper/HyperLevelDB/include/hyperleveldb/write_batch.h b/clipper/HyperLevelDB/include/hyperleveldb/write_batch.h deleted file mode 100644 index c50fe5e..0000000 --- a/clipper/HyperLevelDB/include/hyperleveldb/write_batch.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// WriteBatch holds a collection of updates to apply atomically to a DB. -// -// The updates are applied in the order in which they are added -// to the WriteBatch. For example, the value of "key" will be "v3" -// after the following batch is written: -// -// batch.Put("key", "v1"); -// batch.Delete("key"); -// batch.Put("key", "v2"); -// batch.Put("key", "v3"); -// -// Multiple threads can invoke const methods on a WriteBatch without -// external synchronization, but if any of the threads may call a -// non-const method, all threads accessing the same WriteBatch must use -// external synchronization. - -#ifndef STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_ -#define STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_ - -#include -#include "hyperleveldb/status.h" - -namespace leveldb { - -class Slice; - -class WriteBatch { - public: - WriteBatch(); - ~WriteBatch(); - - // Store the mapping "key->value" in the database. - void Put(const Slice& key, const Slice& value); - - // If the database contains a mapping for "key", erase it. Else do nothing. - void Delete(const Slice& key); - - // Clear all updates buffered in this batch. - void Clear(); - - // Support for iterating over the contents of a batch. - class Handler { - public: - virtual ~Handler(); - virtual void Put(const Slice& key, const Slice& value) = 0; - virtual void Delete(const Slice& key) = 0; - }; - Status Iterate(Handler* handler) const; - - private: - friend class WriteBatchInternal; - - std::string rep_; // See comment in write_batch.cc for the format of rep_ - - // Intentionally copyable -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_INCLUDE_WRITE_BATCH_H_ diff --git a/clipper/HyperLevelDB/issues/issue178_test.cc b/clipper/HyperLevelDB/issues/issue178_test.cc deleted file mode 100644 index ffba66a..0000000 --- a/clipper/HyperLevelDB/issues/issue178_test.cc +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2013 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -// Test for issue 178: a manual compaction causes deleted data to reappear. -#include -#include -#include - -#include "hyperleveldb/db.h" -#include "hyperleveldb/write_batch.h" -#include "util/testharness.h" - -namespace { - -const int kNumKeys = 1100000; - -std::string Key1(int i) { - char buf[100]; - snprintf(buf, sizeof(buf), "my_key_%d", i); - return buf; -} - -std::string Key2(int i) { - return Key1(i) + "_xxx"; -} - -class Issue178 { }; - -TEST(Issue178, Test) { - // Get rid of any state from an old run. - std::string dbpath = leveldb::test::TmpDir() + "/leveldb_cbug_test"; - DestroyDB(dbpath, leveldb::Options()); - - // Open database. Disable compression since it affects the creation - // of layers and the code below is trying to test against a very - // specific scenario. - leveldb::DB* db; - leveldb::Options db_options; - db_options.create_if_missing = true; - db_options.compression = leveldb::kNoCompression; - ASSERT_OK(leveldb::DB::Open(db_options, dbpath, &db)); - - // create first key range - leveldb::WriteBatch batch; - for (size_t i = 0; i < kNumKeys; i++) { - batch.Put(Key1(i), "value for range 1 key"); - } - ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); - - // create second key range - batch.Clear(); - for (size_t i = 0; i < kNumKeys; i++) { - batch.Put(Key2(i), "value for range 2 key"); - } - ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); - - // delete second key range - batch.Clear(); - for (size_t i = 0; i < kNumKeys; i++) { - batch.Delete(Key2(i)); - } - ASSERT_OK(db->Write(leveldb::WriteOptions(), &batch)); - - // compact database - std::string start_key = Key1(0); - std::string end_key = Key1(kNumKeys - 1); - leveldb::Slice least(start_key.data(), start_key.size()); - leveldb::Slice greatest(end_key.data(), end_key.size()); - - // commenting out the line below causes the example to work correctly - db->CompactRange(&least, &greatest); - - // count the keys - leveldb::Iterator* iter = db->NewIterator(leveldb::ReadOptions()); - size_t num_keys = 0; - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - num_keys++; - } - delete iter; - ASSERT_EQ(kNumKeys, num_keys) << "Bad number of keys"; - - // close database - delete db; - DestroyDB(dbpath, leveldb::Options()); -} - -} // anonymous namespace - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/issues/issue200_test.cc b/clipper/HyperLevelDB/issues/issue200_test.cc deleted file mode 100644 index 17c267d..0000000 --- a/clipper/HyperLevelDB/issues/issue200_test.cc +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2013 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -// Test for issue 200: when iterator switches direction from backward -// to forward, the current key can be yielded unexpectedly if a new -// mutation has been added just before the current key. - -#include "hyperleveldb/db.h" -#include "util/testharness.h" - -namespace leveldb { - -class Issue200 { }; - -TEST(Issue200, Test) { - // Get rid of any state from an old run. - std::string dbpath = test::TmpDir() + "/leveldb_issue200_test"; - DestroyDB(dbpath, Options()); - - DB *db; - Options options; - options.create_if_missing = true; - ASSERT_OK(DB::Open(options, dbpath, &db)); - - WriteOptions write_options; - ASSERT_OK(db->Put(write_options, "1", "b")); - ASSERT_OK(db->Put(write_options, "2", "c")); - ASSERT_OK(db->Put(write_options, "3", "d")); - ASSERT_OK(db->Put(write_options, "4", "e")); - ASSERT_OK(db->Put(write_options, "5", "f")); - - ReadOptions read_options; - Iterator *iter = db->NewIterator(read_options); - - // Add an element that should not be reflected in the iterator. - ASSERT_OK(db->Put(write_options, "25", "cd")); - - iter->Seek("5"); - ASSERT_EQ(iter->key().ToString(), "5"); - iter->Prev(); - ASSERT_EQ(iter->key().ToString(), "4"); - iter->Prev(); - ASSERT_EQ(iter->key().ToString(), "3"); - iter->Next(); - ASSERT_EQ(iter->key().ToString(), "4"); - iter->Next(); - ASSERT_EQ(iter->key().ToString(), "5"); - - delete iter; - delete db; - DestroyDB(dbpath, options); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/leveldb-verify.cc b/clipper/HyperLevelDB/leveldb-verify.cc deleted file mode 100644 index 656e890..0000000 --- a/clipper/HyperLevelDB/leveldb-verify.cc +++ /dev/null @@ -1,205 +0,0 @@ -// Copyright (c) 2012-2013 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include "db/dbformat.h" -#include "db/filename.h" -#include "db/log_reader.h" -#include "db/version_edit.h" -#include "db/write_batch_internal.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/iterator.h" -#include "hyperleveldb/options.h" -#include "hyperleveldb/status.h" -#include "hyperleveldb/table.h" -#include "hyperleveldb/write_batch.h" -#include "util/logging.h" - -namespace leveldb { - -namespace { - -bool GuessType(const std::string& fname, FileType* type) { - size_t pos = fname.rfind('/'); - std::string basename; - if (pos == std::string::npos) { - basename = fname; - } else { - basename = std::string(fname.data() + pos + 1, fname.size() - pos - 1); - } - uint64_t ignored; - return ParseFileName(basename, &ignored, type); -} - -// Notified when log reader encounters corruption. -class CorruptionReporter : public log::Reader::Reporter { - public: - virtual void Corruption(size_t bytes, const Status& status) { - printf("corruption: %d bytes; %s\n", - static_cast(bytes), - status.ToString().c_str()); - } -}; - -// Print contents of a log file. (*func)() is called on every record. -bool PrintLogContents(Env* env, const std::string& fname, - void (*func)(Slice)) { - SequentialFile* file; - Status s = env->NewSequentialFile(fname, &file); - if (!s.ok()) { - fprintf(stderr, "%s\n", s.ToString().c_str()); - return false; - } - CorruptionReporter reporter; - log::Reader reader(file, &reporter, true, 0); - Slice record; - std::string scratch; - while (reader.ReadRecord(&record, &scratch)) { - (*func)(record); - } - delete file; - return true; -} - -// Called on every item found in a WriteBatch. -class WriteBatchItemPrinter : public WriteBatch::Handler { - public: - uint64_t offset_; - uint64_t sequence_; - - virtual void Put(const Slice& key, const Slice& value) { - } - virtual void Delete(const Slice& key) { - } -}; - -// Called on every log record (each one of which is a WriteBatch) -// found in a kLogFile. -static void WriteBatchPrinter(Slice record) { - if (record.size() < 12) { - printf("log record length %d is too small\n", - static_cast(record.size())); - return; - } - WriteBatch batch; - WriteBatchInternal::SetContents(&batch, record); - WriteBatchItemPrinter batch_item_printer; - Status s = batch.Iterate(&batch_item_printer); - if (!s.ok()) { - fprintf(stderr, "error: %s\n", s.ToString().c_str()); - } -} - -bool DumpLog(Env* env, const std::string& fname) { - return PrintLogContents(env, fname, WriteBatchPrinter); -} - -// Called on every log record (each one of which is a WriteBatch) -// found in a kDescriptorFile. -static void VersionEditPrinter(Slice record) { - VersionEdit edit; - Status s = edit.DecodeFrom(record); - if (!s.ok()) { - fprintf(stderr, "%s\n", s.ToString().c_str()); - return; - } -} - -bool DumpDescriptor(Env* env, const std::string& fname) { - return PrintLogContents(env, fname, VersionEditPrinter); -} - -bool DumpTable(Env* env, const std::string& fname) { - uint64_t file_size; - RandomAccessFile* file = NULL; - Table* table = NULL; - Status s = env->GetFileSize(fname, &file_size); - if (s.ok()) { - s = env->NewRandomAccessFile(fname, &file); - } - if (s.ok()) { - // We use the default comparator, which may or may not match the - // comparator used in this database. However this should not cause - // problems since we only use Table operations that do not require - // any comparisons. In particular, we do not call Seek or Prev. - s = Table::Open(Options(), file, file_size, &table); - } - if (!s.ok()) { - fprintf(stderr, "%s\n", s.ToString().c_str()); - delete table; - delete file; - return false; - } - - ReadOptions ro; - ro.verify_checksums = true; - Iterator* iter = table->NewIterator(ro); - Iterator* verify = table->NewIterator(ro); - for (iter->SeekToFirst(); iter->Valid(); iter->Next()) { - if (!iter->status().ok()) { - fprintf(stderr, "bad iteration %s\n", iter->status().ToString().c_str()); - } - ParsedInternalKey key; - if (!ParseInternalKey(iter->key(), &key)) { - fprintf(stderr, "badkey '%s' => '%s'\n", - EscapeString(iter->key()).c_str(), - EscapeString(iter->value()).c_str()); - } - verify->SeekToFirst(); - if (!verify->status().ok()) { - fprintf(stderr, "bad iteration %s\n", verify->status().ToString().c_str()); - } - verify->Seek(key.user_key); - if (!verify->status().ok()) { - fprintf(stderr, "bad iteration %s\n", verify->status().ToString().c_str()); - } - } - s = iter->status(); - if (!s.ok()) { - fprintf(stderr, "iterator error: %s\n", s.ToString().c_str()); - } - - delete iter; - delete verify; - delete table; - delete file; - return true; -} - -bool DumpFile(Env* env, const std::string& fname) { - FileType ftype; - if (!GuessType(fname, &ftype)) { - fprintf(stderr, "%s: unknown file type\n", fname.c_str()); - return false; - } - switch (ftype) { - case kLogFile: return DumpLog(env, fname); - case kDescriptorFile: return DumpDescriptor(env, fname); - case kTableFile: return DumpTable(env, fname); - - default: { - fprintf(stderr, "%s: not a dump-able file type\n", fname.c_str()); - break; - } - } - return false; -} - -bool HandleDumpCommand(Env* env, char** files, int num) { - bool ok = true; - for (int i = 0; i < num; i++) { - ok &= DumpFile(env, files[i]); - } - return ok; -} - -} -} // namespace leveldb - -int main(int argc, char** argv) { - leveldb::Env* env = leveldb::Env::Default(); - bool ok = true; - ok = leveldb::HandleDumpCommand(env, argv+1, argc-1); - return (ok ? 0 : 1); -} diff --git a/clipper/HyperLevelDB/libhyperleveldb.pc.in b/clipper/HyperLevelDB/libhyperleveldb.pc.in deleted file mode 100644 index 9122267..0000000 --- a/clipper/HyperLevelDB/libhyperleveldb.pc.in +++ /dev/null @@ -1,12 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: HyperLevelDB -Description: A fast and lightweight key-value storage library -Version: @VERSION@ - -Requires: -Libs: -L${libdir} -lhyperleveldb -Cflags: -I${includedir} diff --git a/clipper/HyperLevelDB/m4/ax_check_compile_flag.m4 b/clipper/HyperLevelDB/m4/ax_check_compile_flag.m4 deleted file mode 100644 index c3a8d69..0000000 --- a/clipper/HyperLevelDB/m4/ax_check_compile_flag.m4 +++ /dev/null @@ -1,72 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS]) -# -# DESCRIPTION -# -# Check whether the given FLAG works with the current language's compiler -# or gives an error. (Warnings, however, are ignored) -# -# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on -# success/failure. -# -# If EXTRA-FLAGS is defined, it is added to the current language's default -# flags (e.g. CFLAGS) when the check is done. The check is thus made with -# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to -# force the compiler to issue an error when a bad flag is given. -# -# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this -# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim -# Copyright (c) 2011 Maarten Bosmans -# -# This program is free software: you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation, either version 3 of the License, or (at your -# option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -# Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program. If not, see . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 2 - -AC_DEFUN([AX_CHECK_COMPILE_FLAG], -[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX -AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl -AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ - ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - [AS_VAR_SET(CACHEVAR,[yes])], - [AS_VAR_SET(CACHEVAR,[no])]) - _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) -AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes], - [m4_default([$2], :)], - [m4_default([$3], :)]) -AS_VAR_POPDEF([CACHEVAR])dnl -])dnl AX_CHECK_COMPILE_FLAGS diff --git a/clipper/HyperLevelDB/port/README b/clipper/HyperLevelDB/port/README deleted file mode 100644 index 422563e..0000000 --- a/clipper/HyperLevelDB/port/README +++ /dev/null @@ -1,10 +0,0 @@ -This directory contains interfaces and implementations that isolate the -rest of the package from platform details. - -Code in the rest of the package includes "port.h" from this directory. -"port.h" in turn includes a platform specific "port_.h" file -that provides the platform specific implementation. - -See port_posix.h for an example of what must be provided in a platform -specific header file. - diff --git a/clipper/HyperLevelDB/port/atomic_pointer.h b/clipper/HyperLevelDB/port/atomic_pointer.h deleted file mode 100644 index a9866b2..0000000 --- a/clipper/HyperLevelDB/port/atomic_pointer.h +++ /dev/null @@ -1,224 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -// AtomicPointer provides storage for a lock-free pointer. -// Platform-dependent implementation of AtomicPointer: -// - If the platform provides a cheap barrier, we use it with raw pointers -// - If cstdatomic is present (on newer versions of gcc, it is), we use -// a cstdatomic-based AtomicPointer. However we prefer the memory -// barrier based version, because at least on a gcc 4.4 32-bit build -// on linux, we have encountered a buggy -// implementation. Also, some implementations are much -// slower than a memory-barrier based implementation (~16ns for -// based acquire-load vs. ~1ns for a barrier based -// acquire-load). -// This code is based on atomicops-internals-* in Google's perftools: -// http://code.google.com/p/google-perftools/source/browse/#svn%2Ftrunk%2Fsrc%2Fbase - -#ifndef PORT_ATOMIC_POINTER_H_ -#define PORT_ATOMIC_POINTER_H_ - -#include -#ifdef LEVELDB_CSTDATOMIC_PRESENT -#include -#endif -#ifdef OS_WIN -#include -#endif -#ifdef OS_MACOSX -#include -#endif - -#if defined(_M_X64) || defined(__x86_64__) -#define ARCH_CPU_X86_FAMILY 1 -#elif defined(_M_IX86) || defined(__i386__) || defined(__i386) -#define ARCH_CPU_X86_FAMILY 1 -#elif defined(__ARMEL__) -#define ARCH_CPU_ARM_FAMILY 1 -#elif defined(__ppc__) || defined(__powerpc__) || defined(__powerpc64__) -#define ARCH_CPU_PPC_FAMILY 1 -#endif - -namespace leveldb { -namespace port { - -// Define MemoryBarrier() if available -// Windows on x86 -#if defined(OS_WIN) && defined(COMPILER_MSVC) && defined(ARCH_CPU_X86_FAMILY) -// windows.h already provides a MemoryBarrier(void) macro -// http://msdn.microsoft.com/en-us/library/ms684208(v=vs.85).aspx -#define LEVELDB_HAVE_MEMORY_BARRIER - -// Mac OS -#elif defined(OS_MACOSX) -inline void MemoryBarrier() { - OSMemoryBarrier(); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - -// Gcc on x86 -#elif defined(ARCH_CPU_X86_FAMILY) && defined(__GNUC__) -inline void MemoryBarrier() { - // See http://gcc.gnu.org/ml/gcc/2003-04/msg01180.html for a discussion on - // this idiom. Also see http://en.wikipedia.org/wiki/Memory_ordering. - __asm__ __volatile__("" : : : "memory"); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - -// Sun Studio -#elif defined(ARCH_CPU_X86_FAMILY) && defined(__SUNPRO_CC) -inline void MemoryBarrier() { - // See http://gcc.gnu.org/ml/gcc/2003-04/msg01180.html for a discussion on - // this idiom. Also see http://en.wikipedia.org/wiki/Memory_ordering. - asm volatile("" : : : "memory"); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - -// ARM Linux -#elif defined(ARCH_CPU_ARM_FAMILY) && defined(__linux__) -typedef void (*LinuxKernelMemoryBarrierFunc)(void); -// The Linux ARM kernel provides a highly optimized device-specific memory -// barrier function at a fixed memory address that is mapped in every -// user-level process. -// -// This beats using CPU-specific instructions which are, on single-core -// devices, un-necessary and very costly (e.g. ARMv7-A "dmb" takes more -// than 180ns on a Cortex-A8 like the one on a Nexus One). Benchmarking -// shows that the extra function call cost is completely negligible on -// multi-core devices. -// -inline void MemoryBarrier() { - (*(LinuxKernelMemoryBarrierFunc)0xffff0fa0)(); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - -// PPC -#elif defined(ARCH_CPU_PPC_FAMILY) && defined(__GNUC__) -inline void MemoryBarrier() { - // TODO for some powerpc expert: is there a cheaper suitable variant? - // Perhaps by having separate barriers for acquire and release ops. - asm volatile("sync" : : : "memory"); -} -#define LEVELDB_HAVE_MEMORY_BARRIER - -#endif - -// AtomicPointer built using platform-specific MemoryBarrier() -#if defined(LEVELDB_HAVE_MEMORY_BARRIER) -class AtomicPointer { - private: - void* rep_; - public: - AtomicPointer() { } - explicit AtomicPointer(void* p) : rep_(p) {} - inline void* NoBarrier_Load() const { return rep_; } - inline void NoBarrier_Store(void* v) { rep_ = v; } - inline void* Acquire_Load() const { - void* result = rep_; - MemoryBarrier(); - return result; - } - inline void Release_Store(void* v) { - MemoryBarrier(); - rep_ = v; - } -}; - -// AtomicPointer based on -#elif defined(LEVELDB_CSTDATOMIC_PRESENT) -class AtomicPointer { - private: - std::atomic rep_; - public: - AtomicPointer() { } - explicit AtomicPointer(void* v) : rep_(v) { } - inline void* Acquire_Load() const { - return rep_.load(std::memory_order_acquire); - } - inline void Release_Store(void* v) { - rep_.store(v, std::memory_order_release); - } - inline void* NoBarrier_Load() const { - return rep_.load(std::memory_order_relaxed); - } - inline void NoBarrier_Store(void* v) { - rep_.store(v, std::memory_order_relaxed); - } -}; - -// Atomic pointer based on sparc memory barriers -#elif defined(__sparcv9) && defined(__GNUC__) -class AtomicPointer { - private: - void* rep_; - public: - AtomicPointer() { } - explicit AtomicPointer(void* v) : rep_(v) { } - inline void* Acquire_Load() const { - void* val; - __asm__ __volatile__ ( - "ldx [%[rep_]], %[val] \n\t" - "membar #LoadLoad|#LoadStore \n\t" - : [val] "=r" (val) - : [rep_] "r" (&rep_) - : "memory"); - return val; - } - inline void Release_Store(void* v) { - __asm__ __volatile__ ( - "membar #LoadStore|#StoreStore \n\t" - "stx %[v], [%[rep_]] \n\t" - : - : [rep_] "r" (&rep_), [v] "r" (v) - : "memory"); - } - inline void* NoBarrier_Load() const { return rep_; } - inline void NoBarrier_Store(void* v) { rep_ = v; } -}; - -// Atomic pointer based on ia64 acq/rel -#elif defined(__ia64) && defined(__GNUC__) -class AtomicPointer { - private: - void* rep_; - public: - AtomicPointer() { } - explicit AtomicPointer(void* v) : rep_(v) { } - inline void* Acquire_Load() const { - void* val ; - __asm__ __volatile__ ( - "ld8.acq %[val] = [%[rep_]] \n\t" - : [val] "=r" (val) - : [rep_] "r" (&rep_) - : "memory" - ); - return val; - } - inline void Release_Store(void* v) { - __asm__ __volatile__ ( - "st8.rel [%[rep_]] = %[v] \n\t" - : - : [rep_] "r" (&rep_), [v] "r" (v) - : "memory" - ); - } - inline void* NoBarrier_Load() const { return rep_; } - inline void NoBarrier_Store(void* v) { rep_ = v; } -}; - -// We have neither MemoryBarrier(), nor -#else -#error Please implement AtomicPointer for this platform. - -#endif - -#undef LEVELDB_HAVE_MEMORY_BARRIER -#undef ARCH_CPU_X86_FAMILY -#undef ARCH_CPU_ARM_FAMILY -#undef ARCH_CPU_PPC_FAMILY - -} // namespace port -} // namespace leveldb - -#endif // PORT_ATOMIC_POINTER_H_ diff --git a/clipper/HyperLevelDB/port/port.h b/clipper/HyperLevelDB/port/port.h deleted file mode 100644 index e667db4..0000000 --- a/clipper/HyperLevelDB/port/port.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_PORT_PORT_H_ -#define STORAGE_LEVELDB_PORT_PORT_H_ - -#include - -// Include the appropriate platform specific file below. If you are -// porting to a new platform, see "port_example.h" for documentation -// of what the new port_.h file must provide. -#if defined(LEVELDB_PLATFORM_POSIX) -# include "port/port_posix.h" -#elif defined(LEVELDB_PLATFORM_CHROMIUM) -# include "port/port_chromium.h" -#endif - -#endif // STORAGE_LEVELDB_PORT_PORT_H_ diff --git a/clipper/HyperLevelDB/port/port_example.h b/clipper/HyperLevelDB/port/port_example.h deleted file mode 100644 index ab9e489..0000000 --- a/clipper/HyperLevelDB/port/port_example.h +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// This file contains the specification, but not the implementations, -// of the types/operations/etc. that should be defined by a platform -// specific port_.h file. Use this file as a reference for -// how to port this package to a new platform. - -#ifndef STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_ -#define STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_ - -namespace leveldb { -namespace port { - -// TODO(jorlow): Many of these belong more in the environment class rather than -// here. We should try moving them and see if it affects perf. - -// The following boolean constant must be true on a little-endian machine -// and false otherwise. -static const bool kLittleEndian = true /* or some other expression */; - -// ------------------ Threading ------------------- - -// A Mutex represents an exclusive lock. -class Mutex { - public: - Mutex(); - ~Mutex(); - - // Lock the mutex. Waits until other lockers have exited. - // Will deadlock if the mutex is already locked by this thread. - void Lock(); - - // Unlock the mutex. - // REQUIRES: This mutex was locked by this thread. - void Unlock(); - - // Optionally crash if this thread does not hold this mutex. - // The implementation must be fast, especially if NDEBUG is - // defined. The implementation is allowed to skip all checks. - void AssertHeld(); -}; - -class CondVar { - public: - explicit CondVar(Mutex* mu); - ~CondVar(); - - // Atomically release *mu and block on this condition variable until - // either a call to SignalAll(), or a call to Signal() that picks - // this thread to wakeup. - // REQUIRES: this thread holds *mu - void Wait(); - - // If there are some threads waiting, wake up at least one of them. - void Signal(); - - // Wake up all waiting threads. - void SignallAll(); -}; - -// Thread-safe initialization. -// Used as follows: -// static port::OnceType init_control = LEVELDB_ONCE_INIT; -// static void Initializer() { ... do something ...; } -// ... -// port::InitOnce(&init_control, &Initializer); -typedef intptr_t OnceType; -#define LEVELDB_ONCE_INIT 0 -extern void InitOnce(port::OnceType*, void (*initializer)()); - -// A type that holds a pointer that can be read or written atomically -// (i.e., without word-tearing.) -class AtomicPointer { - private: - intptr_t rep_; - public: - // Initialize to arbitrary value - AtomicPointer(); - - // Initialize to hold v - explicit AtomicPointer(void* v) : rep_(v) { } - - // Read and return the stored pointer with the guarantee that no - // later memory access (read or write) by this thread can be - // reordered ahead of this read. - void* Acquire_Load() const; - - // Set v as the stored pointer with the guarantee that no earlier - // memory access (read or write) by this thread can be reordered - // after this store. - void Release_Store(void* v); - - // Read the stored pointer with no ordering guarantees. - void* NoBarrier_Load() const; - - // Set va as the stored pointer with no ordering guarantees. - void NoBarrier_Store(void* v); -}; - -// ------------------ Compression ------------------- - -// Store the snappy compression of "input[0,input_length-1]" in *output. -// Returns false if snappy is not supported by this port. -extern bool Snappy_Compress(const char* input, size_t input_length, - std::string* output); - -// If input[0,input_length-1] looks like a valid snappy compressed -// buffer, store the size of the uncompressed data in *result and -// return true. Else return false. -extern bool Snappy_GetUncompressedLength(const char* input, size_t length, - size_t* result); - -// Attempt to snappy uncompress input[0,input_length-1] into *output. -// Returns true if successful, false if the input is invalid lightweight -// compressed data. -// -// REQUIRES: at least the first "n" bytes of output[] must be writable -// where "n" is the result of a successful call to -// Snappy_GetUncompressedLength. -extern bool Snappy_Uncompress(const char* input_data, size_t input_length, - char* output); - -// ------------------ Miscellaneous ------------------- - -// If heap profiling is not supported, returns false. -// Else repeatedly calls (*func)(arg, data, n) and then returns true. -// The concatenation of all "data[0,n-1]" fragments is the heap profile. -extern bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg); - -} // namespace port -} // namespace leveldb - -#endif // STORAGE_LEVELDB_PORT_PORT_EXAMPLE_H_ diff --git a/clipper/HyperLevelDB/port/port_posix.cc b/clipper/HyperLevelDB/port/port_posix.cc deleted file mode 100644 index 5ba127a..0000000 --- a/clipper/HyperLevelDB/port/port_posix.cc +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "port/port_posix.h" - -#include -#include -#include -#include "util/logging.h" - -namespace leveldb { -namespace port { - -static void PthreadCall(const char* label, int result) { - if (result != 0) { - fprintf(stderr, "pthread %s: %s\n", label, strerror(result)); - abort(); - } -} - -Mutex::Mutex() { PthreadCall("init mutex", pthread_mutex_init(&mu_, NULL)); } - -Mutex::~Mutex() { PthreadCall("destroy mutex", pthread_mutex_destroy(&mu_)); } - -void Mutex::Lock() { PthreadCall("lock", pthread_mutex_lock(&mu_)); } - -void Mutex::Unlock() { PthreadCall("unlock", pthread_mutex_unlock(&mu_)); } - -CondVar::CondVar(Mutex* mu) - : mu_(mu) { - PthreadCall("init cv", pthread_cond_init(&cv_, NULL)); -} - -CondVar::~CondVar() { PthreadCall("destroy cv", pthread_cond_destroy(&cv_)); } - -void CondVar::Wait() { - PthreadCall("wait", pthread_cond_wait(&cv_, &mu_->mu_)); -} - -void CondVar::Signal() { - PthreadCall("signal", pthread_cond_signal(&cv_)); -} - -void CondVar::SignalAll() { - PthreadCall("broadcast", pthread_cond_broadcast(&cv_)); -} - -void InitOnce(OnceType* once, void (*initializer)()) { - PthreadCall("once", pthread_once(once, initializer)); -} - -} // namespace port -} // namespace leveldb diff --git a/clipper/HyperLevelDB/port/port_posix.h b/clipper/HyperLevelDB/port/port_posix.h deleted file mode 100644 index 5a00eaf..0000000 --- a/clipper/HyperLevelDB/port/port_posix.h +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// See port_example.h for documentation for the following types/functions. - -#ifndef STORAGE_LEVELDB_PORT_PORT_POSIX_H_ -#define STORAGE_LEVELDB_PORT_PORT_POSIX_H_ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#if HAVE_ENDIAN_H -#include -#endif - -#if HAVE_MACHINE_ENDIAN_H -#include -#endif - -#if HAVE_SYS_ENDIAN_H -#include -#endif - -#if HAVE_SYS_ISA_DEFS_H -#include -#endif - -#if HAVE_SYS_ENDIAN_H -#include -#endif - -#undef PLATFORM_IS_LITTLE_ENDIAN - -#if defined(__DARWIN_LITTLE_ENDIAN) && defined(__DARWIN_BYTE_ORDER) -# define PLATFORM_IS_LITTLE_ENDIAN (__DARWIN_BYTE_ORDER == __DARWIN_LITTLE_ENDIAN) -#elif defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) - // Due to a bug in the NDK x86 definition, - // _BYTE_ORDER must be used instead of __BYTE_ORDER on Android. - // See http://code.google.com/p/android/issues/detail?id=39824 -# define PLATFORM_IS_LITTLE_ENDIAN (_BYTE_ORDER == _LITTLE_ENDIAN) -#elif defined(_LITTLE_ENDIAN) -# define PLATFORM_IS_LITTLE_ENDIAN true -#endif - -#include -#ifdef SNAPPY -#include -#endif -#include -#include -#include "port/atomic_pointer.h" - -#ifndef PLATFORM_IS_LITTLE_ENDIAN -#define PLATFORM_IS_LITTLE_ENDIAN (__BYTE_ORDER == __LITTLE_ENDIAN) -#endif - -#if HAVE_FFLUSH_UNLOCKED -// do nothing -#elif HAVE_FFLUSH -#define fflush_unlocked fflush -#else -#error "no fflush found" -#endif - -#if HAVE_FREAD_UNLOCKED -// do nothing -#elif HAVE_FREAD -#define fread_unlocked fread -#else -#error "no fread found" -#endif - -#if HAVE_FWRITE_UNLOCKED -// do nothing -#elif HAVE_FWRITE -#define fwrite_unlocked fwrite -#else -#error "no fwrite found" -#endif - -#if HAVE_DECL_FDATASYNC -// do nothing -#elif HAVE_FSYNC -#define fdatasync fsync -#else -#error "no fdatasync/fsync found" -#endif - -namespace leveldb { -namespace port { - -static const bool kLittleEndian = PLATFORM_IS_LITTLE_ENDIAN; -#undef PLATFORM_IS_LITTLE_ENDIAN - -class CondVar; - -class Mutex { - public: - Mutex(); - ~Mutex(); - - void Lock(); - void Unlock(); - void AssertHeld() { } - - private: - friend class CondVar; - pthread_mutex_t mu_; - - // No copying - Mutex(const Mutex&); - void operator=(const Mutex&); -}; - -class CondVar { - public: - explicit CondVar(Mutex* mu); - ~CondVar(); - void Wait(); - void Signal(); - void SignalAll(); - private: - pthread_cond_t cv_; - Mutex* mu_; -}; - -typedef pthread_once_t OnceType; -#define LEVELDB_ONCE_INIT PTHREAD_ONCE_INIT -extern void InitOnce(OnceType* once, void (*initializer)()); - -inline bool Snappy_Compress(const char* input, size_t length, - ::std::string* output) { -#ifdef SNAPPY - output->resize(snappy::MaxCompressedLength(length)); - size_t outlen; - snappy::RawCompress(input, length, &(*output)[0], &outlen); - output->resize(outlen); - return true; -#endif - - return false; -} - -inline bool Snappy_GetUncompressedLength(const char* input, size_t length, - size_t* result) { -#ifdef SNAPPY - return snappy::GetUncompressedLength(input, length, result); -#else - return false; -#endif -} - -inline bool Snappy_Uncompress(const char* input, size_t length, - char* output) { -#ifdef SNAPPY - return snappy::RawUncompress(input, length, output); -#else - return false; -#endif -} - -inline bool GetHeapProfile(void (*func)(void*, const char*, int), void* arg) { - return false; -} - -} // namespace port -} // namespace leveldb - -#endif // STORAGE_LEVELDB_PORT_PORT_POSIX_H_ diff --git a/clipper/HyperLevelDB/port/thread_annotations.h b/clipper/HyperLevelDB/port/thread_annotations.h deleted file mode 100644 index 6f9b6a7..0000000 --- a/clipper/HyperLevelDB/port/thread_annotations.h +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H - -// Some environments provide custom macros to aid in static thread-safety -// analysis. Provide empty definitions of such macros unless they are already -// defined. - -#ifndef EXCLUSIVE_LOCKS_REQUIRED -#define EXCLUSIVE_LOCKS_REQUIRED(...) -#endif - -#ifndef SHARED_LOCKS_REQUIRED -#define SHARED_LOCKS_REQUIRED(...) -#endif - -#ifndef LOCKS_EXCLUDED -#define LOCKS_EXCLUDED(...) -#endif - -#ifndef LOCK_RETURNED -#define LOCK_RETURNED(x) -#endif - -#ifndef LOCKABLE -#define LOCKABLE -#endif - -#ifndef SCOPED_LOCKABLE -#define SCOPED_LOCKABLE -#endif - -#ifndef EXCLUSIVE_LOCK_FUNCTION -#define EXCLUSIVE_LOCK_FUNCTION(...) -#endif - -#ifndef SHARED_LOCK_FUNCTION -#define SHARED_LOCK_FUNCTION(...) -#endif - -#ifndef EXCLUSIVE_TRYLOCK_FUNCTION -#define EXCLUSIVE_TRYLOCK_FUNCTION(...) -#endif - -#ifndef SHARED_TRYLOCK_FUNCTION -#define SHARED_TRYLOCK_FUNCTION(...) -#endif - -#ifndef UNLOCK_FUNCTION -#define UNLOCK_FUNCTION(...) -#endif - -#ifndef NO_THREAD_SAFETY_ANALYSIS -#define NO_THREAD_SAFETY_ANALYSIS -#endif - -#endif // STORAGE_LEVELDB_PORT_THREAD_ANNOTATIONS_H diff --git a/clipper/HyperLevelDB/port/win/stdint.h b/clipper/HyperLevelDB/port/win/stdint.h deleted file mode 100644 index 39edd0d..0000000 --- a/clipper/HyperLevelDB/port/win/stdint.h +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -// MSVC didn't ship with this file until the 2010 version. - -#ifndef STORAGE_LEVELDB_PORT_WIN_STDINT_H_ -#define STORAGE_LEVELDB_PORT_WIN_STDINT_H_ - -#if !defined(_MSC_VER) -#error This file should only be included when compiling with MSVC. -#endif - -// Define C99 equivalent types. -typedef signed char int8_t; -typedef signed short int16_t; -typedef signed int int32_t; -typedef signed long long int64_t; -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -typedef unsigned long long uint64_t; - -#endif // STORAGE_LEVELDB_PORT_WIN_STDINT_H_ diff --git a/clipper/HyperLevelDB/table/block.cc b/clipper/HyperLevelDB/table/block.cc deleted file mode 100644 index 285a8b9..0000000 --- a/clipper/HyperLevelDB/table/block.cc +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Decodes the blocks generated by block_builder.cc. - -#include "table/block.h" - -#include -#include -#include "hyperleveldb/comparator.h" -#include "table/format.h" -#include "util/coding.h" -#include "util/logging.h" - -namespace leveldb { - -inline uint32_t Block::NumRestarts() const { - assert(size_ >= sizeof(uint32_t)); - return DecodeFixed32(data_ + size_ - sizeof(uint32_t)); -} - -Block::Block(const BlockContents& contents) - : data_(contents.data.data()), - size_(contents.data.size()), - owned_(contents.heap_allocated) { - if (size_ < sizeof(uint32_t)) { - size_ = 0; // Error marker - } else { - size_t max_restarts_allowed = (size_-sizeof(uint32_t)) / sizeof(uint32_t); - if (NumRestarts() > max_restarts_allowed) { - // The size is too small for NumRestarts() - size_ = 0; - } else { - restart_offset_ = size_ - (1 + NumRestarts()) * sizeof(uint32_t); - } - } -} - -Block::~Block() { - if (owned_) { - delete[] data_; - } -} - -// Helper routine: decode the next block entry starting at "p", -// storing the number of shared key bytes, non_shared key bytes, -// and the length of the value in "*shared", "*non_shared", and -// "*value_length", respectively. Will not derefence past "limit". -// -// If any errors are detected, returns NULL. Otherwise, returns a -// pointer to the key delta (just past the three decoded values). -static inline const char* DecodeEntry(const char* p, const char* limit, - uint32_t* shared, - uint32_t* non_shared, - uint32_t* value_length) { - if (limit - p < 3) return NULL; - *shared = reinterpret_cast(p)[0]; - *non_shared = reinterpret_cast(p)[1]; - *value_length = reinterpret_cast(p)[2]; - if ((*shared | *non_shared | *value_length) < 128) { - // Fast path: all three values are encoded in one byte each - p += 3; - } else { - if ((p = GetVarint32Ptr(p, limit, shared)) == NULL) return NULL; - if ((p = GetVarint32Ptr(p, limit, non_shared)) == NULL) return NULL; - if ((p = GetVarint32Ptr(p, limit, value_length)) == NULL) return NULL; - } - - if (static_cast(limit - p) < (*non_shared + *value_length)) { - return NULL; - } - return p; -} - -class Block::Iter : public Iterator { - private: - const Comparator* const comparator_; - const char* const data_; // underlying block contents - uint32_t const restarts_; // Offset of restart array (list of fixed32) - uint32_t const num_restarts_; // Number of uint32_t entries in restart array - - // current_ is offset in data_ of current entry. >= restarts_ if !Valid - uint32_t current_; - uint32_t restart_index_; // Index of restart block in which current_ falls - std::string key_; - Slice value_; - Status status_; - - inline int Compare(const Slice& a, const Slice& b) const { - return comparator_->Compare(a, b); - } - - // Return the offset in data_ just past the end of the current entry. - inline uint32_t NextEntryOffset() const { - return (value_.data() + value_.size()) - data_; - } - - uint32_t GetRestartPoint(uint32_t index) { - assert(index < num_restarts_); - return DecodeFixed32(data_ + restarts_ + index * sizeof(uint32_t)); - } - - void SeekToRestartPoint(uint32_t index) { - key_.clear(); - restart_index_ = index; - // current_ will be fixed by ParseNextKey(); - - // ParseNextKey() starts at the end of value_, so set value_ accordingly - uint32_t offset = GetRestartPoint(index); - value_ = Slice(data_ + offset, 0); - } - - public: - Iter(const Comparator* comparator, - const char* data, - uint32_t restarts, - uint32_t num_restarts) - : comparator_(comparator), - data_(data), - restarts_(restarts), - num_restarts_(num_restarts), - current_(restarts_), - restart_index_(num_restarts_) { - assert(num_restarts_ > 0); - } - - virtual bool Valid() const { return current_ < restarts_; } - virtual Status status() const { return status_; } - virtual Slice key() const { - assert(Valid()); - return key_; - } - virtual Slice value() const { - assert(Valid()); - return value_; - } - - virtual void Next() { - assert(Valid()); - ParseNextKey(); - } - - virtual void Prev() { - assert(Valid()); - - // Scan backwards to a restart point before current_ - const uint32_t original = current_; - while (GetRestartPoint(restart_index_) >= original) { - if (restart_index_ == 0) { - // No more entries - current_ = restarts_; - restart_index_ = num_restarts_; - return; - } - restart_index_--; - } - - SeekToRestartPoint(restart_index_); - do { - // Loop until end of current entry hits the start of original entry - } while (ParseNextKey() && NextEntryOffset() < original); - } - - virtual void Seek(const Slice& target) { - // Binary search in restart array to find the last restart point - // with a key < target - uint32_t left = 0; - uint32_t right = num_restarts_ - 1; - while (left < right) { - uint32_t mid = (left + right + 1) / 2; - uint32_t region_offset = GetRestartPoint(mid); - uint32_t shared, non_shared, value_length; - const char* key_ptr = DecodeEntry(data_ + region_offset, - data_ + restarts_, - &shared, &non_shared, &value_length); - if (key_ptr == NULL || (shared != 0)) { - CorruptionError(); - return; - } - Slice mid_key(key_ptr, non_shared); - if (Compare(mid_key, target) < 0) { - // Key at "mid" is smaller than "target". Therefore all - // blocks before "mid" are uninteresting. - left = mid; - } else { - // Key at "mid" is >= "target". Therefore all blocks at or - // after "mid" are uninteresting. - right = mid - 1; - } - } - - // Linear search (within restart block) for first key >= target - SeekToRestartPoint(left); - while (true) { - if (!ParseNextKey()) { - return; - } - if (Compare(key_, target) >= 0) { - return; - } - } - } - - virtual void SeekToFirst() { - SeekToRestartPoint(0); - ParseNextKey(); - } - - virtual void SeekToLast() { - SeekToRestartPoint(num_restarts_ - 1); - while (ParseNextKey() && NextEntryOffset() < restarts_) { - // Keep skipping - } - } - - private: - void CorruptionError() { - current_ = restarts_; - restart_index_ = num_restarts_; - status_ = Status::Corruption("bad entry in block"); - key_.clear(); - value_.clear(); - } - - bool ParseNextKey() { - current_ = NextEntryOffset(); - const char* p = data_ + current_; - const char* limit = data_ + restarts_; // Restarts come right after data - if (p >= limit) { - // No more entries to return. Mark as invalid. - current_ = restarts_; - restart_index_ = num_restarts_; - return false; - } - - // Decode next entry - uint32_t shared, non_shared, value_length; - p = DecodeEntry(p, limit, &shared, &non_shared, &value_length); - if (p == NULL || key_.size() < shared) { - CorruptionError(); - return false; - } else { - key_.resize(shared); - key_.append(p, non_shared); - value_ = Slice(p + non_shared, value_length); - while (restart_index_ + 1 < num_restarts_ && - GetRestartPoint(restart_index_ + 1) < current_) { - ++restart_index_; - } - return true; - } - } -}; - -Iterator* Block::NewIterator(const Comparator* cmp) { - if (size_ < sizeof(uint32_t)) { - return NewErrorIterator(Status::Corruption("bad block contents")); - } - const uint32_t num_restarts = NumRestarts(); - if (num_restarts == 0) { - return NewEmptyIterator(); - } else { - return new Iter(cmp, data_, restart_offset_, num_restarts); - } -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/table/block.h b/clipper/HyperLevelDB/table/block.h deleted file mode 100644 index 60a7989..0000000 --- a/clipper/HyperLevelDB/table/block.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_BLOCK_H_ -#define STORAGE_LEVELDB_TABLE_BLOCK_H_ - -#include -#include -#include "hyperleveldb/iterator.h" - -namespace leveldb { - -struct BlockContents; -class Comparator; - -class Block { - public: - // Initialize the block with the specified contents. - explicit Block(const BlockContents& contents); - - ~Block(); - - size_t size() const { return size_; } - Iterator* NewIterator(const Comparator* comparator); - - private: - uint32_t NumRestarts() const; - - const char* data_; - size_t size_; - uint32_t restart_offset_; // Offset in data_ of restart array - bool owned_; // Block owns data_[] - - // No copying allowed - Block(const Block&); - void operator=(const Block&); - - class Iter; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_BLOCK_H_ diff --git a/clipper/HyperLevelDB/table/block_builder.cc b/clipper/HyperLevelDB/table/block_builder.cc deleted file mode 100644 index 4076290..0000000 --- a/clipper/HyperLevelDB/table/block_builder.cc +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// BlockBuilder generates blocks where keys are prefix-compressed: -// -// When we store a key, we drop the prefix shared with the previous -// string. This helps reduce the space requirement significantly. -// Furthermore, once every K keys, we do not apply the prefix -// compression and store the entire key. We call this a "restart -// point". The tail end of the block stores the offsets of all of the -// restart points, and can be used to do a binary search when looking -// for a particular key. Values are stored as-is (without compression) -// immediately following the corresponding key. -// -// An entry for a particular key-value pair has the form: -// shared_bytes: varint32 -// unshared_bytes: varint32 -// value_length: varint32 -// key_delta: char[unshared_bytes] -// value: char[value_length] -// shared_bytes == 0 for restart points. -// -// The trailer of the block has the form: -// restarts: uint32[num_restarts] -// num_restarts: uint32 -// restarts[i] contains the offset within the block of the ith restart point. - -#include "table/block_builder.h" - -#include -#include -#include "hyperleveldb/comparator.h" -#include "hyperleveldb/table_builder.h" -#include "util/coding.h" - -namespace leveldb { - -BlockBuilder::BlockBuilder(const Options* options) - : options_(options), - restarts_(), - counter_(0), - finished_(false) { - assert(options->block_restart_interval >= 1); - restarts_.push_back(0); // First restart point is at offset 0 -} - -void BlockBuilder::Reset() { - buffer_.clear(); - restarts_.clear(); - restarts_.push_back(0); // First restart point is at offset 0 - counter_ = 0; - finished_ = false; - last_key_.clear(); -} - -size_t BlockBuilder::CurrentSizeEstimate() const { - return (buffer_.size() + // Raw data buffer - restarts_.size() * sizeof(uint32_t) + // Restart array - sizeof(uint32_t)); // Restart array length -} - -Slice BlockBuilder::Finish() { - // Append restart array - for (size_t i = 0; i < restarts_.size(); i++) { - PutFixed32(&buffer_, restarts_[i]); - } - PutFixed32(&buffer_, restarts_.size()); - finished_ = true; - return Slice(buffer_); -} - -void BlockBuilder::Add(const Slice& key, const Slice& value) { - Slice last_key_piece(last_key_); - assert(!finished_); - assert(counter_ <= options_->block_restart_interval); - assert(buffer_.empty() // No values yet? - || options_->comparator->Compare(key, last_key_piece) > 0); - size_t shared = 0; - if (counter_ < options_->block_restart_interval) { - // See how much sharing to do with previous string - const size_t min_length = std::min(last_key_piece.size(), key.size()); - while ((shared < min_length) && (last_key_piece[shared] == key[shared])) { - shared++; - } - } else { - // Restart compression - restarts_.push_back(buffer_.size()); - counter_ = 0; - } - const size_t non_shared = key.size() - shared; - - // Add "" to buffer_ - PutVarint32(&buffer_, shared); - PutVarint32(&buffer_, non_shared); - PutVarint32(&buffer_, value.size()); - - // Add string delta to buffer_ followed by value - buffer_.append(key.data() + shared, non_shared); - buffer_.append(value.data(), value.size()); - - // Update state - last_key_.resize(shared); - last_key_.append(key.data() + shared, non_shared); - assert(Slice(last_key_) == key); - counter_++; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/table/block_builder.h b/clipper/HyperLevelDB/table/block_builder.h deleted file mode 100644 index 41a9f72..0000000 --- a/clipper/HyperLevelDB/table/block_builder.h +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ -#define STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ - -#include - -#include -#include "hyperleveldb/slice.h" - -namespace leveldb { - -struct Options; - -class BlockBuilder { - public: - explicit BlockBuilder(const Options* options); - - // Reset the contents as if the BlockBuilder was just constructed. - void Reset(); - - // REQUIRES: Finish() has not been callled since the last call to Reset(). - // REQUIRES: key is larger than any previously added key - void Add(const Slice& key, const Slice& value); - - // Finish building the block and return a slice that refers to the - // block contents. The returned slice will remain valid for the - // lifetime of this builder or until Reset() is called. - Slice Finish(); - - // Returns an estimate of the current (uncompressed) size of the block - // we are building. - size_t CurrentSizeEstimate() const; - - // Return true iff no entries have been added since the last Reset() - bool empty() const { - return buffer_.empty(); - } - - private: - const Options* options_; - std::string buffer_; // Destination buffer - std::vector restarts_; // Restart points - int counter_; // Number of entries emitted since restart - bool finished_; // Has Finish() been called? - std::string last_key_; - - // No copying allowed - BlockBuilder(const BlockBuilder&); - void operator=(const BlockBuilder&); -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_BLOCK_BUILDER_H_ diff --git a/clipper/HyperLevelDB/table/filter_block.cc b/clipper/HyperLevelDB/table/filter_block.cc deleted file mode 100644 index 3f7cfc6..0000000 --- a/clipper/HyperLevelDB/table/filter_block.cc +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/filter_block.h" - -#include "hyperleveldb/filter_policy.h" -#include "util/coding.h" - -namespace leveldb { - -// See doc/table_format.txt for an explanation of the filter block format. - -// Generate new filter every 2KB of data -static const size_t kFilterBaseLg = 11; -static const size_t kFilterBase = 1 << kFilterBaseLg; - -FilterBlockBuilder::FilterBlockBuilder(const FilterPolicy* policy) - : policy_(policy) { -} - -void FilterBlockBuilder::StartBlock(uint64_t block_offset) { - uint64_t filter_index = (block_offset / kFilterBase); - assert(filter_index >= filter_offsets_.size()); - while (filter_index > filter_offsets_.size()) { - GenerateFilter(); - } -} - -void FilterBlockBuilder::AddKey(const Slice& key) { - Slice k = key; - start_.push_back(keys_.size()); - keys_.append(k.data(), k.size()); -} - -Slice FilterBlockBuilder::Finish() { - if (!start_.empty()) { - GenerateFilter(); - } - - // Append array of per-filter offsets - const uint32_t array_offset = result_.size(); - for (size_t i = 0; i < filter_offsets_.size(); i++) { - PutFixed32(&result_, filter_offsets_[i]); - } - - PutFixed32(&result_, array_offset); - result_.push_back(kFilterBaseLg); // Save encoding parameter in result - return Slice(result_); -} - -void FilterBlockBuilder::GenerateFilter() { - const size_t num_keys = start_.size(); - if (num_keys == 0) { - // Fast path if there are no keys for this filter - filter_offsets_.push_back(result_.size()); - return; - } - - // Make list of keys from flattened key structure - start_.push_back(keys_.size()); // Simplify length computation - tmp_keys_.resize(num_keys); - for (size_t i = 0; i < num_keys; i++) { - const char* base = keys_.data() + start_[i]; - size_t length = start_[i+1] - start_[i]; - tmp_keys_[i] = Slice(base, length); - } - - // Generate filter for current set of keys and append to result_. - filter_offsets_.push_back(result_.size()); - policy_->CreateFilter(&tmp_keys_[0], num_keys, &result_); - - tmp_keys_.clear(); - keys_.clear(); - start_.clear(); -} - -FilterBlockReader::FilterBlockReader(const FilterPolicy* policy, - const Slice& contents) - : policy_(policy), - data_(NULL), - offset_(NULL), - num_(0), - base_lg_(0) { - size_t n = contents.size(); - if (n < 5) return; // 1 byte for base_lg_ and 4 for start of offset array - base_lg_ = contents[n-1]; - uint32_t last_word = DecodeFixed32(contents.data() + n - 5); - if (last_word > n - 5) return; - data_ = contents.data(); - offset_ = data_ + last_word; - num_ = (n - 5 - last_word) / 4; -} - -bool FilterBlockReader::KeyMayMatch(uint64_t block_offset, const Slice& key) { - uint64_t index = block_offset >> base_lg_; - if (index < num_) { - uint32_t start = DecodeFixed32(offset_ + index*4); - uint32_t limit = DecodeFixed32(offset_ + index*4 + 4); - if (start <= limit && limit <= (offset_ - data_)) { - Slice filter = Slice(data_ + start, limit - start); - return policy_->KeyMayMatch(key, filter); - } else if (start == limit) { - // Empty filters do not match any keys - return false; - } - } - return true; // Errors are treated as potential matches -} - -} diff --git a/clipper/HyperLevelDB/table/filter_block.h b/clipper/HyperLevelDB/table/filter_block.h deleted file mode 100644 index f308954..0000000 --- a/clipper/HyperLevelDB/table/filter_block.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A filter block is stored near the end of a Table file. It contains -// filters (e.g., bloom filters) for all data blocks in the table combined -// into a single filter block. - -#ifndef STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_ -#define STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_ - -#include -#include -#include -#include -#include "hyperleveldb/slice.h" -#include "util/hash.h" - -namespace leveldb { - -class FilterPolicy; - -// A FilterBlockBuilder is used to construct all of the filters for a -// particular Table. It generates a single string which is stored as -// a special block in the Table. -// -// The sequence of calls to FilterBlockBuilder must match the regexp: -// (StartBlock AddKey*)* Finish -class FilterBlockBuilder { - public: - explicit FilterBlockBuilder(const FilterPolicy*); - - void StartBlock(uint64_t block_offset); - void AddKey(const Slice& key); - Slice Finish(); - - private: - void GenerateFilter(); - - const FilterPolicy* policy_; - std::string keys_; // Flattened key contents - std::vector start_; // Starting index in keys_ of each key - std::string result_; // Filter data computed so far - std::vector tmp_keys_; // policy_->CreateFilter() argument - std::vector filter_offsets_; - - // No copying allowed - FilterBlockBuilder(const FilterBlockBuilder&); - void operator=(const FilterBlockBuilder&); -}; - -class FilterBlockReader { - public: - // REQUIRES: "contents" and *policy must stay live while *this is live. - FilterBlockReader(const FilterPolicy* policy, const Slice& contents); - bool KeyMayMatch(uint64_t block_offset, const Slice& key); - - private: - const FilterPolicy* policy_; - const char* data_; // Pointer to filter data (at block-start) - const char* offset_; // Pointer to beginning of offset array (at block-end) - size_t num_; // Number of entries in offset array - size_t base_lg_; // Encoding parameter (see kFilterBaseLg in .cc file) -}; - -} - -#endif // STORAGE_LEVELDB_TABLE_FILTER_BLOCK_H_ diff --git a/clipper/HyperLevelDB/table/filter_block_test.cc b/clipper/HyperLevelDB/table/filter_block_test.cc deleted file mode 100644 index 0b84289..0000000 --- a/clipper/HyperLevelDB/table/filter_block_test.cc +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/filter_block.h" - -#include "hyperleveldb/filter_policy.h" -#include "util/coding.h" -#include "util/hash.h" -#include "util/logging.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -// For testing: emit an array with one hash value per key -class TestHashFilter : public FilterPolicy { - public: - virtual const char* Name() const { - return "TestHashFilter"; - } - - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const { - for (int i = 0; i < n; i++) { - uint32_t h = Hash(keys[i].data(), keys[i].size(), 1); - PutFixed32(dst, h); - } - } - - virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const { - uint32_t h = Hash(key.data(), key.size(), 1); - for (size_t i = 0; i + 4 <= filter.size(); i += 4) { - if (h == DecodeFixed32(filter.data() + i)) { - return true; - } - } - return false; - } -}; - -class FilterBlockTest { - public: - TestHashFilter policy_; -}; - -TEST(FilterBlockTest, EmptyBuilder) { - FilterBlockBuilder builder(&policy_); - Slice block = builder.Finish(); - ASSERT_EQ("\\x00\\x00\\x00\\x00\\x0b", EscapeString(block)); - FilterBlockReader reader(&policy_, block); - ASSERT_TRUE(reader.KeyMayMatch(0, "foo")); - ASSERT_TRUE(reader.KeyMayMatch(100000, "foo")); -} - -TEST(FilterBlockTest, SingleChunk) { - FilterBlockBuilder builder(&policy_); - builder.StartBlock(100); - builder.AddKey("foo"); - builder.AddKey("bar"); - builder.AddKey("box"); - builder.StartBlock(200); - builder.AddKey("box"); - builder.StartBlock(300); - builder.AddKey("hello"); - Slice block = builder.Finish(); - FilterBlockReader reader(&policy_, block); - ASSERT_TRUE(reader.KeyMayMatch(100, "foo")); - ASSERT_TRUE(reader.KeyMayMatch(100, "bar")); - ASSERT_TRUE(reader.KeyMayMatch(100, "box")); - ASSERT_TRUE(reader.KeyMayMatch(100, "hello")); - ASSERT_TRUE(reader.KeyMayMatch(100, "foo")); - ASSERT_TRUE(! reader.KeyMayMatch(100, "missing")); - ASSERT_TRUE(! reader.KeyMayMatch(100, "other")); -} - -TEST(FilterBlockTest, MultiChunk) { - FilterBlockBuilder builder(&policy_); - - // First filter - builder.StartBlock(0); - builder.AddKey("foo"); - builder.StartBlock(2000); - builder.AddKey("bar"); - - // Second filter - builder.StartBlock(3100); - builder.AddKey("box"); - - // Third filter is empty - - // Last filter - builder.StartBlock(9000); - builder.AddKey("box"); - builder.AddKey("hello"); - - Slice block = builder.Finish(); - FilterBlockReader reader(&policy_, block); - - // Check first filter - ASSERT_TRUE(reader.KeyMayMatch(0, "foo")); - ASSERT_TRUE(reader.KeyMayMatch(2000, "bar")); - ASSERT_TRUE(! reader.KeyMayMatch(0, "box")); - ASSERT_TRUE(! reader.KeyMayMatch(0, "hello")); - - // Check second filter - ASSERT_TRUE(reader.KeyMayMatch(3100, "box")); - ASSERT_TRUE(! reader.KeyMayMatch(3100, "foo")); - ASSERT_TRUE(! reader.KeyMayMatch(3100, "bar")); - ASSERT_TRUE(! reader.KeyMayMatch(3100, "hello")); - - // Check third filter (empty) - ASSERT_TRUE(! reader.KeyMayMatch(4100, "foo")); - ASSERT_TRUE(! reader.KeyMayMatch(4100, "bar")); - ASSERT_TRUE(! reader.KeyMayMatch(4100, "box")); - ASSERT_TRUE(! reader.KeyMayMatch(4100, "hello")); - - // Check last filter - ASSERT_TRUE(reader.KeyMayMatch(9000, "box")); - ASSERT_TRUE(reader.KeyMayMatch(9000, "hello")); - ASSERT_TRUE(! reader.KeyMayMatch(9000, "foo")); - ASSERT_TRUE(! reader.KeyMayMatch(9000, "bar")); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/table/format.cc b/clipper/HyperLevelDB/table/format.cc deleted file mode 100644 index d6326e5..0000000 --- a/clipper/HyperLevelDB/table/format.cc +++ /dev/null @@ -1,145 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/format.h" - -#include "hyperleveldb/env.h" -#include "port/port.h" -#include "table/block.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { - -void BlockHandle::EncodeTo(std::string* dst) const { - // Sanity check that all fields have been set - assert(offset_ != ~static_cast(0)); - assert(size_ != ~static_cast(0)); - PutVarint64(dst, offset_); - PutVarint64(dst, size_); -} - -Status BlockHandle::DecodeFrom(Slice* input) { - if (GetVarint64(input, &offset_) && - GetVarint64(input, &size_)) { - return Status::OK(); - } else { - return Status::Corruption("bad block handle"); - } -} - -void Footer::EncodeTo(std::string* dst) const { -#ifndef NDEBUG - const size_t original_size = dst->size(); -#endif - metaindex_handle_.EncodeTo(dst); - index_handle_.EncodeTo(dst); - dst->resize(2 * BlockHandle::kMaxEncodedLength); // Padding - PutFixed32(dst, static_cast(kTableMagicNumber & 0xffffffffu)); - PutFixed32(dst, static_cast(kTableMagicNumber >> 32)); - assert(dst->size() == original_size + kEncodedLength); -} - -Status Footer::DecodeFrom(Slice* input) { - const char* magic_ptr = input->data() + kEncodedLength - 8; - const uint32_t magic_lo = DecodeFixed32(magic_ptr); - const uint32_t magic_hi = DecodeFixed32(magic_ptr + 4); - const uint64_t magic = ((static_cast(magic_hi) << 32) | - (static_cast(magic_lo))); - if (magic != kTableMagicNumber) { - return Status::InvalidArgument("not an sstable (bad magic number)"); - } - - Status result = metaindex_handle_.DecodeFrom(input); - if (result.ok()) { - result = index_handle_.DecodeFrom(input); - } - if (result.ok()) { - // We skip over any leftover data (just padding for now) in "input" - const char* end = magic_ptr + 8; - *input = Slice(end, input->data() + input->size() - end); - } - return result; -} - -Status ReadBlock(RandomAccessFile* file, - const ReadOptions& options, - const BlockHandle& handle, - BlockContents* result) { - result->data = Slice(); - result->cachable = false; - result->heap_allocated = false; - - // Read the block contents as well as the type/crc footer. - // See table_builder.cc for the code that built this structure. - size_t n = static_cast(handle.size()); - char* buf = new char[n + kBlockTrailerSize]; - Slice contents; - Status s = file->Read(handle.offset(), n + kBlockTrailerSize, &contents, buf); - if (!s.ok()) { - delete[] buf; - return s; - } - if (contents.size() != n + kBlockTrailerSize) { - delete[] buf; - return Status::Corruption("truncated block read"); - } - - // Check the crc of the type and the block contents - const char* data = contents.data(); // Pointer to where Read put the data - if (options.verify_checksums) { - const uint32_t crc = crc32c::Unmask(DecodeFixed32(data + n + 1)); - const uint32_t actual = crc32c::Value(data, n + 1); - if (actual != crc) { - delete[] buf; - s = Status::Corruption("block checksum mismatch"); - return s; - } - } - - switch (data[n]) { - case kNoCompression: - if (data != buf) { - // File implementation gave us pointer to some other data. - // Use it directly under the assumption that it will be live - // while the file is open. - delete[] buf; - result->data = Slice(data, n); - result->heap_allocated = false; - result->cachable = false; // Do not double-cache - } else { - result->data = Slice(buf, n); - result->heap_allocated = true; - result->cachable = true; - } - - // Ok - break; - case kSnappyCompression: { - size_t ulength = 0; - if (!port::Snappy_GetUncompressedLength(data, n, &ulength)) { - delete[] buf; - return Status::Corruption("corrupted compressed block contents"); - } - char* ubuf = new char[ulength]; - if (!port::Snappy_Uncompress(data, n, ubuf)) { - delete[] buf; - delete[] ubuf; - return Status::Corruption("corrupted compressed block contents"); - } - delete[] buf; - result->data = Slice(ubuf, ulength); - result->heap_allocated = true; - result->cachable = true; - break; - } - default: - delete[] buf; - return Status::Corruption("bad block type"); - } - - return Status::OK(); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/table/format.h b/clipper/HyperLevelDB/table/format.h deleted file mode 100644 index 10edb59..0000000 --- a/clipper/HyperLevelDB/table/format.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_FORMAT_H_ -#define STORAGE_LEVELDB_TABLE_FORMAT_H_ - -#include -#include -#include "hyperleveldb/slice.h" -#include "hyperleveldb/status.h" -#include "hyperleveldb/table_builder.h" - -namespace leveldb { - -class Block; -class RandomAccessFile; -struct ReadOptions; - -// BlockHandle is a pointer to the extent of a file that stores a data -// block or a meta block. -class BlockHandle { - public: - BlockHandle(); - - // The offset of the block in the file. - uint64_t offset() const { return offset_; } - void set_offset(uint64_t offset) { offset_ = offset; } - - // The size of the stored block - uint64_t size() const { return size_; } - void set_size(uint64_t size) { size_ = size; } - - void EncodeTo(std::string* dst) const; - Status DecodeFrom(Slice* input); - - // Maximum encoding length of a BlockHandle - enum { kMaxEncodedLength = 10 + 10 }; - - private: - uint64_t offset_; - uint64_t size_; -}; - -// Footer encapsulates the fixed information stored at the tail -// end of every table file. -class Footer { - public: - Footer() { } - - // The block handle for the metaindex block of the table - const BlockHandle& metaindex_handle() const { return metaindex_handle_; } - void set_metaindex_handle(const BlockHandle& h) { metaindex_handle_ = h; } - - // The block handle for the index block of the table - const BlockHandle& index_handle() const { - return index_handle_; - } - void set_index_handle(const BlockHandle& h) { - index_handle_ = h; - } - - void EncodeTo(std::string* dst) const; - Status DecodeFrom(Slice* input); - - // Encoded length of a Footer. Note that the serialization of a - // Footer will always occupy exactly this many bytes. It consists - // of two block handles and a magic number. - enum { - kEncodedLength = 2*BlockHandle::kMaxEncodedLength + 8 - }; - - private: - BlockHandle metaindex_handle_; - BlockHandle index_handle_; -}; - -// kTableMagicNumber was picked by running -// echo http://code.google.com/p/leveldb/ | sha1sum -// and taking the leading 64 bits. -static const uint64_t kTableMagicNumber = 0xdb4775248b80fb57ull; - -// 1-byte type + 32-bit crc -static const size_t kBlockTrailerSize = 5; - -struct BlockContents { - Slice data; // Actual contents of data - bool cachable; // True iff data can be cached - bool heap_allocated; // True iff caller should delete[] data.data() -}; - -// Read the block identified by "handle" from "file". On failure -// return non-OK. On success fill *result and return OK. -extern Status ReadBlock(RandomAccessFile* file, - const ReadOptions& options, - const BlockHandle& handle, - BlockContents* result); - -// Implementation details follow. Clients should ignore, - -inline BlockHandle::BlockHandle() - : offset_(~static_cast(0)), - size_(~static_cast(0)) { -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_FORMAT_H_ diff --git a/clipper/HyperLevelDB/table/iterator.cc b/clipper/HyperLevelDB/table/iterator.cc deleted file mode 100644 index 6a0a8f6..0000000 --- a/clipper/HyperLevelDB/table/iterator.cc +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/iterator.h" - -namespace leveldb { - -Iterator::Iterator() { - cleanup_.function = NULL; - cleanup_.next = NULL; -} - -Iterator::~Iterator() { - if (cleanup_.function != NULL) { - (*cleanup_.function)(cleanup_.arg1, cleanup_.arg2); - for (Cleanup* c = cleanup_.next; c != NULL; ) { - (*c->function)(c->arg1, c->arg2); - Cleanup* next = c->next; - delete c; - c = next; - } - } -} - -void Iterator::RegisterCleanup(CleanupFunction func, void* arg1, void* arg2) { - assert(func != NULL); - Cleanup* c; - if (cleanup_.function == NULL) { - c = &cleanup_; - } else { - c = new Cleanup; - c->next = cleanup_.next; - cleanup_.next = c; - } - c->function = func; - c->arg1 = arg1; - c->arg2 = arg2; -} - -namespace { -class EmptyIterator : public Iterator { - public: - EmptyIterator(const Status& s) : status_(s) { } - virtual bool Valid() const { return false; } - virtual void Seek(const Slice& target) { } - virtual void SeekToFirst() { } - virtual void SeekToLast() { } - virtual void Next() { assert(false); } - virtual void Prev() { assert(false); } - Slice key() const { assert(false); return Slice(); } - Slice value() const { assert(false); return Slice(); } - virtual Status status() const { return status_; } - private: - Status status_; -}; -} // namespace - -Iterator* NewEmptyIterator() { - return new EmptyIterator(Status::OK()); -} - -Iterator* NewErrorIterator(const Status& status) { - return new EmptyIterator(status); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/table/iterator_wrapper.h b/clipper/HyperLevelDB/table/iterator_wrapper.h deleted file mode 100644 index 9e16b3d..0000000 --- a/clipper/HyperLevelDB/table/iterator_wrapper.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_ -#define STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_ - -namespace leveldb { - -// A internal wrapper class with an interface similar to Iterator that -// caches the valid() and key() results for an underlying iterator. -// This can help avoid virtual function calls and also gives better -// cache locality. -class IteratorWrapper { - public: - IteratorWrapper(): iter_(NULL), valid_(false) { } - explicit IteratorWrapper(Iterator* iter): iter_(NULL) { - Set(iter); - } - ~IteratorWrapper() { delete iter_; } - Iterator* iter() const { return iter_; } - - // Takes ownership of "iter" and will delete it when destroyed, or - // when Set() is invoked again. - void Set(Iterator* iter) { - delete iter_; - iter_ = iter; - if (iter_ == NULL) { - valid_ = false; - } else { - Update(); - } - } - - - // Iterator interface methods - bool Valid() const { return valid_; } - Slice key() const { assert(Valid()); return key_; } - Slice value() const { assert(Valid()); return iter_->value(); } - // Methods below require iter() != NULL - Status status() const { assert(iter_); return iter_->status(); } - void Next() { assert(iter_); iter_->Next(); Update(); } - void Prev() { assert(iter_); iter_->Prev(); Update(); } - void Seek(const Slice& k) { assert(iter_); iter_->Seek(k); Update(); } - void SeekToFirst() { assert(iter_); iter_->SeekToFirst(); Update(); } - void SeekToLast() { assert(iter_); iter_->SeekToLast(); Update(); } - - private: - void Update() { - valid_ = iter_->Valid(); - if (valid_) { - key_ = iter_->key(); - } - } - - Iterator* iter_; - bool valid_; - Slice key_; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_ITERATOR_WRAPPER_H_ diff --git a/clipper/HyperLevelDB/table/merger.cc b/clipper/HyperLevelDB/table/merger.cc deleted file mode 100644 index a91738a..0000000 --- a/clipper/HyperLevelDB/table/merger.cc +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/merger.h" - -#include "hyperleveldb/comparator.h" -#include "hyperleveldb/iterator.h" -#include "table/iterator_wrapper.h" - -namespace leveldb { - -namespace { -class MergingIterator : public Iterator { - public: - MergingIterator(const Comparator* comparator, Iterator** children, int n) - : comparator_(comparator), - children_(new IteratorWrapper[n]), - n_(n), - current_(NULL), - direction_(kForward) { - for (int i = 0; i < n; i++) { - children_[i].Set(children[i]); - } - } - - virtual ~MergingIterator() { - delete[] children_; - } - - virtual bool Valid() const { - return (current_ != NULL); - } - - virtual void SeekToFirst() { - for (int i = 0; i < n_; i++) { - children_[i].SeekToFirst(); - } - FindSmallest(); - direction_ = kForward; - } - - virtual void SeekToLast() { - for (int i = 0; i < n_; i++) { - children_[i].SeekToLast(); - } - FindLargest(); - direction_ = kReverse; - } - - virtual void Seek(const Slice& target) { - for (int i = 0; i < n_; i++) { - children_[i].Seek(target); - } - FindSmallest(); - direction_ = kForward; - } - - virtual void Next() { - assert(Valid()); - - // Ensure that all children are positioned after key(). - // If we are moving in the forward direction, it is already - // true for all of the non-current_ children since current_ is - // the smallest child and key() == current_->key(). Otherwise, - // we explicitly position the non-current_ children. - if (direction_ != kForward) { - for (int i = 0; i < n_; i++) { - IteratorWrapper* child = &children_[i]; - if (child != current_) { - child->Seek(key()); - if (child->Valid() && - comparator_->Compare(key(), child->key()) == 0) { - child->Next(); - } - } - } - direction_ = kForward; - } - - current_->Next(); - FindSmallest(); - } - - virtual void Prev() { - assert(Valid()); - - // Ensure that all children are positioned before key(). - // If we are moving in the reverse direction, it is already - // true for all of the non-current_ children since current_ is - // the largest child and key() == current_->key(). Otherwise, - // we explicitly position the non-current_ children. - if (direction_ != kReverse) { - for (int i = 0; i < n_; i++) { - IteratorWrapper* child = &children_[i]; - if (child != current_) { - child->Seek(key()); - if (child->Valid()) { - // Child is at first entry >= key(). Step back one to be < key() - child->Prev(); - } else { - // Child has no entries >= key(). Position at last entry. - child->SeekToLast(); - } - } - } - direction_ = kReverse; - } - - current_->Prev(); - FindLargest(); - } - - virtual Slice key() const { - assert(Valid()); - return current_->key(); - } - - virtual Slice value() const { - assert(Valid()); - return current_->value(); - } - - virtual Status status() const { - Status status; - for (int i = 0; i < n_; i++) { - status = children_[i].status(); - if (!status.ok()) { - break; - } - } - return status; - } - - private: - void FindSmallest(); - void FindLargest(); - - // We might want to use a heap in case there are lots of children. - // For now we use a simple array since we expect a very small number - // of children in leveldb. - const Comparator* comparator_; - IteratorWrapper* children_; - int n_; - IteratorWrapper* current_; - - // Which direction is the iterator moving? - enum Direction { - kForward, - kReverse - }; - Direction direction_; -}; - -void MergingIterator::FindSmallest() { - IteratorWrapper* smallest = NULL; - for (int i = 0; i < n_; i++) { - IteratorWrapper* child = &children_[i]; - if (child->Valid()) { - if (smallest == NULL) { - smallest = child; - } else if (comparator_->Compare(child->key(), smallest->key()) < 0) { - smallest = child; - } - } - } - current_ = smallest; -} - -void MergingIterator::FindLargest() { - IteratorWrapper* largest = NULL; - for (int i = n_-1; i >= 0; i--) { - IteratorWrapper* child = &children_[i]; - if (child->Valid()) { - if (largest == NULL) { - largest = child; - } else if (comparator_->Compare(child->key(), largest->key()) > 0) { - largest = child; - } - } - } - current_ = largest; -} -} // namespace - -Iterator* NewMergingIterator(const Comparator* cmp, Iterator** list, int n) { - assert(n >= 0); - if (n == 0) { - return NewEmptyIterator(); - } else if (n == 1) { - return list[0]; - } else { - return new MergingIterator(cmp, list, n); - } -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/table/merger.h b/clipper/HyperLevelDB/table/merger.h deleted file mode 100644 index 91ddd80..0000000 --- a/clipper/HyperLevelDB/table/merger.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_MERGER_H_ -#define STORAGE_LEVELDB_TABLE_MERGER_H_ - -namespace leveldb { - -class Comparator; -class Iterator; - -// Return an iterator that provided the union of the data in -// children[0,n-1]. Takes ownership of the child iterators and -// will delete them when the result iterator is deleted. -// -// The result does no duplicate suppression. I.e., if a particular -// key is present in K child iterators, it will be yielded K times. -// -// REQUIRES: n >= 0 -extern Iterator* NewMergingIterator( - const Comparator* comparator, Iterator** children, int n); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_MERGER_H_ diff --git a/clipper/HyperLevelDB/table/table.cc b/clipper/HyperLevelDB/table/table.cc deleted file mode 100644 index 2ad7bd6..0000000 --- a/clipper/HyperLevelDB/table/table.cc +++ /dev/null @@ -1,275 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/table.h" - -#include "hyperleveldb/cache.h" -#include "hyperleveldb/comparator.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/filter_policy.h" -#include "hyperleveldb/options.h" -#include "table/block.h" -#include "table/filter_block.h" -#include "table/format.h" -#include "table/two_level_iterator.h" -#include "util/coding.h" - -namespace leveldb { - -struct Table::Rep { - ~Rep() { - delete filter; - delete [] filter_data; - delete index_block; - } - - Options options; - Status status; - RandomAccessFile* file; - uint64_t cache_id; - FilterBlockReader* filter; - const char* filter_data; - - BlockHandle metaindex_handle; // Handle to metaindex_block: saved from footer - Block* index_block; -}; - -Status Table::Open(const Options& options, - RandomAccessFile* file, - uint64_t size, - Table** table) { - *table = NULL; - if (size < Footer::kEncodedLength) { - return Status::InvalidArgument("file is too short to be an sstable"); - } - - char footer_space[Footer::kEncodedLength]; - Slice footer_input; - Status s = file->Read(size - Footer::kEncodedLength, Footer::kEncodedLength, - &footer_input, footer_space); - if (!s.ok()) return s; - - Footer footer; - s = footer.DecodeFrom(&footer_input); - if (!s.ok()) return s; - - // Read the index block - BlockContents contents; - Block* index_block = NULL; - if (s.ok()) { - s = ReadBlock(file, ReadOptions(), footer.index_handle(), &contents); - if (s.ok()) { - index_block = new Block(contents); - } - } - - if (s.ok()) { - // We've successfully read the footer and the index block: we're - // ready to serve requests. - Rep* rep = new Table::Rep; - rep->options = options; - rep->file = file; - rep->metaindex_handle = footer.metaindex_handle(); - rep->index_block = index_block; - rep->cache_id = (options.block_cache ? options.block_cache->NewId() : 0); - rep->filter_data = NULL; - rep->filter = NULL; - *table = new Table(rep); - (*table)->ReadMeta(footer); - } else { - if (index_block) delete index_block; - } - - return s; -} - -void Table::ReadMeta(const Footer& footer) { - if (rep_->options.filter_policy == NULL) { - return; // Do not need any metadata - } - - // TODO(sanjay): Skip this if footer.metaindex_handle() size indicates - // it is an empty block. - ReadOptions opt; - BlockContents contents; - if (!ReadBlock(rep_->file, opt, footer.metaindex_handle(), &contents).ok()) { - // Do not propagate errors since meta info is not needed for operation - return; - } - Block* meta = new Block(contents); - - Iterator* iter = meta->NewIterator(BytewiseComparator()); - std::string key = "filter."; - key.append(rep_->options.filter_policy->Name()); - iter->Seek(key); - if (iter->Valid() && iter->key() == Slice(key)) { - ReadFilter(iter->value()); - } - delete iter; - delete meta; -} - -void Table::ReadFilter(const Slice& filter_handle_value) { - Slice v = filter_handle_value; - BlockHandle filter_handle; - if (!filter_handle.DecodeFrom(&v).ok()) { - return; - } - - // We might want to unify with ReadBlock() if we start - // requiring checksum verification in Table::Open. - ReadOptions opt; - BlockContents block; - if (!ReadBlock(rep_->file, opt, filter_handle, &block).ok()) { - return; - } - if (block.heap_allocated) { - rep_->filter_data = block.data.data(); // Will need to delete later - } - rep_->filter = new FilterBlockReader(rep_->options.filter_policy, block.data); -} - -Table::~Table() { - delete rep_; -} - -static void DeleteBlock(void* arg, void* ignored) { - delete reinterpret_cast(arg); -} - -static void DeleteCachedBlock(const Slice& key, void* value) { - Block* block = reinterpret_cast(value); - delete block; -} - -static void ReleaseBlock(void* arg, void* h) { - Cache* cache = reinterpret_cast(arg); - Cache::Handle* handle = reinterpret_cast(h); - cache->Release(handle); -} - -// Convert an index iterator value (i.e., an encoded BlockHandle) -// into an iterator over the contents of the corresponding block. -Iterator* Table::BlockReader(void* arg, - const ReadOptions& options, - const Slice& index_value) { - Table* table = reinterpret_cast(arg); - Cache* block_cache = table->rep_->options.block_cache; - Block* block = NULL; - Cache::Handle* cache_handle = NULL; - - BlockHandle handle; - Slice input = index_value; - Status s = handle.DecodeFrom(&input); - // We intentionally allow extra stuff in index_value so that we - // can add more features in the future. - - if (s.ok()) { - BlockContents contents; - if (block_cache != NULL) { - char cache_key_buffer[16]; - EncodeFixed64(cache_key_buffer, table->rep_->cache_id); - EncodeFixed64(cache_key_buffer+8, handle.offset()); - Slice key(cache_key_buffer, sizeof(cache_key_buffer)); - cache_handle = block_cache->Lookup(key); - if (cache_handle != NULL) { - block = reinterpret_cast(block_cache->Value(cache_handle)); - } else { - s = ReadBlock(table->rep_->file, options, handle, &contents); - if (s.ok()) { - block = new Block(contents); - if (contents.cachable && options.fill_cache) { - cache_handle = block_cache->Insert( - key, block, block->size(), &DeleteCachedBlock); - } - } - } - } else { - s = ReadBlock(table->rep_->file, options, handle, &contents); - if (s.ok()) { - block = new Block(contents); - } - } - } - - Iterator* iter; - if (block != NULL) { - iter = block->NewIterator(table->rep_->options.comparator); - if (cache_handle == NULL) { - iter->RegisterCleanup(&DeleteBlock, block, NULL); - } else { - iter->RegisterCleanup(&ReleaseBlock, block_cache, cache_handle); - } - } else { - iter = NewErrorIterator(s); - } - return iter; -} - -Iterator* Table::NewIterator(const ReadOptions& options) const { - return NewTwoLevelIterator( - rep_->index_block->NewIterator(rep_->options.comparator), - &Table::BlockReader, const_cast(this), options); -} - -Status Table::InternalGet(const ReadOptions& options, const Slice& k, - void* arg, - void (*saver)(void*, const Slice&, const Slice&)) { - Status s; - Iterator* iiter = rep_->index_block->NewIterator(rep_->options.comparator); - iiter->Seek(k); - if (iiter->Valid()) { - Slice handle_value = iiter->value(); - FilterBlockReader* filter = rep_->filter; - BlockHandle handle; - if (filter != NULL && - handle.DecodeFrom(&handle_value).ok() && - !filter->KeyMayMatch(handle.offset(), k)) { - // Not found - } else { - Iterator* block_iter = BlockReader(this, options, iiter->value()); - block_iter->Seek(k); - if (block_iter->Valid()) { - (*saver)(arg, block_iter->key(), block_iter->value()); - } - s = block_iter->status(); - delete block_iter; - } - } - if (s.ok()) { - s = iiter->status(); - } - delete iiter; - return s; -} - - -uint64_t Table::ApproximateOffsetOf(const Slice& key) const { - Iterator* index_iter = - rep_->index_block->NewIterator(rep_->options.comparator); - index_iter->Seek(key); - uint64_t result; - if (index_iter->Valid()) { - BlockHandle handle; - Slice input = index_iter->value(); - Status s = handle.DecodeFrom(&input); - if (s.ok()) { - result = handle.offset(); - } else { - // Strange: we can't decode the block handle in the index block. - // We'll just return the offset of the metaindex block, which is - // close to the whole file size for this case. - result = rep_->metaindex_handle.offset(); - } - } else { - // key is past the last key in the file. Approximate the offset - // by returning the offset of the metaindex block (which is - // right near the end of the file). - result = rep_->metaindex_handle.offset(); - } - delete index_iter; - return result; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/table/table_builder.cc b/clipper/HyperLevelDB/table/table_builder.cc deleted file mode 100644 index 4c31c67..0000000 --- a/clipper/HyperLevelDB/table/table_builder.cc +++ /dev/null @@ -1,269 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/table_builder.h" - -#include -#include "hyperleveldb/comparator.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/filter_policy.h" -#include "hyperleveldb/options.h" -#include "table/block_builder.h" -#include "table/filter_block.h" -#include "table/format.h" -#include "util/coding.h" -#include "util/crc32c.h" - -namespace leveldb { - -struct TableBuilder::Rep { - Options options; - Options index_block_options; - WritableFile* file; - uint64_t offset; - Status status; - BlockBuilder data_block; - BlockBuilder index_block; - std::string last_key; - int64_t num_entries; - bool closed; // Either Finish() or Abandon() has been called. - FilterBlockBuilder* filter_block; - - // We do not emit the index entry for a block until we have seen the - // first key for the next data block. This allows us to use shorter - // keys in the index block. For example, consider a block boundary - // between the keys "the quick brown fox" and "the who". We can use - // "the r" as the key for the index block entry since it is >= all - // entries in the first block and < all entries in subsequent - // blocks. - // - // Invariant: r->pending_index_entry is true only if data_block is empty. - bool pending_index_entry; - BlockHandle pending_handle; // Handle to add to index block - - std::string compressed_output; - - Rep(const Options& opt, WritableFile* f) - : options(opt), - index_block_options(opt), - file(f), - offset(0), - data_block(&options), - index_block(&index_block_options), - num_entries(0), - closed(false), - filter_block(opt.filter_policy == NULL ? NULL - : new FilterBlockBuilder(opt.filter_policy)), - pending_index_entry(false) { - index_block_options.block_restart_interval = 1; - } -}; - -TableBuilder::TableBuilder(const Options& options, WritableFile* file) - : rep_(new Rep(options, file)) { - if (rep_->filter_block != NULL) { - rep_->filter_block->StartBlock(0); - } -} - -TableBuilder::~TableBuilder() { - assert(rep_->closed); // Catch errors where caller forgot to call Finish() - delete rep_->filter_block; - delete rep_; -} - -Status TableBuilder::ChangeOptions(const Options& options) { - // Note: if more fields are added to Options, update - // this function to catch changes that should not be allowed to - // change in the middle of building a Table. - if (options.comparator != rep_->options.comparator) { - return Status::InvalidArgument("changing comparator while building table"); - } - - // Note that any live BlockBuilders point to rep_->options and therefore - // will automatically pick up the updated options. - rep_->options = options; - rep_->index_block_options = options; - rep_->index_block_options.block_restart_interval = 1; - return Status::OK(); -} - -void TableBuilder::Add(const Slice& key, const Slice& value) { - Rep* r = rep_; - assert(!r->closed); - if (!ok()) return; - if (r->num_entries > 0) { - assert(r->options.comparator->Compare(key, Slice(r->last_key)) > 0); - } - - if (r->pending_index_entry) { - assert(r->data_block.empty()); - r->options.comparator->FindShortestSeparator(&r->last_key, key); - std::string handle_encoding; - r->pending_handle.EncodeTo(&handle_encoding); - r->index_block.Add(r->last_key, Slice(handle_encoding)); - r->pending_index_entry = false; - } - - if (r->filter_block != NULL) { - r->filter_block->AddKey(key); - } - - r->last_key.assign(key.data(), key.size()); - r->num_entries++; - r->data_block.Add(key, value); - - const size_t estimated_block_size = r->data_block.CurrentSizeEstimate(); - if (estimated_block_size >= r->options.block_size) { - Flush(); - } -} - -void TableBuilder::Flush() { - Rep* r = rep_; - assert(!r->closed); - if (!ok()) return; - if (r->data_block.empty()) return; - assert(!r->pending_index_entry); - WriteBlock(&r->data_block, &r->pending_handle); - if (ok()) { - r->pending_index_entry = true; - } - if (r->filter_block != NULL) { - r->filter_block->StartBlock(r->offset); - } -} - -void TableBuilder::WriteBlock(BlockBuilder* block, BlockHandle* handle) { - // File format contains a sequence of blocks where each block has: - // block_data: uint8[n] - // type: uint8 - // crc: uint32 - assert(ok()); - Rep* r = rep_; - Slice raw = block->Finish(); - - Slice block_contents; - CompressionType type = r->options.compression; - // TODO(postrelease): Support more compression options: zlib? - switch (type) { - case kNoCompression: - block_contents = raw; - break; - - case kSnappyCompression: { - std::string* compressed = &r->compressed_output; - if (port::Snappy_Compress(raw.data(), raw.size(), compressed) && - compressed->size() < raw.size() - (raw.size() / 8u)) { - block_contents = *compressed; - } else { - // Snappy not supported, or compressed less than 12.5%, so just - // store uncompressed form - block_contents = raw; - type = kNoCompression; - } - break; - } - } - WriteRawBlock(block_contents, type, handle); - r->compressed_output.clear(); - block->Reset(); -} - -void TableBuilder::WriteRawBlock(const Slice& block_contents, - CompressionType type, - BlockHandle* handle) { - Rep* r = rep_; - handle->set_offset(r->offset); - handle->set_size(block_contents.size()); - r->status = r->file->Append(block_contents); - if (r->status.ok()) { - char trailer[kBlockTrailerSize]; - trailer[0] = type; - uint32_t crc = crc32c::Value(block_contents.data(), block_contents.size()); - crc = crc32c::Extend(crc, trailer, 1); // Extend crc to cover block type - EncodeFixed32(trailer+1, crc32c::Mask(crc)); - r->status = r->file->Append(Slice(trailer, kBlockTrailerSize)); - if (r->status.ok()) { - r->offset += block_contents.size() + kBlockTrailerSize; - } - } -} - -Status TableBuilder::status() const { - return rep_->status; -} - -Status TableBuilder::Finish() { - Rep* r = rep_; - Flush(); - assert(!r->closed); - r->closed = true; - - BlockHandle filter_block_handle, metaindex_block_handle, index_block_handle; - - // Write filter block - if (ok() && r->filter_block != NULL) { - WriteRawBlock(r->filter_block->Finish(), kNoCompression, - &filter_block_handle); - } - - // Write metaindex block - if (ok()) { - BlockBuilder meta_index_block(&r->options); - if (r->filter_block != NULL) { - // Add mapping from "filter.Name" to location of filter data - std::string key = "filter."; - key.append(r->options.filter_policy->Name()); - std::string handle_encoding; - filter_block_handle.EncodeTo(&handle_encoding); - meta_index_block.Add(key, handle_encoding); - } - - // TODO(postrelease): Add stats and other meta blocks - WriteBlock(&meta_index_block, &metaindex_block_handle); - } - - // Write index block - if (ok()) { - if (r->pending_index_entry) { - r->options.comparator->FindShortSuccessor(&r->last_key); - std::string handle_encoding; - r->pending_handle.EncodeTo(&handle_encoding); - r->index_block.Add(r->last_key, Slice(handle_encoding)); - r->pending_index_entry = false; - } - WriteBlock(&r->index_block, &index_block_handle); - } - - // Write footer - if (ok()) { - Footer footer; - footer.set_metaindex_handle(metaindex_block_handle); - footer.set_index_handle(index_block_handle); - std::string footer_encoding; - footer.EncodeTo(&footer_encoding); - r->status = r->file->Append(footer_encoding); - if (r->status.ok()) { - r->offset += footer_encoding.size(); - } - } - return r->status; -} - -void TableBuilder::Abandon() { - Rep* r = rep_; - assert(!r->closed); - r->closed = true; -} - -uint64_t TableBuilder::NumEntries() const { - return rep_->num_entries; -} - -uint64_t TableBuilder::FileSize() const { - return rep_->offset; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/table/table_test.cc b/clipper/HyperLevelDB/table/table_test.cc deleted file mode 100644 index a47ef20..0000000 --- a/clipper/HyperLevelDB/table/table_test.cc +++ /dev/null @@ -1,876 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/table.h" - -#include -#include -#include "db/dbformat.h" -#include "db/memtable.h" -#include "db/write_batch_internal.h" -#include "hyperleveldb/db.h" -#include "hyperleveldb/env.h" -#include "hyperleveldb/iterator.h" -#include "hyperleveldb/table_builder.h" -#include "table/block.h" -#include "table/block_builder.h" -#include "table/format.h" -#include "util/random.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -// Return reverse of "key". -// Used to test non-lexicographic comparators. -static std::string Reverse(const Slice& key) { - std::string str(key.ToString()); - std::string rev(""); - for (std::string::reverse_iterator rit = str.rbegin(); - rit != str.rend(); ++rit) { - rev.push_back(*rit); - } - return rev; -} - -namespace { -class ReverseKeyComparator : public Comparator { - public: - virtual const char* Name() const { - return "leveldb.ReverseBytewiseComparator"; - } - - virtual int Compare(const Slice& a, const Slice& b) const { - return BytewiseComparator()->Compare(Reverse(a), Reverse(b)); - } - - virtual void FindShortestSeparator( - std::string* start, - const Slice& limit) const { - std::string s = Reverse(*start); - std::string l = Reverse(limit); - BytewiseComparator()->FindShortestSeparator(&s, l); - *start = Reverse(s); - } - - virtual void FindShortSuccessor(std::string* key) const { - std::string s = Reverse(*key); - BytewiseComparator()->FindShortSuccessor(&s); - *key = Reverse(s); - } -}; -} // namespace -static ReverseKeyComparator reverse_key_comparator; - -static void Increment(const Comparator* cmp, std::string* key) { - if (cmp == BytewiseComparator()) { - key->push_back('\0'); - } else { - assert(cmp == &reverse_key_comparator); - std::string rev = Reverse(*key); - rev.push_back('\0'); - *key = Reverse(rev); - } -} - -// An STL comparator that uses a Comparator -namespace { -struct STLLessThan { - const Comparator* cmp; - - STLLessThan() : cmp(BytewiseComparator()) { } - STLLessThan(const Comparator* c) : cmp(c) { } - bool operator()(const std::string& a, const std::string& b) const { - return cmp->Compare(Slice(a), Slice(b)) < 0; - } -}; -} // namespace - -class StringSink: public WritableFile { - public: - ~StringSink() { } - - const std::string& contents() const { return contents_; } - - virtual Status Close() { return Status::OK(); } - virtual Status Sync() { return Status::OK(); } - - virtual Status WriteAt(uint64_t offset, const Slice& slice) { - std::string tmp = contents_.substr(0, offset); - tmp.append(slice.data(), slice.size()); - if (contents_.size() > offset + slice.size()) { - tmp += contents_.substr(offset + slice.size()); - } - contents_ = tmp; - return Status::OK(); - } - virtual Status Append(const Slice& data) { - contents_.append(data.data(), data.size()); - return Status::OK(); - } - - private: - std::string contents_; -}; - - -class StringSource: public RandomAccessFile { - public: - StringSource(const Slice& contents) - : contents_(contents.data(), contents.size()) { - } - - virtual ~StringSource() { } - - uint64_t Size() const { return contents_.size(); } - - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const { - if (offset > contents_.size()) { - return Status::InvalidArgument("invalid Read offset"); - } - if (offset + n > contents_.size()) { - n = contents_.size() - offset; - } - memcpy(scratch, &contents_[offset], n); - *result = Slice(scratch, n); - return Status::OK(); - } - - private: - std::string contents_; -}; - -typedef std::map KVMap; - -// Helper class for tests to unify the interface between -// BlockBuilder/TableBuilder and Block/Table. -class Constructor { - public: - explicit Constructor(const Comparator* cmp) : data_(STLLessThan(cmp)) { } - virtual ~Constructor() { } - - void Add(const std::string& key, const Slice& value) { - data_[key] = value.ToString(); - } - - // Finish constructing the data structure with all the keys that have - // been added so far. Returns the keys in sorted order in "*keys" - // and stores the key/value pairs in "*kvmap" - void Finish(const Options& options, - std::vector* keys, - KVMap* kvmap) { - *kvmap = data_; - keys->clear(); - for (KVMap::const_iterator it = data_.begin(); - it != data_.end(); - ++it) { - keys->push_back(it->first); - } - data_.clear(); - Status s = FinishImpl(options, *kvmap); - ASSERT_TRUE(s.ok()) << s.ToString(); - } - - // Construct the data structure from the data in "data" - virtual Status FinishImpl(const Options& options, const KVMap& data) = 0; - - virtual Iterator* NewIterator() const = 0; - - virtual const KVMap& data() { return data_; } - - virtual DB* db() const { return NULL; } // Overridden in DBConstructor - - private: - KVMap data_; -}; - -class BlockConstructor: public Constructor { - public: - explicit BlockConstructor(const Comparator* cmp) - : Constructor(cmp), - comparator_(cmp), - block_(NULL) { } - ~BlockConstructor() { - delete block_; - } - virtual Status FinishImpl(const Options& options, const KVMap& data) { - delete block_; - block_ = NULL; - BlockBuilder builder(&options); - - for (KVMap::const_iterator it = data.begin(); - it != data.end(); - ++it) { - builder.Add(it->first, it->second); - } - // Open the block - data_ = builder.Finish().ToString(); - BlockContents contents; - contents.data = data_; - contents.cachable = false; - contents.heap_allocated = false; - block_ = new Block(contents); - return Status::OK(); - } - virtual Iterator* NewIterator() const { - return block_->NewIterator(comparator_); - } - - private: - const Comparator* comparator_; - std::string data_; - Block* block_; - - BlockConstructor(); -}; - -class TableConstructor: public Constructor { - public: - TableConstructor(const Comparator* cmp) - : Constructor(cmp), - source_(NULL), table_(NULL) { - } - ~TableConstructor() { - Reset(); - } - virtual Status FinishImpl(const Options& options, const KVMap& data) { - Reset(); - StringSink sink; - TableBuilder builder(options, &sink); - - for (KVMap::const_iterator it = data.begin(); - it != data.end(); - ++it) { - builder.Add(it->first, it->second); - ASSERT_TRUE(builder.status().ok()); - } - Status s = builder.Finish(); - ASSERT_TRUE(s.ok()) << s.ToString(); - - ASSERT_EQ(sink.contents().size(), builder.FileSize()); - - // Open the table - source_ = new StringSource(sink.contents()); - Options table_options; - table_options.comparator = options.comparator; - return Table::Open(table_options, source_, sink.contents().size(), &table_); - } - - virtual Iterator* NewIterator() const { - return table_->NewIterator(ReadOptions()); - } - - uint64_t ApproximateOffsetOf(const Slice& key) const { - return table_->ApproximateOffsetOf(key); - } - - private: - void Reset() { - delete table_; - delete source_; - table_ = NULL; - source_ = NULL; - } - - StringSource* source_; - Table* table_; - - TableConstructor(); -}; - -// A helper class that converts internal format keys into user keys -class KeyConvertingIterator: public Iterator { - public: - explicit KeyConvertingIterator(Iterator* iter) : iter_(iter) { } - virtual ~KeyConvertingIterator() { delete iter_; } - virtual bool Valid() const { return iter_->Valid(); } - virtual void Seek(const Slice& target) { - ParsedInternalKey ikey(target, kMaxSequenceNumber, kTypeValue); - std::string encoded; - AppendInternalKey(&encoded, ikey); - iter_->Seek(encoded); - } - virtual void SeekToFirst() { iter_->SeekToFirst(); } - virtual void SeekToLast() { iter_->SeekToLast(); } - virtual void Next() { iter_->Next(); } - virtual void Prev() { iter_->Prev(); } - - virtual Slice key() const { - assert(Valid()); - ParsedInternalKey key; - if (!ParseInternalKey(iter_->key(), &key)) { - status_ = Status::Corruption("malformed internal key"); - return Slice("corrupted key"); - } - return key.user_key; - } - - virtual Slice value() const { return iter_->value(); } - virtual Status status() const { - return status_.ok() ? iter_->status() : status_; - } - - private: - mutable Status status_; - Iterator* iter_; - - // No copying allowed - KeyConvertingIterator(const KeyConvertingIterator&); - void operator=(const KeyConvertingIterator&); -}; - -class MemTableConstructor: public Constructor { - public: - explicit MemTableConstructor(const Comparator* cmp) - : Constructor(cmp), - internal_comparator_(cmp) { - memtable_ = new MemTable(internal_comparator_); - memtable_->Ref(); - } - ~MemTableConstructor() { - memtable_->Unref(); - } - virtual Status FinishImpl(const Options& options, const KVMap& data) { - memtable_->Unref(); - memtable_ = new MemTable(internal_comparator_); - memtable_->Ref(); - int seq = 1; - for (KVMap::const_iterator it = data.begin(); - it != data.end(); - ++it) { - memtable_->Add(seq, kTypeValue, it->first, it->second); - seq++; - } - return Status::OK(); - } - virtual Iterator* NewIterator() const { - return new KeyConvertingIterator(memtable_->NewIterator()); - } - - private: - InternalKeyComparator internal_comparator_; - MemTable* memtable_; -}; - -class DBConstructor: public Constructor { - public: - explicit DBConstructor(const Comparator* cmp) - : Constructor(cmp), - comparator_(cmp) { - db_ = NULL; - NewDB(); - } - ~DBConstructor() { - delete db_; - } - virtual Status FinishImpl(const Options& options, const KVMap& data) { - delete db_; - db_ = NULL; - NewDB(); - for (KVMap::const_iterator it = data.begin(); - it != data.end(); - ++it) { - WriteBatch batch; - batch.Put(it->first, it->second); - ASSERT_TRUE(db_->Write(WriteOptions(), &batch).ok()); - } - return Status::OK(); - } - virtual Iterator* NewIterator() const { - return db_->NewIterator(ReadOptions()); - } - - virtual DB* db() const { return db_; } - - private: - void NewDB() { - std::string name = test::TmpDir() + "/table_testdb"; - - Options options; - options.comparator = comparator_; - Status status = DestroyDB(name, options); - ASSERT_TRUE(status.ok()) << status.ToString(); - - options.create_if_missing = true; - options.error_if_exists = true; - options.write_buffer_size = 10000; // Something small to force merging - status = DB::Open(options, name, &db_); - ASSERT_TRUE(status.ok()) << status.ToString(); - } - - const Comparator* comparator_; - DB* db_; -}; - -enum TestType { - TABLE_TEST, - BLOCK_TEST, - MEMTABLE_TEST, - DB_TEST -}; - -struct TestArgs { - TestType type; - bool reverse_compare; - int restart_interval; -}; - -static const TestArgs kTestArgList[] = { - { TABLE_TEST, false, 16 }, - { TABLE_TEST, false, 1 }, - { TABLE_TEST, false, 1024 }, - { TABLE_TEST, true, 16 }, - { TABLE_TEST, true, 1 }, - { TABLE_TEST, true, 1024 }, - - { BLOCK_TEST, false, 16 }, - { BLOCK_TEST, false, 1 }, - { BLOCK_TEST, false, 1024 }, - { BLOCK_TEST, true, 16 }, - { BLOCK_TEST, true, 1 }, - { BLOCK_TEST, true, 1024 }, - - // Restart interval does not matter for memtables - { MEMTABLE_TEST, false, 16 }, - { MEMTABLE_TEST, true, 16 }, - - // Do not bother with restart interval variations for DB - { DB_TEST, false, 16 }, - { DB_TEST, true, 16 }, -}; -static const int kNumTestArgs = sizeof(kTestArgList) / sizeof(kTestArgList[0]); - -class Harness { - public: - Harness() : constructor_(NULL) { } - - void Init(const TestArgs& args) { - delete constructor_; - constructor_ = NULL; - options_ = Options(); - - options_.block_restart_interval = args.restart_interval; - // Use shorter block size for tests to exercise block boundary - // conditions more. - options_.block_size = 256; - if (args.reverse_compare) { - options_.comparator = &reverse_key_comparator; - } - switch (args.type) { - case TABLE_TEST: - constructor_ = new TableConstructor(options_.comparator); - break; - case BLOCK_TEST: - constructor_ = new BlockConstructor(options_.comparator); - break; - case MEMTABLE_TEST: - constructor_ = new MemTableConstructor(options_.comparator); - break; - case DB_TEST: - constructor_ = new DBConstructor(options_.comparator); - break; - } - } - - ~Harness() { - delete constructor_; - } - - void Add(const std::string& key, const std::string& value) { - constructor_->Add(key, value); - } - - void Test(Random* rnd) { - std::vector keys; - KVMap data; - constructor_->Finish(options_, &keys, &data); - - TestForwardScan(keys, data); - TestBackwardScan(keys, data); - TestRandomAccess(rnd, keys, data); - } - - void TestForwardScan(const std::vector& keys, - const KVMap& data) { - Iterator* iter = constructor_->NewIterator(); - ASSERT_TRUE(!iter->Valid()); - iter->SeekToFirst(); - for (KVMap::const_iterator model_iter = data.begin(); - model_iter != data.end(); - ++model_iter) { - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - iter->Next(); - } - ASSERT_TRUE(!iter->Valid()); - delete iter; - } - - void TestBackwardScan(const std::vector& keys, - const KVMap& data) { - Iterator* iter = constructor_->NewIterator(); - ASSERT_TRUE(!iter->Valid()); - iter->SeekToLast(); - for (KVMap::const_reverse_iterator model_iter = data.rbegin(); - model_iter != data.rend(); - ++model_iter) { - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - iter->Prev(); - } - ASSERT_TRUE(!iter->Valid()); - delete iter; - } - - void TestRandomAccess(Random* rnd, - const std::vector& keys, - const KVMap& data) { - static const bool kVerbose = false; - Iterator* iter = constructor_->NewIterator(); - ASSERT_TRUE(!iter->Valid()); - KVMap::const_iterator model_iter = data.begin(); - if (kVerbose) fprintf(stderr, "---\n"); - for (int i = 0; i < 200; i++) { - const int toss = rnd->Uniform(5); - switch (toss) { - case 0: { - if (iter->Valid()) { - if (kVerbose) fprintf(stderr, "Next\n"); - iter->Next(); - ++model_iter; - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - } - break; - } - - case 1: { - if (kVerbose) fprintf(stderr, "SeekToFirst\n"); - iter->SeekToFirst(); - model_iter = data.begin(); - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - break; - } - - case 2: { - std::string key = PickRandomKey(rnd, keys); - model_iter = data.lower_bound(key); - if (kVerbose) fprintf(stderr, "Seek '%s'\n", - EscapeString(key).c_str()); - iter->Seek(Slice(key)); - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - break; - } - - case 3: { - if (iter->Valid()) { - if (kVerbose) fprintf(stderr, "Prev\n"); - iter->Prev(); - if (model_iter == data.begin()) { - model_iter = data.end(); // Wrap around to invalid value - } else { - --model_iter; - } - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - } - break; - } - - case 4: { - if (kVerbose) fprintf(stderr, "SeekToLast\n"); - iter->SeekToLast(); - if (keys.empty()) { - model_iter = data.end(); - } else { - std::string last = data.rbegin()->first; - model_iter = data.lower_bound(last); - } - ASSERT_EQ(ToString(data, model_iter), ToString(iter)); - break; - } - } - } - delete iter; - } - - std::string ToString(const KVMap& data, const KVMap::const_iterator& it) { - if (it == data.end()) { - return "END"; - } else { - return "'" + it->first + "->" + it->second + "'"; - } - } - - std::string ToString(const KVMap& data, - const KVMap::const_reverse_iterator& it) { - if (it == data.rend()) { - return "END"; - } else { - return "'" + it->first + "->" + it->second + "'"; - } - } - - std::string ToString(const Iterator* it) { - if (!it->Valid()) { - return "END"; - } else { - return "'" + it->key().ToString() + "->" + it->value().ToString() + "'"; - } - } - - std::string PickRandomKey(Random* rnd, const std::vector& keys) { - if (keys.empty()) { - return "foo"; - } else { - const int index = rnd->Uniform(keys.size()); - std::string result = keys[index]; - switch (rnd->Uniform(3)) { - case 0: - // Return an existing key - break; - case 1: { - // Attempt to return something smaller than an existing key - if (result.size() > 0 && result[result.size()-1] > '\0') { - result[result.size()-1]--; - } - break; - } - case 2: { - // Return something larger than an existing key - Increment(options_.comparator, &result); - break; - } - } - return result; - } - } - - // Returns NULL if not running against a DB - DB* db() const { return constructor_->db(); } - - private: - Options options_; - Constructor* constructor_; -}; - -// Test empty table/block. -TEST(Harness, Empty) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 1); - Test(&rnd); - } -} - -// Special test for a block with no restart entries. The C++ leveldb -// code never generates such blocks, but the Java version of leveldb -// seems to. -TEST(Harness, ZeroRestartPointsInBlock) { - char data[sizeof(uint32_t)]; - memset(data, 0, sizeof(data)); - BlockContents contents; - contents.data = Slice(data, sizeof(data)); - contents.cachable = false; - contents.heap_allocated = false; - Block block(contents); - Iterator* iter = block.NewIterator(BytewiseComparator()); - iter->SeekToFirst(); - ASSERT_TRUE(!iter->Valid()); - iter->SeekToLast(); - ASSERT_TRUE(!iter->Valid()); - iter->Seek("foo"); - ASSERT_TRUE(!iter->Valid()); - delete iter; -} - -// Test the empty key -TEST(Harness, SimpleEmptyKey) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 1); - Add("", "v"); - Test(&rnd); - } -} - -TEST(Harness, SimpleSingle) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 2); - Add("abc", "v"); - Test(&rnd); - } -} - -TEST(Harness, SimpleMulti) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 3); - Add("abc", "v"); - Add("abcd", "v"); - Add("ac", "v2"); - Test(&rnd); - } -} - -TEST(Harness, SimpleSpecialKey) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 4); - Add("\xff\xff", "v3"); - Test(&rnd); - } -} - -TEST(Harness, Randomized) { - for (int i = 0; i < kNumTestArgs; i++) { - Init(kTestArgList[i]); - Random rnd(test::RandomSeed() + 5); - for (int num_entries = 0; num_entries < 2000; - num_entries += (num_entries < 50 ? 1 : 200)) { - if ((num_entries % 10) == 0) { - fprintf(stderr, "case %d of %d: num_entries = %d\n", - (i + 1), int(kNumTestArgs), num_entries); - } - for (int e = 0; e < num_entries; e++) { - std::string v; - Add(test::RandomKey(&rnd, rnd.Skewed(4)), - test::RandomString(&rnd, rnd.Skewed(5), &v).ToString()); - } - Test(&rnd); - } - } -} - -TEST(Harness, RandomizedLongDB) { - Random rnd(test::RandomSeed()); - TestArgs args = { DB_TEST, false, 16 }; - Init(args); - int num_entries = 100000; - for (int e = 0; e < num_entries; e++) { - std::string v; - Add(test::RandomKey(&rnd, rnd.Skewed(4)), - test::RandomString(&rnd, rnd.Skewed(5), &v).ToString()); - } - Test(&rnd); - - // We must have created enough data to force merging - int files = 0; - for (int level = 0; level < config::kNumLevels; level++) { - std::string value; - char name[100]; - snprintf(name, sizeof(name), "leveldb.num-files-at-level%d", level); - ASSERT_TRUE(db()->GetProperty(name, &value)); - files += atoi(value.c_str()); - } - ASSERT_GT(files, 0); -} - -class MemTableTest { }; - -TEST(MemTableTest, Simple) { - InternalKeyComparator cmp(BytewiseComparator()); - MemTable* memtable = new MemTable(cmp); - memtable->Ref(); - WriteBatch batch; - WriteBatchInternal::SetSequence(&batch, 100); - batch.Put(std::string("k1"), std::string("v1")); - batch.Put(std::string("k2"), std::string("v2")); - batch.Put(std::string("k3"), std::string("v3")); - batch.Put(std::string("largekey"), std::string("vlarge")); - ASSERT_TRUE(WriteBatchInternal::InsertInto(&batch, memtable).ok()); - - Iterator* iter = memtable->NewIterator(); - iter->SeekToFirst(); - while (iter->Valid()) { - fprintf(stderr, "key: '%s' -> '%s'\n", - iter->key().ToString().c_str(), - iter->value().ToString().c_str()); - iter->Next(); - } - - delete iter; - memtable->Unref(); -} - -static bool Between(uint64_t val, uint64_t low, uint64_t high) { - bool result = (val >= low) && (val <= high); - if (!result) { - fprintf(stderr, "Value %llu is not in range [%llu, %llu]\n", - (unsigned long long)(val), - (unsigned long long)(low), - (unsigned long long)(high)); - } - return result; -} - -class TableTest { }; - -TEST(TableTest, ApproximateOffsetOfPlain) { - TableConstructor c(BytewiseComparator()); - c.Add("k01", "hello"); - c.Add("k02", "hello2"); - c.Add("k03", std::string(10000, 'x')); - c.Add("k04", std::string(200000, 'x')); - c.Add("k05", std::string(300000, 'x')); - c.Add("k06", "hello3"); - c.Add("k07", std::string(100000, 'x')); - std::vector keys; - KVMap kvmap; - Options options; - options.block_size = 1024; - options.compression = kNoCompression; - c.Finish(options, &keys, &kvmap); - - ASSERT_TRUE(Between(c.ApproximateOffsetOf("abc"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01a"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k02"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 10000, 11000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04a"), 210000, 211000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k05"), 210000, 211000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k06"), 510000, 511000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k07"), 510000, 511000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 610000, 612000)); - -} - -static bool SnappyCompressionSupported() { - std::string out; - Slice in = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; - return port::Snappy_Compress(in.data(), in.size(), &out); -} - -TEST(TableTest, ApproximateOffsetOfCompressed) { - if (!SnappyCompressionSupported()) { - fprintf(stderr, "skipping compression tests\n"); - return; - } - - Random rnd(301); - TableConstructor c(BytewiseComparator()); - std::string tmp; - c.Add("k01", "hello"); - c.Add("k02", test::CompressibleString(&rnd, 0.25, 10000, &tmp)); - c.Add("k03", "hello3"); - c.Add("k04", test::CompressibleString(&rnd, 0.25, 10000, &tmp)); - std::vector keys; - KVMap kvmap; - Options options; - options.block_size = 1024; - options.compression = kSnappyCompression; - c.Finish(options, &keys, &kvmap); - - ASSERT_TRUE(Between(c.ApproximateOffsetOf("abc"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k01"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k02"), 0, 0)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k03"), 2000, 3000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("k04"), 2000, 3000)); - ASSERT_TRUE(Between(c.ApproximateOffsetOf("xyz"), 4000, 6000)); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/table/two_level_iterator.cc b/clipper/HyperLevelDB/table/two_level_iterator.cc deleted file mode 100644 index 72d41a2..0000000 --- a/clipper/HyperLevelDB/table/two_level_iterator.cc +++ /dev/null @@ -1,182 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "table/two_level_iterator.h" - -#include "hyperleveldb/table.h" -#include "table/block.h" -#include "table/format.h" -#include "table/iterator_wrapper.h" - -namespace leveldb { - -namespace { - -typedef Iterator* (*BlockFunction)(void*, const ReadOptions&, const Slice&); - -class TwoLevelIterator: public Iterator { - public: - TwoLevelIterator( - Iterator* index_iter, - BlockFunction block_function, - void* arg, - const ReadOptions& options); - - virtual ~TwoLevelIterator(); - - virtual void Seek(const Slice& target); - virtual void SeekToFirst(); - virtual void SeekToLast(); - virtual void Next(); - virtual void Prev(); - - virtual bool Valid() const { - return data_iter_.Valid(); - } - virtual Slice key() const { - assert(Valid()); - return data_iter_.key(); - } - virtual Slice value() const { - assert(Valid()); - return data_iter_.value(); - } - virtual Status status() const { - // It'd be nice if status() returned a const Status& instead of a Status - if (!index_iter_.status().ok()) { - return index_iter_.status(); - } else if (data_iter_.iter() != NULL && !data_iter_.status().ok()) { - return data_iter_.status(); - } else { - return status_; - } - } - - private: - void SaveError(const Status& s) { - if (status_.ok() && !s.ok()) status_ = s; - } - void SkipEmptyDataBlocksForward(); - void SkipEmptyDataBlocksBackward(); - void SetDataIterator(Iterator* data_iter); - void InitDataBlock(); - - BlockFunction block_function_; - void* arg_; - const ReadOptions options_; - Status status_; - IteratorWrapper index_iter_; - IteratorWrapper data_iter_; // May be NULL - // If data_iter_ is non-NULL, then "data_block_handle_" holds the - // "index_value" passed to block_function_ to create the data_iter_. - std::string data_block_handle_; -}; - -TwoLevelIterator::TwoLevelIterator( - Iterator* index_iter, - BlockFunction block_function, - void* arg, - const ReadOptions& options) - : block_function_(block_function), - arg_(arg), - options_(options), - index_iter_(index_iter), - data_iter_(NULL) { -} - -TwoLevelIterator::~TwoLevelIterator() { -} - -void TwoLevelIterator::Seek(const Slice& target) { - index_iter_.Seek(target); - InitDataBlock(); - if (data_iter_.iter() != NULL) data_iter_.Seek(target); - SkipEmptyDataBlocksForward(); -} - -void TwoLevelIterator::SeekToFirst() { - index_iter_.SeekToFirst(); - InitDataBlock(); - if (data_iter_.iter() != NULL) data_iter_.SeekToFirst(); - SkipEmptyDataBlocksForward(); -} - -void TwoLevelIterator::SeekToLast() { - index_iter_.SeekToLast(); - InitDataBlock(); - if (data_iter_.iter() != NULL) data_iter_.SeekToLast(); - SkipEmptyDataBlocksBackward(); -} - -void TwoLevelIterator::Next() { - assert(Valid()); - data_iter_.Next(); - SkipEmptyDataBlocksForward(); -} - -void TwoLevelIterator::Prev() { - assert(Valid()); - data_iter_.Prev(); - SkipEmptyDataBlocksBackward(); -} - - -void TwoLevelIterator::SkipEmptyDataBlocksForward() { - while (data_iter_.iter() == NULL || !data_iter_.Valid()) { - // Move to next block - if (!index_iter_.Valid()) { - SetDataIterator(NULL); - return; - } - index_iter_.Next(); - InitDataBlock(); - if (data_iter_.iter() != NULL) data_iter_.SeekToFirst(); - } -} - -void TwoLevelIterator::SkipEmptyDataBlocksBackward() { - while (data_iter_.iter() == NULL || !data_iter_.Valid()) { - // Move to next block - if (!index_iter_.Valid()) { - SetDataIterator(NULL); - return; - } - index_iter_.Prev(); - InitDataBlock(); - if (data_iter_.iter() != NULL) data_iter_.SeekToLast(); - } -} - -void TwoLevelIterator::SetDataIterator(Iterator* data_iter) { - if (data_iter_.iter() != NULL) SaveError(data_iter_.status()); - data_iter_.Set(data_iter); -} - -void TwoLevelIterator::InitDataBlock() { - if (!index_iter_.Valid()) { - SetDataIterator(NULL); - } else { - Slice handle = index_iter_.value(); - if (data_iter_.iter() != NULL && handle.compare(data_block_handle_) == 0) { - // data_iter_ is already constructed with this iterator, so - // no need to change anything - } else { - Iterator* iter = (*block_function_)(arg_, options_, handle); - data_block_handle_.assign(handle.data(), handle.size()); - SetDataIterator(iter); - } - } -} - -} // namespace - -Iterator* NewTwoLevelIterator( - Iterator* index_iter, - BlockFunction block_function, - void* arg, - const ReadOptions& options) { - return new TwoLevelIterator(index_iter, block_function, arg, options); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/table/two_level_iterator.h b/clipper/HyperLevelDB/table/two_level_iterator.h deleted file mode 100644 index dc737d5..0000000 --- a/clipper/HyperLevelDB/table/two_level_iterator.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_ -#define STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_ - -#include "hyperleveldb/iterator.h" - -namespace leveldb { - -struct ReadOptions; - -// Return a new two level iterator. A two-level iterator contains an -// index iterator whose values point to a sequence of blocks where -// each block is itself a sequence of key,value pairs. The returned -// two-level iterator yields the concatenation of all key/value pairs -// in the sequence of blocks. Takes ownership of "index_iter" and -// will delete it when no longer needed. -// -// Uses a supplied function to convert an index_iter value into -// an iterator over the contents of the corresponding block. -extern Iterator* NewTwoLevelIterator( - Iterator* index_iter, - Iterator* (*block_function)( - void* arg, - const ReadOptions& options, - const Slice& index_value), - void* arg, - const ReadOptions& options); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_TABLE_TWO_LEVEL_ITERATOR_H_ diff --git a/clipper/HyperLevelDB/util/arena.cc b/clipper/HyperLevelDB/util/arena.cc deleted file mode 100644 index 9367f71..0000000 --- a/clipper/HyperLevelDB/util/arena.cc +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/arena.h" -#include - -namespace leveldb { - -static const int kBlockSize = 4096; - -Arena::Arena() { - blocks_memory_ = 0; - alloc_ptr_ = NULL; // First allocation will allocate a block - alloc_bytes_remaining_ = 0; -} - -Arena::~Arena() { - for (size_t i = 0; i < blocks_.size(); i++) { - delete[] blocks_[i]; - } -} - -char* Arena::AllocateFallback(size_t bytes) { - if (bytes > kBlockSize / 4) { - // Object is more than a quarter of our block size. Allocate it separately - // to avoid wasting too much space in leftover bytes. - char* result = AllocateNewBlock(bytes); - return result; - } - - // We waste the remaining space in the current block. - alloc_ptr_ = AllocateNewBlock(kBlockSize); - alloc_bytes_remaining_ = kBlockSize; - - char* result = alloc_ptr_; - alloc_ptr_ += bytes; - alloc_bytes_remaining_ -= bytes; - return result; -} - -char* Arena::AllocateAligned(size_t bytes) { - const int align = (sizeof(void*) > 8) ? sizeof(void*) : 8; - assert((align & (align-1)) == 0); // Pointer size should be a power of 2 - size_t current_mod = reinterpret_cast(alloc_ptr_) & (align-1); - size_t slop = (current_mod == 0 ? 0 : align - current_mod); - size_t needed = bytes + slop; - char* result; - if (needed <= alloc_bytes_remaining_) { - result = alloc_ptr_ + slop; - alloc_ptr_ += needed; - alloc_bytes_remaining_ -= needed; - } else { - // AllocateFallback always returned aligned memory - result = AllocateFallback(bytes); - } - assert((reinterpret_cast(result) & (align-1)) == 0); - return result; -} - -char* Arena::AllocateNewBlock(size_t block_bytes) { - char* result = new char[block_bytes]; - blocks_memory_ += block_bytes; - blocks_.push_back(result); - return result; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/arena.h b/clipper/HyperLevelDB/util/arena.h deleted file mode 100644 index 73bbf1c..0000000 --- a/clipper/HyperLevelDB/util/arena.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_ARENA_H_ -#define STORAGE_LEVELDB_UTIL_ARENA_H_ - -#include -#include -#include -#include - -namespace leveldb { - -class Arena { - public: - Arena(); - ~Arena(); - - // Return a pointer to a newly allocated memory block of "bytes" bytes. - char* Allocate(size_t bytes); - - // Allocate memory with the normal alignment guarantees provided by malloc - char* AllocateAligned(size_t bytes); - - // Returns an estimate of the total memory usage of data allocated - // by the arena (including space allocated but not yet used for user - // allocations). - size_t MemoryUsage() const { - return blocks_memory_ + blocks_.capacity() * sizeof(char*); - } - - private: - char* AllocateFallback(size_t bytes); - char* AllocateNewBlock(size_t block_bytes); - - // Allocation state - char* alloc_ptr_; - size_t alloc_bytes_remaining_; - - // Array of new[] allocated memory blocks - std::vector blocks_; - - // Bytes of memory in blocks allocated so far - size_t blocks_memory_; - - // No copying allowed - Arena(const Arena&); - void operator=(const Arena&); -}; - -inline char* Arena::Allocate(size_t bytes) { - // The semantics of what to return are a bit messy if we allow - // 0-byte allocations, so we disallow them here (we don't need - // them for our internal use). - assert(bytes > 0); - if (bytes <= alloc_bytes_remaining_) { - char* result = alloc_ptr_; - alloc_ptr_ += bytes; - alloc_bytes_remaining_ -= bytes; - return result; - } - return AllocateFallback(bytes); -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_ARENA_H_ diff --git a/clipper/HyperLevelDB/util/arena_test.cc b/clipper/HyperLevelDB/util/arena_test.cc deleted file mode 100644 index 58e870e..0000000 --- a/clipper/HyperLevelDB/util/arena_test.cc +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/arena.h" - -#include "util/random.h" -#include "util/testharness.h" - -namespace leveldb { - -class ArenaTest { }; - -TEST(ArenaTest, Empty) { - Arena arena; -} - -TEST(ArenaTest, Simple) { - std::vector > allocated; - Arena arena; - const int N = 100000; - size_t bytes = 0; - Random rnd(301); - for (int i = 0; i < N; i++) { - size_t s; - if (i % (N / 10) == 0) { - s = i; - } else { - s = rnd.OneIn(4000) ? rnd.Uniform(6000) : - (rnd.OneIn(10) ? rnd.Uniform(100) : rnd.Uniform(20)); - } - if (s == 0) { - // Our arena disallows size 0 allocations. - s = 1; - } - char* r; - if (rnd.OneIn(10)) { - r = arena.AllocateAligned(s); - } else { - r = arena.Allocate(s); - } - - for (size_t b = 0; b < s; b++) { - // Fill the "i"th allocation with a known bit pattern - r[b] = i % 256; - } - bytes += s; - allocated.push_back(std::make_pair(s, r)); - ASSERT_GE(arena.MemoryUsage(), bytes); - if (i > N/10) { - ASSERT_LE(arena.MemoryUsage(), bytes * 1.10); - } - } - for (size_t i = 0; i < allocated.size(); i++) { - size_t num_bytes = allocated[i].first; - const char* p = allocated[i].second; - for (size_t b = 0; b < num_bytes; b++) { - // Check the "i"th allocation for the known bit pattern - ASSERT_EQ(int(p[b]) & 0xff, i % 256); - } - } -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/util/bloom.cc b/clipper/HyperLevelDB/util/bloom.cc deleted file mode 100644 index dd552a4..0000000 --- a/clipper/HyperLevelDB/util/bloom.cc +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/filter_policy.h" - -#include "hyperleveldb/slice.h" -#include "util/hash.h" - -namespace leveldb { - -namespace { -static uint32_t BloomHash(const Slice& key) { - return Hash(key.data(), key.size(), 0xbc9f1d34); -} - -class BloomFilterPolicy : public FilterPolicy { - private: - size_t bits_per_key_; - size_t k_; - - public: - explicit BloomFilterPolicy(int bits_per_key) - : bits_per_key_(bits_per_key) { - // We intentionally round down to reduce probing cost a little bit - k_ = static_cast(bits_per_key * 0.69); // 0.69 =~ ln(2) - if (k_ < 1) k_ = 1; - if (k_ > 30) k_ = 30; - } - - virtual const char* Name() const { - return "leveldb.BuiltinBloomFilter"; - } - - virtual void CreateFilter(const Slice* keys, int n, std::string* dst) const { - // Compute bloom filter size (in both bits and bytes) - size_t bits = n * bits_per_key_; - - // For small n, we can see a very high false positive rate. Fix it - // by enforcing a minimum bloom filter length. - if (bits < 64) bits = 64; - - size_t bytes = (bits + 7) / 8; - bits = bytes * 8; - - const size_t init_size = dst->size(); - dst->resize(init_size + bytes, 0); - dst->push_back(static_cast(k_)); // Remember # of probes in filter - char* array = &(*dst)[init_size]; - for (size_t i = 0; i < n; i++) { - // Use double-hashing to generate a sequence of hash values. - // See analysis in [Kirsch,Mitzenmacher 2006]. - uint32_t h = BloomHash(keys[i]); - const uint32_t delta = (h >> 17) | (h << 15); // Rotate right 17 bits - for (size_t j = 0; j < k_; j++) { - const uint32_t bitpos = h % bits; - array[bitpos/8] |= (1 << (bitpos % 8)); - h += delta; - } - } - } - - virtual bool KeyMayMatch(const Slice& key, const Slice& bloom_filter) const { - const size_t len = bloom_filter.size(); - if (len < 2) return false; - - const char* array = bloom_filter.data(); - const size_t bits = (len - 1) * 8; - - // Use the encoded k so that we can read filters generated by - // bloom filters created using different parameters. - const size_t k = array[len-1]; - if (k > 30) { - // Reserved for potentially new encodings for short bloom filters. - // Consider it a match. - return true; - } - - uint32_t h = BloomHash(key); - const uint32_t delta = (h >> 17) | (h << 15); // Rotate right 17 bits - for (size_t j = 0; j < k; j++) { - const uint32_t bitpos = h % bits; - if ((array[bitpos/8] & (1 << (bitpos % 8))) == 0) return false; - h += delta; - } - return true; - } -}; -} - -const FilterPolicy* NewBloomFilterPolicy(int bits_per_key) { - return new BloomFilterPolicy(bits_per_key); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/bloom_test.cc b/clipper/HyperLevelDB/util/bloom_test.cc deleted file mode 100644 index 6b7eaab..0000000 --- a/clipper/HyperLevelDB/util/bloom_test.cc +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/filter_policy.h" - -#include "util/coding.h" -#include "util/logging.h" -#include "util/testharness.h" -#include "util/testutil.h" - -namespace leveldb { - -static const int kVerbose = 1; - -static Slice Key(int i, char* buffer) { - EncodeFixed32(buffer, i); - return Slice(buffer, sizeof(uint32_t)); -} - -class BloomTest { - private: - const FilterPolicy* policy_; - std::string filter_; - std::vector keys_; - - public: - BloomTest() : policy_(NewBloomFilterPolicy(10)) { } - - ~BloomTest() { - delete policy_; - } - - void Reset() { - keys_.clear(); - filter_.clear(); - } - - void Add(const Slice& s) { - keys_.push_back(s.ToString()); - } - - void Build() { - std::vector key_slices; - for (size_t i = 0; i < keys_.size(); i++) { - key_slices.push_back(Slice(keys_[i])); - } - filter_.clear(); - policy_->CreateFilter(&key_slices[0], key_slices.size(), &filter_); - keys_.clear(); - if (kVerbose >= 2) DumpFilter(); - } - - size_t FilterSize() const { - return filter_.size(); - } - - void DumpFilter() { - fprintf(stderr, "F("); - for (size_t i = 0; i+1 < filter_.size(); i++) { - const unsigned int c = static_cast(filter_[i]); - for (int j = 0; j < 8; j++) { - fprintf(stderr, "%c", (c & (1 <KeyMayMatch(s, filter_); - } - - double FalsePositiveRate() { - char buffer[sizeof(int)]; - int result = 0; - for (int i = 0; i < 10000; i++) { - if (Matches(Key(i + 1000000000, buffer))) { - result++; - } - } - return result / 10000.0; - } -}; - -TEST(BloomTest, EmptyFilter) { - ASSERT_TRUE(! Matches("hello")); - ASSERT_TRUE(! Matches("world")); -} - -TEST(BloomTest, Small) { - Add("hello"); - Add("world"); - ASSERT_TRUE(Matches("hello")); - ASSERT_TRUE(Matches("world")); - ASSERT_TRUE(! Matches("x")); - ASSERT_TRUE(! Matches("foo")); -} - -static int NextLength(int length) { - if (length < 10) { - length += 1; - } else if (length < 100) { - length += 10; - } else if (length < 1000) { - length += 100; - } else { - length += 1000; - } - return length; -} - -TEST(BloomTest, VaryingLengths) { - char buffer[sizeof(int)]; - - // Count number of filters that significantly exceed the false positive rate - int mediocre_filters = 0; - int good_filters = 0; - - for (int length = 1; length <= 10000; length = NextLength(length)) { - Reset(); - for (int i = 0; i < length; i++) { - Add(Key(i, buffer)); - } - Build(); - - ASSERT_LE(FilterSize(), static_cast((length * 10 / 8) + 40)) - << length; - - // All added keys must match - for (int i = 0; i < length; i++) { - ASSERT_TRUE(Matches(Key(i, buffer))) - << "Length " << length << "; key " << i; - } - - // Check false positive rate - double rate = FalsePositiveRate(); - if (kVerbose >= 1) { - fprintf(stderr, "False positives: %5.2f%% @ length = %6d ; bytes = %6d\n", - rate*100.0, length, static_cast(FilterSize())); - } - ASSERT_LE(rate, 0.02); // Must not be over 2% - if (rate > 0.0125) mediocre_filters++; // Allowed, but not too often - else good_filters++; - } - if (kVerbose >= 1) { - fprintf(stderr, "Filters: %d good, %d mediocre\n", - good_filters, mediocre_filters); - } - ASSERT_LE(mediocre_filters, good_filters/5); -} - -// Different bits-per-byte - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/util/cache.cc b/clipper/HyperLevelDB/util/cache.cc deleted file mode 100644 index d96bae6..0000000 --- a/clipper/HyperLevelDB/util/cache.cc +++ /dev/null @@ -1,325 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include - -#include "hyperleveldb/cache.h" -#include "port/port.h" -#include "util/hash.h" -#include "util/mutexlock.h" - -namespace leveldb { - -Cache::~Cache() { -} - -namespace { - -// LRU cache implementation - -// An entry is a variable length heap-allocated structure. Entries -// are kept in a circular doubly linked list ordered by access time. -struct LRUHandle { - void* value; - void (*deleter)(const Slice&, void* value); - LRUHandle* next_hash; - LRUHandle* next; - LRUHandle* prev; - size_t charge; // TODO(opt): Only allow uint32_t? - size_t key_length; - uint32_t refs; - uint32_t hash; // Hash of key(); used for fast sharding and comparisons - char key_data[1]; // Beginning of key - - Slice key() const { - // For cheaper lookups, we allow a temporary Handle object - // to store a pointer to a key in "value". - if (next == this) { - return *(reinterpret_cast(value)); - } else { - return Slice(key_data, key_length); - } - } -}; - -// We provide our own simple hash table since it removes a whole bunch -// of porting hacks and is also faster than some of the built-in hash -// table implementations in some of the compiler/runtime combinations -// we have tested. E.g., readrandom speeds up by ~5% over the g++ -// 4.4.3's builtin hashtable. -class HandleTable { - public: - HandleTable() : length_(0), elems_(0), list_(NULL) { Resize(); } - ~HandleTable() { delete[] list_; } - - LRUHandle* Lookup(const Slice& key, uint32_t hash) { - return *FindPointer(key, hash); - } - - LRUHandle* Insert(LRUHandle* h) { - LRUHandle** ptr = FindPointer(h->key(), h->hash); - LRUHandle* old = *ptr; - h->next_hash = (old == NULL ? NULL : old->next_hash); - *ptr = h; - if (old == NULL) { - ++elems_; - if (elems_ > length_) { - // Since each cache entry is fairly large, we aim for a small - // average linked list length (<= 1). - Resize(); - } - } - return old; - } - - LRUHandle* Remove(const Slice& key, uint32_t hash) { - LRUHandle** ptr = FindPointer(key, hash); - LRUHandle* result = *ptr; - if (result != NULL) { - *ptr = result->next_hash; - --elems_; - } - return result; - } - - private: - // The table consists of an array of buckets where each bucket is - // a linked list of cache entries that hash into the bucket. - uint32_t length_; - uint32_t elems_; - LRUHandle** list_; - - // Return a pointer to slot that points to a cache entry that - // matches key/hash. If there is no such cache entry, return a - // pointer to the trailing slot in the corresponding linked list. - LRUHandle** FindPointer(const Slice& key, uint32_t hash) { - LRUHandle** ptr = &list_[hash & (length_ - 1)]; - while (*ptr != NULL && - ((*ptr)->hash != hash || key != (*ptr)->key())) { - ptr = &(*ptr)->next_hash; - } - return ptr; - } - - void Resize() { - uint32_t new_length = 4; - while (new_length < elems_) { - new_length *= 2; - } - LRUHandle** new_list = new LRUHandle*[new_length]; - memset(new_list, 0, sizeof(new_list[0]) * new_length); - uint32_t count = 0; - for (uint32_t i = 0; i < length_; i++) { - LRUHandle* h = list_[i]; - while (h != NULL) { - LRUHandle* next = h->next_hash; - uint32_t hash = h->hash; - LRUHandle** ptr = &new_list[hash & (new_length - 1)]; - h->next_hash = *ptr; - *ptr = h; - h = next; - count++; - } - } - assert(elems_ == count); - delete[] list_; - list_ = new_list; - length_ = new_length; - } -}; - -// A single shard of sharded cache. -class LRUCache { - public: - LRUCache(); - ~LRUCache(); - - // Separate from constructor so caller can easily make an array of LRUCache - void SetCapacity(size_t capacity) { capacity_ = capacity; } - - // Like Cache methods, but with an extra "hash" parameter. - Cache::Handle* Insert(const Slice& key, uint32_t hash, - void* value, size_t charge, - void (*deleter)(const Slice& key, void* value)); - Cache::Handle* Lookup(const Slice& key, uint32_t hash); - void Release(Cache::Handle* handle); - void Erase(const Slice& key, uint32_t hash); - - private: - void LRU_Remove(LRUHandle* e); - void LRU_Append(LRUHandle* e); - void Unref(LRUHandle* e); - - // Initialized before use. - size_t capacity_; - - // mutex_ protects the following state. - port::Mutex mutex_; - size_t usage_; - - // Dummy head of LRU list. - // lru.prev is newest entry, lru.next is oldest entry. - LRUHandle lru_; - - HandleTable table_; -}; - -LRUCache::LRUCache() - : usage_(0) { - // Make empty circular linked list - lru_.next = &lru_; - lru_.prev = &lru_; -} - -LRUCache::~LRUCache() { - for (LRUHandle* e = lru_.next; e != &lru_; ) { - LRUHandle* next = e->next; - assert(e->refs == 1); // Error if caller has an unreleased handle - Unref(e); - e = next; - } -} - -void LRUCache::Unref(LRUHandle* e) { - assert(e->refs > 0); - e->refs--; - if (e->refs <= 0) { - usage_ -= e->charge; - (*e->deleter)(e->key(), e->value); - free(e); - } -} - -void LRUCache::LRU_Remove(LRUHandle* e) { - e->next->prev = e->prev; - e->prev->next = e->next; -} - -void LRUCache::LRU_Append(LRUHandle* e) { - // Make "e" newest entry by inserting just before lru_ - e->next = &lru_; - e->prev = lru_.prev; - e->prev->next = e; - e->next->prev = e; -} - -Cache::Handle* LRUCache::Lookup(const Slice& key, uint32_t hash) { - MutexLock l(&mutex_); - LRUHandle* e = table_.Lookup(key, hash); - if (e != NULL) { - e->refs++; - LRU_Remove(e); - LRU_Append(e); - } - return reinterpret_cast(e); -} - -void LRUCache::Release(Cache::Handle* handle) { - MutexLock l(&mutex_); - Unref(reinterpret_cast(handle)); -} - -Cache::Handle* LRUCache::Insert( - const Slice& key, uint32_t hash, void* value, size_t charge, - void (*deleter)(const Slice& key, void* value)) { - MutexLock l(&mutex_); - - LRUHandle* e = reinterpret_cast( - malloc(sizeof(LRUHandle)-1 + key.size())); - e->value = value; - e->deleter = deleter; - e->charge = charge; - e->key_length = key.size(); - e->hash = hash; - e->refs = 2; // One from LRUCache, one for the returned handle - memcpy(e->key_data, key.data(), key.size()); - LRU_Append(e); - usage_ += charge; - - LRUHandle* old = table_.Insert(e); - if (old != NULL) { - LRU_Remove(old); - Unref(old); - } - - while (usage_ > capacity_ && lru_.next != &lru_) { - LRUHandle* old = lru_.next; - LRU_Remove(old); - table_.Remove(old->key(), old->hash); - Unref(old); - } - - return reinterpret_cast(e); -} - -void LRUCache::Erase(const Slice& key, uint32_t hash) { - MutexLock l(&mutex_); - LRUHandle* e = table_.Remove(key, hash); - if (e != NULL) { - LRU_Remove(e); - Unref(e); - } -} - -static const int kNumShardBits = 4; -static const int kNumShards = 1 << kNumShardBits; - -class ShardedLRUCache : public Cache { - private: - LRUCache shard_[kNumShards]; - port::Mutex id_mutex_; - uint64_t last_id_; - - static inline uint32_t HashSlice(const Slice& s) { - return Hash(s.data(), s.size(), 0); - } - - static uint32_t Shard(uint32_t hash) { - return hash >> (32 - kNumShardBits); - } - - public: - explicit ShardedLRUCache(size_t capacity) - : last_id_(0) { - const size_t per_shard = (capacity + (kNumShards - 1)) / kNumShards; - for (int s = 0; s < kNumShards; s++) { - shard_[s].SetCapacity(per_shard); - } - } - virtual ~ShardedLRUCache() { } - virtual Handle* Insert(const Slice& key, void* value, size_t charge, - void (*deleter)(const Slice& key, void* value)) { - const uint32_t hash = HashSlice(key); - return shard_[Shard(hash)].Insert(key, hash, value, charge, deleter); - } - virtual Handle* Lookup(const Slice& key) { - const uint32_t hash = HashSlice(key); - return shard_[Shard(hash)].Lookup(key, hash); - } - virtual void Release(Handle* handle) { - LRUHandle* h = reinterpret_cast(handle); - shard_[Shard(h->hash)].Release(handle); - } - virtual void Erase(const Slice& key) { - const uint32_t hash = HashSlice(key); - shard_[Shard(hash)].Erase(key, hash); - } - virtual void* Value(Handle* handle) { - return reinterpret_cast(handle)->value; - } - virtual uint64_t NewId() { - MutexLock l(&id_mutex_); - return ++(last_id_); - } -}; - -} // end anonymous namespace - -Cache* NewLRUCache(size_t capacity) { - return new ShardedLRUCache(capacity); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/cache_test.cc b/clipper/HyperLevelDB/util/cache_test.cc deleted file mode 100644 index 93348df..0000000 --- a/clipper/HyperLevelDB/util/cache_test.cc +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/cache.h" - -#include -#include "util/coding.h" -#include "util/testharness.h" - -namespace leveldb { - -// Conversions between numeric keys/values and the types expected by Cache. -static std::string EncodeKey(int k) { - std::string result; - PutFixed32(&result, k); - return result; -} -static int DecodeKey(const Slice& k) { - assert(k.size() == 4); - return DecodeFixed32(k.data()); -} -static void* EncodeValue(uintptr_t v) { return reinterpret_cast(v); } -static int DecodeValue(void* v) { return reinterpret_cast(v); } - -class CacheTest { - public: - static CacheTest* current_; - - static void Deleter(const Slice& key, void* v) { - current_->deleted_keys_.push_back(DecodeKey(key)); - current_->deleted_values_.push_back(DecodeValue(v)); - } - - static const int kCacheSize = 1000; - std::vector deleted_keys_; - std::vector deleted_values_; - Cache* cache_; - - CacheTest() : cache_(NewLRUCache(kCacheSize)) { - current_ = this; - } - - ~CacheTest() { - delete cache_; - } - - int Lookup(int key) { - Cache::Handle* handle = cache_->Lookup(EncodeKey(key)); - const int r = (handle == NULL) ? -1 : DecodeValue(cache_->Value(handle)); - if (handle != NULL) { - cache_->Release(handle); - } - return r; - } - - void Insert(int key, int value, int charge = 1) { - cache_->Release(cache_->Insert(EncodeKey(key), EncodeValue(value), charge, - &CacheTest::Deleter)); - } - - void Erase(int key) { - cache_->Erase(EncodeKey(key)); - } -}; -CacheTest* CacheTest::current_; - -TEST(CacheTest, HitAndMiss) { - ASSERT_EQ(-1, Lookup(100)); - - Insert(100, 101); - ASSERT_EQ(101, Lookup(100)); - ASSERT_EQ(-1, Lookup(200)); - ASSERT_EQ(-1, Lookup(300)); - - Insert(200, 201); - ASSERT_EQ(101, Lookup(100)); - ASSERT_EQ(201, Lookup(200)); - ASSERT_EQ(-1, Lookup(300)); - - Insert(100, 102); - ASSERT_EQ(102, Lookup(100)); - ASSERT_EQ(201, Lookup(200)); - ASSERT_EQ(-1, Lookup(300)); - - ASSERT_EQ(1, deleted_keys_.size()); - ASSERT_EQ(100, deleted_keys_[0]); - ASSERT_EQ(101, deleted_values_[0]); -} - -TEST(CacheTest, Erase) { - Erase(200); - ASSERT_EQ(0, deleted_keys_.size()); - - Insert(100, 101); - Insert(200, 201); - Erase(100); - ASSERT_EQ(-1, Lookup(100)); - ASSERT_EQ(201, Lookup(200)); - ASSERT_EQ(1, deleted_keys_.size()); - ASSERT_EQ(100, deleted_keys_[0]); - ASSERT_EQ(101, deleted_values_[0]); - - Erase(100); - ASSERT_EQ(-1, Lookup(100)); - ASSERT_EQ(201, Lookup(200)); - ASSERT_EQ(1, deleted_keys_.size()); -} - -TEST(CacheTest, EntriesArePinned) { - Insert(100, 101); - Cache::Handle* h1 = cache_->Lookup(EncodeKey(100)); - ASSERT_EQ(101, DecodeValue(cache_->Value(h1))); - - Insert(100, 102); - Cache::Handle* h2 = cache_->Lookup(EncodeKey(100)); - ASSERT_EQ(102, DecodeValue(cache_->Value(h2))); - ASSERT_EQ(0, deleted_keys_.size()); - - cache_->Release(h1); - ASSERT_EQ(1, deleted_keys_.size()); - ASSERT_EQ(100, deleted_keys_[0]); - ASSERT_EQ(101, deleted_values_[0]); - - Erase(100); - ASSERT_EQ(-1, Lookup(100)); - ASSERT_EQ(1, deleted_keys_.size()); - - cache_->Release(h2); - ASSERT_EQ(2, deleted_keys_.size()); - ASSERT_EQ(100, deleted_keys_[1]); - ASSERT_EQ(102, deleted_values_[1]); -} - -TEST(CacheTest, EvictionPolicy) { - Insert(100, 101); - Insert(200, 201); - - // Frequently used entry must be kept around - for (int i = 0; i < kCacheSize + 100; i++) { - Insert(1000+i, 2000+i); - ASSERT_EQ(2000+i, Lookup(1000+i)); - ASSERT_EQ(101, Lookup(100)); - } - ASSERT_EQ(101, Lookup(100)); - ASSERT_EQ(-1, Lookup(200)); -} - -TEST(CacheTest, HeavyEntries) { - // Add a bunch of light and heavy entries and then count the combined - // size of items still in the cache, which must be approximately the - // same as the total capacity. - const int kLight = 1; - const int kHeavy = 10; - int added = 0; - int index = 0; - while (added < 2*kCacheSize) { - const int weight = (index & 1) ? kLight : kHeavy; - Insert(index, 1000+index, weight); - added += weight; - index++; - } - - int cached_weight = 0; - for (int i = 0; i < index; i++) { - const int weight = (i & 1 ? kLight : kHeavy); - int r = Lookup(i); - if (r >= 0) { - cached_weight += weight; - ASSERT_EQ(1000+i, r); - } - } - ASSERT_LE(cached_weight, kCacheSize + kCacheSize/10); -} - -TEST(CacheTest, NewId) { - uint64_t a = cache_->NewId(); - uint64_t b = cache_->NewId(); - ASSERT_NE(a, b); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/util/coding.cc b/clipper/HyperLevelDB/util/coding.cc deleted file mode 100644 index 21e3186..0000000 --- a/clipper/HyperLevelDB/util/coding.cc +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/coding.h" - -namespace leveldb { - -void EncodeFixed32(char* buf, uint32_t value) { - if (port::kLittleEndian) { - memcpy(buf, &value, sizeof(value)); - } else { - buf[0] = value & 0xff; - buf[1] = (value >> 8) & 0xff; - buf[2] = (value >> 16) & 0xff; - buf[3] = (value >> 24) & 0xff; - } -} - -void EncodeFixed64(char* buf, uint64_t value) { - if (port::kLittleEndian) { - memcpy(buf, &value, sizeof(value)); - } else { - buf[0] = value & 0xff; - buf[1] = (value >> 8) & 0xff; - buf[2] = (value >> 16) & 0xff; - buf[3] = (value >> 24) & 0xff; - buf[4] = (value >> 32) & 0xff; - buf[5] = (value >> 40) & 0xff; - buf[6] = (value >> 48) & 0xff; - buf[7] = (value >> 56) & 0xff; - } -} - -void PutFixed32(std::string* dst, uint32_t value) { - char buf[sizeof(value)]; - EncodeFixed32(buf, value); - dst->append(buf, sizeof(buf)); -} - -void PutFixed64(std::string* dst, uint64_t value) { - char buf[sizeof(value)]; - EncodeFixed64(buf, value); - dst->append(buf, sizeof(buf)); -} - -char* EncodeVarint32(char* dst, uint32_t v) { - // Operate on characters as unsigneds - unsigned char* ptr = reinterpret_cast(dst); - static const int B = 128; - if (v < (1<<7)) { - *(ptr++) = v; - } else if (v < (1<<14)) { - *(ptr++) = v | B; - *(ptr++) = v>>7; - } else if (v < (1<<21)) { - *(ptr++) = v | B; - *(ptr++) = (v>>7) | B; - *(ptr++) = v>>14; - } else if (v < (1<<28)) { - *(ptr++) = v | B; - *(ptr++) = (v>>7) | B; - *(ptr++) = (v>>14) | B; - *(ptr++) = v>>21; - } else { - *(ptr++) = v | B; - *(ptr++) = (v>>7) | B; - *(ptr++) = (v>>14) | B; - *(ptr++) = (v>>21) | B; - *(ptr++) = v>>28; - } - return reinterpret_cast(ptr); -} - -void PutVarint32(std::string* dst, uint32_t v) { - char buf[5]; - char* ptr = EncodeVarint32(buf, v); - dst->append(buf, ptr - buf); -} - -char* EncodeVarint64(char* dst, uint64_t v) { - static const int B = 128; - unsigned char* ptr = reinterpret_cast(dst); - while (v >= B) { - *(ptr++) = (v & (B-1)) | B; - v >>= 7; - } - *(ptr++) = static_cast(v); - return reinterpret_cast(ptr); -} - -void PutVarint64(std::string* dst, uint64_t v) { - char buf[10]; - char* ptr = EncodeVarint64(buf, v); - dst->append(buf, ptr - buf); -} - -void PutLengthPrefixedSlice(std::string* dst, const Slice& value) { - PutVarint32(dst, value.size()); - dst->append(value.data(), value.size()); -} - -int VarintLength(uint64_t v) { - int len = 1; - while (v >= 128) { - v >>= 7; - len++; - } - return len; -} - -const char* GetVarint32PtrFallback(const char* p, - const char* limit, - uint32_t* value) { - uint32_t result = 0; - for (uint32_t shift = 0; shift <= 28 && p < limit; shift += 7) { - uint32_t byte = *(reinterpret_cast(p)); - p++; - if (byte & 128) { - // More bytes are present - result |= ((byte & 127) << shift); - } else { - result |= (byte << shift); - *value = result; - return reinterpret_cast(p); - } - } - return NULL; -} - -bool GetVarint32(Slice* input, uint32_t* value) { - const char* p = input->data(); - const char* limit = p + input->size(); - const char* q = GetVarint32Ptr(p, limit, value); - if (q == NULL) { - return false; - } else { - *input = Slice(q, limit - q); - return true; - } -} - -const char* GetVarint64Ptr(const char* p, const char* limit, uint64_t* value) { - uint64_t result = 0; - for (uint32_t shift = 0; shift <= 63 && p < limit; shift += 7) { - uint64_t byte = *(reinterpret_cast(p)); - p++; - if (byte & 128) { - // More bytes are present - result |= ((byte & 127) << shift); - } else { - result |= (byte << shift); - *value = result; - return reinterpret_cast(p); - } - } - return NULL; -} - -bool GetVarint64(Slice* input, uint64_t* value) { - const char* p = input->data(); - const char* limit = p + input->size(); - const char* q = GetVarint64Ptr(p, limit, value); - if (q == NULL) { - return false; - } else { - *input = Slice(q, limit - q); - return true; - } -} - -const char* GetLengthPrefixedSlice(const char* p, const char* limit, - Slice* result) { - uint32_t len; - p = GetVarint32Ptr(p, limit, &len); - if (p == NULL) return NULL; - if (p + len > limit) return NULL; - *result = Slice(p, len); - return p + len; -} - -bool GetLengthPrefixedSlice(Slice* input, Slice* result) { - uint32_t len; - if (GetVarint32(input, &len) && - input->size() >= len) { - *result = Slice(input->data(), len); - input->remove_prefix(len); - return true; - } else { - return false; - } -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/coding.h b/clipper/HyperLevelDB/util/coding.h deleted file mode 100644 index ec71a51..0000000 --- a/clipper/HyperLevelDB/util/coding.h +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Endian-neutral encoding: -// * Fixed-length numbers are encoded with least-significant byte first -// * In addition we support variable length "varint" encoding -// * Strings are encoded prefixed by their length in varint format - -#ifndef STORAGE_LEVELDB_UTIL_CODING_H_ -#define STORAGE_LEVELDB_UTIL_CODING_H_ - -#include -#include -#include -#include "hyperleveldb/slice.h" -#include "port/port.h" - -namespace leveldb { - -// Standard Put... routines append to a string -extern void PutFixed32(std::string* dst, uint32_t value); -extern void PutFixed64(std::string* dst, uint64_t value); -extern void PutVarint32(std::string* dst, uint32_t value); -extern void PutVarint64(std::string* dst, uint64_t value); -extern void PutLengthPrefixedSlice(std::string* dst, const Slice& value); - -// Standard Get... routines parse a value from the beginning of a Slice -// and advance the slice past the parsed value. -extern bool GetVarint32(Slice* input, uint32_t* value); -extern bool GetVarint64(Slice* input, uint64_t* value); -extern bool GetLengthPrefixedSlice(Slice* input, Slice* result); - -// Pointer-based variants of GetVarint... These either store a value -// in *v and return a pointer just past the parsed value, or return -// NULL on error. These routines only look at bytes in the range -// [p..limit-1] -extern const char* GetVarint32Ptr(const char* p,const char* limit, uint32_t* v); -extern const char* GetVarint64Ptr(const char* p,const char* limit, uint64_t* v); - -// Returns the length of the varint32 or varint64 encoding of "v" -extern int VarintLength(uint64_t v); - -// Lower-level versions of Put... that write directly into a character buffer -// REQUIRES: dst has enough space for the value being written -extern void EncodeFixed32(char* dst, uint32_t value); -extern void EncodeFixed64(char* dst, uint64_t value); - -// Lower-level versions of Put... that write directly into a character buffer -// and return a pointer just past the last byte written. -// REQUIRES: dst has enough space for the value being written -extern char* EncodeVarint32(char* dst, uint32_t value); -extern char* EncodeVarint64(char* dst, uint64_t value); - -// Lower-level versions of Get... that read directly from a character buffer -// without any bounds checking. - -inline uint32_t DecodeFixed32(const char* ptr) { - if (port::kLittleEndian) { - // Load the raw bytes - uint32_t result; - memcpy(&result, ptr, sizeof(result)); // gcc optimizes this to a plain load - return result; - } else { - return ((static_cast(static_cast(ptr[0]))) - | (static_cast(static_cast(ptr[1])) << 8) - | (static_cast(static_cast(ptr[2])) << 16) - | (static_cast(static_cast(ptr[3])) << 24)); - } -} - -inline uint64_t DecodeFixed64(const char* ptr) { - if (port::kLittleEndian) { - // Load the raw bytes - uint64_t result; - memcpy(&result, ptr, sizeof(result)); // gcc optimizes this to a plain load - return result; - } else { - uint64_t lo = DecodeFixed32(ptr); - uint64_t hi = DecodeFixed32(ptr + 4); - return (hi << 32) | lo; - } -} - -// Internal routine for use by fallback path of GetVarint32Ptr -extern const char* GetVarint32PtrFallback(const char* p, - const char* limit, - uint32_t* value); -inline const char* GetVarint32Ptr(const char* p, - const char* limit, - uint32_t* value) { - if (p < limit) { - uint32_t result = *(reinterpret_cast(p)); - if ((result & 128) == 0) { - *value = result; - return p + 1; - } - } - return GetVarint32PtrFallback(p, limit, value); -} - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_CODING_H_ diff --git a/clipper/HyperLevelDB/util/coding_test.cc b/clipper/HyperLevelDB/util/coding_test.cc deleted file mode 100644 index 521541e..0000000 --- a/clipper/HyperLevelDB/util/coding_test.cc +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/coding.h" - -#include "util/testharness.h" - -namespace leveldb { - -class Coding { }; - -TEST(Coding, Fixed32) { - std::string s; - for (uint32_t v = 0; v < 100000; v++) { - PutFixed32(&s, v); - } - - const char* p = s.data(); - for (uint32_t v = 0; v < 100000; v++) { - uint32_t actual = DecodeFixed32(p); - ASSERT_EQ(v, actual); - p += sizeof(uint32_t); - } -} - -TEST(Coding, Fixed64) { - std::string s; - for (int power = 0; power <= 63; power++) { - uint64_t v = static_cast(1) << power; - PutFixed64(&s, v - 1); - PutFixed64(&s, v + 0); - PutFixed64(&s, v + 1); - } - - const char* p = s.data(); - for (int power = 0; power <= 63; power++) { - uint64_t v = static_cast(1) << power; - uint64_t actual; - actual = DecodeFixed64(p); - ASSERT_EQ(v-1, actual); - p += sizeof(uint64_t); - - actual = DecodeFixed64(p); - ASSERT_EQ(v+0, actual); - p += sizeof(uint64_t); - - actual = DecodeFixed64(p); - ASSERT_EQ(v+1, actual); - p += sizeof(uint64_t); - } -} - -// Test that encoding routines generate little-endian encodings -TEST(Coding, EncodingOutput) { - std::string dst; - PutFixed32(&dst, 0x04030201); - ASSERT_EQ(4, dst.size()); - ASSERT_EQ(0x01, static_cast(dst[0])); - ASSERT_EQ(0x02, static_cast(dst[1])); - ASSERT_EQ(0x03, static_cast(dst[2])); - ASSERT_EQ(0x04, static_cast(dst[3])); - - dst.clear(); - PutFixed64(&dst, 0x0807060504030201ull); - ASSERT_EQ(8, dst.size()); - ASSERT_EQ(0x01, static_cast(dst[0])); - ASSERT_EQ(0x02, static_cast(dst[1])); - ASSERT_EQ(0x03, static_cast(dst[2])); - ASSERT_EQ(0x04, static_cast(dst[3])); - ASSERT_EQ(0x05, static_cast(dst[4])); - ASSERT_EQ(0x06, static_cast(dst[5])); - ASSERT_EQ(0x07, static_cast(dst[6])); - ASSERT_EQ(0x08, static_cast(dst[7])); -} - -TEST(Coding, Varint32) { - std::string s; - for (uint32_t i = 0; i < (32 * 32); i++) { - uint32_t v = (i / 32) << (i % 32); - PutVarint32(&s, v); - } - - const char* p = s.data(); - const char* limit = p + s.size(); - for (uint32_t i = 0; i < (32 * 32); i++) { - uint32_t expected = (i / 32) << (i % 32); - uint32_t actual; - const char* start = p; - p = GetVarint32Ptr(p, limit, &actual); - ASSERT_TRUE(p != NULL); - ASSERT_EQ(expected, actual); - ASSERT_EQ(VarintLength(actual), p - start); - } - ASSERT_EQ(p, s.data() + s.size()); -} - -TEST(Coding, Varint64) { - // Construct the list of values to check - std::vector values; - // Some special values - values.push_back(0); - values.push_back(100); - values.push_back(~static_cast(0)); - values.push_back(~static_cast(0) - 1); - for (uint32_t k = 0; k < 64; k++) { - // Test values near powers of two - const uint64_t power = 1ull << k; - values.push_back(power); - values.push_back(power-1); - values.push_back(power+1); - } - - std::string s; - for (size_t i = 0; i < values.size(); i++) { - PutVarint64(&s, values[i]); - } - - const char* p = s.data(); - const char* limit = p + s.size(); - for (size_t i = 0; i < values.size(); i++) { - ASSERT_TRUE(p < limit); - uint64_t actual; - const char* start = p; - p = GetVarint64Ptr(p, limit, &actual); - ASSERT_TRUE(p != NULL); - ASSERT_EQ(values[i], actual); - ASSERT_EQ(VarintLength(actual), p - start); - } - ASSERT_EQ(p, limit); - -} - -TEST(Coding, Varint32Overflow) { - uint32_t result; - std::string input("\x81\x82\x83\x84\x85\x11"); - ASSERT_TRUE(GetVarint32Ptr(input.data(), input.data() + input.size(), &result) - == NULL); -} - -TEST(Coding, Varint32Truncation) { - uint32_t large_value = (1u << 31) + 100; - std::string s; - PutVarint32(&s, large_value); - uint32_t result; - for (size_t len = 0; len < s.size() - 1; len++) { - ASSERT_TRUE(GetVarint32Ptr(s.data(), s.data() + len, &result) == NULL); - } - ASSERT_TRUE(GetVarint32Ptr(s.data(), s.data() + s.size(), &result) != NULL); - ASSERT_EQ(large_value, result); -} - -TEST(Coding, Varint64Overflow) { - uint64_t result; - std::string input("\x81\x82\x83\x84\x85\x81\x82\x83\x84\x85\x11"); - ASSERT_TRUE(GetVarint64Ptr(input.data(), input.data() + input.size(), &result) - == NULL); -} - -TEST(Coding, Varint64Truncation) { - uint64_t large_value = (1ull << 63) + 100ull; - std::string s; - PutVarint64(&s, large_value); - uint64_t result; - for (size_t len = 0; len < s.size() - 1; len++) { - ASSERT_TRUE(GetVarint64Ptr(s.data(), s.data() + len, &result) == NULL); - } - ASSERT_TRUE(GetVarint64Ptr(s.data(), s.data() + s.size(), &result) != NULL); - ASSERT_EQ(large_value, result); -} - -TEST(Coding, Strings) { - std::string s; - PutLengthPrefixedSlice(&s, Slice("")); - PutLengthPrefixedSlice(&s, Slice("foo")); - PutLengthPrefixedSlice(&s, Slice("bar")); - PutLengthPrefixedSlice(&s, Slice(std::string(200, 'x'))); - - Slice input(s); - Slice v; - ASSERT_TRUE(GetLengthPrefixedSlice(&input, &v)); - ASSERT_EQ("", v.ToString()); - ASSERT_TRUE(GetLengthPrefixedSlice(&input, &v)); - ASSERT_EQ("foo", v.ToString()); - ASSERT_TRUE(GetLengthPrefixedSlice(&input, &v)); - ASSERT_EQ("bar", v.ToString()); - ASSERT_TRUE(GetLengthPrefixedSlice(&input, &v)); - ASSERT_EQ(std::string(200, 'x'), v.ToString()); - ASSERT_EQ("", input.ToString()); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/util/comparator.cc b/clipper/HyperLevelDB/util/comparator.cc deleted file mode 100644 index 594c97d..0000000 --- a/clipper/HyperLevelDB/util/comparator.cc +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include "hyperleveldb/comparator.h" -#include "hyperleveldb/slice.h" -#include "port/port.h" -#include "util/coding.h" -#include "util/logging.h" - -namespace leveldb { - -Comparator::~Comparator() { } - -uint64_t Comparator::KeyNum(const Slice& key) const { - return 0; -} - -namespace { -class BytewiseComparatorImpl : public Comparator { - public: - BytewiseComparatorImpl() { } - - virtual const char* Name() const { - return "leveldb.BytewiseComparator"; - } - - virtual int Compare(const Slice& a, const Slice& b) const { - return a.compare(b); - } - - virtual void FindShortestSeparator( - std::string* start, - const Slice& limit) const { - // Find length of common prefix - size_t min_length = std::min(start->size(), limit.size()); - size_t diff_index = 0; - while ((diff_index < min_length) && - ((*start)[diff_index] == limit[diff_index])) { - diff_index++; - } - - if (diff_index >= min_length) { - // Do not shorten if one string is a prefix of the other - } else { - uint8_t diff_byte = static_cast((*start)[diff_index]); - if (diff_byte < static_cast(0xff) && - diff_byte + 1 < static_cast(limit[diff_index])) { - (*start)[diff_index]++; - start->resize(diff_index + 1); - assert(Compare(*start, limit) < 0); - } - } - } - - virtual void FindShortSuccessor(std::string* key) const { - // Find first character that can be incremented - size_t n = key->size(); - for (size_t i = 0; i < n; i++) { - const uint8_t byte = (*key)[i]; - if (byte != static_cast(0xff)) { - (*key)[i] = byte + 1; - key->resize(i+1); - return; - } - } - // *key is a run of 0xffs. Leave it alone. - } - - virtual uint64_t KeyNum(const Slice& key) const { - unsigned char buf[sizeof(uint64_t)]; - memset(buf, 0, sizeof(buf)); - memmove(buf, key.data(), std::min(key.size(), sizeof(uint64_t))); - uint64_t number; - number = static_cast(buf[0]) << 56 - | static_cast(buf[1]) << 48 - | static_cast(buf[2]) << 40 - | static_cast(buf[3]) << 32 - | static_cast(buf[4]) << 24 - | static_cast(buf[5]) << 16 - | static_cast(buf[6]) << 8 - | static_cast(buf[7]); - return number; - } -}; -} // namespace - -static port::OnceType once = LEVELDB_ONCE_INIT; -static const Comparator* bytewise; - -static void InitModule() { - bytewise = new BytewiseComparatorImpl; -} - -const Comparator* BytewiseComparator() { - port::InitOnce(&once, InitModule); - return bytewise; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/crc32c.cc b/clipper/HyperLevelDB/util/crc32c.cc deleted file mode 100644 index 6db9e77..0000000 --- a/clipper/HyperLevelDB/util/crc32c.cc +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// A portable implementation of crc32c, optimized to handle -// four bytes at a time. - -#include "util/crc32c.h" - -#include -#include "util/coding.h" - -namespace leveldb { -namespace crc32c { - -static const uint32_t table0_[256] = { - 0x00000000, 0xf26b8303, 0xe13b70f7, 0x1350f3f4, - 0xc79a971f, 0x35f1141c, 0x26a1e7e8, 0xd4ca64eb, - 0x8ad958cf, 0x78b2dbcc, 0x6be22838, 0x9989ab3b, - 0x4d43cfd0, 0xbf284cd3, 0xac78bf27, 0x5e133c24, - 0x105ec76f, 0xe235446c, 0xf165b798, 0x030e349b, - 0xd7c45070, 0x25afd373, 0x36ff2087, 0xc494a384, - 0x9a879fa0, 0x68ec1ca3, 0x7bbcef57, 0x89d76c54, - 0x5d1d08bf, 0xaf768bbc, 0xbc267848, 0x4e4dfb4b, - 0x20bd8ede, 0xd2d60ddd, 0xc186fe29, 0x33ed7d2a, - 0xe72719c1, 0x154c9ac2, 0x061c6936, 0xf477ea35, - 0xaa64d611, 0x580f5512, 0x4b5fa6e6, 0xb93425e5, - 0x6dfe410e, 0x9f95c20d, 0x8cc531f9, 0x7eaeb2fa, - 0x30e349b1, 0xc288cab2, 0xd1d83946, 0x23b3ba45, - 0xf779deae, 0x05125dad, 0x1642ae59, 0xe4292d5a, - 0xba3a117e, 0x4851927d, 0x5b016189, 0xa96ae28a, - 0x7da08661, 0x8fcb0562, 0x9c9bf696, 0x6ef07595, - 0x417b1dbc, 0xb3109ebf, 0xa0406d4b, 0x522bee48, - 0x86e18aa3, 0x748a09a0, 0x67dafa54, 0x95b17957, - 0xcba24573, 0x39c9c670, 0x2a993584, 0xd8f2b687, - 0x0c38d26c, 0xfe53516f, 0xed03a29b, 0x1f682198, - 0x5125dad3, 0xa34e59d0, 0xb01eaa24, 0x42752927, - 0x96bf4dcc, 0x64d4cecf, 0x77843d3b, 0x85efbe38, - 0xdbfc821c, 0x2997011f, 0x3ac7f2eb, 0xc8ac71e8, - 0x1c661503, 0xee0d9600, 0xfd5d65f4, 0x0f36e6f7, - 0x61c69362, 0x93ad1061, 0x80fde395, 0x72966096, - 0xa65c047d, 0x5437877e, 0x4767748a, 0xb50cf789, - 0xeb1fcbad, 0x197448ae, 0x0a24bb5a, 0xf84f3859, - 0x2c855cb2, 0xdeeedfb1, 0xcdbe2c45, 0x3fd5af46, - 0x7198540d, 0x83f3d70e, 0x90a324fa, 0x62c8a7f9, - 0xb602c312, 0x44694011, 0x5739b3e5, 0xa55230e6, - 0xfb410cc2, 0x092a8fc1, 0x1a7a7c35, 0xe811ff36, - 0x3cdb9bdd, 0xceb018de, 0xdde0eb2a, 0x2f8b6829, - 0x82f63b78, 0x709db87b, 0x63cd4b8f, 0x91a6c88c, - 0x456cac67, 0xb7072f64, 0xa457dc90, 0x563c5f93, - 0x082f63b7, 0xfa44e0b4, 0xe9141340, 0x1b7f9043, - 0xcfb5f4a8, 0x3dde77ab, 0x2e8e845f, 0xdce5075c, - 0x92a8fc17, 0x60c37f14, 0x73938ce0, 0x81f80fe3, - 0x55326b08, 0xa759e80b, 0xb4091bff, 0x466298fc, - 0x1871a4d8, 0xea1a27db, 0xf94ad42f, 0x0b21572c, - 0xdfeb33c7, 0x2d80b0c4, 0x3ed04330, 0xccbbc033, - 0xa24bb5a6, 0x502036a5, 0x4370c551, 0xb11b4652, - 0x65d122b9, 0x97baa1ba, 0x84ea524e, 0x7681d14d, - 0x2892ed69, 0xdaf96e6a, 0xc9a99d9e, 0x3bc21e9d, - 0xef087a76, 0x1d63f975, 0x0e330a81, 0xfc588982, - 0xb21572c9, 0x407ef1ca, 0x532e023e, 0xa145813d, - 0x758fe5d6, 0x87e466d5, 0x94b49521, 0x66df1622, - 0x38cc2a06, 0xcaa7a905, 0xd9f75af1, 0x2b9cd9f2, - 0xff56bd19, 0x0d3d3e1a, 0x1e6dcdee, 0xec064eed, - 0xc38d26c4, 0x31e6a5c7, 0x22b65633, 0xd0ddd530, - 0x0417b1db, 0xf67c32d8, 0xe52cc12c, 0x1747422f, - 0x49547e0b, 0xbb3ffd08, 0xa86f0efc, 0x5a048dff, - 0x8ecee914, 0x7ca56a17, 0x6ff599e3, 0x9d9e1ae0, - 0xd3d3e1ab, 0x21b862a8, 0x32e8915c, 0xc083125f, - 0x144976b4, 0xe622f5b7, 0xf5720643, 0x07198540, - 0x590ab964, 0xab613a67, 0xb831c993, 0x4a5a4a90, - 0x9e902e7b, 0x6cfbad78, 0x7fab5e8c, 0x8dc0dd8f, - 0xe330a81a, 0x115b2b19, 0x020bd8ed, 0xf0605bee, - 0x24aa3f05, 0xd6c1bc06, 0xc5914ff2, 0x37faccf1, - 0x69e9f0d5, 0x9b8273d6, 0x88d28022, 0x7ab90321, - 0xae7367ca, 0x5c18e4c9, 0x4f48173d, 0xbd23943e, - 0xf36e6f75, 0x0105ec76, 0x12551f82, 0xe03e9c81, - 0x34f4f86a, 0xc69f7b69, 0xd5cf889d, 0x27a40b9e, - 0x79b737ba, 0x8bdcb4b9, 0x988c474d, 0x6ae7c44e, - 0xbe2da0a5, 0x4c4623a6, 0x5f16d052, 0xad7d5351 -}; -static const uint32_t table1_[256] = { - 0x00000000, 0x13a29877, 0x274530ee, 0x34e7a899, - 0x4e8a61dc, 0x5d28f9ab, 0x69cf5132, 0x7a6dc945, - 0x9d14c3b8, 0x8eb65bcf, 0xba51f356, 0xa9f36b21, - 0xd39ea264, 0xc03c3a13, 0xf4db928a, 0xe7790afd, - 0x3fc5f181, 0x2c6769f6, 0x1880c16f, 0x0b225918, - 0x714f905d, 0x62ed082a, 0x560aa0b3, 0x45a838c4, - 0xa2d13239, 0xb173aa4e, 0x859402d7, 0x96369aa0, - 0xec5b53e5, 0xfff9cb92, 0xcb1e630b, 0xd8bcfb7c, - 0x7f8be302, 0x6c297b75, 0x58ced3ec, 0x4b6c4b9b, - 0x310182de, 0x22a31aa9, 0x1644b230, 0x05e62a47, - 0xe29f20ba, 0xf13db8cd, 0xc5da1054, 0xd6788823, - 0xac154166, 0xbfb7d911, 0x8b507188, 0x98f2e9ff, - 0x404e1283, 0x53ec8af4, 0x670b226d, 0x74a9ba1a, - 0x0ec4735f, 0x1d66eb28, 0x298143b1, 0x3a23dbc6, - 0xdd5ad13b, 0xcef8494c, 0xfa1fe1d5, 0xe9bd79a2, - 0x93d0b0e7, 0x80722890, 0xb4958009, 0xa737187e, - 0xff17c604, 0xecb55e73, 0xd852f6ea, 0xcbf06e9d, - 0xb19da7d8, 0xa23f3faf, 0x96d89736, 0x857a0f41, - 0x620305bc, 0x71a19dcb, 0x45463552, 0x56e4ad25, - 0x2c896460, 0x3f2bfc17, 0x0bcc548e, 0x186eccf9, - 0xc0d23785, 0xd370aff2, 0xe797076b, 0xf4359f1c, - 0x8e585659, 0x9dface2e, 0xa91d66b7, 0xbabffec0, - 0x5dc6f43d, 0x4e646c4a, 0x7a83c4d3, 0x69215ca4, - 0x134c95e1, 0x00ee0d96, 0x3409a50f, 0x27ab3d78, - 0x809c2506, 0x933ebd71, 0xa7d915e8, 0xb47b8d9f, - 0xce1644da, 0xddb4dcad, 0xe9537434, 0xfaf1ec43, - 0x1d88e6be, 0x0e2a7ec9, 0x3acdd650, 0x296f4e27, - 0x53028762, 0x40a01f15, 0x7447b78c, 0x67e52ffb, - 0xbf59d487, 0xacfb4cf0, 0x981ce469, 0x8bbe7c1e, - 0xf1d3b55b, 0xe2712d2c, 0xd69685b5, 0xc5341dc2, - 0x224d173f, 0x31ef8f48, 0x050827d1, 0x16aabfa6, - 0x6cc776e3, 0x7f65ee94, 0x4b82460d, 0x5820de7a, - 0xfbc3faf9, 0xe861628e, 0xdc86ca17, 0xcf245260, - 0xb5499b25, 0xa6eb0352, 0x920cabcb, 0x81ae33bc, - 0x66d73941, 0x7575a136, 0x419209af, 0x523091d8, - 0x285d589d, 0x3bffc0ea, 0x0f186873, 0x1cbaf004, - 0xc4060b78, 0xd7a4930f, 0xe3433b96, 0xf0e1a3e1, - 0x8a8c6aa4, 0x992ef2d3, 0xadc95a4a, 0xbe6bc23d, - 0x5912c8c0, 0x4ab050b7, 0x7e57f82e, 0x6df56059, - 0x1798a91c, 0x043a316b, 0x30dd99f2, 0x237f0185, - 0x844819fb, 0x97ea818c, 0xa30d2915, 0xb0afb162, - 0xcac27827, 0xd960e050, 0xed8748c9, 0xfe25d0be, - 0x195cda43, 0x0afe4234, 0x3e19eaad, 0x2dbb72da, - 0x57d6bb9f, 0x447423e8, 0x70938b71, 0x63311306, - 0xbb8de87a, 0xa82f700d, 0x9cc8d894, 0x8f6a40e3, - 0xf50789a6, 0xe6a511d1, 0xd242b948, 0xc1e0213f, - 0x26992bc2, 0x353bb3b5, 0x01dc1b2c, 0x127e835b, - 0x68134a1e, 0x7bb1d269, 0x4f567af0, 0x5cf4e287, - 0x04d43cfd, 0x1776a48a, 0x23910c13, 0x30339464, - 0x4a5e5d21, 0x59fcc556, 0x6d1b6dcf, 0x7eb9f5b8, - 0x99c0ff45, 0x8a626732, 0xbe85cfab, 0xad2757dc, - 0xd74a9e99, 0xc4e806ee, 0xf00fae77, 0xe3ad3600, - 0x3b11cd7c, 0x28b3550b, 0x1c54fd92, 0x0ff665e5, - 0x759baca0, 0x663934d7, 0x52de9c4e, 0x417c0439, - 0xa6050ec4, 0xb5a796b3, 0x81403e2a, 0x92e2a65d, - 0xe88f6f18, 0xfb2df76f, 0xcfca5ff6, 0xdc68c781, - 0x7b5fdfff, 0x68fd4788, 0x5c1aef11, 0x4fb87766, - 0x35d5be23, 0x26772654, 0x12908ecd, 0x013216ba, - 0xe64b1c47, 0xf5e98430, 0xc10e2ca9, 0xd2acb4de, - 0xa8c17d9b, 0xbb63e5ec, 0x8f844d75, 0x9c26d502, - 0x449a2e7e, 0x5738b609, 0x63df1e90, 0x707d86e7, - 0x0a104fa2, 0x19b2d7d5, 0x2d557f4c, 0x3ef7e73b, - 0xd98eedc6, 0xca2c75b1, 0xfecbdd28, 0xed69455f, - 0x97048c1a, 0x84a6146d, 0xb041bcf4, 0xa3e32483 -}; -static const uint32_t table2_[256] = { - 0x00000000, 0xa541927e, 0x4f6f520d, 0xea2ec073, - 0x9edea41a, 0x3b9f3664, 0xd1b1f617, 0x74f06469, - 0x38513ec5, 0x9d10acbb, 0x773e6cc8, 0xd27ffeb6, - 0xa68f9adf, 0x03ce08a1, 0xe9e0c8d2, 0x4ca15aac, - 0x70a27d8a, 0xd5e3eff4, 0x3fcd2f87, 0x9a8cbdf9, - 0xee7cd990, 0x4b3d4bee, 0xa1138b9d, 0x045219e3, - 0x48f3434f, 0xedb2d131, 0x079c1142, 0xa2dd833c, - 0xd62de755, 0x736c752b, 0x9942b558, 0x3c032726, - 0xe144fb14, 0x4405696a, 0xae2ba919, 0x0b6a3b67, - 0x7f9a5f0e, 0xdadbcd70, 0x30f50d03, 0x95b49f7d, - 0xd915c5d1, 0x7c5457af, 0x967a97dc, 0x333b05a2, - 0x47cb61cb, 0xe28af3b5, 0x08a433c6, 0xade5a1b8, - 0x91e6869e, 0x34a714e0, 0xde89d493, 0x7bc846ed, - 0x0f382284, 0xaa79b0fa, 0x40577089, 0xe516e2f7, - 0xa9b7b85b, 0x0cf62a25, 0xe6d8ea56, 0x43997828, - 0x37691c41, 0x92288e3f, 0x78064e4c, 0xdd47dc32, - 0xc76580d9, 0x622412a7, 0x880ad2d4, 0x2d4b40aa, - 0x59bb24c3, 0xfcfab6bd, 0x16d476ce, 0xb395e4b0, - 0xff34be1c, 0x5a752c62, 0xb05bec11, 0x151a7e6f, - 0x61ea1a06, 0xc4ab8878, 0x2e85480b, 0x8bc4da75, - 0xb7c7fd53, 0x12866f2d, 0xf8a8af5e, 0x5de93d20, - 0x29195949, 0x8c58cb37, 0x66760b44, 0xc337993a, - 0x8f96c396, 0x2ad751e8, 0xc0f9919b, 0x65b803e5, - 0x1148678c, 0xb409f5f2, 0x5e273581, 0xfb66a7ff, - 0x26217bcd, 0x8360e9b3, 0x694e29c0, 0xcc0fbbbe, - 0xb8ffdfd7, 0x1dbe4da9, 0xf7908dda, 0x52d11fa4, - 0x1e704508, 0xbb31d776, 0x511f1705, 0xf45e857b, - 0x80aee112, 0x25ef736c, 0xcfc1b31f, 0x6a802161, - 0x56830647, 0xf3c29439, 0x19ec544a, 0xbcadc634, - 0xc85da25d, 0x6d1c3023, 0x8732f050, 0x2273622e, - 0x6ed23882, 0xcb93aafc, 0x21bd6a8f, 0x84fcf8f1, - 0xf00c9c98, 0x554d0ee6, 0xbf63ce95, 0x1a225ceb, - 0x8b277743, 0x2e66e53d, 0xc448254e, 0x6109b730, - 0x15f9d359, 0xb0b84127, 0x5a968154, 0xffd7132a, - 0xb3764986, 0x1637dbf8, 0xfc191b8b, 0x595889f5, - 0x2da8ed9c, 0x88e97fe2, 0x62c7bf91, 0xc7862def, - 0xfb850ac9, 0x5ec498b7, 0xb4ea58c4, 0x11abcaba, - 0x655baed3, 0xc01a3cad, 0x2a34fcde, 0x8f756ea0, - 0xc3d4340c, 0x6695a672, 0x8cbb6601, 0x29faf47f, - 0x5d0a9016, 0xf84b0268, 0x1265c21b, 0xb7245065, - 0x6a638c57, 0xcf221e29, 0x250cde5a, 0x804d4c24, - 0xf4bd284d, 0x51fcba33, 0xbbd27a40, 0x1e93e83e, - 0x5232b292, 0xf77320ec, 0x1d5de09f, 0xb81c72e1, - 0xccec1688, 0x69ad84f6, 0x83834485, 0x26c2d6fb, - 0x1ac1f1dd, 0xbf8063a3, 0x55aea3d0, 0xf0ef31ae, - 0x841f55c7, 0x215ec7b9, 0xcb7007ca, 0x6e3195b4, - 0x2290cf18, 0x87d15d66, 0x6dff9d15, 0xc8be0f6b, - 0xbc4e6b02, 0x190ff97c, 0xf321390f, 0x5660ab71, - 0x4c42f79a, 0xe90365e4, 0x032da597, 0xa66c37e9, - 0xd29c5380, 0x77ddc1fe, 0x9df3018d, 0x38b293f3, - 0x7413c95f, 0xd1525b21, 0x3b7c9b52, 0x9e3d092c, - 0xeacd6d45, 0x4f8cff3b, 0xa5a23f48, 0x00e3ad36, - 0x3ce08a10, 0x99a1186e, 0x738fd81d, 0xd6ce4a63, - 0xa23e2e0a, 0x077fbc74, 0xed517c07, 0x4810ee79, - 0x04b1b4d5, 0xa1f026ab, 0x4bdee6d8, 0xee9f74a6, - 0x9a6f10cf, 0x3f2e82b1, 0xd50042c2, 0x7041d0bc, - 0xad060c8e, 0x08479ef0, 0xe2695e83, 0x4728ccfd, - 0x33d8a894, 0x96993aea, 0x7cb7fa99, 0xd9f668e7, - 0x9557324b, 0x3016a035, 0xda386046, 0x7f79f238, - 0x0b899651, 0xaec8042f, 0x44e6c45c, 0xe1a75622, - 0xdda47104, 0x78e5e37a, 0x92cb2309, 0x378ab177, - 0x437ad51e, 0xe63b4760, 0x0c158713, 0xa954156d, - 0xe5f54fc1, 0x40b4ddbf, 0xaa9a1dcc, 0x0fdb8fb2, - 0x7b2bebdb, 0xde6a79a5, 0x3444b9d6, 0x91052ba8 -}; -static const uint32_t table3_[256] = { - 0x00000000, 0xdd45aab8, 0xbf672381, 0x62228939, - 0x7b2231f3, 0xa6679b4b, 0xc4451272, 0x1900b8ca, - 0xf64463e6, 0x2b01c95e, 0x49234067, 0x9466eadf, - 0x8d665215, 0x5023f8ad, 0x32017194, 0xef44db2c, - 0xe964b13d, 0x34211b85, 0x560392bc, 0x8b463804, - 0x924680ce, 0x4f032a76, 0x2d21a34f, 0xf06409f7, - 0x1f20d2db, 0xc2657863, 0xa047f15a, 0x7d025be2, - 0x6402e328, 0xb9474990, 0xdb65c0a9, 0x06206a11, - 0xd725148b, 0x0a60be33, 0x6842370a, 0xb5079db2, - 0xac072578, 0x71428fc0, 0x136006f9, 0xce25ac41, - 0x2161776d, 0xfc24ddd5, 0x9e0654ec, 0x4343fe54, - 0x5a43469e, 0x8706ec26, 0xe524651f, 0x3861cfa7, - 0x3e41a5b6, 0xe3040f0e, 0x81268637, 0x5c632c8f, - 0x45639445, 0x98263efd, 0xfa04b7c4, 0x27411d7c, - 0xc805c650, 0x15406ce8, 0x7762e5d1, 0xaa274f69, - 0xb327f7a3, 0x6e625d1b, 0x0c40d422, 0xd1057e9a, - 0xaba65fe7, 0x76e3f55f, 0x14c17c66, 0xc984d6de, - 0xd0846e14, 0x0dc1c4ac, 0x6fe34d95, 0xb2a6e72d, - 0x5de23c01, 0x80a796b9, 0xe2851f80, 0x3fc0b538, - 0x26c00df2, 0xfb85a74a, 0x99a72e73, 0x44e284cb, - 0x42c2eeda, 0x9f874462, 0xfda5cd5b, 0x20e067e3, - 0x39e0df29, 0xe4a57591, 0x8687fca8, 0x5bc25610, - 0xb4868d3c, 0x69c32784, 0x0be1aebd, 0xd6a40405, - 0xcfa4bccf, 0x12e11677, 0x70c39f4e, 0xad8635f6, - 0x7c834b6c, 0xa1c6e1d4, 0xc3e468ed, 0x1ea1c255, - 0x07a17a9f, 0xdae4d027, 0xb8c6591e, 0x6583f3a6, - 0x8ac7288a, 0x57828232, 0x35a00b0b, 0xe8e5a1b3, - 0xf1e51979, 0x2ca0b3c1, 0x4e823af8, 0x93c79040, - 0x95e7fa51, 0x48a250e9, 0x2a80d9d0, 0xf7c57368, - 0xeec5cba2, 0x3380611a, 0x51a2e823, 0x8ce7429b, - 0x63a399b7, 0xbee6330f, 0xdcc4ba36, 0x0181108e, - 0x1881a844, 0xc5c402fc, 0xa7e68bc5, 0x7aa3217d, - 0x52a0c93f, 0x8fe56387, 0xedc7eabe, 0x30824006, - 0x2982f8cc, 0xf4c75274, 0x96e5db4d, 0x4ba071f5, - 0xa4e4aad9, 0x79a10061, 0x1b838958, 0xc6c623e0, - 0xdfc69b2a, 0x02833192, 0x60a1b8ab, 0xbde41213, - 0xbbc47802, 0x6681d2ba, 0x04a35b83, 0xd9e6f13b, - 0xc0e649f1, 0x1da3e349, 0x7f816a70, 0xa2c4c0c8, - 0x4d801be4, 0x90c5b15c, 0xf2e73865, 0x2fa292dd, - 0x36a22a17, 0xebe780af, 0x89c50996, 0x5480a32e, - 0x8585ddb4, 0x58c0770c, 0x3ae2fe35, 0xe7a7548d, - 0xfea7ec47, 0x23e246ff, 0x41c0cfc6, 0x9c85657e, - 0x73c1be52, 0xae8414ea, 0xcca69dd3, 0x11e3376b, - 0x08e38fa1, 0xd5a62519, 0xb784ac20, 0x6ac10698, - 0x6ce16c89, 0xb1a4c631, 0xd3864f08, 0x0ec3e5b0, - 0x17c35d7a, 0xca86f7c2, 0xa8a47efb, 0x75e1d443, - 0x9aa50f6f, 0x47e0a5d7, 0x25c22cee, 0xf8878656, - 0xe1873e9c, 0x3cc29424, 0x5ee01d1d, 0x83a5b7a5, - 0xf90696d8, 0x24433c60, 0x4661b559, 0x9b241fe1, - 0x8224a72b, 0x5f610d93, 0x3d4384aa, 0xe0062e12, - 0x0f42f53e, 0xd2075f86, 0xb025d6bf, 0x6d607c07, - 0x7460c4cd, 0xa9256e75, 0xcb07e74c, 0x16424df4, - 0x106227e5, 0xcd278d5d, 0xaf050464, 0x7240aedc, - 0x6b401616, 0xb605bcae, 0xd4273597, 0x09629f2f, - 0xe6264403, 0x3b63eebb, 0x59416782, 0x8404cd3a, - 0x9d0475f0, 0x4041df48, 0x22635671, 0xff26fcc9, - 0x2e238253, 0xf36628eb, 0x9144a1d2, 0x4c010b6a, - 0x5501b3a0, 0x88441918, 0xea669021, 0x37233a99, - 0xd867e1b5, 0x05224b0d, 0x6700c234, 0xba45688c, - 0xa345d046, 0x7e007afe, 0x1c22f3c7, 0xc167597f, - 0xc747336e, 0x1a0299d6, 0x782010ef, 0xa565ba57, - 0xbc65029d, 0x6120a825, 0x0302211c, 0xde478ba4, - 0x31035088, 0xec46fa30, 0x8e647309, 0x5321d9b1, - 0x4a21617b, 0x9764cbc3, 0xf54642fa, 0x2803e842 -}; - -// Used to fetch a naturally-aligned 32-bit word in little endian byte-order -static inline uint32_t LE_LOAD32(const uint8_t *p) { - return DecodeFixed32(reinterpret_cast(p)); -} - -uint32_t Extend(uint32_t crc, const char* buf, size_t size) { - const uint8_t *p = reinterpret_cast(buf); - const uint8_t *e = p + size; - uint32_t l = crc ^ 0xffffffffu; - -#define STEP1 do { \ - int c = (l & 0xff) ^ *p++; \ - l = table0_[c] ^ (l >> 8); \ -} while (0) -#define STEP4 do { \ - uint32_t c = l ^ LE_LOAD32(p); \ - p += 4; \ - l = table3_[c & 0xff] ^ \ - table2_[(c >> 8) & 0xff] ^ \ - table1_[(c >> 16) & 0xff] ^ \ - table0_[c >> 24]; \ -} while (0) - - // Point x at first 4-byte aligned byte in string. This might be - // just past the end of the string. - const uintptr_t pval = reinterpret_cast(p); - const uint8_t* x = reinterpret_cast(((pval + 3) >> 2) << 2); - if (x <= e) { - // Process bytes until finished or p is 4-byte aligned - while (p != x) { - STEP1; - } - } - // Process bytes 16 at a time - while ((e-p) >= 16) { - STEP4; STEP4; STEP4; STEP4; - } - // Process bytes 4 at a time - while ((e-p) >= 4) { - STEP4; - } - // Process the last few bytes - while (p != e) { - STEP1; - } -#undef STEP4 -#undef STEP1 - return l ^ 0xffffffffu; -} - -} // namespace crc32c -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/crc32c.h b/clipper/HyperLevelDB/util/crc32c.h deleted file mode 100644 index 1d7e5c0..0000000 --- a/clipper/HyperLevelDB/util/crc32c.h +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_CRC32C_H_ -#define STORAGE_LEVELDB_UTIL_CRC32C_H_ - -#include -#include - -namespace leveldb { -namespace crc32c { - -// Return the crc32c of concat(A, data[0,n-1]) where init_crc is the -// crc32c of some string A. Extend() is often used to maintain the -// crc32c of a stream of data. -extern uint32_t Extend(uint32_t init_crc, const char* data, size_t n); - -// Return the crc32c of data[0,n-1] -inline uint32_t Value(const char* data, size_t n) { - return Extend(0, data, n); -} - -static const uint32_t kMaskDelta = 0xa282ead8ul; - -// Return a masked representation of crc. -// -// Motivation: it is problematic to compute the CRC of a string that -// contains embedded CRCs. Therefore we recommend that CRCs stored -// somewhere (e.g., in files) should be masked before being stored. -inline uint32_t Mask(uint32_t crc) { - // Rotate right by 15 bits and add a constant. - return ((crc >> 15) | (crc << 17)) + kMaskDelta; -} - -// Return the crc whose masked representation is masked_crc. -inline uint32_t Unmask(uint32_t masked_crc) { - uint32_t rot = masked_crc - kMaskDelta; - return ((rot >> 17) | (rot << 15)); -} - -} // namespace crc32c -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_CRC32C_H_ diff --git a/clipper/HyperLevelDB/util/crc32c_test.cc b/clipper/HyperLevelDB/util/crc32c_test.cc deleted file mode 100644 index 4b957ee..0000000 --- a/clipper/HyperLevelDB/util/crc32c_test.cc +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/crc32c.h" -#include "util/testharness.h" - -namespace leveldb { -namespace crc32c { - -class CRC { }; - -TEST(CRC, StandardResults) { - // From rfc3720 section B.4. - char buf[32]; - - memset(buf, 0, sizeof(buf)); - ASSERT_EQ(0x8a9136aa, Value(buf, sizeof(buf))); - - memset(buf, 0xff, sizeof(buf)); - ASSERT_EQ(0x62a8ab43, Value(buf, sizeof(buf))); - - for (int i = 0; i < 32; i++) { - buf[i] = i; - } - ASSERT_EQ(0x46dd794e, Value(buf, sizeof(buf))); - - for (int i = 0; i < 32; i++) { - buf[i] = 31 - i; - } - ASSERT_EQ(0x113fdb5c, Value(buf, sizeof(buf))); - - unsigned char data[48] = { - 0x01, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x00, 0x14, - 0x00, 0x00, 0x00, 0x18, - 0x28, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, - }; - ASSERT_EQ(0xd9963a56, Value(reinterpret_cast(data), sizeof(data))); -} - -TEST(CRC, Values) { - ASSERT_NE(Value("a", 1), Value("foo", 3)); -} - -TEST(CRC, Extend) { - ASSERT_EQ(Value("hello world", 11), - Extend(Value("hello ", 6), "world", 5)); -} - -TEST(CRC, Mask) { - uint32_t crc = Value("foo", 3); - ASSERT_NE(crc, Mask(crc)); - ASSERT_NE(crc, Mask(Mask(crc))); - ASSERT_EQ(crc, Unmask(Mask(crc))); - ASSERT_EQ(crc, Unmask(Unmask(Mask(Mask(crc))))); -} - -} // namespace crc32c -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/util/env.cc b/clipper/HyperLevelDB/util/env.cc deleted file mode 100644 index 33062fb..0000000 --- a/clipper/HyperLevelDB/util/env.cc +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/env.h" - -namespace leveldb { - -Env::~Env() { -} - -SequentialFile::~SequentialFile() { -} - -RandomAccessFile::~RandomAccessFile() { -} - -WritableFile::~WritableFile() { -} - -Logger::~Logger() { -} - -FileLock::~FileLock() { -} - -void Log(Logger* info_log, const char* format, ...) { - if (info_log != NULL) { - va_list ap; - va_start(ap, format); - info_log->Logv(format, ap); - va_end(ap); - } -} - -static Status DoWriteStringToFile(Env* env, const Slice& data, - const std::string& fname, - bool should_sync) { - WritableFile* file; - Status s = env->NewWritableFile(fname, &file); - if (!s.ok()) { - return s; - } - s = file->Append(data); - if (s.ok() && should_sync) { - s = file->Sync(); - } - if (s.ok()) { - s = file->Close(); - } - delete file; // Will auto-close if we did not close above - if (!s.ok()) { - env->DeleteFile(fname); - } - return s; -} - -Status WriteStringToFile(Env* env, const Slice& data, - const std::string& fname) { - return DoWriteStringToFile(env, data, fname, false); -} - -Status WriteStringToFileSync(Env* env, const Slice& data, - const std::string& fname) { - return DoWriteStringToFile(env, data, fname, true); -} - -Status ReadFileToString(Env* env, const std::string& fname, std::string* data) { - data->clear(); - SequentialFile* file; - Status s = env->NewSequentialFile(fname, &file); - if (!s.ok()) { - return s; - } - static const int kBufferSize = 8192; - char* space = new char[kBufferSize]; - while (true) { - Slice fragment; - s = file->Read(kBufferSize, &fragment, space); - if (!s.ok()) { - break; - } - data->append(fragment.data(), fragment.size()); - if (fragment.empty()) { - break; - } - } - delete[] space; - delete file; - return s; -} - -EnvWrapper::~EnvWrapper() { -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/env_posix.cc b/clipper/HyperLevelDB/util/env_posix.cc deleted file mode 100644 index 5266c09..0000000 --- a/clipper/HyperLevelDB/util/env_posix.cc +++ /dev/null @@ -1,778 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#if defined(LEVELDB_PLATFORM_ANDROID) -#include -#endif -#include "hyperleveldb/env.h" -#include "hyperleveldb/slice.h" -#include "port/port.h" -#include "util/logging.h" -#include "util/mutexlock.h" -#include "util/posix_logger.h" - -namespace leveldb { - -namespace { - -static Status IOError(const std::string& context, int err_number) { - return Status::IOError(context, strerror(err_number)); -} - -class PosixSequentialFile: public SequentialFile { - private: - std::string filename_; - FILE* file_; - - public: - PosixSequentialFile(const std::string& fname, FILE* f) - : filename_(fname), file_(f) { } - virtual ~PosixSequentialFile() { fclose(file_); } - - virtual Status Read(size_t n, Slice* result, char* scratch) { - Status s; - size_t r = fread_unlocked(scratch, 1, n, file_); - *result = Slice(scratch, r); - if (r < n) { - if (feof(file_)) { - // We leave status as ok if we hit the end of the file - } else { - // A partial read with an error: return a non-ok status - s = IOError(filename_, errno); - } - } - return s; - } - - virtual Status Skip(uint64_t n) { - if (fseek(file_, n, SEEK_CUR)) { - return IOError(filename_, errno); - } - return Status::OK(); - } -}; - -// pread() based random-access -class PosixRandomAccessFile: public RandomAccessFile { - private: - std::string filename_; - int fd_; - - public: - PosixRandomAccessFile(const std::string& fname, int fd) - : filename_(fname), fd_(fd) { } - virtual ~PosixRandomAccessFile() { close(fd_); } - - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const { - Status s; - ssize_t r = pread(fd_, scratch, n, static_cast(offset)); - *result = Slice(scratch, (r < 0) ? 0 : r); - if (r < 0) { - // An error: return a non-ok status - s = IOError(filename_, errno); - } - return s; - } -}; - -// Helper class to limit mmap file usage so that we do not end up -// running out virtual memory or running into kernel performance -// problems for very large databases. -class MmapLimiter { - public: - // Up to 1000 mmaps for 64-bit binaries; none for smaller pointer sizes. - MmapLimiter() { - SetAllowed(sizeof(void*) >= 8 ? 1000 : 0); - } - - // If another mmap slot is available, acquire it and return true. - // Else return false. - bool Acquire() { - if (GetAllowed() <= 0) { - return false; - } - MutexLock l(&mu_); - intptr_t x = GetAllowed(); - if (x <= 0) { - return false; - } else { - SetAllowed(x - 1); - return true; - } - } - - // Release a slot acquired by a previous call to Acquire() that returned true. - void Release() { - MutexLock l(&mu_); - SetAllowed(GetAllowed() + 1); - } - - private: - port::Mutex mu_; - port::AtomicPointer allowed_; - - intptr_t GetAllowed() const { - return reinterpret_cast(allowed_.Acquire_Load()); - } - - // REQUIRES: mu_ must be held - void SetAllowed(intptr_t v) { - allowed_.Release_Store(reinterpret_cast(v)); - } - - MmapLimiter(const MmapLimiter&); - void operator=(const MmapLimiter&); -}; - -// mmap() based random-access -class PosixMmapReadableFile: public RandomAccessFile { - private: - std::string filename_; - void* mmapped_region_; - size_t length_; - MmapLimiter* limiter_; - - public: - // base[0,length-1] contains the mmapped contents of the file. - PosixMmapReadableFile(const std::string& fname, void* base, size_t length, - MmapLimiter* limiter) - : filename_(fname), mmapped_region_(base), length_(length), - limiter_(limiter) { - } - - virtual ~PosixMmapReadableFile() { - munmap(mmapped_region_, length_); - limiter_->Release(); - } - - virtual Status Read(uint64_t offset, size_t n, Slice* result, - char* scratch) const { - Status s; - if (offset + n > length_) { - *result = Slice(); - s = IOError(filename_, EINVAL); - } else { - *result = Slice(reinterpret_cast(mmapped_region_) + offset, n); - } - return s; - } -}; - -// We preallocate up to an extra megabyte and use memcpy to append new -// data to the file. This is safe since we either properly close the -// file before reading from it, or for log files, the reading code -// knows enough to skip zero suffixes. -// TODO: I use GCC intrinsics here. I don't feel bad about this, but it -// hinders portability. -class PosixMmapFile : public WritableFile { - private: - struct MmapSegment { - MmapSegment* next_; // the next-lowest Map segment in the file - uint64_t file_offset_; // Offset of base_ in file - uint64_t written_; // The amount of data written to this segment - uint64_t size_; // The size of the mapped region - char* base_; // The mapped region - }; - - std::string filename_; // Path to the file - int fd_; // The open file - size_t page_size_; // System page size - uint64_t sync_offset_; // Offset of the last sync call - uint64_t end_offset_; // Where does the file end? - MmapSegment* segments_; // mmap'ed regions of memory - port::Mutex mtx_; // Synchronize and shit - - // Roundup x to a multiple of y - static size_t Roundup(size_t x, size_t y) { - return ((x + y - 1) / y) * y; - } - - MmapSegment* GetSegment(uint64_t offset) { - MutexLock l(&mtx_); - while (true) { - MmapSegment* seg = segments_; - while (seg && seg->file_offset_ > offset) { - seg = seg->next_; - } - if (!seg || seg->file_offset_ + seg->size_ <= offset) { - assert(seg == segments_); - MmapSegment* new_seg = new MmapSegment(); - new_seg->next_ = seg; - new_seg->file_offset_ = seg ? seg->file_offset_ + seg-> size_ : 0; - new_seg->written_ = 0; - new_seg->size_ = seg ? seg->size_ : Roundup(1 << 20, page_size_); - if (ftruncate(fd_, new_seg->file_offset_ + new_seg->size_) < 0) { - delete new_seg; - return NULL; - } - void* ptr = mmap(NULL, new_seg->size_, PROT_READ | PROT_WRITE, MAP_SHARED, - fd_, new_seg->file_offset_); - if (ptr == MAP_FAILED) { - delete new_seg; - return NULL; - } - new_seg->base_ = reinterpret_cast(ptr); - segments_ = new_seg; - continue; - } - assert(seg && - seg->file_offset_ <= offset && - seg->file_offset_ + seg->size_ > offset); - return seg; - } - } - - bool ReleaseSegment(MmapSegment* seg, bool full) { - return true; - } - - public: - PosixMmapFile(const std::string& fname, int fd, size_t page_size) - : filename_(fname), - fd_(fd), - page_size_(page_size), - sync_offset_(0), - end_offset_(0), - segments_(NULL), - mtx_() { - assert((page_size & (page_size - 1)) == 0); - } - - ~PosixMmapFile() { - if (fd_ >= 0) { - PosixMmapFile::Close(); - } - } - - virtual Status WriteAt(uint64_t offset, const Slice& data) { - uint64_t end = offset + data.size(); - const char* src = data.data(); - uint64_t left = data.size(); - while (left > 0) { - MmapSegment* seg = GetSegment(offset); - if (!seg) { - return IOError(filename_, errno); - } - - assert(offset >= seg->file_offset_); - assert(offset < seg->file_offset_ + seg->size_); - uint64_t local_offset = offset - seg->file_offset_; - uint64_t avail = seg->size_ - local_offset; - uint64_t n = (left <= avail) ? left : avail; - memcpy(seg->base_ + local_offset, src, n); - src += n; - left -= n; - offset += n; - uint64_t written = __sync_add_and_fetch(&seg->written_, n); - - if (!ReleaseSegment(seg, written == seg->size_)) { - return IOError(filename_, errno); - } - } - uint64_t old_end = end; - do { - old_end = __sync_val_compare_and_swap(&end_offset_, old_end, end); - } while (old_end < end); - return Status::OK(); - } - - virtual Status Append(const Slice& data) { - uint64_t offset = __sync_val_compare_and_swap(&end_offset_, 0, 0); - return WriteAt(offset, data); - } - - virtual Status Close() { - Status s; - while (segments_) { - MmapSegment* seg = segments_; - segments_ = seg->next_; - if (munmap(seg->base_, seg->size_) < 0) { - s = IOError(filename_, errno); - } - seg->base_ = NULL; - delete seg; - } - - if (ftruncate(fd_, end_offset_) < 0) { - s = IOError(filename_, errno); - } - - if (close(fd_) < 0) { - if (s.ok()) { - s = IOError(filename_, errno); - } - } - - fd_ = -1; - return s; - } - - Status SyncDirIfManifest() { - const char* f = filename_.c_str(); - const char* sep = strrchr(f, '/'); - Slice basename; - std::string dir; - if (sep == NULL) { - dir = "."; - basename = f; - } else { - dir = std::string(f, sep - f); - basename = sep + 1; - } - Status s; - if (basename.starts_with("MANIFEST")) { - int fd = open(dir.c_str(), O_RDONLY); - if (fd < 0) { - s = IOError(dir, errno); - } else { - if (fsync(fd) < 0) { - s = IOError(dir, errno); - } - close(fd); - } - } - return s; - } - - virtual Status Sync() { - // Ensure new files referred to by the manifest are in the filesystem. - Status s = SyncDirIfManifest(); - bool need_sync = false; - - if (!s.ok()) { - return s; - } - - { - MutexLock l(&mtx_); - need_sync = sync_offset_ != end_offset_; - sync_offset_ = end_offset_; - } - - if (need_sync) { - // Some unmapped data was not synced - if (fdatasync(fd_) < 0) { - s = IOError(filename_, errno); - } - } - - return s; - } -}; - -static int LockOrUnlock(int fd, bool lock) { - errno = 0; - struct flock f; - memset(&f, 0, sizeof(f)); - f.l_type = (lock ? F_WRLCK : F_UNLCK); - f.l_whence = SEEK_SET; - f.l_start = 0; - f.l_len = 0; // Lock/unlock entire file - return fcntl(fd, F_SETLK, &f); -} - -class PosixFileLock : public FileLock { - public: - int fd_; - std::string name_; -}; - -// Set of locked files. We keep a separate set instead of just -// relying on fcntrl(F_SETLK) since fcntl(F_SETLK) does not provide -// any protection against multiple uses from the same process. -class PosixLockTable { - private: - port::Mutex mu_; - std::set locked_files_; - public: - bool Insert(const std::string& fname) { - MutexLock l(&mu_); - return locked_files_.insert(fname).second; - } - void Remove(const std::string& fname) { - MutexLock l(&mu_); - locked_files_.erase(fname); - } -}; - -class PosixEnv : public Env { - public: - PosixEnv(); - virtual ~PosixEnv() { - fprintf(stderr, "Destroying Env::Default()\n"); - abort(); - } - - virtual Status NewSequentialFile(const std::string& fname, - SequentialFile** result) { - FILE* f = fopen(fname.c_str(), "r"); - if (f == NULL) { - *result = NULL; - return IOError(fname, errno); - } else { - *result = new PosixSequentialFile(fname, f); - return Status::OK(); - } - } - - virtual Status NewRandomAccessFile(const std::string& fname, - RandomAccessFile** result) { - *result = NULL; - Status s; - int fd = open(fname.c_str(), O_RDONLY); - if (fd < 0) { - s = IOError(fname, errno); - } else if (mmap_limit_.Acquire()) { - uint64_t size; - s = GetFileSize(fname, &size); - if (s.ok()) { - void* base = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); - if (base != MAP_FAILED) { - *result = new PosixMmapReadableFile(fname, base, size, &mmap_limit_); - } else { - s = IOError(fname, errno); - } - } - close(fd); - if (!s.ok()) { - mmap_limit_.Release(); - } - } else { - *result = new PosixRandomAccessFile(fname, fd); - } - return s; - } - - virtual Status NewWritableFile(const std::string& fname, - WritableFile** result) { - Status s; - const int fd = open(fname.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0644); - if (fd < 0) { - *result = NULL; - s = IOError(fname, errno); - } else { - *result = new PosixMmapFile(fname, fd, page_size_); - } - return s; - } - - virtual bool FileExists(const std::string& fname) { - return access(fname.c_str(), F_OK) == 0; - } - - virtual Status GetChildren(const std::string& dir, - std::vector* result) { - result->clear(); - DIR* d = opendir(dir.c_str()); - if (d == NULL) { - return IOError(dir, errno); - } - struct dirent* entry; - while ((entry = readdir(d)) != NULL) { - result->push_back(entry->d_name); - } - closedir(d); - return Status::OK(); - } - - virtual Status DeleteFile(const std::string& fname) { - Status result; - if (unlink(fname.c_str()) != 0) { - result = IOError(fname, errno); - } - return result; - } - - virtual Status CreateDir(const std::string& name) { - Status result; - if (mkdir(name.c_str(), 0755) != 0) { - result = IOError(name, errno); - } - return result; - } - - virtual Status DeleteDir(const std::string& name) { - Status result; - if (rmdir(name.c_str()) != 0) { - result = IOError(name, errno); - } - return result; - } - - virtual Status GetFileSize(const std::string& fname, uint64_t* size) { - Status s; - struct stat sbuf; - if (stat(fname.c_str(), &sbuf) != 0) { - *size = 0; - s = IOError(fname, errno); - } else { - *size = sbuf.st_size; - } - return s; - } - - virtual Status RenameFile(const std::string& src, const std::string& target) { - Status result; - if (rename(src.c_str(), target.c_str()) != 0) { - result = IOError(src, errno); - } - return result; - } - - virtual Status CopyFile(const std::string& src, const std::string& target) { - Status result; - int fd1; - int fd2; - - if (result.ok() && (fd1 = open(src.c_str(), O_RDONLY)) < 0) { - result = IOError(src, errno); - } - if (result.ok() && (fd2 = open(target.c_str(), O_WRONLY | O_CREAT | O_TRUNC, 0644)) < 0) { - result = IOError(target, errno); - } - - ssize_t amt = 0; - char buf[512]; - - while (result.ok() && (amt = read(fd1, buf, 512)) > 0) { - if (write(fd2, buf, amt) != amt) { - result = IOError(src, errno); - } - } - - if (result.ok() && amt < 0) { - result = IOError(src, errno); - } - - if (fd1 >= 0 && close(fd1) < 0) { - if (result.ok()) { - result = IOError(src, errno); - } - } - - if (fd2 >= 0 && close(fd2) < 0) { - if (result.ok()) { - result = IOError(target, errno); - } - } - - return result; - } - - virtual Status LinkFile(const std::string& src, const std::string& target) { - Status result; - if (link(src.c_str(), target.c_str()) != 0) { - result = IOError(src, errno); - } - return result; - } - - virtual Status LockFile(const std::string& fname, FileLock** lock) { - *lock = NULL; - Status result; - int fd = open(fname.c_str(), O_RDWR | O_CREAT, 0644); - if (fd < 0) { - result = IOError(fname, errno); - } else if (!locks_.Insert(fname)) { - close(fd); - result = Status::IOError("lock " + fname, "already held by process"); - } else if (LockOrUnlock(fd, true) == -1) { - result = IOError("lock " + fname, errno); - close(fd); - locks_.Remove(fname); - } else { - PosixFileLock* my_lock = new PosixFileLock; - my_lock->fd_ = fd; - my_lock->name_ = fname; - *lock = my_lock; - } - return result; - } - - virtual Status UnlockFile(FileLock* lock) { - PosixFileLock* my_lock = reinterpret_cast(lock); - Status result; - if (LockOrUnlock(my_lock->fd_, false) == -1) { - result = IOError("unlock", errno); - } - locks_.Remove(my_lock->name_); - close(my_lock->fd_); - delete my_lock; - return result; - } - - virtual void Schedule(void (*function)(void*), void* arg); - - virtual void StartThread(void (*function)(void* arg), void* arg); - - virtual Status GetTestDirectory(std::string* result) { - const char* env = getenv("TEST_TMPDIR"); - if (env && env[0] != '\0') { - *result = env; - } else { - char buf[100]; - snprintf(buf, sizeof(buf), "/tmp/leveldbtest-%d", int(geteuid())); - *result = buf; - } - // Directory may already exist - CreateDir(*result); - return Status::OK(); - } - - static uint64_t gettid() { - pthread_t tid = pthread_self(); - uint64_t thread_id = 0; - memcpy(&thread_id, &tid, std::min(sizeof(thread_id), sizeof(tid))); - return thread_id; - } - - virtual Status NewLogger(const std::string& fname, Logger** result) { - FILE* f = fopen(fname.c_str(), "w"); - if (f == NULL) { - *result = NULL; - return IOError(fname, errno); - } else { - *result = new PosixLogger(f, &PosixEnv::gettid); - return Status::OK(); - } - } - - virtual uint64_t NowMicros() { - struct timeval tv; - gettimeofday(&tv, NULL); - return static_cast(tv.tv_sec) * 1000000 + tv.tv_usec; - } - - virtual void SleepForMicroseconds(int micros) { - usleep(micros); - } - - private: - void PthreadCall(const char* label, int result) { - if (result != 0) { - fprintf(stderr, "pthread %s: %s\n", label, strerror(result)); - abort(); - } - } - - // BGThread() is the body of the background thread - void BGThread(); - static void* BGThreadWrapper(void* arg) { - reinterpret_cast(arg)->BGThread(); - return NULL; - } - - size_t page_size_; - pthread_mutex_t mu_; - pthread_cond_t bgsignal_; - pthread_t bgthread_; - bool started_bgthread_; - - // Entry per Schedule() call - struct BGItem { void* arg; void (*function)(void*); }; - typedef std::deque BGQueue; - BGQueue queue_; - - PosixLockTable locks_; - MmapLimiter mmap_limit_; -}; - -PosixEnv::PosixEnv() : page_size_(getpagesize()), - started_bgthread_(false) { - PthreadCall("mutex_init", pthread_mutex_init(&mu_, NULL)); - PthreadCall("cvar_init", pthread_cond_init(&bgsignal_, NULL)); -} - -void PosixEnv::Schedule(void (*function)(void*), void* arg) { - PthreadCall("lock", pthread_mutex_lock(&mu_)); - - // Start background thread if necessary - if (!started_bgthread_) { - started_bgthread_ = true; - PthreadCall( - "create thread", - pthread_create(&bgthread_, NULL, &PosixEnv::BGThreadWrapper, this)); - } - - // If the queue is currently empty, the background thread may currently be - // waiting. - if (queue_.empty()) { - PthreadCall("signal", pthread_cond_signal(&bgsignal_)); - } - - // Add to priority queue - queue_.push_back(BGItem()); - queue_.back().function = function; - queue_.back().arg = arg; - - PthreadCall("unlock", pthread_mutex_unlock(&mu_)); -} - -void PosixEnv::BGThread() { - while (true) { - // Wait until there is an item that is ready to run - PthreadCall("lock", pthread_mutex_lock(&mu_)); - while (queue_.empty()) { - PthreadCall("wait", pthread_cond_wait(&bgsignal_, &mu_)); - } - - void (*function)(void*) = queue_.front().function; - void* arg = queue_.front().arg; - queue_.pop_front(); - - PthreadCall("unlock", pthread_mutex_unlock(&mu_)); - (*function)(arg); - } -} - -namespace { -struct StartThreadState { - void (*user_function)(void*); - void* arg; -}; -} -static void* StartThreadWrapper(void* arg) { - StartThreadState* state = reinterpret_cast(arg); - state->user_function(state->arg); - delete state; - return NULL; -} - -void PosixEnv::StartThread(void (*function)(void* arg), void* arg) { - pthread_t t; - StartThreadState* state = new StartThreadState; - state->user_function = function; - state->arg = arg; - PthreadCall("start thread", - pthread_create(&t, NULL, &StartThreadWrapper, state)); -} - -} // namespace - -static pthread_once_t once = PTHREAD_ONCE_INIT; -static Env* default_env; -static void InitDefaultEnv() { default_env = new PosixEnv; } - -Env* Env::Default() { - pthread_once(&once, InitDefaultEnv); - return default_env; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/env_test.cc b/clipper/HyperLevelDB/util/env_test.cc deleted file mode 100644 index 32ad2b4..0000000 --- a/clipper/HyperLevelDB/util/env_test.cc +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/env.h" - -#include "port/port.h" -#include "util/testharness.h" - -namespace leveldb { - -static const int kDelayMicros = 100000; - -class EnvPosixTest { - private: - port::Mutex mu_; - std::string events_; - - public: - Env* env_; - EnvPosixTest() : env_(Env::Default()) { } -}; - -static void SetBool(void* ptr) { - reinterpret_cast(ptr)->NoBarrier_Store(ptr); -} - -TEST(EnvPosixTest, RunImmediately) { - port::AtomicPointer called (NULL); - env_->Schedule(&SetBool, &called); - Env::Default()->SleepForMicroseconds(kDelayMicros); - ASSERT_TRUE(called.NoBarrier_Load() != NULL); -} - -TEST(EnvPosixTest, RunMany) { - port::AtomicPointer last_id (NULL); - - struct CB { - port::AtomicPointer* last_id_ptr; // Pointer to shared slot - uintptr_t id; // Order# for the execution of this callback - - CB(port::AtomicPointer* p, int i) : last_id_ptr(p), id(i) { } - - static void Run(void* v) { - CB* cb = reinterpret_cast(v); - void* cur = cb->last_id_ptr->NoBarrier_Load(); - ASSERT_EQ(cb->id-1, reinterpret_cast(cur)); - cb->last_id_ptr->Release_Store(reinterpret_cast(cb->id)); - } - }; - - // Schedule in different order than start time - CB cb1(&last_id, 1); - CB cb2(&last_id, 2); - CB cb3(&last_id, 3); - CB cb4(&last_id, 4); - env_->Schedule(&CB::Run, &cb1); - env_->Schedule(&CB::Run, &cb2); - env_->Schedule(&CB::Run, &cb3); - env_->Schedule(&CB::Run, &cb4); - - Env::Default()->SleepForMicroseconds(kDelayMicros); - void* cur = last_id.Acquire_Load(); - ASSERT_EQ(4, reinterpret_cast(cur)); -} - -struct State { - port::Mutex mu; - int val; - int num_running; -}; - -static void ThreadBody(void* arg) { - State* s = reinterpret_cast(arg); - s->mu.Lock(); - s->val += 1; - s->num_running -= 1; - s->mu.Unlock(); -} - -TEST(EnvPosixTest, StartThread) { - State state; - state.val = 0; - state.num_running = 3; - for (int i = 0; i < 3; i++) { - env_->StartThread(&ThreadBody, &state); - } - while (true) { - state.mu.Lock(); - int num = state.num_running; - state.mu.Unlock(); - if (num == 0) { - break; - } - Env::Default()->SleepForMicroseconds(kDelayMicros); - } - ASSERT_EQ(state.val, 3); -} - -} // namespace leveldb - -int main(int argc, char** argv) { - return leveldb::test::RunAllTests(); -} diff --git a/clipper/HyperLevelDB/util/filter_policy.cc b/clipper/HyperLevelDB/util/filter_policy.cc deleted file mode 100644 index 3a50510..0000000 --- a/clipper/HyperLevelDB/util/filter_policy.cc +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright (c) 2012 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/filter_policy.h" - -namespace leveldb { - -FilterPolicy::~FilterPolicy() { } - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/hash.cc b/clipper/HyperLevelDB/util/hash.cc deleted file mode 100644 index 07cf022..0000000 --- a/clipper/HyperLevelDB/util/hash.cc +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include "util/coding.h" -#include "util/hash.h" - -// The FALLTHROUGH_INTENDED macro can be used to annotate implicit fall-through -// between switch labels. The real definition should be provided externally. -// This one is a fallback version for unsupported compilers. -#ifndef FALLTHROUGH_INTENDED -#define FALLTHROUGH_INTENDED do { } while (0) -#endif - -namespace leveldb { - -uint32_t Hash(const char* data, size_t n, uint32_t seed) { - // Similar to murmur hash - const uint32_t m = 0xc6a4a793; - const uint32_t r = 24; - const char* limit = data + n; - uint32_t h = seed ^ (n * m); - - // Pick up four bytes at a time - while (data + 4 <= limit) { - uint32_t w = DecodeFixed32(data); - data += 4; - h += w; - h *= m; - h ^= (h >> 16); - } - - // Pick up remaining bytes - switch (limit - data) { - case 3: - h += data[2] << 16; - FALLTHROUGH_INTENDED; - case 2: - h += data[1] << 8; - FALLTHROUGH_INTENDED; - case 1: - h += data[0]; - h *= m; - h ^= (h >> r); - break; - } - return h; -} - - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/hash.h b/clipper/HyperLevelDB/util/hash.h deleted file mode 100644 index 8889d56..0000000 --- a/clipper/HyperLevelDB/util/hash.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Simple hash function used for internal data structures - -#ifndef STORAGE_LEVELDB_UTIL_HASH_H_ -#define STORAGE_LEVELDB_UTIL_HASH_H_ - -#include -#include - -namespace leveldb { - -extern uint32_t Hash(const char* data, size_t n, uint32_t seed); - -} - -#endif // STORAGE_LEVELDB_UTIL_HASH_H_ diff --git a/clipper/HyperLevelDB/util/histogram.cc b/clipper/HyperLevelDB/util/histogram.cc deleted file mode 100644 index bb95f58..0000000 --- a/clipper/HyperLevelDB/util/histogram.cc +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include -#include "port/port.h" -#include "util/histogram.h" - -namespace leveldb { - -const double Histogram::kBucketLimit[kNumBuckets] = { - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20, 25, 30, 35, 40, 45, - 50, 60, 70, 80, 90, 100, 120, 140, 160, 180, 200, 250, 300, 350, 400, 450, - 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, - 3500, 4000, 4500, 5000, 6000, 7000, 8000, 9000, 10000, 12000, 14000, - 16000, 18000, 20000, 25000, 30000, 35000, 40000, 45000, 50000, 60000, - 70000, 80000, 90000, 100000, 120000, 140000, 160000, 180000, 200000, - 250000, 300000, 350000, 400000, 450000, 500000, 600000, 700000, 800000, - 900000, 1000000, 1200000, 1400000, 1600000, 1800000, 2000000, 2500000, - 3000000, 3500000, 4000000, 4500000, 5000000, 6000000, 7000000, 8000000, - 9000000, 10000000, 12000000, 14000000, 16000000, 18000000, 20000000, - 25000000, 30000000, 35000000, 40000000, 45000000, 50000000, 60000000, - 70000000, 80000000, 90000000, 100000000, 120000000, 140000000, 160000000, - 180000000, 200000000, 250000000, 300000000, 350000000, 400000000, - 450000000, 500000000, 600000000, 700000000, 800000000, 900000000, - 1000000000, 1200000000, 1400000000, 1600000000, 1800000000, 2000000000, - 2500000000.0, 3000000000.0, 3500000000.0, 4000000000.0, 4500000000.0, - 5000000000.0, 6000000000.0, 7000000000.0, 8000000000.0, 9000000000.0, - 1e200, -}; - -void Histogram::Clear() { - min_ = kBucketLimit[kNumBuckets-1]; - max_ = 0; - num_ = 0; - sum_ = 0; - sum_squares_ = 0; - for (int i = 0; i < kNumBuckets; i++) { - buckets_[i] = 0; - } -} - -void Histogram::Add(double value) { - // Linear search is fast enough for our usage in db_bench - int b = 0; - while (b < kNumBuckets - 1 && kBucketLimit[b] <= value) { - b++; - } - buckets_[b] += 1.0; - if (min_ > value) min_ = value; - if (max_ < value) max_ = value; - num_++; - sum_ += value; - sum_squares_ += (value * value); -} - -void Histogram::Merge(const Histogram& other) { - if (other.min_ < min_) min_ = other.min_; - if (other.max_ > max_) max_ = other.max_; - num_ += other.num_; - sum_ += other.sum_; - sum_squares_ += other.sum_squares_; - for (int b = 0; b < kNumBuckets; b++) { - buckets_[b] += other.buckets_[b]; - } -} - -double Histogram::Median() const { - return Percentile(50.0); -} - -double Histogram::Percentile(double p) const { - double threshold = num_ * (p / 100.0); - double sum = 0; - for (int b = 0; b < kNumBuckets; b++) { - sum += buckets_[b]; - if (sum >= threshold) { - // Scale linearly within this bucket - double left_point = (b == 0) ? 0 : kBucketLimit[b-1]; - double right_point = kBucketLimit[b]; - double left_sum = sum - buckets_[b]; - double right_sum = sum; - double pos = (threshold - left_sum) / (right_sum - left_sum); - double r = left_point + (right_point - left_point) * pos; - if (r < min_) r = min_; - if (r > max_) r = max_; - return r; - } - } - return max_; -} - -double Histogram::Average() const { - if (num_ == 0.0) return 0; - return sum_ / num_; -} - -double Histogram::StandardDeviation() const { - if (num_ == 0.0) return 0; - double variance = (sum_squares_ * num_ - sum_ * sum_) / (num_ * num_); - return sqrt(variance); -} - -std::string Histogram::ToString() const { - std::string r; - char buf[200]; - snprintf(buf, sizeof(buf), - "Count: %.0f Average: %.4f StdDev: %.2f\n", - num_, Average(), StandardDeviation()); - r.append(buf); - snprintf(buf, sizeof(buf), - "Min: %.4f Median: %.4f Max: %.4f\n", - (num_ == 0.0 ? 0.0 : min_), Median(), max_); - r.append(buf); - r.append("------------------------------------------------------\n"); - const double mult = 100.0 / num_; - double sum = 0; - for (int b = 0; b < kNumBuckets; b++) { - if (buckets_[b] <= 0.0) continue; - sum += buckets_[b]; - snprintf(buf, sizeof(buf), - "[ %7.0f, %7.0f ) %7.0f %7.3f%% %7.3f%% ", - ((b == 0) ? 0.0 : kBucketLimit[b-1]), // left - kBucketLimit[b], // right - buckets_[b], // count - mult * buckets_[b], // percentage - mult * sum); // cumulative percentage - r.append(buf); - - // Add hash marks based on percentage; 20 marks for 100%. - int marks = static_cast(20*(buckets_[b] / num_) + 0.5); - r.append(marks, '#'); - r.push_back('\n'); - } - return r; -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/histogram.h b/clipper/HyperLevelDB/util/histogram.h deleted file mode 100644 index 1ef9f3c..0000000 --- a/clipper/HyperLevelDB/util/histogram.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_HISTOGRAM_H_ -#define STORAGE_LEVELDB_UTIL_HISTOGRAM_H_ - -#include - -namespace leveldb { - -class Histogram { - public: - Histogram() { } - ~Histogram() { } - - void Clear(); - void Add(double value); - void Merge(const Histogram& other); - - std::string ToString() const; - - private: - double min_; - double max_; - double num_; - double sum_; - double sum_squares_; - - enum { kNumBuckets = 154 }; - static const double kBucketLimit[kNumBuckets]; - double buckets_[kNumBuckets]; - - double Median() const; - double Percentile(double p) const; - double Average() const; - double StandardDeviation() const; -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_HISTOGRAM_H_ diff --git a/clipper/HyperLevelDB/util/logging.cc b/clipper/HyperLevelDB/util/logging.cc deleted file mode 100644 index 66b15a7..0000000 --- a/clipper/HyperLevelDB/util/logging.cc +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/logging.h" - -#include -#include -#include -#include -#include "hyperleveldb/env.h" -#include "hyperleveldb/slice.h" - -namespace leveldb { - -void AppendNumberTo(std::string* str, uint64_t num) { - char buf[30]; - snprintf(buf, sizeof(buf), "%llu", (unsigned long long) num); - str->append(buf); -} - -void AppendEscapedStringTo(std::string* str, const Slice& value) { - for (size_t i = 0; i < value.size(); i++) { - char c = value[i]; - if (c >= ' ' && c <= '~') { - str->push_back(c); - } else { - char buf[10]; - snprintf(buf, sizeof(buf), "\\x%02x", - static_cast(c) & 0xff); - str->append(buf); - } - } -} - -std::string NumberToString(uint64_t num) { - std::string r; - AppendNumberTo(&r, num); - return r; -} - -std::string EscapeString(const Slice& value) { - std::string r; - AppendEscapedStringTo(&r, value); - return r; -} - -bool ConsumeChar(Slice* in, char c) { - if (!in->empty() && (*in)[0] == c) { - in->remove_prefix(1); - return true; - } else { - return false; - } -} - -bool ConsumeDecimalNumber(Slice* in, uint64_t* val) { - uint64_t v = 0; - int digits = 0; - while (!in->empty()) { - char c = (*in)[0]; - if (c >= '0' && c <= '9') { - ++digits; - const int delta = (c - '0'); - static const uint64_t kMaxUint64 = ~static_cast(0); - if (v > kMaxUint64/10 || - (v == kMaxUint64/10 && delta > kMaxUint64%10)) { - // Overflow - return false; - } - v = (v * 10) + delta; - in->remove_prefix(1); - } else { - break; - } - } - *val = v; - return (digits > 0); -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/logging.h b/clipper/HyperLevelDB/util/logging.h deleted file mode 100644 index b0c5da8..0000000 --- a/clipper/HyperLevelDB/util/logging.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Must not be included from any .h files to avoid polluting the namespace -// with macros. - -#ifndef STORAGE_LEVELDB_UTIL_LOGGING_H_ -#define STORAGE_LEVELDB_UTIL_LOGGING_H_ - -#include -#include -#include -#include "port/port.h" - -namespace leveldb { - -class Slice; -class WritableFile; - -// Append a human-readable printout of "num" to *str -extern void AppendNumberTo(std::string* str, uint64_t num); - -// Append a human-readable printout of "value" to *str. -// Escapes any non-printable characters found in "value". -extern void AppendEscapedStringTo(std::string* str, const Slice& value); - -// Return a human-readable printout of "num" -extern std::string NumberToString(uint64_t num); - -// Return a human-readable version of "value". -// Escapes any non-printable characters found in "value". -extern std::string EscapeString(const Slice& value); - -// If *in starts with "c", advances *in past the first character and -// returns true. Otherwise, returns false. -extern bool ConsumeChar(Slice* in, char c); - -// Parse a human-readable number from "*in" into *value. On success, -// advances "*in" past the consumed number and sets "*val" to the -// numeric value. Otherwise, returns false and leaves *in in an -// unspecified state. -extern bool ConsumeDecimalNumber(Slice* in, uint64_t* val); - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_LOGGING_H_ diff --git a/clipper/HyperLevelDB/util/mutexlock.h b/clipper/HyperLevelDB/util/mutexlock.h deleted file mode 100644 index 1ff5a9e..0000000 --- a/clipper/HyperLevelDB/util/mutexlock.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_ -#define STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_ - -#include "port/port.h" -#include "port/thread_annotations.h" - -namespace leveldb { - -// Helper class that locks a mutex on construction and unlocks the mutex when -// the destructor of the MutexLock object is invoked. -// -// Typical usage: -// -// void MyClass::MyMethod() { -// MutexLock l(&mu_); // mu_ is an instance variable -// ... some complex code, possibly with multiple return paths ... -// } - -class SCOPED_LOCKABLE MutexLock { - public: - explicit MutexLock(port::Mutex *mu) EXCLUSIVE_LOCK_FUNCTION(mu) - : mu_(mu) { - this->mu_->Lock(); - } - ~MutexLock() UNLOCK_FUNCTION() { this->mu_->Unlock(); } - - private: - port::Mutex *const mu_; - // No copying allowed - MutexLock(const MutexLock&); - void operator=(const MutexLock&); -}; - -} // namespace leveldb - - -#endif // STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_ diff --git a/clipper/HyperLevelDB/util/options.cc b/clipper/HyperLevelDB/util/options.cc deleted file mode 100644 index 62d5009..0000000 --- a/clipper/HyperLevelDB/util/options.cc +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "hyperleveldb/options.h" - -#include "hyperleveldb/comparator.h" -#include "hyperleveldb/env.h" - -namespace leveldb { - -Options::Options() - : comparator(BytewiseComparator()), - create_if_missing(false), - error_if_exists(false), - paranoid_checks(false), - env(Env::Default()), - info_log(NULL), - write_buffer_size(4<<20), - max_open_files(1000), - block_cache(NULL), - block_size(4096), - block_restart_interval(16), - compression(kSnappyCompression), - filter_policy(NULL), - manual_garbage_collection(false) { -} - - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/posix_logger.h b/clipper/HyperLevelDB/util/posix_logger.h deleted file mode 100644 index ca84f14..0000000 --- a/clipper/HyperLevelDB/util/posix_logger.h +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. -// -// Logger implementation that can be shared by all environments -// where enough posix functionality is available. - -#ifndef STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_ -#define STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_ - -#include -#include -#include -#include -#include "hyperleveldb/env.h" - -namespace leveldb { - -class PosixLogger : public Logger { - private: - FILE* file_; - uint64_t (*gettid_)(); // Return the thread id for the current thread - public: - PosixLogger(FILE* f, uint64_t (*gettid)()) : file_(f), gettid_(gettid) { } - virtual ~PosixLogger() { - fclose(file_); - } - virtual void Logv(const char* format, va_list ap) { - const uint64_t thread_id = (*gettid_)(); - - // We try twice: the first time with a fixed-size stack allocated buffer, - // and the second time with a much larger dynamically allocated buffer. - char buffer[500]; - for (int iter = 0; iter < 2; iter++) { - char* base; - int bufsize; - if (iter == 0) { - bufsize = sizeof(buffer); - base = buffer; - } else { - bufsize = 30000; - base = new char[bufsize]; - } - char* p = base; - char* limit = base + bufsize; - - struct timeval now_tv; - gettimeofday(&now_tv, NULL); - const time_t seconds = now_tv.tv_sec; - struct tm t; - localtime_r(&seconds, &t); - p += snprintf(p, limit - p, - "%04d/%02d/%02d-%02d:%02d:%02d.%06d %llx ", - t.tm_year + 1900, - t.tm_mon + 1, - t.tm_mday, - t.tm_hour, - t.tm_min, - t.tm_sec, - static_cast(now_tv.tv_usec), - static_cast(thread_id)); - - // Print the message - if (p < limit) { - va_list backup_ap; - va_copy(backup_ap, ap); - p += vsnprintf(p, limit - p, format, backup_ap); - va_end(backup_ap); - } - - // Truncate to available space if necessary - if (p >= limit) { - if (iter == 0) { - continue; // Try again with larger buffer - } else { - p = limit - 1; - } - } - - // Add newline if necessary - if (p == base || p[-1] != '\n') { - *p++ = '\n'; - } - - assert(p <= limit); - fwrite(base, 1, p - base, file_); - fflush(file_); - if (base != buffer) { - delete[] base; - } - break; - } - } -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_ diff --git a/clipper/HyperLevelDB/util/random.h b/clipper/HyperLevelDB/util/random.h deleted file mode 100644 index ddd51b1..0000000 --- a/clipper/HyperLevelDB/util/random.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_RANDOM_H_ -#define STORAGE_LEVELDB_UTIL_RANDOM_H_ - -#include - -namespace leveldb { - -// A very simple random number generator. Not especially good at -// generating truly random bits, but good enough for our needs in this -// package. -class Random { - private: - uint32_t seed_; - public: - explicit Random(uint32_t s) : seed_(s & 0x7fffffffu) { - // Avoid bad seeds. - if (seed_ == 0 || seed_ == 2147483647L) { - seed_ = 1; - } - } - uint32_t Next() { - static const uint32_t M = 2147483647L; // 2^31-1 - static const uint64_t A = 16807; // bits 14, 8, 7, 5, 2, 1, 0 - // We are computing - // seed_ = (seed_ * A) % M, where M = 2^31-1 - // - // seed_ must not be zero or M, or else all subsequent computed values - // will be zero or M respectively. For all other values, seed_ will end - // up cycling through every number in [1,M-1] - uint64_t product = seed_ * A; - - // Compute (product % M) using the fact that ((x << 31) % M) == x. - seed_ = static_cast((product >> 31) + (product & M)); - // The first reduction may overflow by 1 bit, so we may need to - // repeat. mod == M is not possible; using > allows the faster - // sign-bit-based test. - if (seed_ > M) { - seed_ -= M; - } - return seed_; - } - // Returns a uniformly distributed value in the range [0..n-1] - // REQUIRES: n > 0 - uint32_t Uniform(int n) { return Next() % n; } - - // Randomly returns true ~"1/n" of the time, and false otherwise. - // REQUIRES: n > 0 - bool OneIn(int n) { return (Next() % n) == 0; } - - // Skewed: pick "base" uniformly from range [0,max_log] and then - // return "base" random bits. The effect is to pick a number in the - // range [0,2^max_log-1] with exponential bias towards smaller numbers. - uint32_t Skewed(int max_log) { - return Uniform(1 << Uniform(max_log + 1)); - } -}; - -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_RANDOM_H_ diff --git a/clipper/HyperLevelDB/util/status.cc b/clipper/HyperLevelDB/util/status.cc deleted file mode 100644 index 51bbfdb..0000000 --- a/clipper/HyperLevelDB/util/status.cc +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include -#include "port/port.h" -#include "hyperleveldb/status.h" - -namespace leveldb { - -const char* Status::CopyState(const char* state) { - uint32_t size; - memcpy(&size, state, sizeof(size)); - char* result = new char[size + 5]; - memcpy(result, state, size + 5); - return result; -} - -Status::Status(Code code, const Slice& msg, const Slice& msg2) { - assert(code != kOk); - const uint32_t len1 = msg.size(); - const uint32_t len2 = msg2.size(); - const uint32_t size = len1 + (len2 ? (2 + len2) : 0); - char* result = new char[size + 5]; - memcpy(result, &size, sizeof(size)); - result[4] = static_cast(code); - memcpy(result + 5, msg.data(), len1); - if (len2) { - result[5 + len1] = ':'; - result[6 + len1] = ' '; - memcpy(result + 7 + len1, msg2.data(), len2); - } - state_ = result; -} - -std::string Status::ToString() const { - if (state_ == NULL) { - return "OK"; - } else { - char tmp[30]; - const char* type; - switch (code()) { - case kOk: - type = "OK"; - break; - case kNotFound: - type = "NotFound: "; - break; - case kCorruption: - type = "Corruption: "; - break; - case kNotSupported: - type = "Not implemented: "; - break; - case kInvalidArgument: - type = "Invalid argument: "; - break; - case kIOError: - type = "IO error: "; - break; - default: - snprintf(tmp, sizeof(tmp), "Unknown code(%d): ", - static_cast(code())); - type = tmp; - break; - } - std::string result(type); - uint32_t length; - memcpy(&length, state_, sizeof(length)); - result.append(state_ + 5, length); - return result; - } -} - -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/testharness.cc b/clipper/HyperLevelDB/util/testharness.cc deleted file mode 100644 index 402fab3..0000000 --- a/clipper/HyperLevelDB/util/testharness.cc +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/testharness.h" - -#include -#include -#include -#include - -namespace leveldb { -namespace test { - -namespace { -struct Test { - const char* base; - const char* name; - void (*func)(); -}; -std::vector* tests; -} - -bool RegisterTest(const char* base, const char* name, void (*func)()) { - if (tests == NULL) { - tests = new std::vector; - } - Test t; - t.base = base; - t.name = name; - t.func = func; - tests->push_back(t); - return true; -} - -int RunAllTests() { - const char* matcher = getenv("LEVELDB_TESTS"); - - int num = 0; - if (tests != NULL) { - for (size_t i = 0; i < tests->size(); i++) { - const Test& t = (*tests)[i]; - if (matcher != NULL) { - std::string name = t.base; - name.push_back('.'); - name.append(t.name); - if (strstr(name.c_str(), matcher) == NULL) { - continue; - } - } - fprintf(stderr, "==== Test %s.%s\n", t.base, t.name); - (*t.func)(); - ++num; - } - } - fprintf(stderr, "==== PASSED %d tests\n", num); - return 0; -} - -std::string TmpDir() { - std::string dir; - Status s = Env::Default()->GetTestDirectory(&dir); - ASSERT_TRUE(s.ok()) << s.ToString(); - return dir; -} - -int RandomSeed() { - const char* env = getenv("TEST_RANDOM_SEED"); - int result = (env != NULL ? atoi(env) : 301); - if (result <= 0) { - result = 301; - } - return result; -} - -} // namespace test -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/testharness.h b/clipper/HyperLevelDB/util/testharness.h deleted file mode 100644 index d9555e3..0000000 --- a/clipper/HyperLevelDB/util/testharness.h +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_TESTHARNESS_H_ -#define STORAGE_LEVELDB_UTIL_TESTHARNESS_H_ - -#include -#include -#include -#include "hyperleveldb/env.h" -#include "hyperleveldb/slice.h" -#include "util/random.h" - -namespace leveldb { -namespace test { - -// Run some of the tests registered by the TEST() macro. If the -// environment variable "LEVELDB_TESTS" is not set, runs all tests. -// Otherwise, runs only the tests whose name contains the value of -// "LEVELDB_TESTS" as a substring. E.g., suppose the tests are: -// TEST(Foo, Hello) { ... } -// TEST(Foo, World) { ... } -// LEVELDB_TESTS=Hello will run the first test -// LEVELDB_TESTS=o will run both tests -// LEVELDB_TESTS=Junk will run no tests -// -// Returns 0 if all tests pass. -// Dies or returns a non-zero value if some test fails. -extern int RunAllTests(); - -// Return the directory to use for temporary storage. -extern std::string TmpDir(); - -// Return a randomization seed for this run. Typically returns the -// same number on repeated invocations of this binary, but automated -// runs may be able to vary the seed. -extern int RandomSeed(); - -// An instance of Tester is allocated to hold temporary state during -// the execution of an assertion. -class Tester { - private: - bool ok_; - const char* fname_; - int line_; - std::stringstream ss_; - - public: - Tester(const char* f, int l) - : ok_(true), fname_(f), line_(l) { - } - - ~Tester() { - if (!ok_) { - fprintf(stderr, "%s:%d:%s\n", fname_, line_, ss_.str().c_str()); - exit(1); - } - } - - Tester& Is(bool b, const char* msg) { - if (!b) { - ss_ << " Assertion failure " << msg; - ok_ = false; - } - return *this; - } - - Tester& IsOk(const Status& s) { - if (!s.ok()) { - ss_ << " " << s.ToString(); - ok_ = false; - } - return *this; - } - -#define BINARY_OP(name,op) \ - template \ - Tester& name(const X& x, const Y& y) { \ - if (! (x op y)) { \ - ss_ << " failed: " << x << (" " #op " ") << y; \ - ok_ = false; \ - } \ - return *this; \ - } - - BINARY_OP(IsEq, ==) - BINARY_OP(IsNe, !=) - BINARY_OP(IsGe, >=) - BINARY_OP(IsGt, >) - BINARY_OP(IsLe, <=) - BINARY_OP(IsLt, <) -#undef BINARY_OP - - // Attach the specified value to the error message if an error has occurred - template - Tester& operator<<(const V& value) { - if (!ok_) { - ss_ << " " << value; - } - return *this; - } -}; - -#define ASSERT_TRUE(c) ::leveldb::test::Tester(__FILE__, __LINE__).Is((c), #c) -#define ASSERT_OK(s) ::leveldb::test::Tester(__FILE__, __LINE__).IsOk((s)) -#define ASSERT_EQ(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsEq((a),(b)) -#define ASSERT_NE(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsNe((a),(b)) -#define ASSERT_GE(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsGe((a),(b)) -#define ASSERT_GT(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsGt((a),(b)) -#define ASSERT_LE(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsLe((a),(b)) -#define ASSERT_LT(a,b) ::leveldb::test::Tester(__FILE__, __LINE__).IsLt((a),(b)) - -#define TCONCAT(a,b) TCONCAT1(a,b) -#define TCONCAT1(a,b) a##b - -#define TEST(base,name) \ -class TCONCAT(_Test_,name) : public base { \ - public: \ - void _Run(); \ - static void _RunIt() { \ - TCONCAT(_Test_,name) t; \ - t._Run(); \ - } \ -}; \ -bool TCONCAT(_Test_ignored_,name) = \ - ::leveldb::test::RegisterTest(#base, #name, &TCONCAT(_Test_,name)::_RunIt); \ -void TCONCAT(_Test_,name)::_Run() - -// Register the specified test. Typically not used directly, but -// invoked via the macro expansion of TEST. -extern bool RegisterTest(const char* base, const char* name, void (*func)()); - - -} // namespace test -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_TESTHARNESS_H_ diff --git a/clipper/HyperLevelDB/util/testutil.cc b/clipper/HyperLevelDB/util/testutil.cc deleted file mode 100644 index bee56bf..0000000 --- a/clipper/HyperLevelDB/util/testutil.cc +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#include "util/testutil.h" - -#include "util/random.h" - -namespace leveldb { -namespace test { - -Slice RandomString(Random* rnd, int len, std::string* dst) { - dst->resize(len); - for (int i = 0; i < len; i++) { - (*dst)[i] = static_cast(' ' + rnd->Uniform(95)); // ' ' .. '~' - } - return Slice(*dst); -} - -std::string RandomKey(Random* rnd, int len) { - // Make sure to generate a wide variety of characters so we - // test the boundary conditions for short-key optimizations. - static const char kTestChars[] = { - '\0', '\1', 'a', 'b', 'c', 'd', 'e', '\xfd', '\xfe', '\xff' - }; - std::string result; - for (int i = 0; i < len; i++) { - result += kTestChars[rnd->Uniform(sizeof(kTestChars))]; - } - return result; -} - - -extern Slice CompressibleString(Random* rnd, double compressed_fraction, - size_t len, std::string* dst) { - int raw = static_cast(len * compressed_fraction); - if (raw < 1) raw = 1; - std::string raw_data; - RandomString(rnd, raw, &raw_data); - - // Duplicate the random data until we have filled "len" bytes - dst->clear(); - while (dst->size() < len) { - dst->append(raw_data); - } - dst->resize(len); - return Slice(*dst); -} - -} // namespace test -} // namespace leveldb diff --git a/clipper/HyperLevelDB/util/testutil.h b/clipper/HyperLevelDB/util/testutil.h deleted file mode 100644 index 4120b3a..0000000 --- a/clipper/HyperLevelDB/util/testutil.h +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2011 The LevelDB Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. See the AUTHORS file for names of contributors. - -#ifndef STORAGE_LEVELDB_UTIL_TESTUTIL_H_ -#define STORAGE_LEVELDB_UTIL_TESTUTIL_H_ - -#include "hyperleveldb/env.h" -#include "hyperleveldb/slice.h" -#include "util/random.h" - -namespace leveldb { -namespace test { - -// Store in *dst a random string of length "len" and return a Slice that -// references the generated data. -extern Slice RandomString(Random* rnd, int len, std::string* dst); - -// Return a random key with the specified length that may contain interesting -// characters (e.g. \x00, \xff, etc.). -extern std::string RandomKey(Random* rnd, int len); - -// Store in *dst a string of length "len" that will compress to -// "N*compressed_fraction" bytes and return a Slice that references -// the generated data. -extern Slice CompressibleString(Random* rnd, double compressed_fraction, - size_t len, std::string* dst); - -// A wrapper that allows injection of errors. -class ErrorEnv : public EnvWrapper { - public: - bool writable_file_error_; - int num_writable_file_errors_; - - ErrorEnv() : EnvWrapper(Env::Default()), - writable_file_error_(false), - num_writable_file_errors_(0) { } - - virtual Status NewWritableFile(const std::string& fname, - WritableFile** result) { - if (writable_file_error_) { - ++num_writable_file_errors_; - *result = NULL; - return Status::IOError(fname, "fake error"); - } - return target()->NewWritableFile(fname, result); - } -}; - -} // namespace test -} // namespace leveldb - -#endif // STORAGE_LEVELDB_UTIL_TESTUTIL_H_ diff --git a/clipper/Makefile b/clipper/Makefile deleted file mode 100644 index dad4a7f..0000000 --- a/clipper/Makefile +++ /dev/null @@ -1,105 +0,0 @@ -# -# $Id$ - -CC=g++ -PREFIX?=/usr -BINDIR?=$(PREFIX)/bin -CFLAGS?=-O3 -I. -# for debugging: -# CFLAGS?=-g -I. - -PKG=ea-utils -REL := $(shell svnversion 2>/dev/null | perl -ne 'print $$1 if /(\d+)/' ) -VER := $(shell grep '%define ver' ${PKG}.spec | perl -ne 'print $$1 if / (\S+) *$$/') - -SRC=fastq-clipper.cpp fastq-mcf.cpp fastq-multx.cpp fastq-join.cpp fastq-stats.cpp gcModel.cpp -BIN=fastq-mcf fastq-multx fastq-join fastq-stats fastq-clipper sam-stats varcall -TOOLS=fastx-graph gtf2bed determine-phred randomFQ alc - -all: $(BIN) check - -debug: - CFLAGS="-g -I." ${MAKE} $(MFLAGS) varcall - -install: $(BIN) $(BINDIR)/fastq-clipper $(BINDIR)/fastq-mcf $(BINDIR)/fastq-multx $(BINDIR)/fastq-join $(BINDIR)/fastq-stats $(BINDIR)/sam-stats $(BINDIR)/varcall $(BINDIR)/fastx-graph $(BINDIR)/determine-phred $(BINDIR)/randomFQ $(BINDIR)/alc - -$(BINDIR): - mkdir -p $(BINDIR) - -$(BINDIR)/%: % $(BINDIR) - cp $< $@ - -dist: getrel $(PKG).${VER}-${REL}.tar.gz - -# these shenanigans are done to ensure than the release in the spec file is the same as the subversion release -# a less verbose way should be possible - -getrel: - grep "${REL}" $(PKG).spec || touch $(PKG).spex - -.PHONY: getrel debug $(PKG).spec - -$(PKG).spec: - perl -pe 's/%RELEASE%/${REL}/' $(PKG).spex > $(PKG).spec - -$(PKG).tar.gz: Makefile $(TOOLS) $(SRC) $(PKG).spec fastq-lib.cpp fastq-lib.h sam-stats.cpp fastq-stats.cpp gcModel.cpp gcModel.h varcall.cpp utils.h README CHANGES sparsehash-2.0.3 samtools/*.c t - rm -rf $(PKG).${VER}-${REL} - mkdir $(PKG).${VER}-${REL} - mkdir $(PKG).${VER}-${REL}/tidx - mkdir $(PKG).${VER}-${REL}/samtools - cp -nr $^ $(PKG).${VER}-${REL} - cp -nr tidx/*.cpp tidx/*.h $(PKG).${VER}-${REL}/tidx - cp -nr samtools/*.c samtools/*.h samtools/Makefile $(PKG).${VER}-${REL}/samtools - tar --exclude=".svn" -cvzf $(PKG).tar.gz $(PKG).${VER}-${REL} - rm -rf $(PKG).${VER}-${REL} - -check: $(BIN) - prove -j 4 t - -disttest: $(PKG).tar.gz - rm -rf $(PKG).${VER}-${REL} - tar -xzvf $(PKG).tar.gz - cd $(PKG).${VER}-${REL} && make check - rm -rf $(PKG).${VER}-${REL} - -$(PKG).${VER}-${REL}.tar.gz: $(PKG).tar.gz - cp $< $@ - -%: %.cpp fastq-lib.cpp fastq-lib.h sparsehash - $(CC) $(CFLAGS) $< fastq-lib.cpp -o $@ - -sparsehash: sparsehash-2.0.3 - cd sparsehash-2.0.3; ./configure; make - mkdir sparsehash - cp -r sparsehash-2.0.3/src/sparsehash/* sparsehash/ - -# why the libbam.a doesn't work? not sure... *.o works -sam-stats: sam-stats.cpp samtools/libbam.a samtools/bam.h fastq-lib.h sparsehash -ifeq ($(OS),Windows_NT) - $(CC) $(CFLAGS) samtools/*.o -lz -lpthread -lws2_32 fastq-lib.cpp $< -o $@ -else - $(CC) $(CFLAGS) samtools/*.o -lz -lpthread fastq-lib.cpp $< -o $@ -endif - -samtools/libbam.a: samtools/*.c samtools/*.h - cd samtools && make libbam.a - -ea-bcl2fastq: ea-bcl2fastq.cpp - $(CC) $(CFLAGS) $< -lz -o $@ - -varcall: varcall.cpp fastq-lib.cpp tidx/tidx-lib.cpp sparsehash -ifeq ($(OS),Windows_NT) - echo varcall: not supported yet -else - $(CC) $(CFLAGS) fastq-lib.cpp tidx/tidx-lib.cpp -o $@ $< -lgsl -lgslcblas -endif - -fastq-stats: fastq-stats.cpp fastq-lib.cpp gcModel.cpp sparsehash - $(CC) $(CFLAGS) fastq-lib.cpp gcModel.cpp -o $@ $< - -bam-filter: bam-filter.cpp - $(CC) $(CFLAGS) fastq-lib.cpp -o $@ $< -lbamtools - -clean: - rm -f *.o $(BIN) - cd samtools && make clean diff --git a/clipper/README b/clipper/README deleted file mode 100644 index dd49bda..0000000 --- a/clipper/README +++ /dev/null @@ -1,67 +0,0 @@ -OVERVIEW: - -fastq-mcf - -Scans a sequence file for adapters, and, based on a log-scaled threshold, determines a set of clipping parameters and performs clipping. Also does skewing detection and quality filtering. - -fastq-multx - -Demultiplexes a fastq. Capable of auto-determining barcode id's based on a master set fields. Keeps multiple reads in-sync during demultiplexing. Can verify that the reads are in-sync as well, and fail if they're not. - -fastq-join -Similar to audy's stitch program, but in C, more efficient and supports some automatic benchmarking and tuning. It uses the same "squared distance for anchored alignment" as other tools. - -fastq-stats -Outputs stats for fastqs - -sam-stats -Output stats for sam/bam files - -varcall -Variant caller, takes bam or pileup output and does variant calling with advanced features like PCR duplicate filtering, homopolymer repeat filtering, calculation of error rate and dectectibility (minimum percentage) thresholds. - -REQUIRES: - -On Ubuntu: - -sudo apt-get install subversion zlib1g-dev libgsl0-dev - -For building sam-stats, please install this first! - -https://github.com/pezmaster31/bamtools/wiki/Building-and-installing - -QUICK FAQ: - -This is based on feedback/emails, etc. - -fastq-mcf does a 300k sub-sampling to determine what to do. There are lots of paramters to play with, but the "automatic" mode should do the right thing most of the time. If it doesn't, I really would like to hear why/what it did. The point in this tool is that the basic quality and adapter filtering should be something that's done automagically 90% of the time - not by manually picking paramters for each run. The fact that it's making decisions "for the user" means it will probably change more over time than the other tools. - -If you want fastq-mcf to be similar to other tools, you need to pass -m XX, and -s 100, so it's a fixed-length. If you try running with unrealistic, or "test" data, the heuristic won't work. Instead, try with a subsample of 50000 or so "real" reads. - -fastq-mcf doubles as a read-filtering program, it supports a broad range of filtering arguments. - -fastq-join produces a "report". This is just a list of lengths of joined reads. Also it chooses the "better quality base" when overlapping. Very stable code at this point. - -fastq-multx is intended to keep mates in sync, so you can demultiplex in one-pass. For single-reads, it's not better than other tools out there, except that you don't need to predefine your sets... which can help logistics in high-volume situations. Also, notice the output file's "%-sign" substitution... this is instead of lots of prefix and suffix arguments. Mismatch algorithm is "maximal unique"... ie... if it's possible that 2 barcodes can match, it won't use *either*. Qualities are *no longer* ignored, you can explicity set low quality reads as mismatches. Minimum edit distances can be specified, useful for recovering when CASAVA demultiplexing was poor, especially for dual indexed. Very stable code at this point. - -Dual-indexed codes are listed as SEQUENCE-SEQUENCE in the barcode file. I haven't tried mixing them with others on the autodetect code, I can't imaginge there's a reason to do that. - -The latest version can ignores bases that have extremely low qualities (<5), and refuses to match a barcode that isn't a minimum distance from another best match. It's a lot safer, but for some poor-quality runs these features will need to be disabled. - -sam-stats take a lot of options for a variety of reports. The most important ones to note are -D, which builds a huge hash of probe ids, and -R which produces a coverage matrix. It could autodetect if reads are sorted by probe ID and save RAM. It could also reduce RAM by removing common prefixes from the hash after some X reads. It doesn't do those things now. - -INSTALL: - -Should be able to run "make install" on most machines that have g++ installed. On windows, install a copy of the MinGW environment. You'll need zlib installed for some tools. fastq-mcf, fastq-stats, etc. are pretty basic, and work without any external libs. - -Example: - -PREFIX=/usr make install - -OR to a subdir: - -BINDIR=/usr/bin/ea-utils make install - -Or with other options: - -CC=g++ PREFIX=/usr/local make install diff --git a/clipper/affy-csv-to-bed.pl b/clipper/affy-csv-to-bed.pl deleted file mode 100644 index 5949911..0000000 --- a/clipper/affy-csv-to-bed.pl +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Data::Dumper; - -while(<>) { - next if /^#/; - last; -} - -chomp; -my @h = split /","/; - -while(<>) { - chomp; - my @f = split /","/; - my $i = 0; - my %d; - for (@h) { - s/"//g; - $d{lc($_)}=$f[$i++]; - } - for (split m{///}, $d{alignments}) { - next if /---/; - my ($al) = split m{//}; - $al=~s/^\s+//; - $al=~s/\s+$//; - $al=~s/\t/ /g; - my ($chr, $st, $en, $strand) = $al =~ /([^:]+):(\d+)-(\d+) \((.)\)/; - --$st; - print "$chr\t$st\t$en\t{$al}\t0\t$strand\n"; - } -} - diff --git a/clipper/affy-liftover.pl b/clipper/affy-liftover.pl deleted file mode 100644 index e683920..0000000 --- a/clipper/affy-liftover.pl +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Getopt::Long; - -my %opt; -die usage() unless GetOptions(\%opt, "csv=s", "chain=s", "output=s"); -die usage() unless $opt{chain} && $opt{csv}; - -sub usage { -< $opt{csv}.bed") && die; -system("./liftOver -minMatch=0.75 $opt{csv}.bed $opt{chain} ${out}.bed ${out}.unchain") && die; - -my $unmap = 0+`wc -l $out.unchain`; - -print "warning\tlost $unmap annotations during liftover\n"; - -open (IN, "${out}.bed") || die "${out}.bed:$!"; - -my %map; -while () { -# liftover coverts spaces to tabs in an unusual way.... fix this! - chomp; - - die unless s/{([^{}]+)}/X/; - - my ($orig) = $1; - $orig =~ s/\t/ /g; - - my ($chr, $st, $en, undef, undef, $str) = split /\t/; - die unless $str =~ /\+|-/; - - ++$st; - my $new = "$chr:$st-$en ($str)"; - $map{$orig}=$new; -} - -open (IN, $opt{csv}) || die "$opt{csv} : $!"; - -while() { - print $_ && next if /^#/; - last; -} -chomp; -my @h = split /","/, $_; -my $i_al=-1; -for (@h) { - ++$i_al; - last if /^alignments/i; -} -die "invalid CSV file, no alignments header" unless $i_al > 0; - -open OUT, ">$out.csv"; - -while(my $l=) { - print $l && next if /^#/; - my @f = split /","/, $l; - my @sub; - for my $al (split m{///}, $f[$i_al]) { - my ($orig) = split m{//}, $al; - $orig=~s/^\s+//; - $orig=~s/\s+$//; - $orig=~s/\t//g; - my $new=$map{$orig}; - if ($new) { - my $tmp=$al; - die unless $tmp=~ s/\Q$orig\E/$new/; - push @sub, [$al, $tmp]; - } - } - for (@sub) { - die unless $l=~s/\Q$_->[0]\E/$_->[1]/; - } - print OUT $l; -} - diff --git a/clipper/aggregate-results-by-gene.pl b/clipper/aggregate-results-by-gene.pl deleted file mode 100644 index 3d87381..0000000 --- a/clipper/aggregate-results-by-gene.pl +++ /dev/null @@ -1,294 +0,0 @@ -#!/usr/bin/perl - -#Copyright (c) 2012 Erik Aronesty (erik@q32.com) -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in -#all copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -#THE SOFTWARE. -# -#ALSO, IT WOULD BE NICE IF YOU LET ME KNOW YOU USED IT. - -use strict; -use Getopt::Long; -use IO::File; -use Data::Dumper; -use Carp qw(croak); - -my %opt; -GetOptions(\%opt, "gtf=s") || die usage(); -die usage() if !$opt{gtf}; - -# open gtf -open(G, $opt{gtf}) || die("$opt{gtf}: $!\n"); -my $f = shift @ARGV; - -# open counts -open(IN, $f) || die "$f: $!\n"; - -# read gtf into hash -my %gs; -my %tids; -while() { - my @fds = split /\t/, $_; - my ($g) = $fds[8]=~/gene_id "([^"]+)"/; - my ($t) = $fds[8]=~/transcript_id "([^"]+)"/; - $gs{$t}=$g; - $tids{$g}{$t}=1; -} - -die "gtf file has no genes\n" unless %gs; -my $head1 = ; chomp $head1; - -my $format = $head1 =~ /est_counts/ ? "express" : - $head1 =~ /^\S*:\S+\t\d+\t\d+\t\d/ ? "coverage-matrix" : - undef; - -die "File is not known express 1.x, or sam-stats coverage-matrix output\n" unless $format; - -close IN; - -for (keys(%tids)) { - $tids{$_}=join ',', keys(%{$tids{$_}}); -} - -my @fields = (); -if ($format eq 'coverage-matrix') { - @fields = (fields=>["transcript_id", "length", "count", "coverage", "skew"]); -} - -my %agg; -my $tot_count; -xsvparse($f, sub => sub { - my ($d) = @_; - if ($format eq 'express') { - my $g = $gs{$d->{target_id}}; - return unless $g; - $agg{$g}{fpkm}+=$d->{fpkm}; - $agg{$g}{eff_length}+=$d->{eff_length}*($d->{est_counts}+1); - $agg{$g}{length}+=$d->{length}*($d->{est_counts}+1); - $agg{$g}{est_counts}+=$d->{est_counts}; - $agg{$g}{eff_counts}+=$d->{eff_counts}; - $agg{$g}{junk_counts}+=$d->{est_counts}+1; - $agg{$g}{fpkm_conf_high}+=$d->{fpkm_conf_high}; - $agg{$g}{fpkm_conf_low}+=$d->{fpkm_conf_low}; - $agg{$g}{transcript_ids}=$tids{$g}; - } else { - $tot_count+=$d->{count}; - my $g = $gs{$d->{transcript_id}}; - return unless $g; - $agg{$g}{fpkm}+=1000*$d->{count}/$d->{length}; - $agg{$g}{count}+=$d->{count}; - $agg{$g}{length}+=$d->{length}*($d->{count}+1); - $agg{$g}{transcript_ids}=$tids{$g}; - $agg{$g}{junk_counts}+=$d->{count}+1; - } -},nocase=>1, @fields); - -my @fds = qw(gene_id est_counts eff_counts length eff_length fpkm fpkm_conf_low fpkm_conf_high transcript_ids); - -if ($format eq 'coverage-matrix') { - @fds = qw(gene_id count length fpkm transcript_ids); -} -print join("\t", @fds), "\n"; - -for my $g (sort {$agg{$b}->{fpkm} <=> $agg{$a}->{fpkm}} keys(%agg) ) { - $agg{$g}{gene_id}=$g; - $agg{$g}{eff_length}/=$agg{$g}{junk_counts}; - $agg{$g}{length}/=$agg{$g}{junk_counts}; - if ($format eq 'coverage-matrix') { - $agg{$g}{fpkm}/=($tot_count/1000000); - } - print join("\t", map {$agg{$g}{$_}} @fds), "\n"; -} - - -sub usage { -<val, option1=>val) -# -# all options are optional... by defualt it guesses the quote char, and the delimiter, and returns an array of hashes -# if you specify a key, then it will return a hash of hashes indexed by that key -# for example xsvparse("Summary.tsv", key=lane); - -# OPTIONS: -# nocase BOOL : lowercases all keys and field names -# skip INT|REGEX : skips lines of file before reading -# fields AREF : reference to an array of field names, for files without headers -# key NAME : if specified, you get a hash of hashes indexed by a key field -# delim TEXT : if specified, the delimiter to use (otherwise autodetect) -# quot TEXT : if specified, the quot char to use (otherwise autodetect) -# multi BOOL : if specified, each keyed entry is an arrayref of all matches -# sub FUNCREF : if specified, each row is passed to the funcref - - -sub xsvparse { - my ($file, %op) = @_; - - my $in = new IO::File; - my $fin = $file =~ /\.gz$/ ? "gunzip -c $file|" : $file; - open ($in, $fin) || return undef; - - lcasehash(\%op); - - my $l1; - - if (!$op{delim}) { - $l1 = <$in>; - $l1 =~ s/[\r\n]+$//o; - } - - my $skip_me = sub { - if ($op{skip}) { - if (ref($op{skip}) eq 'Regexp') { - do { - $l1 = <$in>; $l1 =~ s/[\r\n]+$//o; - } while ($l1 =~ $op{skip}); - } else { - my $skip = $op{skip}; - while ($skip > 0) { - $l1 = <$in>; $l1 =~ s/[\r\n]+$//o; - --$skip; - } - } - } - }; - - &$skip_me(); - - return undef unless $l1 || $op{delim}; - - local $_; - - if (!$op{delim}) { - my $n = 0; - my $d; - for ("\t", ",", "|") { - my $c = $_ eq "\t" ? $l1 =~ tr/\t// : $_ eq "," ? $l1 =~ tr/,// : $l1 =~ tr/|//; - if ($c > $n) {$d = $_; $n = $c}; - } - $op{delim} = $d if $n > 0; - croak "xsvparse can't determine delimiter for $file" if $n == 0; - if ($op{fields}) { - close($in); - open($in, $fin); - &$skip_me(); - } - } - - my $rxm = undef; - if (!$op{quot}) { - my $n = $l1 =~ tr/\"//; - if ($n > 1) { - $op{quot} = '"'; - } - } - if ($op{quot}) { - # quoted csv parser... slower, but works fine - $rxm = qr{$op{quot}([^$op{quot}\\]*(?:\\.[^$op{quot}\\]*)*)$op{quot}$op{delim}?|([^$op{delim}]+)$op{delim}?|$op{delim}}; - } - if ($op{fields}) { - if (!ref($op{fields}) eq 'ARRAY') { - die "list of field names should be an array"; - } - } else { - if (!$op{fields}) { - $l1 = <$in> if ! defined $l1; - if ($rxm) { - @{$op{fields}} = (); - push(@{$op{fields}} ,$+) while $l1 =~ m/$rxm/gx; - } else { - $op{fields} = [split($op{delim}, $l1)]; - map {s/\s+$//} @{$op{fields}}; - } - } - if ($op{rnames}) { - $op{fields} = ['', @{$op{fields}}] unless $op{fields}->[0] eq ''; - $op{fields}->[0]=$op{key}=''; - } - if ($op{nocase}) { - for (@{$op{fields}}) { - $_=lc($_); - } - } - } - if ($op{nocase} && $op{key}) { - $op{key} = lc($op{key}); - } - - no warnings; - my $r; - my @d; - my @d; - while (<$in>) { - s/[\r\n]+$//o; - if ($rxm) { - @d = (); - push(@d ,$+) while m/$rxm/gx; - push(@d,undef) if substr($_, -1,1) eq $op{delim}; - } else { - @d = split($op{delim}, $_); - } - my %h; - for (my $i = 0; $i < @{$op{fields}}; ++$i) { - $h{$op{fields}->[$i]}=$d[$i]; - } - if ($op{sub}) { - last if &{$op{sub}}(\%h) eq 'last'; - } elsif ($op{key}) { - if ($op{nocase}) { - if ($op{multi}) { - push @{$r->{lc($h{$op{key}})}}, \%h; - } else { - $r->{lc($h{$op{key}})}=\%h; - } - } else { - if ($op{multi}) { - push @{$r->{$h{$op{key}}}}, \%h; - } else { - $r->{$h{$op{key}}}=\%h; - } - } - } else { - push @{$r}, \%h; - } - } - - return $r; -} - -sub lcasehash { - my $h = shift; - for (keys(%$h)) { - if (! $_ eq lc($_) ) { - $h->{lc($_)}=$h->{$_}; - delete $h->{$_}; - } - } -} - diff --git a/clipper/alc b/clipper/alc deleted file mode 100755 index 54615f2..0000000 --- a/clipper/alc +++ /dev/null @@ -1,178 +0,0 @@ -#!/usr/bin/perl - -# Copyright (c) 2011 Erik Aronesty (erik@q32.com) -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# NOTE: Please let me know if you use it or like it, AKA: "Thank You Mask Man" - -use strict; -use Getopt::Long; -our $VERSION = 1.2; - -my %nl; -my $w=200000; # window size -my $x=10; # segment count -my $only; -GetOptions("only"=>\$only, "window=i"=>\$w, "segs=i"=>\$x); - -die usage() unless @ARGV; -die usage() if $only && @ARGV > 1; -$|=1; -#$x-=1; -my $tl=0; -for my $f (@ARGV) { - my $s = -s $f; - my $gz = $f =~ /\.gz$/; - open (IN, ($gz ? "gunzip -c '$f'|" : $f)) || (warn("$f: $!\n"), next); - my $nl = 0; - my $gzratio = 1; - if ($gz) { - if ( $s > $w ) { - # todo, this can be done all-in-one stream, by buffering the read and gzipping in a loop - # it will be much faster! - my (@bz, @lz); - $x = 5; # 5 points - my $ss = $w/$x; - for (my $i=0; $i<$x; ++$i) { - my $o = int($ss * ($i+1)); - $bz[$i]=`gunzip -c '$f' | head -$o | gzip -c | wc -c`; - if (abs($s-$bz[$i]) < ($ss+length($f))) { - $nl=`gunzip -c '$f' | wc -l`; - goto MAXXED; - } else { - $lz[$i]=$s*$o/$bz[$i]; - } -# warn("o: ", $o, ", lzi:", $lz[$i], ", bzi:", $bz[$i], "\n"); - } - - # simple linear model log(bytes)~lines - my ($xxs, $xys, $xs, $ys); - for (my $i=0; $i<$x; ++$i) { - $xs+=log($bz[$i]); - $ys+=$lz[$i]; - $xxs+=log($bz[$i])*log($bz[$i]); - $xys+=$lz[$i]*log($bz[$i]); - } - my $slope = ($xys - $xs*$ys/$x) / ($xxs - $xs*$xs/$x); - my $intercept = ($ys - ($slope*$xs))/$x; -# warn("intercept: $intercept, slope: $slope, s: $s\n"); -# log size predictive of lines..... - $nl = $intercept + $slope * log($s); - MAXXED: - } else { - close(IN); - $nl = `gunzip -c '$f' | wc -l` + 0; - } - } else { - my $rc = 0; - if ($s > ($w*2)) { - my $ss = $x == 1 ? $w : (($s-($w/$x))/($x-1)); - my $d; -# warn("segments: $x, window: $w, ss:$ss\n"); - my $tweight; - for (my $i=0;$i<$x;++$i) { - seek(IN, $i*$ss, 0) if $i > 0; - read(IN, $d, $w/$x); - #whole lines only, prevents overcounting - if ($i > 0) { - # seek before current block, getting more accurate "long-first-lines" - my $z; - seek(IN, $i*$ss-1000, 0); - read(IN, $z, 1000); - $z=substr($z, rindex($z, "\n")+1); - $d=$z.$d; - } else { - #$d=substr($d, index($d, "\n")+1); # remove first line - } - $d=substr($d, 0, rindex($d, "\n")+1); # remove last line - $rc += length($d); - $nl += xlc($d); - # printf STDERR "seek: %d, len: %d, xlc: %d, rc: %d, nl: %d\n", $i*$ss, length($d), xlc($d), $rc, $nl; - } - } else { - my $d; - read(IN, $d, $w); - $d=substr($d, 0, rindex($d, "\n")+1); # remove last line - $rc += length($d); - $nl += xlc($d); - } - $nl = int($rc > 0 ? $nl * $s / $rc : 0); - } - $tl += $nl; - print "$nl" if $only; - print "\n" if $only && -t STDOUT; - $nl{$f} = $nl if !$only; -} - -if (!$only) { - my $m=length($tl)+1; - for my $f (@ARGV) { - printf "%*d %s\n", $m, $nl{$f}, $f; - } - printf "%*d %s\n", $m, $tl, "total" if @ARGV > 1; -} - -sub xlc { - my $d = $_[0]; - my $p=0; - my $c=0; - my $i=0; - while (($i=index($d, "\n", $p))>=0) { - ++$c; - $p=$i+1; - } - return $p [] ... - -Approximate line counts for each file. Attempts to be -somewhat compatible with "wc -l" by default. - --o|--only Output line count only for a single file. --w|--window Read bytes from head, mid, and tail. --s|--segs Divide file & window into segments. -EOF -}; - -__END__ - -=head1 NAME - -alc - Approximate line count - -=head1 DESCRIPTION - -Approximate line counts for each file. Attempts to be -somewhat compatible with "wc -l" by default. - -=head1 AUTHOR - -Erik Aronesty C - -=head1 LICENSE - -This program is free software; you can redistribute it and/or -modify it under the same terms as Perl itself. - -See L. - -=cut diff --git a/clipper/align-sw.cpp b/clipper/align-sw.cpp deleted file mode 100644 index 7d434fd..0000000 --- a/clipper/align-sw.cpp +++ /dev/null @@ -1,23 +0,0 @@ -///A tutorial about local alignments. -#include -#include - -using namespace seqan; - -int main(int argc, char **argv) -{ -///Example 1: This program applies the Smith-Waterman algorithm to compute the best local alignment between two given sequences. - if (argc < 3) { - fprintf(stderr, "usage: align-sw \n"); - exit(1); - } - - Align< String > ali; - appendValue(rows(ali), argv[1]); - appendValue(rows(ali), argv[2]); - ::std::cout << "Score = " << localAlignment(ali, Score(3,-3,-2, -2), SmithWaterman()) << ::std::endl; - ::std::cout << ali; - ::std::cout << "Aligns Seq1[" << clippedBeginPosition(row(ali, 0)) << ":" << (clippedEndPosition(row(ali, 0))-1) << "]"; - ::std::cout << " and Seq2[" << clippedBeginPosition(row(ali, 1)) << ":" << (clippedEndPosition(row(ali, 1))-1) << "]" << ::std::endl << ::std::endl; - return 0; -} diff --git a/clipper/bam-filter.cpp b/clipper/bam-filter.cpp deleted file mode 100644 index 3572e51..0000000 --- a/clipper/bam-filter.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/* -Copyright (c) 2011 Expression Analysis / Erik Aronesty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -ALSO, IT WOULD BE NICE IF YOU LET ME KNOW YOU USED IT. - -$Id$ -*/ -const char * VERSION = "2.0"; - -#include -#include - -void usage(FILE *f) { - fputs( -"Usage: bam-filter [-h] [-i IN] [-b BAD-READS] [-s STAT] -f FILTER1 [-f FITLER2...] -o OUT \n" -"Version: %s\n" -"\n" -" -h help\n" -" -i input (stdin)\n" -" -s stats (stderr)\n" -" -t trim char (none)\n" -" -o output bam prefix\n" -" -b writes reads that were removed (bad reads) to this file, if specified\n" -" -e save all equal alignments\n" -" -m save equal only if edit distance is smaller\n" -" -f bam file to filter input against\n" -"\n" -"For each read in the input bam, searches all the filters. If an analogous read in a filter has\n" -"a higher mapping quality, then the read from the input bam is discarded.\n" -"\n" - ,f); -} - -#include -#include -#include -#include -#include -#include -#include - -#include -#include // or sparse_hash_set, dense_hash_map, ... - -#include -#include - -using namespace BamTools; - -class mapq { -public: - int mq; - int nm; - mapq() {mq=0;nm=0;}; -}; - -#define MAX_F 128 - -void usage(FILE *f); - -int debug=0; -int main(int argc, char **argv) { - char c, *in=NULL, *out=NULL, *err=NULL, *bad=NULL, trimchar = '\0'; - char *filter[MAX_F]; - int nfilter = 0, saveeq = 0, savenm = 0; - - - while ( (c = getopt (argc, argv, "demo:i:s:f:b:t:")) != -1) { - switch (c) { - case 'd': ++debug; break; - case 'b': bad=optarg; break; - case 'o': out=optarg; break; - case 'e': saveeq=1; break; - case 'm': savenm=1; break; - case 'i': in=optarg; break; - case 't': trimchar=*optarg; break; - case 's': err=optarg; break; - case 'h': usage(stdout); return 0; - case 'f': filter[nfilter++]=optarg; - if (nfilter >= MAX_F) { - fprintf(stderr, "Too many filters: %d\n", nfilter); - return 1; - } - break; - case '?': - if (optopt == '?') { - usage(stdout); return 0; - } else if (optopt && strchr("oisft", optopt)) - fprintf (stderr, "Option -%c requires an argument.\n", optopt); - else if (isprint(optopt)) - fprintf (stderr, "Unknown option `-%c'.\n", optopt); - else - fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); - usage(stderr); - return 1; - } - } - if (!nfilter) { - usage(stderr); - return 1; - } - - if (!out) { - usage(stderr); - return 1; - } - - FILE *ferr=stderr; - if (err) { - fprintf(stderr,"Opening %s\n",err); - ferr=fopen(err,"w"); - if (!ferr) { - fprintf(stderr, "Error writing '%s': %s\n", err, strerror(errno)); - } - } - - // options are done - BamReader inbam; - if ( !inbam.Open(in) ) { - fprintf(stderr, "Error reading '%s': %s\n", in, strerror(errno)); - return 1; - } - - - google::sparse_hash_map pmap; - int i; - for (i=0;i::iterator it; - BamAlignment al; - while ( fbam.GetNextAlignment(al) ) { - it = pmap.find(al.Name); - - mapq m; - m.mq = al.MapQuality; - al.GetTag("NM",m.nm); - - if (it == pmap.end()) { - pmap[al.Name]=m; - } else { - if (al.MapQuality > it->second.mq) { - pmap[al.Name]=m; - } - } - } - } - - SamHeader header = inbam.GetHeader(); - RefVector references = inbam.GetReferenceData(); - - BamWriter writer; - BamWriter badwriter; - - if ( !writer.Open(out, header, references) ) { - fprintf(stderr, "Error writing '%s': %s", out, strerror(errno)); - return 1; - } - - if ( !badwriter.Open(bad, header, references) ) { - fprintf(stderr, "Error writing '%s': %s", bad, strerror(errno)); - return 1; - } - - google::sparse_hash_map::iterator it; - BamAlignment al; - if (debug) fprintf(stderr, "Filtering\n"); - int na=0, gt=0, eq=0, lt=0, to=0, eq_r=0, eq_s=0; - - while ( inbam.GetNextAlignment(al) ) { - ++to; - try { - it = pmap.find(al.Name); - if (it == pmap.end()) { - // not found? - writer.SaveAlignment(al); - ++na; - } else if (al.MapQuality > it->second.mq) { - // gt - ++gt; - writer.SaveAlignment(al); - } else if (al.MapQuality == it->second.mq) { - // eq - int nm; - al.GetTag("NM",nm); - if (nm < it->second.nm) { - // fewer mismatches - if (savenm) { - writer.SaveAlignment(al); - ++eq_s; - } else { - badwriter.SaveAlignment(al); - ++eq_r; - } - } else if (nm == it->second.nm) { - if (saveeq) { - writer.SaveAlignment(al); - ++eq_s; - } else { - badwriter.SaveAlignment(al); - ++eq_r; - } - } else { - badwriter.SaveAlignment(al); - ++eq_r; - } - } else { - // lt - badwriter.SaveAlignment(al); - ++lt; - } - } catch (...) { - } - } - fprintf(ferr,"total\t%d\n",to); - fprintf(ferr,"better\t%d\t%2.2f%%\n",gt,100.0*gt/(float)to); - if (eq_s > 0) fprintf(ferr,"eq-saved\t%d\t%2.2f%%\n",eq_s,100.0*eq_s/(float)to); - if (eq_r > 0) fprintf(ferr,"eq-removed\t%d\t%2.2f%%\n",eq_r,100.0*eq_r/(float)to); - fprintf(ferr,"removed\t%d\t%2.2f%%\n",lt,100.0*lt/(float)to); - if (na) fprintf(ferr,"missing\t%d\t%2.2f%%\n",na,100.0*na/(float)to); - return 0; -} - diff --git a/clipper/bowtie-gzip.patch b/clipper/bowtie-gzip.patch deleted file mode 100644 index c71da19..0000000 --- a/clipper/bowtie-gzip.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- pat.h 2010-08-27 13:17:04.000000000 -0400 -+++ pat.h.new 2012-01-20 11:23:33.360270710 -0500 -@@ -20,6 +20,12 @@ - #include "qual.h" - #include "hit_set.h" - #include "search_globals.h" -+#include -+ -+static inline const char *ext(const char *s) { -+ const char *x; -+ return (x = strrchr(s, '.')) ? x : ""; -+} - - /** - * Classes and routines for reading reads from various input sources. -@@ -1707,6 +1713,18 @@ - FILE *in; - if(infiles_[filecur_] == "-") { - in = stdin; -+ } else if(!strcmp(ext(infiles_[filecur_].c_str()),".gz")) { -+ string tmp; -+ tmp = "gunzip -c '"; -+ tmp += infiles_[filecur_]; -+ tmp += "'"; -+ in = popen(tmp.c_str(), "r"); -+ if (!in) { -+ cerr << "Warning: Could not popen read file \"" << tmp << "\" for reading (" << strerror(errno) << "); skipping..." << endl; -+ errs_[filecur_] = true; -+ filecur_++; -+ continue; -+ } - } else if((in = fopen(infiles_[filecur_].c_str(), "rb")) == NULL) { - if(!errs_[filecur_]) { - cerr << "Warning: Could not open read file \"" << infiles_[filecur_] << "\" for reading; skipping..." << endl; diff --git a/clipper/bwa-to-bowtie b/clipper/bwa-to-bowtie deleted file mode 100755 index 7fec2b1..0000000 --- a/clipper/bwa-to-bowtie +++ /dev/null @@ -1,407 +0,0 @@ -#!/usr/bin/perl - -#### -#Copyright (c) 2012 Erik Aronesty (erik@q32.com) -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in -#all copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -#THE SOFTWARE. -# -#ALSO, IT WOULD BE NICE IF YOU LET ME KNOW YOU USED IT. -# - -use strict; -use POSIX qw(mkfifo); -use Data::Dumper; - -use Getopt::Long qw(:config no_ignore_case); - -my %opt; -GetOptions(\%opt, "sort|s", "fai=s", "noindel", "strand|S=s", "keep", "debug"); - -my $f = shift @ARGV; -my $o = shift @ARGV; -my $keep = $opt{keep}; - -die "Usage: $0 [options] - -Convert a bam file into a file similar to bowtie output - -This is suitable for passing to RSEM if (-n, -f) are used, -or to EXPRESS (without -n or -f). - - -s sort by id, use if the source bam is not sorted by id - - -n no indels ... removes indels and soft-clip information - from the cigar string... ruining the validity of the MD tag - and any variation results... but good for pipelines (like - rna counting) that don't use/want this info -" unless $f && $o =~ /bam$/; - -my %FAI; -if ($opt{fai}) { - warn "Obsolete argument -f, ignoring\n"; -} - -open IN, $f =~ /\.bam$/ ? "samtools view -h $f |" : "$f"; - -if ($opt{sort} && $f !~ /\.bam$/) { - die "Specify presorted or use a regular bam file\n"; -} - -my ($pe, $cnt, @lens, @IN); - -# first 5000 proper aligned reads... make an insert size -while () { - # save to stack - if (/^\@SQ\s+SN:(\S+)\s+LN:(\d+)/ ) { - $FAI{$1}=$2+0; - } - - push @IN, $_; - my ($id, $bits, $nmo, $pos, $qual, $cig, $f1, $f2, $f3, $seq, $qseq, @fdx) = split /\t/, $_; - next unless $pos > 0; - ++$cnt; - if (abs($f3)>0) { - if ($f3 > 0) { - push @lens, $f3; - } - $pe = 1; - } - last if $cnt > 5000; -} -$opt{fai} = "-"; - -# trimmed mean -@lens=sort {$a<=>$b} (@lens); -$cnt = 0; -my $insert = 0; -for(my $i=(@lens*.10);$i<(@lens*.90);++$i) { - $insert+=$lens[$i]; $cnt+=1; -} - -if (!$cnt && $pe) { - die "No paired alignments in '$f' quitting\n"; -} - -if (!$cnt) { - $insert="n/a"; -} else { - $insert/=$cnt; -} -warn "Insert size: $insert\n" if $opt{debug}; - -if ($opt{sort}) { - die "-sort only if input is bam\n" unless $f =~ /\.bam$/; - - my $sb = $f; - $sb =~ s/\.bam$//; - $sb .= ".ntmp"; - - unlink("$sb.bam"); - warn("+mkfifo $sb.bam\n"); - if (!mkfifo("$sb.bam", 0664)) { - die "Can't create fifo $sb.bam: $!\n"; - } - if (!fork()) { - # write to sb.bam fifo in a fork - system("samtools sort -n $f $sb"); - exit(0); - } - # now read from the id-sorted bam, instead of the chromosome-sorted bam - $f = "$sb.bam"; - close IN; - @IN=(); - open IN, $f =~ /\.bam$/ ? "samtools view $f |" : "$f"; -} - -my (@m); - -sub saveout { - my ($out, $mate, $nmo, $pos, $len, $isrev, $origid, $cig) = @_; - if ($pe) { - if ($mate == 0) { - if ($m[1]) { - # first pair is bwa's default - my $f1 = shift @{$m[0]}; - my $f2 = shift @{$m[1]}; - - if ($f1->[1] eq $f2->[1] ) { - if (!($f1->[1] eq '*') && !($f2->[1] eq '*') && !($f1->[6] eq '*') && !($f2->[6] eq '*')) { - if (((($f1->[2]+$f1->[3]) < $FAI{$f1->[1]}) && - (($f2->[2]+$f2->[3]) < $FAI{$f2->[1]}))) { - # only output proper pair, with '*' nmo's and cigs, and where both alignments are within the fai - print OUT $f1->[0]; - print OUT $f2->[0]; - } else { - # warn discard? - } - } else { - if ($keep && (($f1->[1] eq '*') && ($f2->[1] eq '*'))) { - print OUT $f1->[0]; - print OUT $f2->[0]; - } else { - # warn discard - } - } - } - - if (@{$m[0]} && @{$m[1]}) { - - # prune proper ... only matching mates - my %have; - for (@{$m[0]}) { - next if $_->[6] eq '*'; - next if $opt{fai} && (($_->[2]+$_->[3]) > $FAI{$_->[1]}); - $have{$_->[1]}=1; - } - for (@{$m[1]}) { - next if $_->[6] eq '*'; - next if $opt{fai} && (($_->[2]+$_->[3]) > $FAI{$_->[1]}); - $have{$_->[1]}=2 if $have{$_->[1]} == 1; - } - - %have = map { $have{$_}==2 ? ($_=>1) : () } keys(%have); - - $have{'*'} = undef; - - my (@m1, @m0); - - # only keep good alignments - for (@{$m[0]}) { - next if $opt{fai} && (($_->[2]+$_->[3]) > $FAI{$_->[1]}); - push @m0, $_ if $have{$_->[1]} && !($_->[6] eq '*'); - } - for (@{$m[1]}) { - next if $opt{fai} && (($_->[2]+$_->[3]) > $FAI{$_->[1]}); - push @m1, $_ if $have{$_->[1]} && !($_->[6] eq '*'); - } - - @{$m[0]}=@m0; - @{$m[1]}=@m1; - - my %taken; - @m0 = (); - @m1 = (); - # now pick best mate from the pruned set (first part above not really necessary, but might speed things up) - for my $a (@{$m[0]}) { - my $min = 1000000; - my $best; - for my $b (@{$m[1]}) { - if ($a->[1] eq $b->[1]) { - # distance closest to true insert size - my $dist = abs(abs($a->[2]-$b->[2])+$b->[3]-$insert); - if ($dist < $min && !$taken{scalar $b} && $dist < $insert) { - # if distance no more than double insert size, then it's OK (bwa should filter, but doesn't always) - $min=$dist; - $best=$b; - } - } - } - if ($best) { - # found a mate? output it - $taken{scalar $best}=1; - push @m0, $a; - push @m1, $best; - } - } - - @{$m[0]}=@m0; - @{$m[1]}=@m1; - - for (my $i=0;$i<@{$m[0]};++$i) { - if ($m[0][$i][5] gt $m[1][$i][5]) { - # swap mates so they are in the ORIGINAL-ID (read1, read2) order - my @tmp = @{$m[0][$i]}; - @{$m[0][$i]} = @{$m[1][$i]}; - @{$m[1][$i]} = @tmp; - } - - my ($out1, $nmo1, $pos1, $len1, $isrev1, $origid, $cig) = @{$m[0][$i]}; - my ($out2, $nmo2, $pos2, $len2, $isrev2, $origid, $cig) = @{$m[1][$i]}; - - # replace insert-size and mate-pos (slow!) - my $dist1 = $pos2-$pos1-$len2 if $isrev1 && $pos2 && $pos1; - $dist1 = $pos2-$pos1+$len2 if !$isrev1 && $pos2 && $pos1; - $out1 = replacetab($out1, 8, $dist1); - $out1 = replacetab($out1, 7, $pos2); - - print OUT $out1; - - my $dist2 = -$dist1; - $out2 = replacetab($out2, 8, $dist2); - $out2 = replacetab($out2, 7, $pos1); - print OUT $out2; - } - } - @m = (); - } - } - push @{$m[$mate]}, [$out, $nmo, $pos, $len, $isrev, $origid, $cig]; - } else { - # only print clearly good or clearly unaligned - print OUT $out if ($keep && $nmo eq '*') || ((!($nmo eq '*')) && (!($cig eq '*')) && (($pos+$len) < $FAI{$nmo})); - # warn discard? - } -} - -warn "Reading '$f', writing to '$o'\n" if $opt{debug}; - -#open OUT, "|samtools view -S -b - > $o 2> /dev/null"; -open OUT, "|samtools view -S -b - > $o"; - -my $mate = 1; -my $previd; - -while (1){ - if (@IN) { - # pop stack - $_ = shift @IN; - } else { - $_ = ; - } - if (!$_) { - warn "Finished reading $f\n" if $opt{debug}; - last; - } - - next if /^\@PG/ && $opt{noindel}; - print(OUT) && next if /^\@/; - chomp; - - $mate = !$mate; - - my ($id, $bits, $nmo, $pos, $qual, $cig, $f1, $f2, $f3, $seq, $qseq, @fdx) = split /\t/, $_; - - my $origid = $id; - - if (!$pe && ($cig eq '*' || $nmo eq '*')) { - print OUT $_, "\n" if $keep; - next; - } - -# ensure progression even if errors in code -eval { - if ($pe && $mate && $previd) { - # paired-end read id's have to match each other ... IE: bowtie output - $_ = replacetab($_, 0, $previd); - $id = $previd; - } - - # previd set - $previd = $id; - - my ($xa, $nm); - for (@fdx) { - # get rid of XA tag - if (s/^XA:Z://) { - $xa = $_; - $_ = ''; - } - # get rid of NM tag - if (s/^NM:i://) { - $nm = $_; - $_ = ''; - } - } - - if ($opt{noindel}) { - # clean cig : todo: maybe remove innacurate MD tag? or keep it because it *was* OK? - $cig =~ s/(\d+)I/\1M/g; - $cig =~ s/(\d+)D//g; - $cig =~ s/(\d+)S/\1M/g; - while ($cig =~ s/(\d+)M(\d+)M/($1+$2)."M"/e) {}; - } - - $_=replacetab($_, 5, $cig); - - saveout($_."\n", $mate, $nmo, $pos, length($seq), $bits & 16, $origid, $cig) && next if !$xa; - - # remove XA tag - $_ =~ s/\tXA:Z:[^\t]+//; - - saveout($_."\n", $mate, $nmo, $pos, length($seq), $bits & 16, $origid, $cig); - - my $isrev = $bits & 16; - - for (split /;/, $xa) { - # for each x alignment - my ($nmo, $pos, $cig, $mm) = m/(.*),([^,]+),([^,]+),([^,]+)/; - - # set reverse bits as appropriate - $bits = $bits & ~16; - $bits = $bits | 16 if $pos =~ /^-/; - - if ($pos =~ /^-/) { - # mate not rev - $bits = $bits & ~0x020; - } else { - # mate rev - $bits = $bits | 0x020; - } - - if ($pe) { - $bits = $bits & ~0x040; - $bits = $bits & ~0x080; - - $bits = $bits | 0x040 if !$mate; - $bits = $bits | 0x080 if $mate; - } - - my $s = $seq; - my $q = $qseq; - if ( ($bits & 16) != $isrev) { - # reverse sequence if reverse alignment - $s=revcomp($s); - $q=reverse($q); - } - - if ($opt{noindel}) { - # clean cigar of all indels/soft-clips - $cig =~ s/(\d+)I/\1M/g; - $cig =~ s/(\d+)D//g; - $cig =~ s/(\d+)S/\1M/g; - while ($cig =~ s/(\d+)M(\d+)M/($1+$2)."M"/e) {}; - } - - $pos =~ s/^[+-]//; - my @tmp=@fdx; - push @tmp, "NM:i:$nm"; - @tmp = grep /:/, @tmp; - my $fdx = join "\t", @tmp; - - # save output - saveout("$id\t$bits\t$nmo\t$pos\t$qual\t$cig\t$f1\t$f2\t$f3\t$s\t$q\t$fdx\n", $mate, $nmo, $pos, length($seq), $bits & 16, $origid, $cig); - } -}} - -$mate = !$mate; -saveout("",$mate) if $mate == 0; - -sub revcomp { - my $r = reverse(shift @_); - $r =~ tr/ACGT/TGCA/; - return $r; -} - -sub replacetab { - my ($str, $p, $rep) = @_; - $p; - $str=~ s/((?:[^\t]+\t){$p})[^\t]+\t/$1$rep\t/; - return $str; -} - diff --git a/clipper/check-clipper.sh b/clipper/check-clipper.sh deleted file mode 100755 index 9e04147..0000000 --- a/clipper/check-clipper.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -e - -g++ fastq-clipper.c - -ok=/opt/bin/fastq-clipper -new=./a.out - -# comparre -fastx_clipper -i test1.fq -a AGTCCCGTAC -o test1.fx.out - -for v in new ok; do - eval prog=\$$v - ${prog} test1.fq AGTCCCGTAC > test1.$v.out 2> test1.$v.err - ${prog} test2.fq AGTCCCGTAC > test2.$v.out 2> test2.$v.err - ${prog} test1.fq AGTCCCGTAC -o test3.$v.out > test3.$v.err - diff test1.$v.out test1.fx.out > test4.$v.out && true -done - - -for n in test1 test2 test3 test4; do - echo $n - diff $n.new.out $n.ok.out - [[ -e $n.ok.err ]] && diff $n.new.err $n.ok.err -done - -shopt -s extglob - -rm test?.@(new|ok).@(out|err) - -echo OK, all tests passed diff --git a/clipper/contig-stats b/clipper/contig-stats deleted file mode 100755 index 74893f9..0000000 --- a/clipper/contig-stats +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/perl - -#Copyright (c) 2012 Erik Aronesty -# -#Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -# if this was a c program, i'd set this number higher -$max_mers = 40000000; - -if (@ARGV > 1) { - for (@ARGV) { - if ( (stat($_))[9] > (stat("$_.stats"))[9] ) { - if (!fork) { - system("grun '$0 $_ > $_.stats'"); - exit(0); - } - } - } - while (wait != -1) {}; - exit(0); -} - -$in = $ARGV[0]; - -open(IN, $in) || die "$in:$!\n"; - -my $seq; -while () { - if (/^>/) { - summ(); - $ln=0; - $seq=''; - next; - } else { - chomp; - $seq .= $_; - $ln += length($_); - } -} - -summ() if $ln; - -print "entries\t$gc\n"; -print "len max\t$mx\n"; -print "len min\t$mn\n"; -printf "len mean\t%d\n", $tl/$gc; -print "total bases\t$tl\n"; - -@ln = sort {$a <=> $b} @ln; - -printf "len q1\t%d\n", quantile(\@ln, .25); -printf "len median\t%d\n", quantile(\@ln, .50); -printf "len q3\t%d\n", quantile(\@ln, .75); - -@gt500 = grep {$_>500} @ln; -$bgt500 = 0; for (@gt500) { $bgt500 += $_ }; - -for (@ln) { - $sum += $_; - if (!$n50 && $sum >= $tl*.5) { - $n50=$_; - } - if (!$n90 && $sum >= $tl*.9) { - $n90=$_; - } -} - -for (@ln) { - if ($_ >= 500) { - $xsum += $_; - if (!$xn50 && $xsum >= $bgt500*.5) { - $xn50=$_; - } - if (!$xn90 && $xsum >= $bgt500*.9) { - $xn90=$_; - } - } -} - -printf "N50\t%d\n", $n50; -printf "N90\t%d\n", $n90; -printf "N50 > 500\t%d\n", $xn50; -printf "N90 > 500\t%d\n", $xn90; - -printf "contigs > 500\t%d\n", scalar @gt500; -printf "bases in contigs > 500\t%d\n", $bgt500; - -my $mer21 = 0; -my $pct21 = 0; - -for (values(%mer)) {$mer21+=1 if $_>1}; -for (values(%mer)) {$pct21+=$_ if $_>1}; -$mer21 = 100*$mer21/scalar(keys(%mer)); -$pct21 = 100*$pct21/$tl; -printf "dup-mer-21\t%2.2f\n", $mer21; -printf "dup-mer-cnt\t%d\n", $mers; -printf "dup-pct-21\t%2.2f\n", $pct21; - - -sub summ { - if ($ln > 0) { - ++$gc; - $tl+=$ln; - $mx = $ln if $ln>$mx; - $mn = $ln if $ln<$mn || !$mn; - for ($i=0;$i[int($t)]; - if ($t > int($t)) { - return $v + $p * ($a->[int($t)+1] - $v); - } else { - return $v; - } -} - diff --git a/clipper/count-ambig.cpp b/clipper/count-ambig.cpp deleted file mode 100644 index b285498..0000000 --- a/clipper/count-ambig.cpp +++ /dev/null @@ -1,136 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // or sparse_hash_set, dense_hash_map, ... - -#define max(a,b) (a>b?a:b) -#define min(a,b) (a split(char *s, const char *d); - -int main(int argc, char **argv) { - char *in = argv[1]; - FILE * fin=fopen(in,"r"); - if (!fin) { - die("%s:%s", in, strerror(errno)); - } - struct line l; - vector v; - google::sparse_hash_map cmap; - string lastid, lastref; - int lastloc; - int mated = 0; - char *p; - while(read_line(fin, l)>0) { - if (l.s[0] == '@') continue; - - v = split(l.s,"\t"); - if (p=strchr(v[0],' ')) { - if (isdigit(p[1])) { - *p='\0'; - } - } - string id=v[0]; - string ref=v[2]; - - if (ref[0] == '*') continue; - - int loc=atoi(v[3]); - int mateloc=atoi(v[7]); - int isize=atoi(v[8]); - if (mateloc > 0) mated = 1; - counts *pcnt; - if (loc == 0) continue; - string firstref; - bool newid=0, doitonce=0; - if (lastref.size()>0) { - if (mated) { - if (id == lastid) { - // proper pair second read? - if (loc==mateloc && ref == lastref) { - // new probe id - if (newid) { - // previous proper-pair read was a 'newid' - cmap[ref].un++; - firstref=ref; - doitonce=1; - } else { - // current tr is ambig - cmap[ref].am++; - if (doitonce) { - // previous tr was not unambig - cmap[firstref].un--; - doitonce=0; - } - } - } - newid=0; - } else { - newid=1; - } - } else { - if (id == lastid) { - // current tr is ambig - cmap[ref].am++; - if (doitonce) { - // and prev was not unamb - cmap[lastref].un--; - doitonce=0; - } - } else { - cmap[ref].un++; - doitonce= 1; - } - } - } - - lastid = id; - lastloc = loc; - lastref = ref; - } - google::sparse_hash_map::iterator it; - for (it=cmap.begin();it!=cmap.end();++it) { - printf("%s\t%d\t%d\n", it->first.c_str(), it->second.un, it->second.am); - } -} - -int read_line(FILE *in, struct line &l) { - return (l.n = getline(&l.s, &l.a, in)); -} - -vector split(char *s, const char *d) { - char *sp; - std::vector v; - char *t=strtok_r(s,d,&sp); - while(t) { - v.push_back(t); - t=strtok_r(NULL,d,&sp); - } - return v; -} - diff --git a/clipper/debug b/clipper/debug deleted file mode 100755 index ffbbfb4..0000000 --- a/clipper/debug +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -#g++ -g fastq-mcf.c -o fastq-mcf.ex && ./fastq-mcf.ex $* -cmd=$1 -shift -g++ -g fastq-$cmd.c -o fastq-$cmd.ex && gdb --eval-command=run --args ./fastq-$cmd.ex $* diff --git a/clipper/determine-phred b/clipper/determine-phred deleted file mode 100755 index ac8d39f..0000000 --- a/clipper/determine-phred +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/perl -use strict; - -my $ssiz=7000; # sample size - -if ($ARGV[0] =~ /^-[h?]/) { - print "Usage: determine-phred FILE - -Reads a sam, fastq or pileup, possibly gzipped and returns the phred-scale, - either 64 or 33, based on a quick scan of the data in the file. -"; - exit 0; -} -my $cnt; -my $dphred = 64; -if ($ARGV[0] =~ /\.gz$/) { - $ARGV[0] = "gunzip -c '$ARGV[0]'|"; -} -my $qual; -my $comm; -my $fmt; -if (@ARGV > 1) { - my @mult = @ARGV; - for my $f (@mult) { - @ARGV = ($f); - determine(); - print "$f\t$dphred\n"; - } -} else { - determine(); - print "$dphred\n"; -} - -sub determine { - $_ = <>; - if (/^\@/ && ! /^\@SQ\t/) { - # fastq - scalar <>; # read - $comm = scalar <>; # comment - if (!(substr($comm,0,1) eq '+')) { - die "Unknown file format\n"; - } - $qual = <>; - chomp $qual; - $fmt = 'fq'; - } elsif (/^\S+\t\d+\t[ACTGN]\t\d+\t\S+\t(\S+)$/i) { - $qual = $1; - $fmt = 'pileup'; - } else { - # sam - $fmt = 'sam'; - $qual = (split(/\t/, $_))[10]; - } - if (!$qual) { - die "Unknown file format\n"; - } - my $rc = 1; - while($qual) { - ++$rc; - for (my $i =length($qual)/2; $i < length($qual); ++$i) { - if (ord(substr($qual,$i,1)) < 64) { - $dphred = 33; - $cnt=$ssiz; # last - last; - } - } - $qual = ''; - last if ++$cnt >= $ssiz; # got enough - if ($fmt eq 'fq') { - # fastq - last if ! scalar <>; # id - last if ! scalar <>; # read - last if ! scalar <>; # comment - $qual = <>; - chomp $qual; - } elsif ($fmt eq 'pileup') { - $qual = (split(/\t/, $_))[5]; - } else { - # sam - $qual = (split(/\t/, $_))[10]; - } - } - if ($rc < 10) { - $dphred = 33; - } -} diff --git a/clipper/ea-bcl2fastq.cpp b/clipper/ea-bcl2fastq.cpp deleted file mode 100644 index 5bc0a1e..0000000 --- a/clipper/ea-bcl2fastq.cpp +++ /dev/null @@ -1,646 +0,0 @@ -/* -Copyright (c) 2011 Expression Analysis / Erik Aronesty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -/* - -See "void usage" below for usage. - -*/ - -#include // for va_start, etc -#include // for std::unique_ptr -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; // bad practice - -// #include "fastq-lib.h" - -#define CHUNK 32768 -#define MAX_ERR_FILES 10 -#include "zlib.h" - -#define VERSION "1.01.816" -#define warn(...) { fprintf(stderr, __VA_ARGS__); } -#define die(...) { warn(__VA_ARGS__); exit(1); } - -std::string arg2cmdstr(int argc, char** argv); -std::string string_format(const std::string fmt_str, ...); -void usage(FILE *f, const char *msg=NULL); -FILE *openordie(const char *path, const char *mode); -FILE *popenordie(const char *path, const char *mode); -char* itoa(int value, char* result, int base, char **endp); - -// per file/output file -typedef struct { - bool useit; - int cyc_offset; - int cyc_len; - int rnum; - FILE *fout; -} mask; - -// per-cycle info -typedef struct { - bool useit; - gzFile fin; -} cycle; - -// tile record -typedef struct __attribute__ ((packed)) { - uint32_t tid; // tile id - uint32_t ccnt; // cluster count -} tile_record; - -int main (int argc, char **argv) { - static struct option long_options[] = { - {"debug", 0, 0, 0}, - {0, 0, 0, 0} - }; - - - string run; // run path - int lane=0; // lane - string out; // output prefix - vector masks; // Y50N20Y50 format - - unsigned int cluster_start=0; // offset into cluster list, ZERO BASED - unsigned int cluster_count=0; // number of reads to process - unsigned int output_cluster_count=0; // number of reads to process - int tile=0; // tile number - int debug=0; // debug flag - bool usegz=false; - const char *fcid="X"; - - int option_index = 0; - int c; - while ( (c = getopt_long(argc, argv, "zhr:l:t:o:m:s:n:f:",long_options,&option_index)) != -1) { - switch (c) { - case '\0': - { - const char *oname=long_options[option_index].name; - if(!strcmp(oname, "debug")) { - debug=1; - } - break; - } - case 'h': usage(stdout); exit(0); break; - case 'r': run = optarg; break; - case 'l': lane = atoi(optarg); break; - case 'o': out = optarg; break; - case 't': tile = atoi(optarg); break; - case 'f': fcid = optarg; break; - case 'z': usegz = 1; break; - case 'm': - { - int typ; - char *p = optarg; - bool err=0; - int cur_offset=0; - while (*p) { - mask m; - if (*p=='Y') { - m.useit=1; - } else if (*p=='N') { - m.useit=0; - } else { - err=1; - } - ++p; - int len; - if (isdigit(*p)) { - m.fout=NULL; - m.cyc_offset=cur_offset; - m.cyc_len=strtol(p, &p, 10); - cur_offset+=m.cyc_len; - masks.push_back(m); - } else { - err=1; - } - if (err) { - die("Mask should be something like: Y50Y30Y50"); - } - } - } - break; - case 's': char *endp; cluster_start=strtoul(optarg, &endp, 10); break; - case 'n': cluster_count=atoi(optarg); break; - case '?': - if (strchr("rltomsn", optopt)) - fprintf(stderr, "Option -%c requires an argument.\n", optopt); - else if (isprint(optopt)) - fprintf(stderr, "Unknown option `-%c'.\n", optopt); - else - fprintf(stderr, - "Unknown option character `\\x%x'.\n", - optopt); - usage(stderr); - return 1; - } - } - - if (!run.size() || !masks.size() || !lane || !out.length()) { - die("Run, mask and lane are required.\n"); - } - - char lanestr[5]; - char lanestrnopad[5]; - sprintf(lanestr, "L%03d", lane); - sprintf(lanestrnopad, "%d", lane); - - string locspath = run + "/Data/Intensities/" + lanestr + "/s_" + lanestrnopad + ".locs"; - string bcipath = run + "/Data/Intensities/BaseCalls/" + lanestr + "/s_" + lanestrnopad + ".bci"; - string filterpath = run + "/Data/Intensities/BaseCalls/" + lanestr + "/s_" + lanestrnopad + ".filter"; - - // no die on flocs ... because it's ok to output no locs - FILE *flocs = fopen(locspath.c_str(), "r"); - - // die if no log, because presumably this is a write error in the output location - FILE *flog = openordie((string(out) + ".log").c_str(), "w"); - - // if no filter, then we'll just show all of them, so no die needed - FILE *ffilter = fopen(filterpath.c_str(), "r"); - - fprintf(flog, "Command Line: %s\n", arg2cmdstr(argc, argv).c_str()); - - fprintf(flog,"Tile path: %s\n", bcipath.c_str()); - fprintf(flog,"Filter path: %s\n", filterpath.c_str()); - fflush(flog); - - FILE *ftnums = fopen(bcipath.c_str(), "r"); - - struct { - uint32_t zero; - uint32_t version; - uint32_t numclusters; - } filter_info; - - struct __attribute__ ((packed)) { - // MAGIC NUMBER HEADER - uint32_t field1; - float field2; - // real info - uint32_t numclusters; - } locs_info; - - // READ LOCS header - if(!flocs || !fread(&locs_info,sizeof(locs_info),1,flocs)) { - warn("Locs file is broken, no locations will be output\n"); - if (flocs) fclose(flocs); - flocs=NULL; - } else if (fseek(flocs,cluster_start*sizeof(float)*2,SEEK_CUR) < 0) { - warn("Locs is there, but is no good\n"); - fclose(flocs); - flocs=NULL; - } - -// printf("TELL LOCS: %ld\n", ftell(flocs)); - - // READ FILTER header - bool ok=true; - ok = ok && (fread(&filter_info.zero,4,1,ffilter)==1); - ok = ok && (fread(&filter_info.version,4,1,ffilter)==1); - ok = ok && (fread(&filter_info.numclusters,4,1,ffilter)==1); - if(!ok) { - die("Filter file is broken\n"); - } - - // ERROR/check numclusters - if (flocs && filter_info.numclusters != locs_info.numclusters ) { - die("Filter and locs numclusters don't match: %u\n", locs_info.numclusters); - } - - if (!flocs) { - fprintf(flog,"Locations invalid at: %u\n", cluster_start); - } - - // READ TILE INFO - vector tinfo; - if (ftnums) { - tile_record tr; - while(fread(&tr, sizeof(tr), 1, ftnums)==1) { -// printf("tile: %d, count: %d\n", tr.tid, tr.ccnt); - tinfo.push_back(tr); - } - } else { - warn("Proceeding without tile info: %s\n", strerror(errno)); - fprintf(flog,"Tile numbers invalid at: %u\n", cluster_start); - } - - // general purpose iterators - int i,j; - - if (tile) { - unsigned int cur=0; - bool ok=false; - for(i=0;icycles; - int output_fnum=0; - string outtmp; - for(i=0;i %s.%d.fq.gz",out.c_str(),output_fnum); - fo=popenordie(outtmp.c_str(),"w"); - } else { - outtmp = string_format("%s.%d.fq",out.c_str(),output_fnum); - fo=openordie(outtmp.c_str(),"w"); - } - } - masks[i].fout=fo; // pointer to output fiule for this mask level - for (j = 0; j < masks[i].cyc_len; ++j) { - cycle c; - c.useit = masks[i].useit; - cycles.push_back(c); - } - } - - string bclbase = run + "/Data/Intensities/BaseCalls/" + lanestr + "/"; - string bclpath; - vector fbclv; // vector of open files - - int err_files = 0; - for (i=0;i= MAX_ERR_FILES) { - die("Too many errors, quitting\n"); - } - cycles[i].useit=false; - } else { - uint32_t numc; - gzread(fil,&numc,4); // read the header - if (numc!=filter_info.numclusters) { - warn("Cycle %d num clusters mismatch/corrupt", i); - gzclose(fil); - fil=Z_NULL; - cycles[i].useit=false; - } else { - // warn("Seek bcl %d\n",i); - if (gzseek(fil,cluster_start,SEEK_CUR)<0) { // seek to cluster_start (8 bits per record) - gzclose(fil); - fil=Z_NULL; - cycles[i].useit=false; - } - } - } - - - if (!cycles[i].useit) { - fprintf(flog,"Cycle %d invalid at %d\n", i+1, cluster_start); - } - } - cycles[i].fin=fil; - } - - struct { - unsigned int base : 2; - unsigned int qual : 6; - } rec; - - char seqs[cycles.size()]; - char quals[cycles.size()]; - - //ID Template: - //@:::::: ::: - //@NS500184:5:H0K79AGXX:1:11103:20690:3982 1:N:0:ATTCAGAA+GCCTCTAT - - char read_id[1000]; - sprintf(read_id,"@NS:1:%s:",fcid); - - // pid is a pointer to the end of the id, after the lane: has been added - char *pid_after_lane=read_id+strlen(read_id); - itoa(lane, pid_after_lane, 10, &pid_after_lane); - *pid_after_lane++ = ':'; - - // map from aa to char - char aa_map[4] = {'A','C','G','T'}; - - // map from qual to score - char qc_map[64]; - for(i=0;i<64;++i) - qc_map[i]=33+i; - - struct __attribute__ ((packed)) { - float x; - float y; - } locrec; - - char pf; /// purity filter (PF in illumina-speak) - - int tidx=(tinfo.size()>0)?0:-1; - int tileid=(tinfo.size()>0)?tinfo[tidx].tid:0; - int trnum=0; - - // for each cluster requested... (we should be all seeked to the correct offsets at this point) - -// printf("TINFO: %d, %d\n", tileid, tinfo[tidx].ccnt); - fprintf(flog,"Cluster count: %u\n", filter_info.numclusters); - - if (cluster_count == 0) { - cluster_count = filter_info.numclusters; - } - - fprintf(flog,"Cluster start: %u\n", cluster_start); - fprintf(flog,"Cluster subset: %u\n", cluster_count); - - for(j=0;j 0 && trnum > tinfo[tidx].ccnt) { - ++tidx; - trnum=0; - if (tidx > tinfo.size()) { - // tile numbers are invalid at this point... ! - fprintf(flog,"Tile numbers invalid at: %u\n", cluster_start+j); - tidx=-1; - tileid=0; - } - tileid=tinfo[tidx].tid; -// printf("TINFO: %d, %d\n", tileid, tinfo[tidx].ccnt); - } - ++trnum; - - // read filter flag from filter file - if(ffilter && (fread(&pf,1,1,ffilter)==1)) { - pf = pf ? 'N' : 'Y'; - } else { - pf = 'U'; - } - - // read x/y location from locs file - int x, y; - if (flocs && fread(&locrec,sizeof(locrec), 1, flocs)==1) { - x=int(locrec.x * 10 + 1000 + 0.5); - y=int(locrec.y * 10 + 1000 + 0.5); - } else { - x=0; - y=0; - if (flocs) { - fprintf(flog,"Locations invalid at: %u\n", cluster_start+j); - flocs = NULL; - } - } - - - // read cycles - for (i=0;i -1 && n < size) { - str.resize(n); - return str; - } - if (n > -1) - size = n + 1; - else - size *= 2; - } - return str; -} - - // fast int to string code: from http://www.jb.man.ac.uk/~slowe/cpp/itoa.html - -char* itoa(int value, char* result, int base, char **endp) { - // check that the base if valid - if (base < 2 || base > 36) { *result = '\0'; return result; } - - char* ptr = result, *ptr1 = result, tmp_char; - int tmp_value; - - do { - tmp_value = value; - value /= base; - *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; - } while ( value ); - - // Apply negative sign - if (tmp_value < 0) *ptr++ = '-'; - *endp=ptr; - *ptr-- = '\0'; - while(ptr1 < ptr) { - tmp_char = *ptr; - *ptr--= *ptr1; - *ptr1++ = tmp_char; - } - return result; -} - -/* vim: set noai ts=4 sw=4: */ diff --git a/clipper/ea-utils.spec b/clipper/ea-utils.spec deleted file mode 100644 index c2e0730..0000000 --- a/clipper/ea-utils.spec +++ /dev/null @@ -1,37 +0,0 @@ -%define name ea-utils -%define ver 1.1.2 -%define rel 779 - -Summary: fastq-processing utilities -Name: %{name} -Version: %{ver} -Release: %{rel} -Source: %{name}.tar.gz -Prefix: /usr -BuildRoot: /tmp/%{name}-%{ver}-root -Vendor: Expression Analysis -URL: https://code.google.com/p/ea-utils/ -License: MIT -Group: Applications/Engineering -Distribution: Centos 5 -Packager: Erik Aronesty - -%description -Utilities for processing fastq files, stitching paired-end reads, -demultiplexing paired-end in-sync, adapter-trimming & skew removal. - -%prep -%setup -c - -%install -make PREFIX=%{buildroot}/%{_prefix} install - -%clean -rm -rf %{buildroot} - -%files - -%{_bindir}/fastq-join -%{_bindir}/fastq-clipper -%{_bindir}/fastq-mcf -%{_bindir}/fastq-multx diff --git a/clipper/ea-utils.spex b/clipper/ea-utils.spex deleted file mode 100644 index 44edc03..0000000 --- a/clipper/ea-utils.spex +++ /dev/null @@ -1,37 +0,0 @@ -%define name ea-utils -%define ver 1.1.2 -%define rel %RELEASE% - -Summary: fastq-processing utilities -Name: %{name} -Version: %{ver} -Release: %{rel} -Source: %{name}.tar.gz -Prefix: /usr -BuildRoot: /tmp/%{name}-%{ver}-root -Vendor: Expression Analysis -URL: https://code.google.com/p/ea-utils/ -License: MIT -Group: Applications/Engineering -Distribution: Centos 5 -Packager: Erik Aronesty - -%description -Utilities for processing fastq files, stitching paired-end reads, -demultiplexing paired-end in-sync, adapter-trimming & skew removal. - -%prep -%setup -c - -%install -make PREFIX=%{buildroot}/%{_prefix} install - -%clean -rm -rf %{buildroot} - -%files - -%{_bindir}/fastq-join -%{_bindir}/fastq-clipper -%{_bindir}/fastq-mcf -%{_bindir}/fastq-multx diff --git a/clipper/fasta-qual-to-fastq b/clipper/fasta-qual-to-fastq deleted file mode 100755 index 80de049..0000000 --- a/clipper/fasta-qual-to-fastq +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/perl - -use EA; - -die "usage: $0 \n" unless @ARGV == 2; - -my ($fa, $ql) = @ARGV; - -# gz compat open fasta and qual files -zopen(FA, $fa) || die; -zopen(QL, $ql) || die; - -$fid = ; -$qid = ; - -$fid =~ s/\s+$//; # win32 compat chomp -$qid =~ s/\s+$//; - -while (1) { - $seq = ''; - - if (!$fid) { - exit 0; - } - - while($fline = ) { # read fasta rec - $fline =~ s/\s+$//; - if ($fline =~ /^>/) { - last; - } - $seq .= $fline; - } - - $qual = ''; - if (!($qid eq $fid)) { - die "Line $. : $qid not equal to $fid\n"; - } - - while($qline = ) { # read qual rec - $qline =~ s/\s+$//; - if ($qline =~ /^>/) { - last; - } - for (split / /, $qline) { - $qual .= chr($_+33); # convert to fq qual - } - } - - $fid =~ s/^>/@/; - print "$fid\n$seq\n+\n$qual\n"; - - $fid = $fline; # line that stopped rec is id - $qid = $qline; -} diff --git a/clipper/fastq-clipper.cpp b/clipper/fastq-clipper.cpp deleted file mode 100644 index 842c464..0000000 --- a/clipper/fastq-clipper.cpp +++ /dev/null @@ -1,279 +0,0 @@ -/* -Copyright (c) 2011 Expression Analysis / Erik Aronesty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -/* - -Replaced, largely, by fastq-mcf. - -See "void usage" below for usage. - -*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "fastq-lib.h" - -#define MAX_ADAPTER_NUM 20 -#define MAX_ADAPTER_LEN 160 - -void usage(FILE *f); -int hd(char *a, char *b, int n); -int debug=0; -int main (int argc, char **argv) { - char c; - bool eol; - int nmin = 4, nkeep = 15, xmax=-1, pctdiff = 20; - char *outfile = NULL; - - int i; - - char *a = NULL, *f = NULL; - while ( (c = getopt (argc, argv, "-hedbp:i:o:l:m:x::")) != -1) { - switch (c) { - case '\1': - if (!f) - f=optarg; - else if (!a) - a=optarg; - else { - usage(stderr); return 1; - } - break; - case 'm': nmin = atoi(optarg); break; - case 'p': pctdiff = atoi(optarg); break; - case 'l': nkeep = atoi(optarg); break; - case 'e': eol = 1; break; - case 'h': usage(stdout); return 1; - case 'b': eol = 0; break; - case 'd': debug = 1; break; - case 'x': xmax = optarg ? atoi(optarg) : -1; break; - case 'o': outfile = optarg; break; - case 'i': f = optarg; break; - case '?': - if (strchr("lm", optopt)) - fprintf (stderr, "Option -%c requires an argument.\n", optopt); - else if (isprint(optopt)) - fprintf (stderr, "Unknown option `-%c'.\n", optopt); - else - fprintf (stderr, - "Unknown option character `\\x%x'.\n", - optopt); - usage(stderr); - return 1; - } - } - - if (argc < 3 || !a || !f) { - usage(stderr); - return 1; - } - - FILE *fin = strcmp(f,"-") ? fopen(f, "r") : stdin; - if (!fin) { - fprintf(stderr, "Error opening file '%s': %s\n",f, strerror(errno)); - return 1; - } - - FILE *fout = stdout; - FILE *fstat = stderr; - if (outfile ) { - fout = fopen(outfile, "w"); - if (!fout) { - fprintf(stderr, "Error opening output file '%s': %s",outfile, strerror(errno)); - return 1; - } - fstat = stdout; - } - - char *adapters[MAX_ADAPTER_NUM+1]; - int adapter_len[MAX_ADAPTER_NUM+1]; - char *p; - int adapter_count=0; - while (p=strtok(a,":")) { - a = NULL; // strtok requirement - adapters[adapter_count] = p; - adapter_len[adapter_count] = strlen(p); // append to list - ++adapter_count; - if (adapter_count >= MAX_ADAPTER_NUM) { - break; - } - } - - char *s[4] = {0,0,0,0}; // id, sequence, comment, quality - size_t na[4] = {0,0,0,0}; // lengths of above - int ns[4] = {0,0,0,0}; // lengths of above - int nrec=0; - int nerr=0; - int nok=0; - int ntooshort=0; - int ntrim=0; - int nbtrim=0; - while (1) { - int i; - for (i = 0; i < 4; ++i ) { - ns[i] = getline(&s[i], &na[i], fin); - } - - if (ns[1] <= 0) { - break; - } - - ++nrec; - - // skip malformed records - if (ns[1] != ns[3] || s[0][0] != '@' || s[2][0] != '+') { - if (nerr < 10) { - fprintf(stderr, "Malformed fastq record at line %d\n", nrec*4-3); - } - ++nerr; - continue; - } - - // chomp - s[1][ns[1]-1]='\0'; - --ns[1]; - s[3][ns[3]-1]='\0'; - --ns[3]; - - if (debug) fprintf(stderr, "seq: %s %d\n", s[1], ns[1]); - - bool skip = 0; - int bestscore = 999, bestoff = 0, bestlen = 0; - - for (i =0; i < adapter_count; ++i) { - int nmatch = nmin; - if (!nmatch) nmatch = adapter_len[i]; // full match required if nmin == 0 - - // how far in to search for a match? - int mx = adapter_len[i]; - if (xmax) { - mx = ns[1]; - if (xmax > 0 && (xmax+adapter_len[i]) < mx) - mx = xmax+adapter_len[i]; // xmax is added to adapter length - } - - if (debug) - fprintf(stderr, "adapter: %s, adlen: %d, nmatch: %d, mx: %d\n", adapters[i], adapter_len[i], nmatch, mx); - - int off; - for (off = nmatch; off <= mx; ++off) { // off is distance from tail of sequence - char *seqtail = s[1]+ns[1]-off; // search at tail - int ncmp = off= nmatch)); - - if (bestoff > 0) { - if ( (ns[1]-bestoff) < nkeep) { - ++ntooshort; - skip = 1; - break; - } - } - } - - if (!skip) { - if (bestoff > 0) { - ++ntrim; - s[1][ns[1]-bestoff]='\0'; - s[3][ns[1]-bestoff]='\0'; - } - fputs(s[0],fout); - fputs(s[1],fout); - fputc('\n',fout); - fputs(s[2],fout); - fputs(s[3],fout); - fputc('\n',fout); - } - } - fprintf(fstat, "Total: %d\n", nrec); - fprintf(fstat, "Too Short: %d\n", ntooshort); - fprintf(fstat, "Trimmed: %d\n", ntrim); - fprintf(fstat, "Errors: %d\n", nerr); - return 0; -} - -void usage(FILE *f) { - fprintf(f, -"usage: fastq-clipper [options] \n" -"\n" -"Removes one or more adapter sequences from the fastq file.\n" -"Adapter sequences are colon-delimited.\n" -"Stats go to stderr, unless -o is specified.\n" -"\n" -"Options:\n" -" -h This help\n" -" -o FIL Output file (stats to stdout)\n" -" -p N Maximum difference percentage (10)\n" -" -m N Minimum clip length (1)\n" -" -l N Minimum remaining sequence length (15)\n" -" -x [N] Extra match length past adapter length, \n" -" N =-1 : search all\n" -" N = 0 : search only up to adapter length\n" -" -e End-of-line (default)\n" -" -b Beginning-of-line (not supported yet)\n" - ); -} - -/* -#!/usr/bin/perl - -my ($f, $a) = @ARGV; - -my @a = split(/,/, $a); - -open (F, $f) || die; - -while (my $r = ) { - for my $a (@a) { - for (my $i = 1; $i < length($a); ++$i) { - - } - } -} -# http://www.perlmonks.org/?node_id=500235 -sub hd{ length( $_[ 0 ] ) - ( ( $_[ 0 ] ^ $_[ 1 ] ) =~ tr[\0][\0] ) } -*/ diff --git a/clipper/fastq-join.cpp b/clipper/fastq-join.cpp deleted file mode 100644 index d8d0169..0000000 --- a/clipper/fastq-join.cpp +++ /dev/null @@ -1,427 +0,0 @@ -/* -Copyright (c) 2011 Expression Analysis / Erik Aronesty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#include "fastq-lib.h" - -/* - -See "void usage" below for usage. - -*/ - -#define VERSION "1.01.759" - -void usage(FILE *f); -int debug=0; - -int main (int argc, char **argv) { - char c; - int mismatch = 0; - char *in[3] = {0,0,0}; - char *out[5]; - char *orep=NULL; - int out_n = 0; - int in_n = 0; - int threads = 1; // not really necessary - char verify='\0'; - - int i; - int mino = 6; - int pctdiff = 8; // this number tested well on exome data... tweak for best results - bool omode = false; - char *bfil = NULL; - bool norevcomp = false; - bool allow_ex = false; - - while ( (c = getopt (argc, argv, "-dRnbeo:t:v:m:p:r:xV")) != -1) { - switch (c) { - case '\1': - if (!in[0]) - in[0]=optarg; - else if (!in[1]) - in[1]=optarg; - else if (!in[2]) - in[2]=optarg; - else { - usage(stderr); return 1; - } - ++in_n; - break; - case 'o': if (out_n == 3) { - usage(stderr); return 1; - } - out[out_n++] = optarg; - break; - case 'r': orep = optarg; break; - case 't': threads = atoi(optarg); break; - case 'V': printf("Version: %s\n", VERSION); return 0; break; - case 'm': mino = atoi(optarg); break; - case 'x': allow_ex = true; break; - case 'p': pctdiff = atoi(optarg); break; - case 'R': norevcomp = true; break; - case 'd': ++debug; break; - case 'v': - if (strlen(optarg)>1) { - fprintf(stderr, "Option -v requires a single character argument"); - exit(1); - } - verify = *optarg; break; - case '?': - if (strchr("otvmpr", optopt)) - fprintf (stderr, "Option -%c requires an argument.\n", optopt); - else if (isprint(optopt)) - fprintf (stderr, "Unknown option `-%c'.\n", optopt); - else - fprintf (stderr, - "Unknown option character `\\x%x'.\n", - optopt); - usage(stderr); - return 1; - } - } - - if (argc < 3 || !in[1] || (!in[2] && out_n != 1 && out_n != 3) || (in[2] && out_n != 1 && out_n != 5)) { - usage(stderr); - return 1; - } - - FILE *fin[2]; - bool gzin[2]; meminit(gzin); - for (i = 0; i < in_n; ++i) { - fin[i] = gzopen(in[i], "r",&gzin[i]); - if (!fin[i]) { - fprintf(stderr, "Error opening file '%s': %s\n",in[i], strerror(errno)); - return 1; - } - } - - const char *suffix[5]={"un1", "un2", "join", "un3", "join2"}; - FILE *fout[5]; meminit(fout); - bool gzout[5]; meminit(gzout); - char *pre = out[0]; - for (i = 0; i < (in[2] ? 5 : 3); ++i) { - // prefix out - if (out_n == 1) { - out[i]=(char *)malloc(strlen(pre)+10); - strcpy(out[i], pre); - char *p; - if (p=strchr(out[i], '%')) { - // substiture instead of append - strcpy(p, suffix[i]); - strcpy(p+strlen(suffix[i]), pre+(p-out[i])+1); - } else { - strcat(out[i], suffix[i]); - } - } // else explicit - fout[i] = gzopen(out[i], "w",&gzout[i]); - if (!fout[i]) { - fprintf(stderr, "Error opening output file '%s': %s\n",out[i], strerror(errno)); - return 1; - } - } - -//printf("in_n:%d in:%x fo:%x", in_n, in[3], fout[4]); -//return 1; - - FILE *frep = NULL; - if (orep) { - frep = fopen(orep, "w"); - if (!orep) { - fprintf(stderr, "Error opening report file '%s': %s\n",out[i], strerror(errno)); - return 1; - } - } - - - // some basic validation of the file formats - { - for (i=0;i rc.seq.n) { - int mind = (pctdiff * maxo) / 100; - for (i=0; i < fq[0].seq.n-maxo; ++i ) { - int d; - d=hd(fq[0].seq.s+fq[0].seq.n-rc.seq.n-i-1, rc.seq.s, maxo); - if (debug) fprintf(stderr, "hd: %d, %d\n", -i, d); - if (d <= mind) { - // squared-distance over length, probably can be proven better (like pearson's) - int score = (1000*(d*d+1))/maxo; - if (score < bestscore) { - bestscore=score; - // negative overlap! - hasex=-i; - besto=maxo; - } - } - } - } else if (fq[0].seq.n < rc.seq.n) { - int mind = (pctdiff * maxo) / 100; - for (i=0; i < rc.seq.n-maxo; ++i ) { - int d; - d=hd(fq[0].seq.s, rc.seq.s+i, maxo); - if (debug) fprintf(stderr, "hd: %d, %d\n", -i, d); - if (d <= mind) { - // squared-distance over length, probably can be proven better (like pearson's) - int score = (1000*(d*d+1))/maxo; - if (score < bestscore) { - bestscore=score; - // negative overlap! - hasex=-i; - besto=maxo; - } - } - } - } - } - - if (debug) { - fprintf(stderr, "best: %d %d\n", besto-hasex, bestscore); - } - - FILE *fmate = NULL; - int olen = besto-hasex; - - if (besto > 0) { - ++joincnt; - - tlen+=olen; - tlensq+=olen*olen; - - char *sav_fqs=NULL, *sav_rcs; - char *sav_fqq, *sav_rcq; - - if (hasex) { - sav_fqs=fq[0].seq.s; - sav_fqq=fq[0].qual.s; - sav_rcs=rc.seq.s; - sav_rcq=rc.qual.s; - if (fq[0].seq.n < rc.seq.n) { - rc.seq.s=rc.seq.s-hasex; - rc.qual.s=rc.qual.s-hasex; - rc.seq.n=maxo; - rc.qual.n=maxo; - } else { - // fprintf(stderr, "rc negative overlap: %s %d\n", rc.seq.s, hasex); - fq[0].seq.s=fq[0].seq.s+fq[0].seq.n-maxo+hasex-1; - fq[0].qual.s=fq[0].qual.s+fq[0].seq.n-maxo+hasex-1; - fq[0].seq.n=maxo; - fq[0].qual.n=maxo; - // fprintf(stderr, "negative overlap: %s -> %s, %d\n", fq[0].seq.s, rc.seq.s, maxo); - } - // ok now pretend everythings normal, 100% overlap - //if (debug) - } - - FILE *f=fout[2]; - - if (verify) { - char *p=strchr(fq[0].id.s,verify); - if (p) { - *p++ = '\n'; - *p = '\0'; - } - } - fputs(fq[0].id.s,f); - for (i = 0; i < besto; ++i ) { - int li = fq[0].seq.n-besto+i; - int ri = i; - if (debug>=2) printf("%c %c / %c %c / ", fq[0].seq.s[li], rc.seq.s[ri], fq[0].qual.s[li], rc.qual.s[ri]); - if (fq[0].seq.s[li] == rc.seq.s[ri]) { - fq[0].qual.s[li] = max(fq[0].qual.s[li], rc.qual.s[ri]); - // bounded improvement in quality, since there's no independence - // fq[0].qual.s[ri] = max(fq[0].qual.s[li], rc.qual.s[ri])+min(3,min(fq[0].qual.s[li],rc.qual.s[ri])-33); - } else { - // use the better-quality read - // this approximates the formula: E = min(0.5,[(1-e2/2) * e1] / [(1-e1) * e2/2 + (1-e2/2) * e1]) - if (fq[0].qual.s[li] > rc.qual.s[ri]) { - // reduction in quality, based on phred-difference - fq[0].qual.s[li] = 33+min(fq[0].qual.s[li],max(fq[0].qual.s[li]-rc.qual.s[ri],3)); - } else { - fq[0].seq.s[li] = rc.seq.s[ri]; - // reduction in quality, based on phred-difference - fq[0].qual.s[li] = 33+min(rc.qual.s[ri],max(rc.qual.s[ri]-fq[0].qual.s[li],3)); - } - } - if (debug>=2) printf("%c %c\n", fq[0].seq.s[li], fq[0].qual.s[li]); - } - - fwrite(fq[0].seq.s,1,fq[0].seq.n,f); - fputs(rc.seq.s+besto,f); - fputc('\n',f); - fputs(fq[0].com.s,f); - fwrite(fq[0].qual.s,1,fq[0].qual.n,f); - fputs(rc.qual.s+besto,f); - fputc('\n',f); - fmate=fout[4]; - - if (sav_fqs) { - fq[0].seq.s=sav_fqs; - fq[0].qual.s=sav_fqq; - rc.seq.s=sav_rcs; - rc.qual.s=sav_rcq; - } - - if (frep) { - fprintf(frep, "%d\n", besto); - } - } else { - for (i=0;i<2;++i) { - FILE *f=fout[i]; - fputs(fq[i].id.s,f); - fputs(fq[i].seq.s,f); - fputc('\n',f); - fputs(fq[i].com.s,f); - fputs(fq[i].qual.s,f); - fputc('\n',f); - } - fmate=fout[3]; - } - - if (fmate) { - fputs(fq[2].id.s,fmate); - fputs(fq[2].seq.s,fmate); - fputc('\n',fmate); - fputs(fq[2].com.s,fmate); - fputs(fq[2].qual.s,fmate); - fputc('\n',fmate); - } - } - - - double dev = sqrt((((double)joincnt)*tlensq-pow((double)tlen,2)) / ((double)joincnt*((double)joincnt-1)) ); - printf("Total reads: %d\n", nrec); - printf("Total joined: %d\n", joincnt); - printf("Average join len: %.2f\n", (double) tlen / (double) joincnt); - printf("Stdev join len: %.2f\n", dev); - printf("Version: %s\n", VERSION); - - return 0; -} - -void usage(FILE *f) { - fputs( -"Usage: fastq-join [options] [mate.fq] -o \n" -"\n" -"Joins two paired-end reads on the overlapping ends.\n" -"\n" -"Options:\n" -"\n" -"-o FIL See 'Output' below\n" -"-v C Verifies that the 2 files probe id's match up to char C\n" -" use ' ' (space) for Illumina reads\n" -"-p N N-percent maximum difference (8)\n" -"-m N N-minimum overlap (6)\n" -"-r FIL Verbose stitch length report\n" -"-R No reverse complement\n" -"-x Allow insert < read length\n" -"\n" -"Output: \n" -"\n" -" You can supply 3 -o arguments, for un1, un2, join files, or one \n" -"argument as a file name template. The suffix 'un1, un2, or join' is \n" -"appended to the file, or they replace a %-character if present.\n" -"\n" -" If a 'mate' input file is present (barcode read), then the files\n" -"'un3' and 'join2' are also created.\n" -"\n" - ,f); -} diff --git a/clipper/fastq-join.t b/clipper/fastq-join.t deleted file mode 100644 index 385c9c4..0000000 --- a/clipper/fastq-join.t +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -./fastq-join -p 20 -m 5 test-overlap/test_1x test-overlap/test_2x -o test-overlap/a.testx. - -./fastq-join -p 20 -m 5 test-overlap/test_1 test-overlap/test_2 -o test-overlap/a.test. - -./fastq-join -p 20 -m 5 test-overlap/test_1x test-overlap/test_2x -o test-overlap/b.testx. -x - -./fastq-join -p 20 -m 5 test-overlap/test_1 test-overlap/test_2 -o test-overlap/b.test. -x - diff --git a/clipper/fastq-lib.cpp b/clipper/fastq-lib.cpp deleted file mode 100644 index df092c6..0000000 --- a/clipper/fastq-lib.cpp +++ /dev/null @@ -1,448 +0,0 @@ -/* -Copyright (c) 2011 Expression Analysis / Erik Aronesty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#include "fastq-lib.h" - -#ifdef __MAIN__ -int main(int argc, char **argv) { - // todo... put testing stuff in here, so the lib can be tested independently of the other componenets -} -#endif - -int read_line(FILE *in, struct line &l) { - l.n = getline(&l.s, &l.a, in); - // win32 support - if (l.n>1 && (l.s[l.n-2]=='\r')) { - l.s[l.n-2]='\n'; - --l.n; - l.s[l.n]='\0'; - } - return l.n; -} - -char sempty[1]={'\0'}; -int read_fq_sam(FILE *in, int rno, struct fq *fq, const char *name) { - read_line(in, fq->id); - - while (fq->id.s[0] == '@') { - // ignore header - read_line(in, fq->id); - } - - // id in first field - char *p=strchr(fq->id.s, '\t'); - if (!p) return 0; - *p='\0'; - - - // skip next 8 tabs - int i; - for (i=0;p && *++p && (i<8); ++i) { - p=strchr(p,'\t'); - } - if (!p) return 0; - // seq in next fieldi - - fq->seq.s=p; - p=strchr(p,'\t'); - if (!p) return 0; - *p='\0'; - fq->seq.n=p-fq->seq.s; - - // qual next - fq->qual.s=p+1; - p=strchr(fq->qual.s,'\t'); - if (!p) - p=strchr(fq->qual.s,'\n'); - if (!p) return 0; - *p='\0'; - fq->qual.n=p-fq->qual.s; - - // fake comment - fq->com.s=sempty; - fq->com.n=0; - - // mark allocation as pointer - fq->seq.a=0; - fq->qual.a=0; - fq->com.a=0; - - return 1; -} - -int read_fq(FILE *in, int rno, struct fq *fq, const char *name) { - read_line(in, fq->id); - if (fq->id.s && (*fq->id.s == '>')) { - fq->id.s[0] = '@'; - // read fasta instead - char c = fgetc(in); - while (c != '>' && c != EOF) { - if (fq->seq.a <= (fq->seq.n+1)) { - fq->seq.s=(char *)realloc(fq->seq.s, fq->seq.a=(fq->seq.a+16)*2); - } - if (!isspace(c)) - fq->seq.s[fq->seq.n++]=c; - c = fgetc(in); - } - if (c != EOF) { - ungetc(c, in); - } - // make it look like a fastq - fq->qual.s=(char *)realloc(fq->qual.s, fq->qual.a=(fq->seq.n+1)); - memset(fq->qual.s, 'h', fq->seq.n); - fq->qual.s[fq->qual.n=fq->seq.n]=fq->seq.s[fq->seq.n]='\0'; - fq->com.s=(char *)malloc(fq->com.a=2); - fq->com.n=1; - strcpy(fq->com.s,"+"); - } else { - read_line(in, fq->seq); - read_line(in, fq->com); - read_line(in, fq->qual); - } - - if (fq->qual.n <= 0) - return 0; - if (fq->id.s[0] != '@' || fq->com.s[0] != '+' || fq->seq.n != fq->qual.n) { - const char *errtyp = (fq->seq.n != fq->qual.n) ? "length mismatch" : fq->id.s[0] != '@' ? "no '@' for id" : "no '+' for comment"; - if (name) { - fprintf(stderr, "Malformed fastq record (%s) in file '%s', line %d\n", errtyp, name, rno*2+1); - } else { - fprintf(stderr, "Malformed fastq record (%s) at line %d\n", errtyp, rno*2+1); - } - return -1; - } - // win32-safe chomp - fq->seq.s[--fq->seq.n] = '\0'; - if (fq->seq.s[fq->seq.n-1] == '\r') { - fq->seq.s[--fq->seq.n] = '\0'; - } - fq->qual.s[--fq->qual.n] = '\0'; - if (fq->qual.s[fq->qual.n-1] == '\r') { - fq->qual.s[--fq->qual.n] = '\0'; - } - return 1; -} - -struct qual_str { - long long int cnt; - long long int sum; - long long int ssq; - long long int ns; -} quals[MAX_FILENO_QUALS+1] = {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}; - -int gzclose(FILE *f, bool isgz) { - return isgz ? pclose(f) : fclose(f); -} - -FILE *gzopen(const char *f, const char *m, bool*isgz) { - // maybe use zlib some day? - FILE *h; - const char * ext = fext(f); - if (!strcmp(ext,".gz")) { - char *tmp=(char *)malloc(strlen(f)+100); - if (strchr(m,'w')) { - strcpy(tmp, "gzip -3 > '"); - strcat(tmp, f); - strcat(tmp, "'"); - } else { - strcpy(tmp, "gunzip -c '"); - strcat(tmp, f); - strcat(tmp, "'"); - } - h = popen(tmp, m); - *isgz=1; - free(tmp); - } else if (!strcmp(ext,".zip")) { - char *tmp=(char *)malloc(strlen(f)+100); - if (strchr(m,'w')) { - strcpy(tmp, "zip -q '"); - strcat(tmp, f); - strcat(tmp, "' -"); - } else { - strcpy(tmp, "unzip -p '"); - strcat(tmp, f); - strcat(tmp, "'"); - } - h = popen(tmp, m); - *isgz=1; - free(tmp); - } else if (!strcmp(ext,".dsrc")||!strcmp(ext,".dz")) { - char *tmp=(char *)malloc(strlen(f)+100); - if (strchr(m,'w')) { - // default 2x better compression and 3x better speed - strcpy(tmp, "dsrc c -m0 -t2 -s '"); - strcat(tmp, f); - strcat(tmp, "'"); - } else { - // slower than gunzip in some cases! - strcpy(tmp, "dsrc d -t2 -s '"); - strcat(tmp, f); - strcat(tmp, "'"); - } - h = popen(tmp, m); - *isgz=1; - free(tmp); - } else { - h = fopen(f, m); - *isgz=0; - } - if (!h) { - fprintf(stderr, "Error opening file '%s': %s\n",f, strerror(errno)); - exit(1); - } - return h; -} - -const char *fext(const char *f) { - const char *x=strrchr(f,'.'); - return x ? x : ""; -} - -bool poorqual(int n, int l, const char *s, const char *q) { - int i=0, sum=0, ns=0; - for (i=0;i 1); - } - // enough data? use stdev - int pmean = quals[n].sum / quals[n].cnt; // mean q - double pdev = stdev(quals[n].cnt, quals[n].sum, quals[n].ssq); // dev q - int serr = min(pmean/2,max(1,pdev/sqrt(l))); // stderr for length l - // mean qual < min(18,peman-serr*3) = junk/skip it - // cap low qual, because adapters often are low qual - // but you still need to calculate something, in case we're doing ion/pacbio - int thr = min((33+18), (pmean - serr * 3)); - if (xmean < thr) { -// fprintf(stderr, "POORQ xmean:%d, pmean:%d, pdev:%f, sqrt(l):%f, serr:%d, thr: %d, %s",xmean,pmean,pdev,sqrt(l),serr,thr,s); - return 1; // ditch it - } - if (ns > (1+(l*quals[n].ns / quals[n].cnt))) { // 1 more n than average? -// fprintf(stderr, "POORQ: ns:%d, thr: %d\n",ns,(int)(1+(l*quals[n].ns / quals[n].cnt))); - return 1; // ditch it - } - return 0; -} - -#define comp(c) ((c)=='A'?'T':(c)=='a'?'t':(c)=='C'?'G':(c)=='c'?'g':(c)=='G'?'C':(c)=='g'?'c':(c)=='T'?'A':(c)=='t'?'a':(c)) - -void revcomp(struct fq *d, struct fq *s) { - if (!d->seq.s) { - d->seq.s=(char *) malloc(d->seq.a=s->seq.n+1); - d->qual.s=(char *) malloc(d->qual.a=s->qual.n+1); - } else if (d->seq.a <= s->seq.n) { - d->seq.s=(char *) realloc(d->seq.s, d->seq.a=(s->seq.n+1)); - d->qual.s=(char *) realloc(d->qual.s, d->qual.a=(s->qual.n+1)); - } - int i; - for (i=0;iseq.n/2;++i) { - char b=s->seq.s[i]; - char q=s->qual.s[i]; - //printf("%d: %c, %c\n", i, comp(s->seq.s[s->seq.n-i-1]), s->qual.s[s->qual.n-i-1]); - d->seq.s[i]=comp(s->seq.s[s->seq.n-i-1]); - d->qual.s[i]=s->qual.s[s->qual.n-i-1]; - //printf("%d: %c, %c\n", s->seq.n-i-1, comp(b), q); - d->seq.s[s->seq.n-i-1]=comp(b); - d->qual.s[s->seq.n-i-1]=q; - } - if (s->seq.n % 2) { - //printf("%d: %c, %c\n", 1+s->seq.n/2, comp(s->seq.s[s->seq.n/2])); - d->seq.s[s->seq.n/2] = comp(s->seq.s[s->seq.n/2]); - d->qual.s[s->seq.n/2] = s->qual.s[s->seq.n/2]; - } - d->seq.n=s->seq.n; - d->qual.n=s->qual.n; - d->seq.s[s->seq.n]='\0'; - d->qual.s[s->seq.n]='\0'; -} - -void free_line(struct line *l) { - if (l) { - if (l->s) free(l->s); - l->s=NULL; - } -} - -void free_fq(struct fq *f) { - if (f) { - free_line(&f->id); - free_line(&f->seq); - free_line(&f->com); - free_line(&f->qual); - } -} - - -/* getline.c -- Replacement for GNU C library function getline - -Copyright (C) 1993 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* Written by Jan Brittenson, bson@gnu.ai.mit.edu. */ - -#include -#include -#include -#include - -/* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR - + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from - malloc (or NULL), pointing to *N characters of space. It is realloc'd - as necessary. Return the number of characters read (not including the - null terminator), or -1 on error or EOF. */ - -int getstr (char ** lineptr, size_t *n, FILE * stream, char terminator, int offset) -{ - int nchars_avail; /* Allocated but unused chars in *LINEPTR. */ - char *read_pos; /* Where we're reading into *LINEPTR. */ - int ret; - - if (!lineptr || !n || !stream) - return -1; - - if (!*lineptr) - { - *n = 64; - *lineptr = (char *) malloc (*n); - if (!*lineptr) - return -1; - } - - nchars_avail = *n - offset; - read_pos = *lineptr + offset; - - for (;;) - { - register int c = getc (stream); - - /* We always want at least one char left in the buffer, since we - always (unless we get an error while reading the first char) - NUL-terminate the line buffer. */ - - assert(*n - nchars_avail == read_pos - *lineptr); - if (nchars_avail < 2) - { - if (*n > 64) - *n *= 2; - else - *n += 64; - - nchars_avail = *n + *lineptr - read_pos; - *lineptr = (char *) realloc (*lineptr, *n); - if (!*lineptr) - return -1; - read_pos = *n - nchars_avail + *lineptr; - assert(*n - nchars_avail == read_pos - *lineptr); - } - - if (c == EOF || ferror (stream)) - { - /* Return partial line, if any. */ - if (read_pos == *lineptr) - return -1; - else - break; - } - - *read_pos++ = c; - nchars_avail--; - - if (c == terminator) - /* Return the line. */ - break; - } - - /* Done - NUL terminate and return the number of chars read. */ - *read_pos = '\0'; - - ret = read_pos - (*lineptr + offset); - return ret; -} - -#if !defined(__GNUC__) || defined(__APPLE__) || defined(WIN32) - -ssize_t getline(char **lineptr, size_t *n, FILE *stream) -{ - return getstr (lineptr, n, stream, '\n', 0); -} - -/* - * public domain strtok_r() by Charlie Gordon - * - * from comp.lang.c 9/14/2007 - * - * http://groups.google.com/group/comp.lang.c/msg/2ab1ecbb86646684 - * - * (Declaration that it's public domain): - * http://groups.google.com/group/comp.lang.c/msg/7c7b39328fefab9c - */ - -char* strtok_r(char *str, const char *delim, char **nextp) -{ - char *ret; - - if (str == NULL) { - str = *nextp; - } - - str += strspn(str, delim); - - if (*str == '\0'){ - return NULL; - } - - ret = str; - str += strcspn(str, delim); - - if (*str) { - *str++ = '\0'; - } - - *nextp = str; - return ret; -} - -#endif - - diff --git a/clipper/fastq-lib.h b/clipper/fastq-lib.h deleted file mode 100644 index feda28b..0000000 --- a/clipper/fastq-lib.h +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright (c) 2011 Expression Analysis / Erik Aronesty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -// 32-bit o/s support -#if defined(__i386__) - #define _FILE_OFFSET_BITS 64 -#endif - -// standard libs -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined(__APPLE__) - #define getopt(a,b,c) getopt_long(a,b,c,NULL,NULL) -#endif - -// misc useful macros -#define max(a,b) ((a)>(b)?(a):(b)) -#define min(a,b) ((a)<(b)?(a):(b)) -#define meminit(l) (memset(&l,0,sizeof(l))) -#define fail(s,...) ((fprintf(stderr,s,##__VA_ARGS__), exit(1))) -#define warn(s,...) ((fprintf(stderr,s,##__VA_ARGS__))) -#define stdev(cnt, sum, ssq) sqrt((((double)cnt)*ssq-pow((double)sum,2)) / ((double)cnt*((double)cnt-1))) - -// maximum number of files that can be tracked by poorquals lib -#define MAX_FILENO_QUALS 6 - -// read line, read fq -typedef struct line { - char *s; int n; size_t a; -} line; - -struct fq { - line id; - line seq; - line com; - line qual; -}; - - -void free_line(struct line *l); -void free_fq(struct fq *fq); - -// not GNU? probably no getline & strtok_r... -#if !defined( __GNUC__) || defined(WIN32) || defined(__APPLE__) - ssize_t getline(char **lineptr, size_t *n, FILE *stream); - char* strtok_r(char *str, const char *delim, char **nextp); -#endif - -// get file extension -const char *fext(const char *f); - -// read fq -int read_line(FILE *in, struct line &l); // 0=done, 1=ok, -1=err+continue -int read_fq(FILE *in, int rno, struct fq *fq, const char *name=NULL); // 0=done, 1=ok, -1=err+continue -int read_fq_sam(FILE *in, int rno, struct fq *fq, const char *name=NULL); // 0=done, 1=ok, -1=err+continue -void free_fq(struct fq *fq); - -// open a file, possibly gzipped, exit on failure -FILE *gzopen(const char *in, const char *mode, bool *isgz); -int gzclose(FILE *f, bool isgz); - -// keep track of poor quals (n == "file number", maybe should have persistent stat struct instead?) -bool poorqual(int n, int l, const char *s, const char *q); - -// returns number of differences between 2 strings, where n is the "max-length to check" -inline int hd(char *a, char *b, int n) { - int d=0; - //if (debug) fprintf(stderr, "hd: %s,%s ", a, b); - while (*a && *b && n > 0) { - if (*a != *b) ++d; - --n; - ++a; - ++b; - } - //if (debug) fprintf(stderr, ", %d/%d\n", d, n); - return d+n; -} - -// reverse complement an fq entry into a blank (memset 0) one -void revcomp(struct fq *dest, struct fq* src); - - diff --git a/clipper/fastq-mcf.cpp b/clipper/fastq-mcf.cpp deleted file mode 100644 index e508925..0000000 --- a/clipper/fastq-mcf.cpp +++ /dev/null @@ -1,1760 +0,0 @@ -/* -Copyright (c) 2011 Expression Analysis / Erik Aronesty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -/* - -See "void usage" below for usage. - -*/ - -#include // or sparse_hash_set, dense_hash_map, ... -#include - -#include "fastq-lib.h" - -#define VERSION "1.05" - -#define MAX_ADAPTER_NUM 1000 -#define SCANLEN 15 -#define SCANMIDP ((int) SCANLEN/2) -#define MAX_FILES 5 -#define MAX_REF 10 -#define B_A 0 -#define B_C 1 -#define B_G 2 -#define B_T 3 -#define B_N 4 -#define B_CNT 5 -#define MAXWARN 10 -#define MAX_PHRED 100 - -struct ad { - char *id; int nid; size_t naid; - char *seq; int nseq; size_t naseq; - char escan[SCANLEN+1]; // scan sequence - int bcnt[MAX_FILES]; // number found at beginning - int bcntz[MAX_FILES]; // number found at beginning - int ecnt[MAX_FILES]; // number found at end - int ecntz[MAX_FILES]; // number found at end - - char end[MAX_FILES]; // 'b' or 'e' - int thr[MAX_FILES]; // min-length for clip -}; - -int read_fa(FILE *in, int rno, struct ad *ad); // 0=done, 1=ok, -1=err+continue -int meanqwin(const char *q, int qn, int i, int w); // mean quality within window win, at position i -bool evalqual(struct fq &fq, int file_num); - -int char2bp(char c); -char bp2char(int b); -void saveskip(FILE **fout, int fo_n, struct fq *fq); - -void valid_arg(char c, const char *a); - -void usage(FILE *f, const char *msg=NULL); -int debug=0; -int warncount = 0; - -// used to filter out other genomes, spike in controls, etc - -const char *cmd_align_se = "bowtie -S %i -f %1"; -const char *cmd_align_pe = "bowtie -S %i -1 %1 -2 %2"; - -// quality filter args -int qf_mean=0, qf_max_ns=-1, qf_xgt_num=0, qf_xgt_min=0, qf_max_n_pct=-1; -int qf2_mean=0, qf2_max_ns=-1, qf2_xgt_num=0, qf2_xgt_min=0, qf2_max_n_pct=-1; - -// qual adjust -class adjustment { -public: - int pos; - int adj; - adjustment() {pos=adj=0;} -}; -std::vector cycle_adjust; -int phred_adjust[MAX_PHRED]; -int phred_adjust_max=0; -bool have_phred_adjust=false; - -std::string arg2cmdstr(int argc, char** argv); - -// phred used -char phred = 0; - -google::sparse_hash_map dupset; -int dupmax = 40000000; // this should be configurable, but right now it isn't -int max_in_buffer = 2400000; - -class inbuffer { - int max_buf; -public: - inbuffer() {fin=0; gz=0; bp=0; max_buf=max_in_buffer;}; - ~inbuffer() {close();}; - - FILE *fin; - bool gz; - int bp; - std::vector buf; - - ssize_t getline(char **lineptr, size_t *n) { - if (bp < buf.size()) { - // return bufffered - int l=buf[bp].length(); // length without null char - if (!*lineptr || *n < (l+1)) { - // alloc with room for null - *lineptr=(char*)realloc(*lineptr,*n=(l+1)); - } - memcpy(*lineptr,buf[bp].data(),l); - (*lineptr)[l]='\0'; - ++bp; - return l; - } else { - int l=::getline(lineptr, n, fin); - if (max_buf > 0) { - if (buf.size() > max_buf) { - if (debug) fprintf(stderr, "Clearing buffer at %d lines\n", (int) buf.size()); - buf.resize(0); - bp=0; - max_buf = 0; - } else { - if (l > 0) { - buf.push_back(std::string(*lineptr)); - ++bp; - } - } - } - return l; - } - } - - int read_fq(int rno, struct fq *fq, const char *name=NULL) { - if (bp < buf.size()) { - fq->id.n=getline(&fq->id.s, &fq->id.a); - fq->seq.n=getline(&fq->seq.s, &fq->seq.a); - fq->com.n=getline(&fq->com.s, &fq->com.a); - fq->qual.n=getline(&fq->qual.s, &fq->qual.a); - if (fq->qual.n <= 0) - return 0; - - if (fq->id.s[0] != '@' || fq->com.s[0] != '+' || fq->seq.n != fq->qual.n) { - const char *errtyp = (fq->seq.n != fq->qual.n) ? "length mismatch" : fq->id.s[0] != '@' ? "no '@' for id" : "no '+' for comment"; - if (name) { - fprintf(stderr, "Malformed fastq record (%s) in file '%s', line %d\n", errtyp, name, rno*2+1); - } else { - fprintf(stderr, "Malformed fastq record (%s) at line %d\n", errtyp, rno*2+1); - } - return -1; - } - - fq->seq.s[--fq->seq.n] = '\0'; - if (fq->seq.s[fq->seq.n-1] == '\r') { - fq->seq.s[--fq->seq.n] = '\0'; - } - fq->qual.s[--fq->qual.n] = '\0'; - if (fq->qual.s[fq->qual.n-1] == '\r') { - fq->qual.s[--fq->qual.n] = '\0'; - } - - return fq->qual.n >= 0; // github issue 46, 53 - } else { - return ::read_fq(fin, rno, fq, name); - } - } - - void reset() { - assert(max_buf > 0); - bp=0; - } - - bool full() { - return buf.size()>=max_buf; - } - - int close() { - int ret=true; - if (fin) { - ret = gz ? pclose(fin) : fclose(fin); - fin=NULL; - } - return ret; - } -}; - -int main (int argc, char **argv) { - char c; - bool eol; - int nmin = 1, nkeep = 19, nmax=0; - int qf2_min_len=0; - float minpct = 0.25; - int pctdiff = 10; - int sampcnt = 300000; // # of reads to sample to determine adapter profile, and base skewing - int xmax = -1; - float scale = 2.2; - int noclip=0; - int nreadsout=0; // max # of reads to output, all by default - char end[MAX_FILES]; meminit(end); - float skewpct = 2; // any base at any position is less than skewpct of reads - float pctns = 20; // any base that is more than 20% n's - bool rmns = 1; // remove n's at the end of the read - int qthr = 7; // remove end of-read with quality < qthr - int qwin = 1; // remove end of read with mean quality < qthr - int ilv3 = -1; - int duplen = 0; - int dupskip = 0; - int min_start_trim = 0; - int min_end_trim = 0; - bool noexec = 0; - bool hompol_filter = 0; - bool lowcom_filter = 0; - float hompol_pct = .92; - float lowcom_pct = .90; - bool keeponlyclip=0; - - dupset.set_deleted_key("<>"); - - int i; - - char *afil = NULL; - char *ifil[MAX_FILES]; meminit(ifil); - const char *ofil[MAX_FILES]; meminit(ofil); - int i_n = 0; - int o_n = 0; - int e_n = 0; - bool skipb = 0; - char *fref[MAX_REF]; meminit(fref); - int fref_n = 0; - char *qspec = NULL; - - static struct option long_options[] = { - {"keep-clipped", 0, 0, 0}, - {"qual-mean", 1, 0, 0}, - {"max-ns", 1, 0, 0}, - {"max-output-reads", 1, 0, 'O'}, - {"qual-gt", 1, 0, 0}, - {"min-len", 1, 0, 'l'}, - {"cycle-adjust", 1, 0, 0}, - {"phred-adjust", 1, 0, 0}, - {"phred-adjust-max", 1, 0, 0}, - {"mate-qual-mean", 1, 0, 0}, - {"mate-max-ns", 1, 0, 0}, - {"mate-qual-gt", 1, 0, 0}, - {"mate-min-len", 1, 0, 0}, - {"homopolymer-pct", 1, 0, 0}, - {"lowcomplex-pct", 1, 0, 0}, - {"min-start-trim", 1, 0, 0}, - {"min-end-trim", 1, 0, 0}, - {0, 0, 0, 0} - }; - - meminit(phred_adjust); - - int option_index = 0; - while ( (c = getopt_long(argc, argv, "-nf0uXUVHKSRdbehp:o:O:l:s:m:t:k:x:P:q:L:C:w:F:D:",long_options,&option_index)) != -1) { - switch (c) { - case '\0': - { - const char *oname=long_options[option_index].name; - if(!strcmp(oname, "qual-mean")) { - qf_mean=qf2_mean=atoi(optarg); - } else if(!strcmp(oname, "keep-clipped")) { - keeponlyclip=1; - } else if(!strcmp(oname, "mate-qual-mean")) { - qf2_mean=atoi(optarg); - } else if (!strcmp(oname, "min-start-trim")) { - min_start_trim = atoi(optarg); - } else if (!strcmp(oname, "min-end-trim")) { - min_end_trim = atoi(optarg); - } else if(!strcmp(oname, "homopolymer-pct")) { - hompol_pct=atof(optarg)/100.0; - hompol_filter=1; - } else if(!strcmp(oname, "lowcomplex-pct")) { - lowcom_pct=atof(optarg)/100.0; - lowcom_filter=1; - } else if(!strcmp(oname, "qual-gt")) { - if (!strchr(optarg, ',')) { - fprintf(stderr, "Error, %s requires NUM,THR as argument\n", oname); - exit(1); - } - qf_xgt_num=qf2_xgt_num=atoi(optarg); - qf_xgt_min=qf2_xgt_min=atoi(strchr(optarg, ',')+1); - } else if(!strcmp(oname, "mate-qual-gt")) { - if (!strchr(optarg, ',')) { - fprintf(stderr, "Error, %s requires NUM,THR as argument\n", oname); - exit(1); - } - qf2_xgt_num=atoi(optarg); - qf2_xgt_min=atoi(strchr(optarg, ',')+1); - } else if(!strcmp(oname, "cycle-adjust")) { - if (!strchr(optarg, ',')) { - fprintf(stderr, "Error, %s requires CYC,ADJ as argument\n", oname); - exit(1); - } - adjustment a; - a.pos=atoi(optarg); - a.adj=atoi(strchr(optarg, ',')+1); - cycle_adjust.push_back(a); - } else if(!strcmp(oname, "phred-adjust-max")) { - phred_adjust_max=atoi(optarg); - } else if(!strcmp(oname, "phred-adjust")) { - if (!strchr(optarg, ',')) { - fprintf(stderr, "Error, %s requires CYC,ADJ as argument\n", oname); - exit(1); - } - int phred=atoi(optarg); - int adj=atoi(strchr(optarg, ',')+1); - assert(phred= 0); - if (adj) - have_phred_adjust=true; - phred_adjust[phred]=adj; - } else if(!strcmp(oname, "max-ns")) { - if (strchr(optarg,'%')) { - qf_max_n_pct=atoi(optarg); - qf2_max_n_pct=atoi(optarg); - } else { - qf_max_ns=atoi(optarg); - qf2_max_ns=atoi(optarg); - } - - } else if(!strcmp(oname, "mate-max-ns")) { - if (strchr(optarg,'%')) { - qf2_max_n_pct=atoi(optarg); - } else { - qf2_max_ns=atoi(optarg); - } - } else if(!strcmp(oname, "mate-min-len")) { - qf2_min_len=atoi(optarg); - } - break; - } - case '\1': - if (!afil) - afil = optarg; - else if (i_n max_in_buffer) max_in_buffer = sampcnt * 8; break; - case 'F': fref[fref_n++] = optarg; break; - case 'x': pctns = atof(optarg); break; - case 'R': rmns = false; break; - case 'V': printf("Version: %s\n", VERSION); return 0; break; - case 'p': pctdiff = atoi(optarg); break; - case 'P': phred = (char) atoi(optarg); break; - case 'D': duplen = atoi(optarg); break; - case 'h': usage(stdout); return 1; - case 'o': if (!o_n < MAX_FILES) - ofil[o_n++] = optarg; - break; - case 'O': nreadsout = atoi(optarg); break; - case 's': scale = atof(optarg); break; - case 'S': skipb = 1; break; - case 'i': if (i_n 75) { - fprintf(stderr, "WARNING: duplen of %d is probably too long, do you really need it?\n", duplen); - } - - if (i_n == 1 && o_n == 0) { - ofil[o_n++]="-"; - } - - if (!noclip && o_n != i_n) { - fprintf(stderr, "Error: number of input files must match number of '-o' output files.\n"); - return 1; - } - - if (argc < 3 || !afil || !i_n) { - usage(stderr); - return 1; - } - - FILE *ain = NULL; - if (strcasecmp(afil, "n/a") && strcasecmp(afil, "/dev/null") && strcasecmp(afil, "NUL")) { - ain = fopen(afil, "r"); - if (!ain) { - fprintf(stderr, "Error opening adapter file '%s': %s\n",afil, strerror(errno)); - return 1; - } - } - - FILE *fstat = stderr; - if (!noclip && strcmp(ofil[0], "-")) { - fstat = stdout; - } - if (noclip) { - fstat = stdout; - } - - fprintf(fstat, "Command Line: %s\n", arg2cmdstr(argc, argv).c_str()); - - FILE *fout[MAX_FILES]; meminit(fout); - bool gzout[MAX_FILES]; meminit(gzout); - inbuffer fin[MAX_FILES]; - - // if (debug) fprintf(stderr,"i_n:%d, ifil[0]:%s\n",i_n, ifil[0]); - - for (i=0;i 0) { - if (*s == '@') { - // look for illumina purity filtering flags - if (ilv3det==2) { - ilv3det=0; - const char *p=strchr(s, ':'); - if (p) { - ++p; - if (isdigit(*p)) { - p=strchr(s, ' '); - if (p) { - ++p; - if (isdigit(*p)) { - ++p; - if (*p ==':') { - ++p; - if (*p =='Y') { - // filtering found - ilv3det=1; - } else if (*p =='N') { - // still illumina - ilv3det=2; - } - } - } - } - } - } - } - - if ((ns=fin[i].getline(&s, &na)) <=0) { - // reached EOF - if (debug) fprintf(stderr, "Dropping out of sampling loop\n"); - break; - } - - nq=fin[i].getline(&q, &naq); - nq=fin[i].getline(&q, &naq); // qual is 2 lines down - - // skip poor quals/lots of N's when doing sampling - if (st.st_size > (sampcnt * 500) && (skipped < sampcnt) && poorqual(i, ns, s, q)) { - if (debug) fprintf(stderr, "Skip poorqual\n"); - ++skipped; - continue; - } - - if (phred == 0) { - --nq; - for (j=0;j maxns) maxns = ns; - - // just 10000 reads for readlength sampling - if (nr >= 10000) { - if (debug) fprintf(stderr, "Read 10000\n"); - break; - } - } else { - fprintf(stderr, "Invalid FASTQ format : %s\n", ifil[i]); - break; - } - } - if (ilv3det == 1 && (ilv3 == -1)) { - ilv3=1; - } - if (debug) fprintf(stderr,"Ilv3det: %d\n", ilv3det); - if (s) free(s); - if (q) free(q); - if (nr) - avgns[i] = avgns[i]/nr; - } - - if (ilv3 == -1) { - ilv3 = 0; - } - - if (ilv3) { - fprintf(fstat, "Filtering Illumina reads on purity field\n"); - } - - // default to illumina 64 if you never saw a qual < 33 - if (phred == 0) phred = 64; - fprintf(fstat, "Phred: %d\n", phred); - - for (i=0;i 500) { - dobcnt = 0; - balloc = 1; - } - - int bcnt[MAX_FILES][2][balloc][6]; meminit(bcnt); - int qcnt[MAX_FILES][2]; meminit(qcnt); - char qmin=127, qmax=0; - int nsampcnt = 0; - double stat_lowcom_total=0, stat_lowcom_ssq=0, stat_lowcom_b4_total=0, stat_lowcom_b4_ssq=0; - long stat_lowcom_cnt=0, stat_lowcom_b4_cnt=0; - int skipunclip=0; - - for (i=0;i 0) { - if (*d == '@') { - if ((ns=fin[i].getline(&s, &na)) <=0) - break; - nq=fin[i].getline(&q, &naq); - nq=fin[i].getline(&q, &naq); // qual is 2 lines down - - --nq; --ns; // don't count newline for read len - - // skip poor quals/lots of N's when doing sampling (otherwise you'll miss some) - if (ns == 0) { // github issue 46, 53 - ++skipped; - continue; - } - if ((st.st_size > (sampcnt * 500)) && (skipped < sampcnt) && poorqual(i, ns, s, q)) { - ++skipped; - continue; - } - - if (nq != ns) { - if (warncount < MAXWARN) { - fprintf(stderr, "Warning, corrupt quality for sequence: %s", s); - ++warncount; - } - continue; - } - - if (i > 0 && avgns[i] < 11) // reads of avg length < 11 ? barcode lane, skip it - continue; - - if (ilv3) { // illumina purity filtering - char * p = strchr(d, ' '); - if (p) { - p+=2; - if (*p==':') { - ++p; - if (*p == 'Y') { - continue; - } - } - } - } - - ++nr; - - // to be safe, we don't assume reads are fixed-length, not any slower, just a little more code - if (dobcnt) { - int b; - for (b = 0; b < ns/2 && b < maxns; ++b) { - ++bcnt[i][0][b][char2bp(s[b])]; // count from begin - ++bcnt[i][0][b][B_CNT]; // count of samples at position - ++bcnt[i][1][b][char2bp(s[ns-b-1])]; // count from end - ++bcnt[i][1][b][B_CNT]; // count of samples at offset-from-end position - } - } - qcnt[i][0]+=((q[0]-phred) 1) fprintf(stderr, " END S: %s A: %s (%s), P: %d, SL: %d, Z:%d\n", s, ad[a].id, ad[a].escan, (int) (p-s), ns, (p-s) == ns-SCANLEN); - // found at the very end - if ((p-s) == ns-SCANLEN) - ++ad[a].ecntz[i]; - ++ad[a].ecnt[i]; - } - // search 15 char begin of seq in longer adap string - int slen; - if (debug > 1) fprintf(stderr, "COMPARE: %d <= %d, adseq: %s, buf: %s\n", SCANLEN, ad[a].nseq, ad[a].seq, buf); - // if the 15bp sequence is smaller than the adapter size - if (SCANLEN <= ad[a].nseq) { - slen = SCANLEN; - // search for the truncated buffer in the ADAPTER - p = strstr(ad[a].seq, buf); - } else { - // search for the adapter at the beginning of the buffer only... if it's short - slen = ad[a].nseq; - if (!strncmp(ad[a].seq,buf,ad[a].nseq)) - p=ad[a].seq; - else - p=NULL; - } - if (p) { - if (debug > 1) fprintf(stderr, "BEGIN S: %s A: %s (%s), P: %d, SL: %d, Z:%d\n", buf, ad[a].id, ad[a].seq, (int) (p-ad[a].seq), ns, (p-ad[a].seq ) == ad[a].nseq-slen); - // found the end of the adapter - if (p-ad[a].seq == ad[a].nseq-slen) - ++ad[a].bcntz[i]; - ++ad[a].bcnt[i]; - } - } - } - if (fin[i].full() || nr >= sampcnt) // enough samples - break; - } - if (s) free(s); - if (d) free(d); - if (q) free(q); - if (i == 0 || avgns[i] >= 11) { - if (nsampcnt == 0 || nr < nsampcnt) // fewer than max, set for thresholds - nsampcnt=nr; - } - } - - if (nsampcnt == 0) { - fprintf(stderr, "ERROR: Unable to read file for subsampling\n"); - exit(1); - } - - sampcnt = nsampcnt; - int sktrim[i_n][2]; meminit(sktrim); - - // look for severe base skew, and auto-trim ends based on it - int needqtrim=0; - if (dobcnt) { - if (sampcnt > 0 && skewpct > 0) { - for (i=0;i 0 && (100.0*qcnt[i][e])/sampcnt > 5) { - needqtrim = 1; - } - - int p; - for (p = 0; p < maxns/2; ++p) { - int b; - - int skth = (int) ( (float) bcnt[i][e][p][B_CNT] * ( skewpct / 100.0 ) ) ; // skew threshold - int thr_n = (int) ( (float) bcnt[i][e][p][B_CNT] * ( pctns / 100.0 ) ); // n-threshold - - if (debug > 1) - fprintf(stderr,"Sk Prof [%d, %d]: skth=%d, bcnt=%d, ncnt=%d, a=%d, c=%d, g=%d, t=%d\n", e, p, skth, - bcnt[i][e][p][B_CNT], bcnt[i][e][p][B_N], bcnt[i][e][p][B_A], - bcnt[i][e][p][B_C], bcnt[i][e][p][B_G], bcnt[i][e][p][B_T]); - - if (skth < 10) // too few samples to detect skew - continue; - - int tr = 0; - for (b = 0; b < 4; ++b) { - if (bcnt[i][e][p][b] < skth) { // too few bases of this type - tr=1; - if (debug > 1) - fprintf(stderr, "Skew at i:%d e:%d p:%d b:%d\n", i, e, p, b); - break; - } - } - if (bcnt[i][e][p][B_N] > thr_n) { // too many n's - if (debug > 1) - fprintf(stderr, "Too many N's at i:%d e:%d p:%d b:%d ( %d > %d )\n", i, e, p, b, bcnt[i][e][p][B_N], thr_n); - tr=1; - } - - if (tr) { - if (p == sktrim[i][e]) { // adjacent, so increase trim - ++sktrim[i][e]; - } else { - fprintf(fstat, "Within-read Skew: Position %d from the %s of reads is skewed!\n", p, e==0?"start":"end"); - } - } - } - } - } - } - - } - - int e; - bool someskew = false; - for (i=0;i 0) { - fprintf(fstat, "Warning: Too much skewing found (%d), disabling skew clipping\n", totskew); - } - meminit(sktrim); - break; - } - } - - for (i=0;i 0) { - fprintf(fstat, "Trim '%s': %d from %s\n", e==0?"start":"end", sktrim[i][e], ifil[i]); - someskew=true; - } - } - } - - int athr = (int) ((float)sampcnt * minpct) / 100; - fprintf(fstat, "Threshold used: %d out of %d\n", athr+1, sampcnt); - - int a; - int newc=0; - for(a=0;a athr || ad[a].bcnt[i] > athr) { - int cnt; - // heavily weighted toward start/end maches - if ((ad[a].ecnt[i] + 10*ad[a].ecntz[i]) >= (ad[a].bcnt[i] + 10*ad[a].bcntz[i])) { - ad[a].end[i]='e'; - cnt = ad[a].ecnt[i]; - } else { - ad[a].end[i]='b'; - cnt = ad[a].bcnt[i]; - } - - char *p; - if (p=strstr(ad[a].id, "_3p")) { - if (p[3] == '\0' || p[3] == '_') { - ad[a].end[i]='e'; - cnt = ad[a].ecnt[i]; - } - } else if (p=strstr(ad[a].id, "_5p")) { - if (p[3] == '\0' || p[3] == '_') { - ad[a].end[i]='b'; - cnt = ad[a].bcnt[i]; - } - } - - // user supplied end.... don't clip elsewhere - if (end[i] && ad[a].end[i] != end[i]) - continue; - - if (scale >= 100) - ad[a].thr[i] = ad[a].nseq; - else - ad[a].thr[i] = min(ad[a].nseq,max(nmin,(int) (-log(cnt / (float) sampcnt)/log(scale)))); - - fprintf(fstat, "Adapter %s (%s): counted %d at the '%s' of '%s', clip set to %d", ad[a].id, ad[a].seq, cnt, ad[a].end[i] == 'e' ? "end" : "start", ifil[i], ad[a].thr[i]); - if (abs((ad[a].bcnt[i]-ad[a].ecnt[i])) < athr/4) { - fprintf(fstat, ", warning end was not reliable: %s/%s\n", ad[a].id, ad[a].seq); - } else { - fputc('\n', fstat); - } - ++any; - } - } - if (!any) - continue; - ad[newc++]=ad[a]; - } - - acnt=newc; - - if (acnt == 0 && !someskew && !needqtrim && !ilv3) { - fprintf(fstat, "No adapters found"); - if (skewpct > 0) fprintf(fstat, ", no skewing detected"); - if (qthr > 0) fprintf(fstat, ", and no trimming needed"); - fprintf(fstat, ".\n"); - if (noclip) exit (1); // for including in a test - } else { - if (debug) fprintf(stderr, "acnt: %d, ssk: %d, needq: %d\n", acnt, someskew, needqtrim); - if (noclip) { - if (acnt == 0) fprintf(fstat, "No adapters found. "); - if (someskew) fprintf(fstat, "Skewing detected. "); - if (needqtrim) fprintf(fstat, "Quality trimming is needed. "); - fprintf(fstat, "\n"); - } - } - - if (noclip) - exit(0); - - for (i=0;i 0) - fprintf(fstat, "Files: %d\n", i_n); - - for (i=0;i::const_iterator lookup_it; - - bool io_ok = true; - while (read_ok=fin[0].read_fq(nrec, &fq[0])) { - if (nreadsout && (wrec == nreadsout)) break; - for (i=1;i 1) { - if (fq[1].qual.n == 0) { - ++nfiltered; - continue; - } - } - if (read_ok < 0) { - ++nerr; - continue; - } - - if (ilv3) { - char * p = strchr(fq[0].id.s, ' '); - if (p) { - p+=2; - if (*p==':') { - ++p; - if (*p == 'Y') { - ++nilv3pf; - if (skipb) saveskip(fskip, i_n, fq); - continue; - } - } - } - } - - // chomp - - int dotrim[MAX_FILES][2]; - int skip = 0; // skip whole record? - int hompol_seq=0; - int hompol_cnt=0; - int lowcom_seq=0; - int lowcom_cnt=0; - int f; - bool didclip=0; - for (f=0;fphred_adjust_max) { - fq[f].qual.s[i]=phred_adjust_max+phred; - } - } - } - - - for (i=0;i0) { - fq[f].qual.s[cycle_adjust[i].pos-1]+=cycle_adjust[i].adj; - } else { - fq[f].qual.s[fq[f].qual.n+cycle_adjust[i].pos]+=cycle_adjust[i].adj; - } - } - } - - - if (rmns) { - for (i=dotrim[f][0];i<(fq[f].seq.n);++i) { - // trim N's from the front - if (fq[f].seq.s[i] == 'N') - dotrim[f][0] = i + 1; - else - break; - } - for (i=dotrim[f][1];i<(fq[f].seq.n);++i) { - // trim N's from the end - if (fq[f].seq.s[fq[f].seq.n-i-1] == 'N') - dotrim[f][1] = i + 1; - else - break; - } - } - - if (hompol_filter) { - char p; int h = 0; - for (i = dotrim[f][0]+1;i= dotrim[f][0]+3 && (fq[f].seq.s[i] == fq[f].seq.s[i-2] && fq[f].seq.s[i-1] == fq[f].seq.s[i-3])) { - ++lowcom_seq; - } else if (i >= dotrim[f][0]+5 && (fq[f].seq.s[i] == fq[f].seq.s[i-3] && fq[f].seq.s[i-1] == fq[f].seq.s[i-4] && fq[f].seq.s[i-2] == fq[f].seq.s[i-5])) { - ++lowcom_seq; - } else if (i >= dotrim[f][0]+7 && (fq[f].seq.s[i] == fq[f].seq.s[i-4] && fq[f].seq.s[i-1] == fq[f].seq.s[i-5] && fq[f].seq.s[i-2] == fq[f].seq.s[i-6] && fq[f].seq.s[i-3] == fq[f].seq.s[i-7])) { - ++lowcom_seq; - } - ++lowcom_cnt; - } - } - - if (qthr > 0) { - bool istrimq = false; - - // trim qual from the begin - for (i=dotrim[f][0];i<(fq[f].seq.n);++i) { - if (qwin > 1 && (meanqwin(fq[f].qual.s,fq[f].seq.n,i,qwin)-phred) < qthr) { - ++trimqb[f]; - istrimq = true; - dotrim[f][0] = i + 1; - } else if ((fq[f].qual.s[i]-phred) < qthr) { - ++trimqb[f]; - istrimq = true; - dotrim[f][0] = i + 1; - } else - break; - } - - - // trim qual from the end ... stop at what you trimmed from the front! - for (i=dotrim[f][1];i<(fq[f].seq.n-dotrim[f][0]);++i) { - if (qwin > 1 && (meanqwin(fq[f].qual.s,fq[f].seq.n,fq[f].seq.n-i-1,qwin)-phred) < qthr) { - ++trimqb[f]; - istrimq = true; - dotrim[f][1] = i + 1; - } else if ((fq[f].qual.s[fq[f].seq.n-i-1]-phred) < qthr) { - ++trimqb[f]; - istrimq = true; - dotrim[f][1] = i + 1; - } else - break; - } - - // denominator - if (istrimq) trimql[f]+=1; - } - - int bestscore_e = INT_MAX, bestoff_e = 0, bestlen_e = 0; - int bestscore_b = INT_MAX, bestoff_b = 0, bestlen_b = 0; - - for (i =0; i < acnt; ++i) { - if (debug) fprintf(stderr, "seq[%d]: %s %d\n", f, fq[f].seq.s, fq[f].seq.n); - - if (!ad[i].end[f]) - continue; - - int nmatch = ad[i].thr[f]; - if (!nmatch) nmatch = ad[i].nseq; // full match required if nmin == 0 - - // how far in to search for a match? - int mx = ad[i].nseq; - if (xmax) { - mx = fq[f].seq.n; - if (xmax > 0 && (xmax+ad[i].nseq) < mx) - mx = xmax+ad[i].nseq; // xmax is added to adapter length - } - - if (debug) - fprintf(stderr, "adapter: %s, adlen: %d, nmatch: %d, mx: %d\n", ad[i].seq, ad[i].nseq, nmatch, mx); - - if (ad[i].end[f] == 'e') { - int off; - for (off = nmatch; off <= mx; ++off) { // off is distance from tail of sequence - char *seqtail = fq[f].seq.s+fq[f].seq.n-off; // search at tail - int ncmp = off1) - fprintf(stderr, "tail: %s, bestoff: %d, off: %d, ncmp: %d, mind: %d, hd %d\n", seqtail, bestoff_e, off, ncmp, mind, d); - if (d <= mind) { - // squared-distance over length - int score = (1000*(d*d+1))/ncmp; - if (score <= bestscore_e) { // better score? - bestscore_e = score; // save max score - bestoff_e = off; // offset at max - bestlen_e = ncmp; // cmp length at max - } - if (d == 0 && (ncmp == ad[i].nseq)) { - break; - } - } - } - } else { - int off; - for (off = nmatch; off <= mx; ++off) { // off is distance from start of sequence - int ncmp = off1) - fprintf(stderr, "bestoff: %d, off: %d, ncmp: %d, mind: %d, hd %d\n", bestoff_e, off, ncmp, mind, d); - - if (d <= mind) { - int score = (1000*(d*d+1))/ncmp; - if (score <= bestscore_b) { // better score? - bestscore_b = score; // save max score - bestoff_b = off; // offset at max - bestlen_b = ncmp; // cmp length at max - } - if (d == 0 && (ncmp == ad[i].nseq)) { - break; - } - } - } - } - } - - int adapcliplen = bestoff_b ? bestoff_b : bestoff_e; - - // lengthen trim based on best level - if (bestoff_b > dotrim[f][0]) - dotrim[f][0]=bestoff_b; - - if (bestoff_e > dotrim[f][1]) - dotrim[f][1]=bestoff_e; - - int totclip = min(fq[f].seq.n,dotrim[f][0] + dotrim[f][1]); - -// if (debug > 1) fprintf(stderr,"totclip %d\n", totclip); - - if (totclip > 0) { - // keep length > X, X based on mate - int tkeep = f == 0 ? nkeep : qf2_min_len > 0 ? qf2_min_len : nkeep; - - if ( (fq[f].seq.n-totclip) < tkeep) { - // skip all reads if one is severely truncated ?? - // maybe not... ? - skip = 1; - break; - } - - // count number of adapters clipped, not the number of rows trimmed - if ( adapcliplen > 0 ) { - ++ntrim[f]; - didclip=1; - } - - // save some stats - if (bestoff_b > 0) { - cnttrim[f][0]++; - tottrim[f][0]+=bestoff_b; - ssqtrim[f][0]+=bestoff_b*bestoff_b; - } else if (bestoff_e > 0) { - cnttrim[f][1]++; - tottrim[f][1]+=bestoff_e; - ssqtrim[f][1]+=bestoff_e*bestoff_e; - } - - } else { - // skip even if the original was too short - if (fq[f].seq.n < nkeep) - skip = 1; - } - } - - if (keeponlyclip && !didclip) { - ++skipunclip; - skip=1; - } - - int hompol_skip=0; - if (hompol_filter) { - int hompol_max = hompol_pct * hompol_cnt; - if (debug>0) printf("%s: hompol cnt:%d, max:%d, seq:%d\n", fq[0].id.s, hompol_cnt, hompol_max, hompol_seq); - if (hompol_seq>=hompol_max) hompol_skip = skip = true; - } - - int lowcom_skip=0; - if (!hompol_skip && lowcom_filter) { - int lowcom_max = lowcom_pct * lowcom_cnt; - if (debug>0) printf("%s: lowcom cnt:%d, max:%d, seq:%d\n", fq[0].id.s, lowcom_cnt, lowcom_max, lowcom_seq); - if (lowcom_seq>=lowcom_max) lowcom_skip = skip = true; - if (!lowcom_skip) { - stat_lowcom_total+=((double)lowcom_seq/(double)lowcom_cnt); - stat_lowcom_ssq+=pow(((double)lowcom_seq/(double)lowcom_cnt),2); - stat_lowcom_cnt+=1; - } - stat_lowcom_b4_total+=((double)lowcom_seq/(double)lowcom_cnt); - stat_lowcom_b4_ssq+=pow(((double)lowcom_seq/(double)lowcom_cnt),2); - stat_lowcom_b4_cnt+=1; - } - - - if (!skip) { - int f; - for (f=0;f= strlen(fq[f].seq.s)) { - if (debug) fprintf(stderr,"trimmming full sequence from end (%d), %s", dotrim[f][1], fq[f].id.s); - skip=1; - continue; - } - if (dotrim[f][1] > 0) { - if (debug) fprintf(stderr,"trimming %d from end, %s", dotrim[f][1], fq[f].id.s); - fq[f].seq.s[fq[f].seq.n -=dotrim[f][1]]='\0'; - fq[f].qual.s[fq[f].qual.n-=dotrim[f][1]]='\0'; - } - if (dotrim[f][0] > 0) { - if (debug) fprintf(stderr,"trimming %d from begin, %s", dotrim[f][0], fq[f].id.s); - fq[f].seq.n -= dotrim[f][0]; - fq[f].qual.n -= dotrim[f][0]; - if (fq[f].seq.n < 0) { - fq[f].seq.n = 0; - fq[f].qual.n = 0; - } - memmove(fq[f].seq.s ,fq[f].seq.s +dotrim[f][0],fq[f].seq.n ); - memmove(fq[f].qual.s,fq[f].qual.s+dotrim[f][0],fq[f].qual.n); - fq[f].seq.s[fq[f].seq.n]='\0'; - fq[f].qual.s[fq[f].qual.n]='\0'; - } - if (nmax > 0) { - if (fq[f].seq.n >= nmax ) { - fq[f].seq.s[nmax]='\0'; - fq[f].qual.s[nmax]='\0'; - } - } - if (avgns[f]>=11 && !evalqual(fq[f],f)) { - skip = 2; // 2==qual - } - } - - if (duplen > 0 && !skip) { - // lookup dupset - for (f=0;!skip&&f=11) { - char t; - if (fq[f].seq.a > duplen) { - // truncate if needed - t = fq[f].seq.s[duplen]; - fq[f].seq.s[duplen] = '\0'; - } - lookup_it = dupset.find(fq[f].seq.s); - if (lookup_it != dupset.end()) { - skip=1; // 1==dup - } else { - if (dupset.size() < dupmax) { - dupset[fq[f].seq.s]=1; - } - } - if (fq[f].seq.a > duplen) { - // restore full length - fq[f].seq.s[duplen] = t; - } - } - } - } - if (!skip) { - for (f=0;f=0); - io_ok=io_ok&&(fputs(fq[f].seq.s,fout[f])>=0); - io_ok=io_ok&&(fputc('\n',fout[f])>=0); - io_ok=io_ok&&(fputs(fq[f].com.s,fout[f])>=0); - io_ok=io_ok&&(fputs(fq[f].qual.s,fout[f])>=0); - io_ok=io_ok&&(fputc('\n',fout[f])>=0); - } - wrec++; - } else { - if (skipb) saveskip(fskip, i_n, fq); - if (skip==2) ++nfiltered; - if (skip==1) ++dupskip; - } - } else { - if (skipb) saveskip(fskip, i_n, fq); - if (hompol_skip) { - ++ntoohompol; - } else if (lowcom_skip) { - ++ntoolowcom; - } else { - ++ntooshort; - } - } - } - - for (i=0;i 0) { - fprintf(fstat, "Mean lowcom score: %2.2f(%2.2f), %2.2f(%2.2f) after\n", - 100*(stat_lowcom_b4_total/(double)stat_lowcom_b4_cnt), 100*stdev(stat_lowcom_b4_cnt,stat_lowcom_b4_total,stat_lowcom_b4_ssq), - 100*(stat_lowcom_total/(double)stat_lowcom_cnt), 100*stdev(stat_lowcom_cnt,stat_lowcom_total,stat_lowcom_ssq) - ); - } - - int f; - if (i_n == 1) { - f=0; - for (e=0;e<2;++e) { - if (cnttrim[f][e]>0) { - fprintf(fstat, "Clipped '%s' reads: Count: %d, Mean: %.2f, Sd: %.2f\n", e==0?"start":"end", cnttrim[f][e], (double) tottrim[f][e] / cnttrim[f][e], stdev(cnttrim[f][e], tottrim[f][e], ssqtrim[f][e])); - } - } - if (trimql[f] > 0) { - fprintf(fstat, "Trimmed %d reads by an average of %.2f bases on quality < %d\n", trimql[f], (float) trimqb[f]/trimql[f], qthr); - } - } else - for (f=0;f0) { - fprintf(fstat, "Clipped '%s' reads (%s): Count %d, Mean: %.2f, Sd: %.2f\n", e==0?"start":"end", ifil[f], cnttrim[f][e], (double) tottrim[f][e] / cnttrim[f][e], stdev(cnttrim[f][e], tottrim[f][e], ssqtrim[f][e])); - } - } - if (trimql[f] > 0) { - fprintf(fstat, "Trimmed %d reads (%s) by an average of %.2f bases on quality < %d\n", trimql[f], ifil[f], (float) trimqb[f]/trimql[f], qthr); - } - } - if (nilv3pf > 0) { - fprintf(fstat, "Filtered %d reads on purity flag\n", nilv3pf); - } - if (skipunclip > 0) { - fprintf(fstat, "Skipped %d unclipped reads\n", skipunclip); - } - if (nerr > 0) { - fprintf(fstat, "Errors (%s): %d\n", ifil[f], nerr); - return 2; - } - if (!io_ok) { - return 3; - } - return 0; -} - -int read_fa(FILE *in, int rno, struct ad *fa) { -// note: this only reads one line of sequence! - fa->nid = getline(&fa->id, &fa->naid, in); - fa->nseq = getline(&fa->seq, &fa->naseq, in); - if (fa->nseq <= 0) - return 0; - if (fa->id[0] != '>') { - fprintf(stderr, "Malformed adapter fasta record at line %d\n", rno*2+1); - return -1; - } - // chomp - fa->seq[--fa->nseq] = '\0'; - fa->id[--fa->nid] = '\0'; - char *p = fa->id+1; - while (*p == ' ') { - ++p; - } - memmove(fa->id, p, strlen(p)+1); - fa->nid=strlen(fa->id); - - // rna 2 dna - int i; - for (i=0;inseq;++i) { - if (fa->seq[i]=='U') fa->seq[i] = 'T'; - } - return 1; -} - -void usage(FILE *f, const char *msg) { - if(msg) - fprintf(f, "%s\n", msg); - - fprintf(f, -"Usage: fastq-mcf [options] [mates1.fq ...] \n" -"Version: %s\n" -"\n" -"Detects levels of adapter presence, computes likelihoods and\n" -"locations (start, end) of the adapters. Removes the adapter\n" -"sequences from the fastq file(s).\n" -"\n" -"Stats go to stderr, unless -o is specified.\n" -"\n" -"Specify -0 to turn off all default settings\n" -"\n" -"If you specify multiple 'paired-end' inputs, then a -o option is\n" -"required for each. IE: -o read1.clip.q -o read2.clip.fq\n" -"\n" -"Options:\n" -" -h This help\n" -" -o FIL Output file (stats to stdout)\n" -" -O N Only output the first N records (all)\n" -" -s N.N Log scale for adapter minimum-length-match (2.2)\n" -" -t N %% occurance threshold before adapter clipping (0.25)\n" -" -m N Minimum clip length, overrides scaled auto (1)\n" -" -p N Maximum adapter difference percentage (10)\n" -" -l N Minimum remaining sequence length (19)\n" -" -L N Maximum remaining sequence length (none)\n" -" -D N Remove duplicate reads : Read_1 has an identical N bases (0)\n" -" -k N sKew percentage-less-than causing cycle removal (2)\n" -" -x N 'N' (Bad read) percentage causing cycle removal (20)\n" -" -q N quality threshold causing base removal (10)\n" -" -w N window-size for quality trimming (1)\n" -" -H remove >95%% homopolymer reads (no)\n" -" -X remove low complexity reads (no)\n" -//" -F FIL remove sequences that align to FIL\n" -" -0 Set all default parameters to zero/do nothing\n" -" -U|u Force disable/enable Illumina PF filtering (auto)\n" -" -P N Phred-scale (auto)\n" -" -R Don't remove N's from the fronts/ends of reads\n" -" -n Don't clip, just output what would be done\n" -" -K Only keep clipped reads\n" -" -S Save all discarded reads to '.skip' files\n" -" -C N Number of reads to use for subsampling (300k)\n" -" -d Output lots of random debugging stuff\n" -"\n" -"Minimum trimming options:\n" -" --min-start-trim NUM Always trim at least NUM bases from start\n" -" --min-end-trim NUM Always trim at least NUM bases from end\n" -"\n" -"Quality adjustment options:\n" -" --cycle-adjust CYC,AMT Adjust cycle CYC (negative = offset from end) by amount AMT\n" -" --phred-adjust SCORE,AMT Adjust score SCORE by amount AMT\n" -" --phred-adjust-max SCORE Adjust scores > SCORE to SCOTE\n" -"\n" -"Filtering options*:\n" -" --[mate-]qual-mean NUM Minimum mean quality score\n" -" --[mate-]qual-gt NUM,THR At least NUM quals > THR\n" -" --[mate-]max-ns NUM Maxmium N-calls in a read (can be a %%)\n" -" --[mate-]min-len NUM Minimum remaining length (same as -l)\n" -" --homopolymer-pct PCT Homopolymer filter percent (95)\n" -" --lowcomplex-pct PCT Complexity filter percent (95)\n" -" --keep-clipped Only keep clipped (same as -K)\n" -" --max-output-reads N Only output first N records (same as -O)\n" -"\n" -"If mate- prefix is used, then applies to second non-barcode read only\n" -/* -"Config:\n" -"\n" -"Some options are best set globally, such as the aligner to use\n" -"for filtering, these can be ENV vars, or in /etc/ea-utils.conf:\n" -"\n" -"Command line options, if specified, always override config vars.\n" -"\n" -"When uses as environment vars, they are all caps, and with\n" -"EAUTILS_ as the prefix (IE: EAUTILS_PHRED=33)\n" -"\n" -" phred (auto)\n" -" sample_reads 100000\n" -" scale_clip_len 2.2\n" -" trim_skew 2\n" -" trim_quality 10\n" -" min_clip_len 0\n" -" min_seq_remain 15\n" -" max_adap_diff 20\n" -//" cmd_align_se bowtie -S %%i -f %%1\n" -//" cmd_align_pe bowtie -S %%i -1 %%1 -2 %%2\n" -//"\n" -//"Command lines must return SAM formatted lines, %%i is the filter FIL,\n" -//"%%1 and %%2 are the first and second fastq's\n" -*/ -"\n" -"Adapter files are 'fasta' formatted:\n" -"\n" -"Specify n/a to turn off adapter clipping, and just use filters\n" -"\n" -"Increasing the scale makes recognition-lengths longer, a scale\n" -"of 100 will force full-length recognition of adapters.\n" -"\n" -"Adapter sequences with _5p in their label will match 'end's,\n" -"and sequences with _3p in their label will match 'start's,\n" -"otherwise the 'end' is auto-determined.\n" -"\n" -"Skew is when one cycle is poor, 'skewed' toward a particular base.\n" -"If any nucleotide is less than the skew percentage, then the\n" -"whole cycle is removed. Disable for methyl-seq, etc.\n" -"\n" -"Set the skew (-k) or N-pct (-x) to 0 to turn it off (should be done\n" -"for miRNA, amplicon and other low-complexity situations!)\n" -"\n" -"Duplicate read filtering is appropriate for assembly tasks, and\n" -"never when read length < expected coverage. -D 50 will use\n" -"4.5GB RAM on 100m DNA reads - be careful. Great for RNA assembly.\n" -"\n" -"*Quality filters are evaluated after clipping/trimming\n" -"\n" -"Homopolymer filtering is a subset of low-complexity, but will not\n" -"be separately tracked unless both are turned on.\n" - ,VERSION); -} - -inline int char2bp(char c) { - if (c == 'A' || c == 'a') return B_A; - if (c == 'C' || c == 'c') return B_C; - if (c == 'G' || c == 'g') return B_G; - if (c == 'T' || c == 't') return B_T; - return B_N; -} - -inline int char2bp_rc(char c) { - if (c == 'A' || c == 'a') return B_T; - if (c == 'C' || c == 'c') return B_G; - if (c == 'G' || c == 'g') return B_C; - if (c == 'T' || c == 't') return B_A; - return B_N; -} - - -inline char bp2char(int b) { - if (b == B_A) return 'A'; - if (b == B_C) return 'C'; - if (b == B_G) return 'G'; - if (b == B_T) return 'T'; - return 'N'; -} - -void saveskip(FILE **fout, int fo_n, struct fq *fq) { - int f; - for (f=0;f qn) w=qn/4; // maximum window is length/4 - int s = i-w/2; // start/end window - int e = i+w/2; - if (s < 0) {e-=s;s=0;} // shift window over if you're past the start - if (e >= qn) {s-=((e-qn)+1);e=qn-1;} // shift window over if you're past the end - int t = 0; - for (i=s;i<=e;++i) { - t+=q[i]; - } - return t / (e-s+1); // mean quality within the window at that position -} - -bool evalqual(struct fq &fq, int file_num) { - int t_mean, t_max_ns, t_xgt_num, t_xgt_min, t_max_n_pct; - - - if (file_num <= 0) { - // applies to file 1 - t_mean=qf_mean; - t_max_ns=qf_max_ns; - t_max_n_pct=qf_max_n_pct; - t_xgt_num=qf_xgt_num; - t_xgt_min=qf_xgt_min; - } else { - // applies to file 2 or greater, only if they are set - t_mean=qf2_mean > 0 ? qf2_mean : qf_mean; - t_max_ns=qf_max_ns > -1 ? qf2_max_ns : qf_max_ns; - t_max_n_pct=qf_max_n_pct > -1 ? qf2_max_n_pct : qf_max_n_pct; - t_xgt_num=qf_xgt_num > 0 ? qf2_xgt_num : qf_xgt_num; - t_xgt_min=qf_xgt_min > 0 ? qf2_xgt_min : qf_xgt_min; - } - - if (t_max_n_pct>=0) { - t_max_ns=max(t_max_ns,(fq.qual.n*100)/t_max_n_pct); - } - - if (t_mean > 0) { - int t = 0; - int i; - for (i=0;i<=fq.qual.n;++i) { - t+=fq.qual.s[i]; - } - if ((t/fq.qual.n-phred) < t_mean) { - return false; - } - } - if (t_max_ns >= 0) { - int t = 0; - int i; - for (i=0;i<=fq.seq.n;++i) { - t+=(fq.seq.s[i]=='N'); - } - -// if (debug > 2) fprintf(stderr,"maxn: max:%d,t:%d,i:%d,id:%s", t_max_ns, t, i, fq.id.s); - - if (t > t_max_ns) { - return false; - } - } - - if (t_xgt_num > 0) { - int t = 0; - int i; - int h = t_xgt_min+phred; - for (i=0;i<=fq.qual.n;++i) { - t+=(fq.qual.s[i]>=h); - } - if (t < t_xgt_num) { - return false; - } - } - return true; -} - -void valid_arg(char opt, const char *arg) { - if (!arg || !*arg || *arg == '-') { - fprintf(stderr,"Option '%c' requires an argument.\n\n", opt); - usage(stderr); - exit(1); - } -} - -bool arg_int_pair(const char *optarg, int &a, int&b) { - if (!strchr(optarg, ',')) { - return false; - } - a=atoi(optarg); - b=atoi(strchr(optarg, ',')+1); -} - -char *arg2cmd(int argc, char** argv) { - char *buf=NULL; - int n = 0; - int k, i; - for (i=1; i seq,((bnode*)b)->seq);}; -static float pickmaxpct=0.10; -void getbcfromheader(struct fq *fqin, struct fq *bc, char **s2=NULL, int *ns2=NULL); -void getbcfromheader(char *s, int *ns, char **q=NULL, char **s2=NULL, int *ns2=NULL); - -int ignore; -size_t ignore_st; - - -int main (int argc, char **argv) { - char c; - bool trim = true; - int mismatch = 1; - int distance = 2; - int poor_distance = 0; // count of skipped reads on distance only - int quality = 0; - char end = '\0'; - char dend = '\0'; - bool dual = false; - char *in[6]; - const char *out[6]; - int f_n=0; - int f_oarg=0; - const char* guide=NULL; // use an indexed-read - const char* list=NULL; // use a barcode master list - char verify='\0'; - bool noexec = false; - bool seqnames = false; - const char *group = NULL; - bool usefile1 = false; - int phred = 33; - double threshfactor = 1; - int bcinheader = 0; - - int i; - bool omode = false; - char *bfil = NULL; - while ( (c = getopt (argc, argv, "-DzxnHhbeosv:m:B:g:L:l:G:q:d:t:")) != -1) { - switch (c) t:{ - case '\1': - if (omode) { - if (f_oarg<5) - out[f_oarg++] = optarg; - else { - usage(stderr); return 1; - } - } else if (!bfil && !guide && !list) - bfil = optarg; - else if (f_n<5) { - in[f_n++] = optarg; - } else { - usage(stderr); return 1; - } - break; - case 'o': omode=true; break; - case 's': seqnames=true; break; - case 'v': - if (strlen(optarg)>1) { - fprintf(stderr, "Option -v requires a single character argument"); - exit(1); - } - verify = *optarg; break; - case 'b': end = 'b'; break; - case 'h': usage(stdout); exit(0); break; - case 'H': bcinheader = 1; usefile1=1; break; - case 'e': end = 'e'; break; - case 'G': group = optarg; break; - case 'g': - guide = optarg; - in[f_n++] = optarg; - out[f_oarg++] = "n/a"; - break; - case 'l': list = optarg; usefile1=0; break; - case 'L': list = optarg; usefile1=1; break; - case 'B': bfil = optarg; list = NULL; break; - case 'x': trim = false; break; - case 'n': noexec = true; break; - case 't': threshfactor = atof(optarg); break; - case 'm': mismatch = atoi(optarg); break; - case 'd': distance = atoi(optarg); break; - case 'q': quality = atoi(optarg); break; - case 'D': ++debug; break; - case '?': - if (strchr("vmBglG", optopt)) - fprintf (stderr, "Option -%c requires an argument.\n", optopt); - else if (isprint(optopt)) - fprintf (stderr, "Unknown option `-%c'.\n", optopt); - else - fprintf (stderr, - "Unknown option character `\\x%x'.\n", - optopt); - usage(stderr); - return 1; - } - } - - if (group && !list) { - fprintf(stderr, "Error: -G only works with -l\n"); - return 1; - } - - if ((list && guide) || (list && bfil) || (guide && bfil)) { - fprintf(stderr, "Error: Only one of -B -g or -l\n"); - return 1; - } - - if (f_n != f_oarg) { - fprintf(stderr, "Error: number of input files (%d) must match number of output files following '-o'.\n", f_n); - return 1; - } - - if (argc < 3 || !f_n || (!bfil && !guide && !list)) { - usage(stderr); - return 1; - } - - quality+=phred; - - FILE *fin[6]; - bool gzin[6]; meminit(gzin); - for (i = 0; i < f_n; ++i) { - fin[i]=gzopen(in[i],"r",&gzin[i]); - } - - // set all to null, zero - meminit(bc); - - - // 3 ways to get barcodes - if (list) { - // use a list of barcode groups... determine the best set, then use the determined set - struct bcg *bcg = (struct bcg *) malloc(sizeof(*bcg) * MAX_GROUP_NUM * MAX_BARCODE_NUM); - if (!bcg) { - fprintf(stderr, "Out of memory\n"); - return 1; - } - memset(bcg, 0, sizeof(*bcg) * MAX_GROUP_NUM * MAX_BARCODE_NUM); - int bgcnt=0; - int b; - FILE *lin = fopen(list, "r"); - if (!lin) { - fprintf(stderr, "Error opening file '%s': %s\n",list, strerror(errno)); - return 1; - } - // read barcode groups - int ok; - - while (bgcnt < (MAX_GROUP_NUM * MAX_BARCODE_NUM) && (ok = read_line(lin, bcg[bgcnt].b.id))) { - if (ok <= 0) break; - if (bcg[bgcnt].b.id.s[0]=='#') continue; - bcg[bgcnt].b.id.s=strtok(bcg[bgcnt].b.id.s, "\t\n\r "); - bcg[bgcnt].b.seq.s=strtok(NULL, "\t\n\r "); - char *g=strtok(NULL, "\n\r"); - if (!g) { - if (bgcnt==0){ - fprintf(stderr,"Barcode guide list needs to be IDSEQUENCEGROUP"); - return 1; - } else { - continue; - } - } - if (group) { - if (strcasecmp(group, g)) { - continue; - } - } - if (!strcmp(bcg[bgcnt].b.seq.s,"seq")) continue; - - // dual indexed indicated by a dash in the sequence... - if (bcg[bgcnt].b.dual=strchr(bcg[bgcnt].b.seq.s,'-')) { - *bcg[bgcnt].b.dual = '\0'; - ++bcg[bgcnt].b.dual; - bcg[bgcnt].b.dual_n = strlen(bcg[bgcnt].b.dual); - } - // group pointer for this group - bcg[bgcnt].gptr = getgroup(g); - bcg[bgcnt].b.id.n=strlen(bcg[bgcnt].b.id.s); - bcg[bgcnt].b.seq.n=strlen(bcg[bgcnt].b.seq.s); - - if (debug) fprintf(stderr, "BCG: %d bc:%s n:%d\n", bgcnt, bcg[bgcnt].b.seq.s, bcg[bgcnt].b.seq.n); - ++bgcnt; - } - - if (!bgcnt) { - fprintf(stderr,"No barcodes %s from guide list %s.\n", group ? "matched" : "read", list); - return 1; - } - - int sampcnt = 200000; - struct stat st; - int fsum[f_n], fmax[f_n]; int bestcnt=0, besti=-1, bestdual=0; - int dfsum[f_n], dfmax[f_n]; int dbestcnt=0, dbesti=-1; - meminit(fsum); meminit(fmax); meminit(dfsum); meminit(dfmax); - - // subsample to determine group to use - for (i=0;i<(usefile1?1:f_n);++i) { - char *s = NULL; size_t na = 0; int nr = 0, ns = 0; - char *q = NULL; size_t nq = 0; - double tots=0, totsq=0; - char *s2 = NULL; int ns2=0; - char *ignore_s=NULL; - - stat(in[i], &st); - - while ((ns=getline(&s, &na, fin[i])) > 0) { - if (*s != '@') { - fprintf(stderr,"Invalid fastq file: %s.\n", in[i]); - exit(1); - } - - if (bcinheader) { - // read in 3 more lines (seq, comment, qual) and ignore them - ignore=getline(&ignore_s, &ignore_st, fin[i]); - ignore=getline(&ignore_s, &ignore_st, fin[i]); - ignore=getline(&ignore_s, &ignore_st, fin[i]); - getbcfromheader(s, &ns, &q, &s2, &ns2); - nq=ns; - } else { - // read in 3 more lines (seq, comment, qual) - if ((ns=getline(&s, &na, fin[i])) <=0) - break; - - ignore=getline(&q, &ignore_st, fin[i]); - nq=getline(&q, &ignore_st, fin[i]); - - s[--ns]='\0'; q[--nq]='\0'; - } - -// skip if quality is below average - if (st.st_size > (sampcnt * 500) && poorqual(i, ns, s, q)) - continue; - - for (b=0;b= bcg[b].b.seq.n && !strcasecmp(s+ns-bcg[b].b.seq.n, bcg[b].b.seq.s)) { - ++bcg[b].ecnt[i]; - } else if (ns > bcg[b].b.seq.n && !strncasecmp(s+ns-bcg[b].b.seq.n-1, bcg[b].b.seq.s, bcg[b].b.seq.n)) { - ++bcg[b].escnt[i]; - } - - if (bcg[b].b.dual) { - const char * t=s; - int nt=ns; - if (bcinheader) { // barcode in header? use stuff after '+' sign - t=s2; - nt=ns2; - } - if (!strncasecmp(t, bcg[b].b.dual, bcg[b].b.dual_n)) { - ++bcg[b].dbcnt[i]; - } - if (ns >= bcg[b].b.dual_n && !strcasecmp(t+nt-bcg[b].b.dual_n, bcg[b].b.dual)) { - ++bcg[b].decnt[i]; - } - } - } - - ++nr; - // got enough reads? - if (nr >= sampcnt) - break; - } - - for (b=0;b fmax[i]) - fmax[i]=hcnt; - - if (fsum[i] > bestcnt) { - if (debug > 1) - fprintf(stderr,"file %d(%s), bcg: %s, file-sum: %d, bestsum: %d\n", i, in[i], bcg[b].gptr->id, fsum[i], bestcnt); - - bestcnt=fsum[i]; - besti=i; - bestdual=(bcg[b].b.dual!=NULL); - } - - if (debug > 1) - fprintf(stderr,"dual %d(%s), bcg: %s, file-sum: %d, bestsum: %d\n", i, in[i], bcg[b].gptr->id, dfsum[i], dbestcnt); - - if (bcg[b].b.dual) { - // highest count - int dcnt = (int) (max(bcg[b].dbcnt[i],bcg[b].decnt[i]) * log(bcg[b].b.dual_n)); - dfsum[i]+=dcnt; - if (dcnt > dfmax[i]) - dfmax[i]=dcnt; - if (dfsum[i] > dbestcnt) { - if (debug > 1) - fprintf(stderr,"dual %d(%s), bcg: %s, file-sum: %d, bestsum: %d\n", i, in[i], bcg[b].gptr->id, dfsum[i], dbestcnt); - dbestcnt=dfsum[i]; - dbesti=i; - } - } - } - if (debug > 0) fprintf(stderr,"file-best %d sum:%d, max:%d\n", besti, fsum[besti], fmax[besti]); - if (debug > 0 && bestdual) fprintf(stderr,"dual file-best %d sum:%d, max:%d\n", dbesti, dfsum[dbesti], dfmax[dbesti]); - } - - // chosen file is "besti" - i=usefile1?0:besti; - - int gmax=0, gindex=-1, scnt = 0, ecnt=0, dscnt = 0, decnt = 0; - int thresh = (int) (pickmaxpct*fmax[i]); - - if (debug > 0) fprintf(stderr,"besti: %d thresh: %d, dual: %d\n", besti, thresh, bestdual); - for (b=0;b 1) fprintf(stderr,"cnt: %s %s hc:%d bc:%d ec: %d\n", bcg[b].b.id.s, bcg[b].b.seq.s, hcnt, bcg[b].bcnt[i], bcg[b].ecnt[i]); - if (hcnt >= thresh) { - // increase group count - bcg[b].gptr->tcnt += hcnt; - if (bcg[b].gptr->tcnt > gmax) { - gindex=bcg[b].gptr->i; - gmax=bcg[b].gptr->tcnt; - } - } - } - if (gindex == -1) { - fprintf(stderr, "Unable to determine barcode group\n"); - exit(1); - } -// printf("gmax: %d, gindex %d, %s, thresh: %d\n", gmax, gindex, grs[gindex].id, thresh); - - for (b=0;bi == gindex) { - if (bcg[b].bcnt[i] > bcg[b].ecnt[i]) { - scnt+=bcg[b].dbcnt[i]; - } else if (bcg[b].bcnt[i] < bcg[b].ecnt[i]) { - ecnt+=bcg[b].decnt[i]; - } - if (bcg[b].dbcnt[dbesti] > bcg[b].decnt[dbesti]) { - dscnt+=bcg[b].dbcnt[dbesti]; - } else if (bcg[b].dbcnt[dbesti] < bcg[b].decnt[dbesti]) { - decnt+=bcg[b].decnt[dbesti]; - } - } - }; - end = scnt >= ecnt ? 'b' : 'e'; - - if (debug) fprintf(stderr,"scnt: %d, ecnt, %d, end: %c\n", scnt, ecnt, end); - - thresh/=threshfactor; - if (bestdual) - thresh/=5; - - // since this is a known good set, use a very low threshold, just to catch them all - fprintf(stderr, "Using Barcode Group: %s on File: %s (%s), Threshold %2.2f%%\n", - grs[gindex].id, in[i], endstr(end), 100.0 * (float) ((float)thresh/THFIXFACTOR)/sampcnt); - - if (bestdual) { - dend = dscnt >= decnt ? 'b' : 'e'; - fprintf(stderr, "Dual index on File: %s (%s)\n", in[dbesti], endstr(dend)); - dual=true; - for (b=0;bi == gindex) { - if (bcg[b].decnt[dbesti] < bcg[b].ecnt[i]) - bcg[b].ecnt[i] = bcg[b].decnt[dbesti]; - if (bcg[b].dbcnt[dbesti] < bcg[b].bcnt[i]) - bcg[b].bcnt[i] = bcg[b].dbcnt[dbesti]; - } - } - } - - for (b=0;bi == gindex) { - int cnt = (end == 'e' ? (bcg[b].ecnt[i]+bcg[b].escnt[i]) : ( bcg[b].bcnt[i] + bcg[b].bscnt[i] )); - if (cnt > thresh/THFIXFACTOR) { - // count exceeds threshold... use it - bc[bcnt]=bcg[b].b; - if ((end == 'e' && (bcg[b].escnt[i] < 1.2*bcg[b].ecnt[i])) || - (end == 'b' && (bcg[b].bscnt[i] < 1.2*bcg[b].bcnt[i])) - ) { - if (!dual) - fprintf(stderr, "Using Barcode %s (%s)\n", bcg[b].b.id.s, bcg[b].b.seq.s); - - if (debug) fprintf(stderr, "Debug Barcode %s (%s-%s) ... ecnt:%d, escnt:%d,bcnt:%d, bscnt:%d\n", bcg[b].b.id.s, bcg[b].b.seq.s, bcg[b].b.dual, bcg[b].ecnt[i], bcg[b].escnt[i], bcg[b].bcnt[i], bcg[b].bscnt[i]); - - } else { - bc[bcnt].shifted=1; - - if (!dual) - fprintf(stderr, "Using Barcode %s (%s) shifted\n", bcg[b].b.id.s, bcg[b].b.seq.s); - - if (debug) printf("Debug Barcode %s (%s-%s) shifted ... ecnt:%d, escnt:%d,bcnt:%d, bscnt:%d\n", bcg[b].b.id.s, bcg[b].b.seq.s, bcg[b].b.dual, bcg[b].ecnt[i], bcg[b].escnt[i], bcg[b].bcnt[i], bcg[b].bscnt[i]); - } - ++bcnt; - } - } - } - - if (i != 0) { - // in[0] needs to be the guide file - FILE *f = fin[0]; - char *n = in[0]; - const char *o = out[0]; - bool gzi = gzin[0]; - fin[0]=fin[i]; - in[0]=in[i]; - out[0]=out[i]; - gzin[0]=gzin[i]; - fin[i]=f; - in[i]=n; - out[i]=o; - gzin[i]=gzi; - // swap file in to position 1 if dual - if (dual && dbesti != 1) { - FILE *f = fin[1]; - char *n = in[1]; - const char *o = out[1]; - bool gzi = gzin[1]; - fin[1]=fin[dbesti]; - in[1]=in[dbesti]; - out[1]=out[dbesti]; - gzin[1]=gzin[dbesti]; - fin[dbesti]=f; - in[dbesti]=n; - out[dbesti]=o; - gzin[dbesti]=gzi; - } - } - if (bcg) free(bcg); - } else if (guide) { - // use the first file as a "guide file" ... and select a set of codes from that - FILE *gin = fin[0]; - - int blen = 0; - - int sampcnt = 100000; - struct stat st; - stat(guide, &st); - - char *s = NULL; size_t na = 0; int nr = 0, ns = 0; - char *q = NULL; size_t nq = 0; - -// small sample to get lengths - double tots=0, totsq=0; - while ((ns=getline(&s, &na, gin)) > 0) { - if (*s != '@') { - fprintf(stderr,"Invalid fastq file: %s.\n", in[0]); - exit(1); - } - - if (bcinheader) { - ignore=getline(&q, &ignore_st, fin[i]); - ignore=getline(&q, &ignore_st, fin[i]); - ignore=getline(&q, &ignore_st, fin[i]); - /// no dual barcode detection allowed - getbcfromheader(s, &ns); - printf("bc is %s\n", s); - } else { - if ((ns=getline(&s, &na, gin)) <=0) - break; - ignore=getline(&q, &ignore_st, gin); - ignore=getline(&q, &ignore_st, gin); - } - - --ns; - tots+=ns; - totsq+=ns*ns; - ++nr; - if (nr >= 200) break; - } - double dev = stdev(nr, tots, totsq); - - // short, and nonvarying (by much, depends on the tech used) - if (dev < .25 && roundl(tots/nr) < 12) { - // most probably a barcode-only read - blen = (int) round(tots/nr); - end = 'b'; - } else if (round(tots/nr) < 12) { - fprintf(stderr, "File %s looks to be barcode-only, but it's length deviation is too high (%.4g)\n", in[0], dev); - return 1; - } else { - fprintf(stderr, "File %s isn't a barcode-only file, try using -l instead\n", in[0]); - return 1; - } - - fprintf(stderr, "Barcode length used: %d (%s)\n", blen, endstr(end)); - - // load a table of possble codes - pickmax=0; - picktab=NULL; - bnode * ent = NULL; - while ((ns=getline(&s, &na, gin)) > 0) { - if (*s != '@') { - fprintf(stderr,"Invalid fastq file: %s.\n", in[i]); - exit(1); - } - - if (bcinheader) { - ignore=getline(&q, &ignore_st, fin[i]); - ignore=getline(&q, &ignore_st, fin[i]); - ignore=getline(&q, &ignore_st, fin[i]); - getbcfromheader(s, &ns, &q); - printf("bc is %s\n", s); - } else { - if ((ns=getline(&s, &na, gin)) <=0) - break; - - ignore=getline(&q, &ignore_st, gin); - if (getline(&q, &ignore_st, gin) != ns) - break; - s[--ns]='\0'; q[ns]='\0'; - } - - if (st.st_size > (sampcnt * 500) && poorqual(i, ns, s, q)) - continue; - - ++nr; - - char *p; - if (end == 'b') { - p=s; - } else { - p=s+nr-blen; - } - p[blen]='\0'; - if (!ent) { // make a new ent - ent = (bnode *) malloc(sizeof(*ent)); - ent->seq=(char*)malloc(blen+1);; - } - - if (strchr(p, 'N')||strchr(p, 'n')) - continue; - - ent->cnt=0; - strcpy(ent->seq, p); - - bnode *fent = * (bnode**) tsearch(ent, &picktab, bnodecomp); - - if (fent == ent) // used the ent, added to tree - ent = NULL; // need a new one - - ++fent->cnt; - - if (fent->cnt > pickmax) - pickmax=fent->cnt; - else if (fent->cnt > pickmax2) - pickmax2=fent->cnt; - - if (nr > sampcnt) - break; - } - pickmax=max(1,(int)(pickmaxpct*pickmax2)); - fprintf(stderr, "Threshold used: %d\n", pickmax); - twalk(picktab, pickbest); - } else { - // user specifies a list of barcodes, indexed read is f[0] and f[1] if dual - FILE *bin = fopen(bfil, "r"); - if (!bin) { - fprintf(stderr, "Error opening file '%s': %s\n",bfil, strerror(errno)); - return 1; - } - - bcnt = 0; - int ok; - while (bcnt < MAX_BARCODE_NUM && (ok = read_line(bin, bc[bcnt].id))) { - if (ok <= 0) break; - if (bc[bcnt].id.s[0]=='#') continue; - bc[bcnt].id.s=strtok(bc[bcnt].id.s, "\t\n\r "); - bc[bcnt].seq.s=strtok(NULL, "\t\n\r "); - if (!bc[bcnt].seq.s) { - fprintf(stderr, "Barcode file '%s' required format is 'ID SEQ'\n",bfil); - return 1; - } - if (bc[bcnt].dual=strchr(bc[bcnt].seq.s,'-')) { - *bc[bcnt].dual = '\0'; - ++bc[bcnt].dual; - bc[bcnt].dual_n = strlen(bc[bcnt].dual); - dual=true; - } - bc[bcnt].id.n=strlen(bc[bcnt].id.s); - bc[bcnt].seq.n=strlen(bc[bcnt].seq.s); - if (debug) fprintf(stderr, "BC: %d bc:%s n:%d\n", bcnt, bc[bcnt].seq.s, bc[bcnt].seq.n); - ++bcnt; - } - - fprintf(stderr, "Using Barcode File: %s\n", bfil); - } - - if (noexec) { - int b; - for (b=0;b (sampcnt * 500) && poorqual(0, fq[0].seq.n, fq[0].seq.s, fq[0].qual.s)) - continue; - - if (dual) - if (st.st_size > (sampcnt * 500) && poorqual(1, fq[1].seq.n, fq[1].seq.s, fq[1].qual.s)) - continue; - - for (i=0;i 1) fprintf(stderr, "check %s vs %s: %s vs %s", fq[0].id.s, bc[i].id.s, fq[0].seq.s, bc[i].seq.s); - if (!strncmp(fq[0].seq.s, bc[i].seq.s, bc[i].seq.n)) { - ++nb; - ++dok; - } else if (!strncmp(fq[0].seq.s+fq[0].seq.n-bc[i].seq.n, bc[i].seq.s, bc[i].seq.n)) { - ++ne; - ++dok; - } - if (dual) { - if (debug > 1) fprintf(stderr, ", dual: %s vs %s, ", fq[1].seq.s, bc[i].dual); - if (!strncmp(fq[1].seq.s, bc[i].dual, bc[i].dual_n)) { - ++dnb; - ++dok; - } else if (!strncmp(fq[1].seq.s+fq[1].seq.n-bc[i].dual_n, bc[i].dual, bc[i].dual_n)) { - ++dne; - ++dok; - } - } - if (debug > 1) fprintf(stderr, ", dok:%d, i:%d\n", dok, i); - if (dok == 2) { - ++recount[i]; - ++tcount; - break; - } - } - - if (nr >= sampcnt) - break; - } - - end = (ne > nb) ? 'e' : 'b'; - fprintf(stderr, "End used: %s\n", endstr(end)); - - if (dual && list) { - // trim down possiblities to reduce number of open files, and small stub files - dend = (dne > dnb) ? 'e' : 'b'; - fprintf(stderr, "Dual-end used: %s\n", endstr(dend)); - int ocnt = bcnt; - // this should allow up to a 300 plex - int thresh = max(1,tcount/1000); - thresh /= threshfactor; - bcnt=0; - if (debug) - fprintf(stderr, "dual resample threshold: %d out of %d\n", thresh, tcount); - for (i=0;i= thresh) { - fprintf(stderr, "Using Barcode %s (%s-%s)\n", bc[i].id.s, bc[i].seq.s, bc[i].dual); - if (debug) - fprintf(stderr, "%d >= %d\n", recount[i], thresh); - bc[bcnt].seq=bc[i].seq; - bc[bcnt].id=bc[i].id; - bc[bcnt].dual=bc[i].dual; - bc[bcnt].dual_n=bc[i].dual_n; - ++bcnt; - } else { - if (debug) - fprintf(stderr, "skipping barcode %s (%s-%s), %d < %d\n", bc[i].id.s, bc[i].seq.s, bc[i].dual, recount[i], thresh); - } - } - } - } - - if (bcnt == 0) { - fprintf(stderr, "No barcodes defined, quitting.\n"); - exit(1); - } - - // one beyond barcode count is unmatched - bc[bcnt].id.s=(char *)"unmatched"; - - // TODO: output barcode read ...but only for unmatched? - int b; - for (b=0;b<=bcnt;++b) { - size_t nameseq_len = strlen(bc[b].id.s); - if ((b < bcnt) && seqnames) { - nameseq_len = strlen(bc[b].seq.s); - if (bc[b].dual) - nameseq_len += bc[b].dual_n + 1; - } - - for (i=0;i=0;--i) { - fq[i+(dual?2:1)]=fq[i]; - } - meminit(fq[0]); - if (dual) { - meminit(fq[1]); - getbcfromheader(&fq[2], &fq[0], &fq[1].seq.s, &fq[1].seq.n); - } else { - getbcfromheader(&fq[2], &fq[0]); - } - } - - if (debug) { - if (!bcinheader) fq[0].id.s[fq[0].id.n-1] = '\0'; - fprintf(stderr, "id: %s, seq: %s %d", fq[0].id.s, fq[0].seq.s, fq[0].seq.n); - if (dual) fprintf(stderr, ", sdual: %s %d", fq[1].seq.s, fq[1].seq.n); - if (!bcinheader) fq[0].id.s[fq[0].id.n] = '\n'; - if (debug > 1) printf("\n"); - } - - if (quality > 0) { - // low quality base = 'N' - for (i=0;i bc[i].seq.n) { - d=hd(fq[0].seq.s+fq[0].seq.n-bc[i].seq.n-1, bc[i].seq.s, bc[i].seq.n); - } else { - d=bc[i].seq.n; - } - } else { - if (fq[0].seq.n >= bc[i].seq.n) { - d=hd(fq[0].seq.s+fq[0].seq.n-bc[i].seq.n, bc[i].seq.s, bc[i].seq.n); - } else { - d=bc[i].seq.n; - } - } - - if (dual) { - // distance is added in for duals - if (fq[1].seq.n >= bc[i].dual_n) { - d+=hd(fq[1].seq.s+fq[1].seq.n-bc[i].dual_n, bc[i].dual, bc[i].dual_n); - } else { - d+=bc[i].dual_n; - } - } - } else { - if (bc[i].shifted) - d=hd(fq[0].seq.s+1,bc[i].seq.s, bc[i].seq.n); - else - d=hd(fq[0].seq.s,bc[i].seq.s, bc[i].seq.n); - - // distance is added in for duals - if (dual) - d+=hd(fq[1].seq.s,bc[i].dual, bc[i].dual_n); - - // if (debug > 1) { - // fprintf(stderr, "index: %d dist: %d bc:%s n:%d", i, d, bc[i].seq.s, bc[i].seq.n); - // if (dual) fprintf(stderr, ", idual: %s %d", bc[i].dual, bc[i].dual_n); - // fprintf(stderr, "\n"); - // } - } - // simple... - if (d < bestd) { - next_best=bestd; - bestd=d; - if (debug > 1) fprintf(stderr,"next_dist: %d, best_seq: %s:%d\n", next_best, bc[i].seq.s, bestd); - } - // if exact match - if (d==0) { - if (debug) fprintf(stderr, ", found bc: %d bc:%s n:%d, bestd: %d, next_best: %d", i, bc[i].seq.s, bc[i].seq.n, bestd, next_best); - best=i; - break; - } else if (d <= mismatch) { - // if ok match - if (d == bestmm) { - best=-1; // more than 1 match... bad - } else if (d < bestmm) { - bestmm=d; // best match...ok - best=i; - } - } - } - - if ((best >= 0) && distance && (next_best-bestd) < distance) { - if (debug) fprintf(stderr, "%d<%d, skipping", next_best-bestd, distance); - // match is ok, but distance is poor - ++poor_distance; - best=-1; - } - - bool trimmed = false; - // only trim if you're outputting the sequence - if (trim && best >= 0 && bc[best].fout[0]) { - // todo: save trimmed - trimmed = true; - int len=bc[best].seq.n; - if (end =='b') { - memmove(fq[0].seq.s, fq[0].seq.s+len, fq[0].seq.n-len); - memmove(fq[0].qual.s, fq[0].qual.s+len, fq[0].seq.n-len); - } - fq[0].seq.s[fq[0].seq.n-len]='\0'; - fq[0].qual.s[fq[0].qual.n-len]='\0'; - } - - if (best < 0) { - // shuttle to unmatched file - best=bcnt; - } - - if (debug) fprintf(stderr, ", best: %d %s\n", best, bc[best].id.s); - - ++bc[best].cnt; - - int shift_index=0; - if (bcinheader) { - shift_index = 1; - if (dual) - shift_index = 2; - } - - for (i=shift_index;i 0) - fprintf(stderr, "Skipped because of distance < %d : %d\n", distance, poor_distance); - - if (!io_ok) - fprintf(stderr, "Returning error because of i/o error during file close\n"); - - int j; - printf("Id\tCount\tFile(s)\n"); - uint64_t tot=0; - for (i=0;i<=bcnt;++i) { - printf("%s\t%lu", bc[i].id.s, bc[i].cnt); - tot+=bc[i].cnt; - for (j=0;j= MAX_GROUP_NUM) { - fprintf(stderr,"Too many barcode groups, quitting\n"); - exit(1); - } - grs[grcnt].id=(char *)malloc(strlen(s)+1); - strcpy(grs[grcnt].id,s); - grs[grcnt].tcnt=0; - grs[grcnt].i=grcnt; - return &grs[grcnt++]; -} - -void pickbest(const void *nodep, const VISIT which, const int depth) -{ - if (which==endorder || which==leaf) { - bnode *ent = *(bnode **) nodep; -// printf("HERE!! %s, %d, %d\n", ent->seq, ent->cnt, pickmax); - // allow one sample to be as much as 1/10 another, possibly too conservative - if (ent->cnt > pickmax && bcnt < MAX_BARCODE_NUM) { - bc[bcnt].seq.s=ent->seq; - bc[bcnt].id.s=ent->seq; - bc[bcnt].id.n=strlen(bc[bcnt].id.s); - bc[bcnt].seq.n=strlen(bc[bcnt].seq.s); - ++bcnt; - } else { - //free(ent->seq); - } - //free(ent); - //tdelete((void*)ent, &picktab, scompare); - } -} - -void usage(FILE *f) { - fprintf(f, -"Usage: fastq-multx [-g|-l|-B] -o r1.%%.fq [mate.fq -o r2.%%.fq] ...\n" -"Version: %s\n" -"\n" -"Output files must contain a '%%' sign which is replaced with the barcode id in the barcodes file.\n" -"Output file can be n/a to discard the corresponding data (use this for the barcode read)\n" -"\n" -"Barcodes file (-B) looks like this:\n" -"\n" -" \n" -" ...\n" -"\n" -"Default is to guess the -bol or -eol based on clear stats.\n" -"\n" -"If -g is used, then it's parameter is an index lane, and frequently occuring sequences are used.\n" -"\n" -"If -l is used then all barcodes in the file are tried, and the *group* with the *most* matches is chosen.\n" -"\n" -"Grouped barcodes file (-l or -L) looks like this:\n" -"\n" -" \n" -" \n" -" ...\n" -"\n" -"Mated reads, if supplied, are kept in-sync\n" -"\n" -"Options:\n" -"\n" -"-o FIL1 Output files (one per input, required)\n" -"-g SEQFIL Determine barcodes from the indexed read SEQFIL\n" -"-l BCFIL Determine barcodes from any read, using BCFIL as a master list\n" -"-L BCFIL Determine barcodes from , using BCFIL as a master list\n" -"-B BCFIL Use barcodes from BCFIL, no determination step, codes in \n" -"-H Use barcodes from illumina's header, instead of a read\n" -"-s Substitute barcode sequence instead of barcode label into output file names\n" -"-b Force beginning of line (5') for barcode matching\n" -"-e Force end of line (3') for batcode matching\n" -"-t NUM Divide threshold for auto-determine by factor NUM (1), > 1 = more sensitive\n" -"-G NAME Use group(s) matching NAME only\n" -"-x Don't trim barcodes off before writing out destination\n" -"-n Don't execute, just print likely barcode list\n" -"-v C Verify that mated id's match up to character C (Use ' ' for illumina)\n" -"-m N Allow up to N mismatches, as long as they are unique (1)\n" -"-d N Require a minimum distance of N between the best and next best (2)\n" -"-q N Require a minimum phred quality of N to accept a barcode base (0)\n" - ,VERSION); -} - -void getbcfromheader(struct fq *fq, struct fq *bc, char **s2, int *ns2) { - // reallocate bc to match fq - // warning... result has no newline! - - // copy id to sequence - bc->seq.s=(char *)realloc(bc->seq.s,fq->id.n+1); - strncpy(bc->seq.s,fq->id.s,fq->id.n+1); - bc->seq.n=fq->id.n; - bc->seq.a=fq->id.n+1; - - - // this extracts the new sequence - getbcfromheader(bc->seq.s, &(bc->seq.n), &(bc->qual.s), s2, ns2); - bc->qual.n=bc->seq.n; - -//printf("DEBUG: seq is %s, length is %d\n", bc->seq.s, bc->seq.n); -} - -// looks for barcode in s, totally replaces s with barcode only, sets ns to length -void getbcfromheader(char *s, int *ns, char **q, char **s2, int *ns2) { - char *p=strchr(s, ' '); - if (!p) { - fprintf(stderr,"Barcode not in header: %s.\n", s); - exit(1); - } - - char *t; - while(t=strchr(p,':')) { - p=t+1; - } - - // remove newline - if (s[*ns-1] == '\n') { - if (s[*ns-1] == '\r') { - --*ns; - } - --*ns; - s[*ns]='\0'; - } - - // result has no newline - *ns-=(p-s); - memmove(s,p,*ns); - s[*ns]='\0'; - - if (q) { - *q=(char*)realloc(*q,(*ns)+1); - memset(*q,'h',*ns); - (*q)[*ns]='\0'; - } - - if (p=strchr(s,'+')) { - *p='\0'; - *ns = p-s; - - if (ns2) { - *ns2=(*ns-((int)(p-s))-1); - *s2=p+1; - } else { - // ERROR: maybe die here? Or assume the user knows what's up? - } - } -} - diff --git a/clipper/fastq-stats.cpp b/clipper/fastq-stats.cpp deleted file mode 100644 index d0f5f31..0000000 --- a/clipper/fastq-stats.cpp +++ /dev/null @@ -1,674 +0,0 @@ -/* -Copyright (c) 2011 Expression Analysis / Gunjan Hariani, Erik Aronesty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -$Id$ -*/ -const char * VERSION = "1.01 $Id$"; - -#include -#include - -void usage( FILE * f ) { - fprintf( f, - "\nUsage: fastq-stats [options] \n\n" - "Version: %s\n" - "\n" - "Produces lots of easily digested statistics for the files listed\n" - "\n" - "Options\n" - "\n" - "-c cyclemax: max cycles for which following quality stats are produced [35]\n" - "-w INT window: max window size for generating duplicate read statistics [2000000]\n" - "-d debug: prints out debug statements\n" - "-D don't do duplicate read statistics\n" - "-s INT number of top duplicate reads to display\n" - "-x FIL output fastx statistics (requires an output filename)\n" - "-b FIL output base breakdown by per phred quality at every cycle.\n" - " It sets cylemax to longest read length\n" - "-L FIL Output length counts \n\n" - - "\n" - "The following data are printed to stdout:\n" "\n" - " reads : #reads in the fastq file\n" - " len : read length. mean and stdev are provided for variable read lengths\n" - " phred : phred scale used\n" - " window-size : Number of reads used to generate duplicate read statistics\n" - " cycle-max : Number of bases to assess for duplicity\n" - " dups : Number of reads that are duplicates\n" - " %%dup : Pct reads that are duplcate\n" - " unique-dup seq : Number sequences that are duplicated\n" - " min dup count : Smallest duplicate tally for any duplicate sequence\n" - " dup seq \n" - " : Lists top 10 most frequent duplicate reads along with count mean and stdev\n" - " qual : Base Quality min, max and mean\n" - " %%A,%%T,%%C,%%G : base percentages\n" - " total bases : total number of bases\n" - "\n" - ,VERSION); - -} //end usage function - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // or sparse_hash_set, dense_hash_map, ... -#include -#include "fastq-lib.h" -#include "gcModel.h" - -using namespace std; - -#define T_A 0 -#define T_C 2 -#define T_G 6 -#define T_T 19 -#define roundgt0(x) (long)(x+0.5) - -class ent { -public: - std::string seq; - int cnt; - - ent(const std::string &s, int c) { seq=s; cnt=c; }; - static bool comp_cnt (const ent &a, const ent &b) { - return a.cnt > b.cnt; - }; - -}; - -class countPerCycle { - public: - int basecount[26]; - int qc; - double qsum; - //vector qual; - int counts_by_qual[127]; - int qmin; - int qmax; - - countPerCycle() { - //26 english alphabets for A/C/G/T char - for(int i=0; i<26; i++) { - basecount[i]=0; - } - for(int i=0; i<127; i++) { - counts_by_qual[i] = 0; - } - qc = 0; - qsum = 0; - qmin = 10000; - qmax = 0; - }; -}; - -class count_perCycle_perQual { - public: - int counts_by_qual[127]; - - count_perCycle_perQual() { - for(int i=0; i<127; i++) { - counts_by_qual[i] = 0; - } - }; -}; - - -void usage( FILE * f ); -double std_dev( double count , double total, double sqsum ); -double quantile( const std::vector & vec, double p ); -double quantiles_with_counts(int* v, int start, int end, double p, bool dbug); -std::string string_format( const std::string &fmt, ... ); - -extern int optind; -bool nodup = 0; -google::sparse_hash_map dups; - -vector dup_reads; // do i need this - -int window = 2000000; -int cyclemax = 35; -int gcCyclemax = 100; // to compare with fastqc, seq is rounded to nearest 100 to reduce # of gc models; for < 200 length, this is teh same as max=100 -float gcSum; -uint64_t gcTotal; - -int show_max = 10; -bool debug = 0; -bool fastx = 0; -char *fastx_outfile = NULL; -bool brkdown = 0; -char *brkdown_outfile = NULL; -bool len_hist = 0; -vector vlen; //all read lengths -char *lenhist_outfile = NULL; -bool gc = 0; -char *gc_outfile = NULL; - -int main( int argc, char**argv ) { - - int index; - char c; - optind = 0; - char *filename = NULL; - -// bad change to working syntax... breaks things! -// if(argc < 2) {usage(stdout); return 0;} - - while ( (c = getopt (argc, argv, "?DdL:g:x:b:c:w:s:h")) != -1) { - switch (c) { - case 'c': cyclemax = atoi(optarg); break; - case 'D': ++nodup; break; - case 'd': ++debug; break; - case 'w': window = atoi(optarg); break; - case 's': show_max = atoi(optarg); break; - case 'x': fastx_outfile = optarg; ++fastx; break; - case 'b': brkdown_outfile = optarg; ++brkdown; break; - case 'L': ++len_hist; lenhist_outfile = optarg; break; - case 'g': gc_outfile = optarg; ++gc; break; - case 'h': usage(stdout); return 0; - case '?': - if (!optopt) { - usage(stdout); return 0; - } else if(optopt && strchr("gbxcws", optopt)) { - // fprintf(stderr, "Option -%c requires an argument.\n", optopt); - } else { - // fprintf (stderr, "Unknown option \n", optopt); - } - usage(stderr); - return 1; - } - } - - filename = argv[optind]; - - int lenmax = 0; - int lenmin = 100000000; - double lensum = 0; - double lenssq = 0; - double nbase = 0; - int qualmax = 0; - int qualmin = 100000; - double qualsum = 0; - double qualssq = 0; - int errs = 0; - long long nreads = 0; - int ndups = 0; - double dupss = 0; - bool fixlen = 0; //is fixed length - FILE *file; - struct fq newFq; meminit(newFq); - bool isgz; - vector qcStats (1); - vector qcStats_by_qual (1); - int phred = 64; - double ACGTN_count[26]; - double total_bases = 0; - - - for(int i=0; i<26; i++) { - ACGTN_count[i] = 0; - } - dups.set_deleted_key("<>"); - - if(debug) { - cout << endl; - cout << "Parameters: " << endl; - printf("cyclemax: %d, window: %d, nodup: %d, debug: %d, showmax: %d, fastx: %d, outfile: %s, breakdown: %s, gc: %s\n", - cyclemax, window, nodup, debug, show_max, fastx, fastx_outfile, brkdown_outfile, gc_outfile); - cout << endl; - } - - if(gc) { - gcInit(gcCyclemax); - } - - //read file - file = filename ? gzopen(filename,"r",&isgz) : stdin; - while(read_fq(file,nreads++,&newFq)) { - - if(newFq.seq.n != newFq.qual.n) { - errs++; - } - - if(nreads == 10000) { - if(!std_dev((double)nreads,lensum,lenssq)) { - fixlen = 1; - } - } - - total_bases += newFq.seq.n; - if(len_hist) { - if(newFq.seq.n > vlen.size()) - vlen.resize(newFq.seq.n+1); - ++vlen[newFq.seq.n]; - } - - if(!fixlen) { - if(newFq.seq.n > lenmax) { - lenmax = newFq.seq.n; - } - if(newFq.seq.n < lenmin) { - lenmin = newFq.seq.n; - } - lensum += newFq.seq.n; - lenssq += newFq.seq.n*newFq.seq.n; - } - - - if((newFq.seq.n > qcStats.size()) && (fastx)) { - qcStats.resize(newFq.seq.n,countPerCycle()); - - } - - if((newFq.seq.n > qcStats_by_qual.size()) && (brkdown) && (!fastx)) { - qcStats_by_qual.resize(newFq.seq.n,count_perCycle_perQual()); - } - - int gcTally = 0; - //compute quality stats for the first cyclemax bases - for(int i=0; i < newFq.seq.n; i++) { - int ascii_val = (int) newFq.qual.s[i]; - if(fastx && ((nreads < window) || (nreads%10 == 0))) { - qcStats[i].qc++; - qcStats[i].counts_by_qual[ascii_val]++; - qcStats[i].qsum += ascii_val; - qcStats[i].basecount[(toupper(newFq.seq.s[i])-65)]++; - if(ascii_val < qcStats[i].qmin) { - qcStats[i].qmin = ascii_val; - } - if(ascii_val > qcStats[i].qmax) { - qcStats[i].qmax = ascii_val; - } - } - if(brkdown && (!fastx) && ((nreads < window) || (nreads%10 == 0))) { - qcStats_by_qual[i].counts_by_qual[ascii_val]++; - } - - if (i < cyclemax) { - nbase++; - - if(ascii_val > qualmax) { - qualmax = ascii_val; - } - if(ascii_val < qualmin) { - qualmin = ascii_val; - } - qualsum += ascii_val; - qualssq += ascii_val*ascii_val; - - ACGTN_count[(toupper(newFq.seq.s[i])-65)]++; - } - - if (gc && i < gcCyclemax) { - if(toupper(newFq.seq.s[i]) == 'G' || toupper(newFq.seq.s[i]) == 'C') { - gcTally++; - } - } - } - if(gc) { - int gcReadLength = newFq.seq.n > gcCyclemax? gcCyclemax : newFq.seq.n; - gcProcessSequence(gcReadLength, gcTally); - gcSum += (float)( gcTally )/gcReadLength; - gcTotal++; - } - - if(!nodup) {//if you want to look at duplicate counts - if(newFq.seq.n > cyclemax) { - newFq.seq.s[cyclemax] = '\0'; - newFq.seq.n = cyclemax; - } - - if(nreads < window) { - dups[newFq.seq.s]++; - } else { - if(dups.find(newFq.seq.s) != dups.end()) { - dups[newFq.seq.s]++; - }//make sure the element already exists in the key - - if(nreads==window) { - google::sparse_hash_map::iterator it = dups.begin(); - while(it != dups.end()) { - if((*it).second <= 1) { - dups.erase(it); - } - it++; - } //end while loop - } - }//if nreads > window - } //end if you want to look for dups - - } //end reading all fastq reads - - nreads--; - - int inputReadError = gzclose(file, isgz); - - - if(gc) { - FILE *myfile; - myfile = fopen(gc_outfile, "w"); - gcPrintDistribution(myfile); - gcClose(); - } - - std::vector dup_sort; - google::sparse_hash_map::iterator it = dups.begin(); - while(it != dups.end()) { - if((*it).second > 1) { - ent e((*it).first,(*it).second); - //printf("seq: %s dups:%d\n", e.seq.c_str(), e.cnt); - dup_sort.push_back(e); - ndups += (*it).second; - dupss += (*it).second*(*it).second; - } - it++; - } //end while loop - dups.clear(); - - std::sort(dup_sort.begin(),dup_sort.end(),ent::comp_cnt); - - if(nreads < window) { - window = nreads; - } - - if(nreads < 1) { - cout << "No reads in " << filename << ", not generating output" << endl; - return 0; - } - //autodetect phred - if(qualmin < 64) { - phred = 33; - } - printf("reads\t%lld\n",nreads); - - if(!fixlen) { - printf("len\t%d\n", lenmax); - printf("len mean\t%.4f\n", (double)lensum/nreads); - if(nreads > 1) { - printf("len stdev\t%.4f\n", std_dev((double)nreads,lensum,lenssq)); - } - printf("len min\t%d\n", lenmin); - } else { - printf("len\t%d\n",lenmax); - } - - printf("phred\t%d\n", phred); - if(errs > 0) { - printf("errors\t%d\n", errs); - } - - - printf("window-size\t%d\n", window); - printf("cycle-max\t%d\n", cyclemax); - - if(fastx) { - - if(brkdown) { - FILE *myfile; - myfile = fopen(brkdown_outfile,"wd"); - fprintf(myfile,"Cycle\tQuality\tCount\n"); - - for(int i=0; i 0) { - lW = low-phred; - low = qcStats[i].qmax+1; - } - } - } - - int up_bound = round(q3+iqr*1.5); - if(up_bound >= (qcStats[i].qmax-phred)) { - rW = qcStats[i].qmax-phred; - } else { - for(int up=(up_bound+phred);up>=qualmin;up--) { - if(qcStats[i].counts_by_qual[up] > 0) { - rW = up-phred; - up = qcStats[i].qmin-1; - } - } - } - - fprintf(myfile,"%d\t%d\t%d\t%d\t%.0f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t%d\t", (i+1), qcStats[i].qc, (qcStats[i].qmin-phred), - (qcStats[i].qmax-phred), (qcStats[i].qsum-qcStats[i].qc*phred), - (qcStats[i].qsum/qcStats[i].qc-phred), - q1, med, q3,iqr, lW, rW); - fprintf(myfile,"%d\t%d\t%d\t%d\t%d\t%lld\n", A_tot, C_tot, G_tot, T_tot, N_tot,nreads); - - } - fclose(myfile); - } - - if(brkdown && (!fastx)) { - FILE *myfile; - myfile = fopen(brkdown_outfile,"wd"); - fprintf(myfile,"Cycle\tQuality\tCount\n"); - for(int i=0; i 1) { - printf("dup mean\t%.4f\n", (double)ndups/uniq_dup); - printf("dup stddev\t%.4f\n", (std_dev((double)uniq_dup, ndups, dupss))); - } - } - printf("qual min\t%d\n", qualmin-phred); - printf("qual max\t%d\n", qualmax-phred); - printf("qual mean\t%.4f\n", ((double)qualsum/nbase)-phred); - printf("qual stdev\t%.4f\n", std_dev((double)nbase,qualsum,qualssq)); - - - if(gc) { - // put these where they belong - if (debug) - printf("gcTotal\t%lu\tgcSum\t%f\n\n", gcTotal, gcSum); - printf("pct-gc cycle-max\t%d\n", gcCyclemax); - printf("pct-gc mean\t%.2f\n", 100.0 * gcSum / gcTotal); - } - - printf("%%A\t%.4f\n", ((double)ACGTN_count[T_A]/nbase*100)); - printf("%%C\t%.4f\n", ((double)ACGTN_count[T_C]/nbase*100)); - printf("%%G\t%.4f\n", ((double)ACGTN_count[T_G]/nbase*100)); - printf("%%T\t%.4f\n", ((double)ACGTN_count[T_T]/nbase*100)); - double ACGT_total = ACGTN_count[T_A] + ACGTN_count[T_C] + ACGTN_count[T_G] + ACGTN_count[T_T]; - printf("%%N\t%.4f\n", ((double)(nbase-ACGT_total)/nbase*100)); - printf("total bases\t%.0f\n",total_bases); - - if (inputReadError) { - printf("error\t%s\n", "error during close, output may be invalid"); - } - - // fail if input read failed.... even if we don't know why and reported all the stats - return inputReadError; - -} //end main method - -double quantile( const std::vector & vec, double p ) { - int l = vec . size(); - double t = ( (double) l- 1 ) * p; - int it = (int) t; - int v = vec [it]; - if ( t > (double) it ) { - return ( v + (t-it) * ( vec [ it + 1 ] - v ) ); - } - else { - return v; - } -} //end quantile function - -std::string string_format( const std::string &fmt, ... ) { - int n, size = 100; - std::string str; - va_list ap; - while (1) { - str . resize(size); - va_start( ap, fmt ); - int n = - vsnprintf( ( char * ) str . c_str(), size, fmt . c_str(), ap ); - va_end(ap); - if ( n > -1 && n < size ) return str; - if ( n > -1 ) size = n + 1; - else size *= 2; - } -} //end string_format function - -double std_dev(double count, double total, double sqsum) { - if(debug) { - cout << endl; - cout << "count " << count << " total " << total << " sqsum " << sqsum << endl; - cout << endl; - } - return sqrt(sqsum/(count-1)-(total/count *total/(count-1))); -} - -double quantiles_with_counts(int *v, int start, int end, double p, bool dbug) { - int v_size = 0; - for(int i=start; i<=end; i++) { - if(dbug) - cout << "i: " << i << " v[i]: " << v[i] << endl; - v_size += v[i]; - } - - double q = p*(v_size-1); - int count_skip = (int) q; - double val = -1; - bool v_fill = 0; - int v_next = -1; - - if(dbug) { - cout << "p : " << p << endl; - cout << "v-size: " << v_size << endl; - cout << "q : " << q << endl; - cout << "count-skip: " << count_skip << endl; - } - int tot=0; - for(int i=start; i<=end; i++) { - tot += v[i]; - if(tot>count_skip && !v_fill) { - val = i; - if(dbug) - cout << "val : " << val << " val-count: " << v[i] << endl; - v_fill = 1; - } - if(tot>(count_skip+1)) { - v_next = i; - if(dbug) - cout << "val_next : " << v_next << " val-count: " << v[i] << endl; - i = end+1; - } - } - - if(q > count_skip) { - if(dbug) - cout << "v_next - val " << (v_next-val) << endl; - return (val + (q-count_skip)*(v_next-val)); - } else { - return val; - } -} - diff --git a/clipper/fastq-to-fasta b/clipper/fastq-to-fasta deleted file mode 100755 index c656f36..0000000 --- a/clipper/fastq-to-fasta +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/perl - -use Getopt::Long; - -GetOptions(\%opt, "i=s", "o=s", "h"); - -$ARGV[0]=$opt{i} if $opt{i}; -$ARGV[0]="gunzip -c $ARGV[0]|" if $ARGV[0] =~ /\.gz$/; - -if ($opt{o}) { - open (STDOUT, ($opt{o} =~ /\.gz$/ ? "|gzip -c >$opt{o}" : ">$opt{o}")) || die "$opt{o}:$!\n"; -} - -print(usage()) && exit if $opt{h}; - -while($i=<>) { - $s=<>; - $c=<>; - $q=<>; - die "Bad fastq at like $." unless $i =~ s/^@/>/; - print $i, $s; -} - -sub usage { -< -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "fastq-lib.h" -#include "gcModel.h" - -// #define UNIT_TEST - -void gcInit(int maxReadLength); -void gcProcessSequence(int l,int c); -void gcPrintDistribution(FILE *fp); -void gcClose(); - -using namespace std; - -#define roundgt0(x) (long)(x<0.5?0:x+0.5) - -typedef struct GCModelValue { - int percentage; - double increment; -} GC_MODEL_VALUE; - -typedef struct GCModelValues { - GC_MODEL_VALUE * values; - int valuesLength; -} GC_MODEL_VALUES; - -typedef GC_MODEL_VALUES *GC_MODELS; - - -static int claimingCounts[101]; -static double gcDistribution[101]; -static GC_MODELS *cachedModels; -static int gMaxReadLength = -1; - -GC_MODEL_VALUES *calcModels(int readLength) { - - memset(claimingCounts,0,sizeof(claimingCounts)); - - GC_MODEL_VALUES *models = (GC_MODEL_VALUES *) malloc((readLength+1) * sizeof(GC_MODEL_VALUES )); - memset(models,0,(readLength+1) * sizeof(GC_MODEL_VALUES )); - - for (int pos=0;pos<=readLength;pos++) { - double lowCount = pos-0.5; - double highCount = pos+0.5; - - if (lowCount < 0.0) lowCount = 0.0; - if (highCount < 0.0) highCount = 0.0; - if (highCount > readLength) highCount = readLength; - if (lowCount > readLength) lowCount = readLength; - - int lowPercentage = (int)roundgt0(((lowCount*100) / readLength)); - int highPercentage = (int)roundgt0(((highCount*100) / readLength)); - - for (int p=lowPercentage;p<=highPercentage;p++) { - claimingCounts[p]++; - } - } - - // We now do a second pass to make up the model using the weightings - // we calculated previously. - - for (int pos=0;pos<=readLength;pos++) { - double lowCount = pos-0.5; - double highCount = pos+0.5; - - if (lowCount < 0) lowCount = 0; - if (highCount < 0) highCount = 0; - if (highCount > readLength) highCount = readLength; - if (lowCount > readLength) lowCount = readLength; - - int lowPercentage = (int)roundgt0((lowCount*100) / readLength); - int highPercentage = (int)roundgt0((highCount*100) / readLength); - - models[pos].values = (GC_MODEL_VALUE *) malloc(((highPercentage-lowPercentage)+1) * sizeof(GC_MODEL_VALUE) ); - memset(models[pos].values,0, - ((highPercentage-lowPercentage)+1) * sizeof(GC_MODEL_VALUE) ); - models[pos].valuesLength = (highPercentage-lowPercentage)+1; - - for (int p=lowPercentage;p<=highPercentage;p++) { - models[pos].values[p-lowPercentage].percentage = p; - models[pos].values[p-lowPercentage].increment = 1.0/claimingCounts[p]; - } - } - - return (models); -} - - -void gcProcessSequence(int l,int c) { - - if(l > gMaxReadLength) { printf("Error: read length (%d) exceeds specified maximum length(%d)\n", l, gMaxReadLength); } - if(c > l) { printf("Error: GC-count (%d) exceeds actual read length(%d)\n", c, l) ;} - - GC_MODEL_VALUE *values = cachedModels[l][c].values; - - for(int i=0; i < cachedModels[l][c].valuesLength; i++) { - gcDistribution[values[i].percentage] += values[i].increment; - } - -} - -void printModels(int rl) { - GC_MODEL_VALUES *m = cachedModels[rl]; - - printf("## Model values for read length=%d\n",rl); - - for(int i = 0; i <= rl; i++) { - printf("%d: ",i); - for(int j = 0; j < m[i].valuesLength; j++) { - printf("%d,%.2f ",m[i].values[j].percentage, m[i].values[j].increment); - } - printf("\n"); - } -} - -void gcPrintDistribution(FILE *fp) { - if(fp == NULL) { - fp = stdout; - } - fprintf(fp, "pct_GC\tCount\n"); - for(int i=0; i<=100;i++) { - fprintf(fp, "%d\t%.2f\n",i,gcDistribution[i]); - } -} - -void gcClose() { - if(gMaxReadLength < 0)return; // never initialized - - for(int rl = 0; rl < gMaxReadLength; rl++) { - GC_MODEL_VALUES * m = cachedModels[rl]; - for(int i = 0; i <= rl; i++) { - free(m[i].values); - } - free(m); - } - - free(cachedModels); -} - -void gcInit(int maxReadLength) { - gMaxReadLength = maxReadLength; - - memset(gcDistribution,0,sizeof(gcDistribution)); - // Build all models for a given max readlength: - cachedModels = (GC_MODELS*)malloc((maxReadLength+1) * sizeof(GC_MODELS)); - // original code fills this in,caching, as necessary - // here, we just build all models at outset: - int pos; - for( pos = 0; pos <= maxReadLength; pos++) { - cachedModels[pos] = calcModels(pos); - } -} - -#ifdef UNIT_TEST -main() { - - // int maxReadLength = 35; - int maxReadLength = 5; - - gcInit(maxReadLength); - - // *** - // simulate processing A sequence: - // int seqLength = 3; // this sequence's length - // int gcCount = 2; // total G's & C's -- count 'em - /* - for(int i = 0; i < 10000000; i++) { - gcProcessSequence(35,15); - } - for(int i = 0; i < 5000000; i++) { - gcProcessSequence(35,10); - } - */ - - printModels(4); - // exit(0); - - // for(int pos=0; pos <= maxReadLength; pos++) { - // gcProcessSequence(maxReadLength,pos); - // } - - // gcProcessSequence(3,0); - // gcProcessSequence(4,2); - // gcProcessSequence(5,4); - - // gcPrintDistribution(NULL); - - - gcClose(); - -} -#endif diff --git a/clipper/gcModel.h b/clipper/gcModel.h deleted file mode 100644 index 393d8a8..0000000 --- a/clipper/gcModel.h +++ /dev/null @@ -1,7 +0,0 @@ -/* -$Id$ -*/ -extern void gcInit(int maxReadLength); -extern void gcProcessSequence(int l,int c); -extern void gcPrintDistribution(FILE *fp); -void gcClose(); diff --git a/clipper/getgenbankannot b/clipper/getgenbankannot deleted file mode 100755 index 83ffa2a..0000000 --- a/clipper/getgenbankannot +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Getopt::Long; - -my %opt; -$opt{tmp} = "/mnt/scratch/tmp/genbank"; -GetOptions(\%opt, "field=s@", "xml", "tmp", "gene"); - -die "usage: getgenbankannot \n" unless @ARGV; - -my $id = shift @ARGV; - -mkdir($opt{tmp}); chmod(0777, $opt{tmp}); - -my $p; -if ($id =~ /^\d+$/) { - $p="$opt{tmp}/$id.gene"; - if ( ! -s $p ) { - system("wget -q -O - 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=gene&id=$id&rettype=gb' > $p"); - } -} else { - $p="$opt{tmp}/$id.gb"; - if ( ! -s $p ) { - system("wget -q -O - 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=nucleotide&id=$id&rettype=gb' > $p"); - } -} - -if ($id =~ /^\d+$/) { - my @d=slurp($p)=~m/

]*>(.*?)<\/p>/g; - for (my $i=0;$i<@d;$i+=2) { - $d[$i+1] =~ s/<[^<>]*?>//g; - $d[$i+1] =~ s/\s+$//; - next unless $d[$i]; - next unless $d[$i+1]; - print "$d[$i]\t$d[$i+1]\n"; - } - for (xmltag(slurp($p),'dl')) { - my $n=xmltag($_, "dt"); - $n =~ s/\s*:\s*//; - $n = lc($n); - my $v=xmltag($_, "dd"); - print "$n\t$v\n"; - } -} else { - for (xmltag(slurp($p),'GBQualifier')) { - my $n=xmltag($_, "GBQualifier_name"); - my $v=xmltag($_, "GBQualifier_value"); - print "$n\t$v\n"; - } -} - - -sub slurp { - local $/=undef; - open SL, $p; - return ; -} - -sub xmltag { - my ($x, $t) = @_; - my @x = $x =~ m{<$t[^<>]*>(.+?)}gs; - map s/^\s+//s, @x; - map s/\s+$//s, @x; - return wantarray ? @x : $x[0]; -} - diff --git a/clipper/getline.c b/clipper/getline.c deleted file mode 100644 index 17d2c69..0000000 --- a/clipper/getline.c +++ /dev/null @@ -1,103 +0,0 @@ -/* getline.c -- Replacement for GNU C library function getline - -Copyright (C) 1993 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* Written by Jan Brittenson, bson@gnu.ai.mit.edu. */ - -#include -#include -#include -#include - -/* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR - + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from - malloc (or NULL), pointing to *N characters of space. It is realloc'd - as necessary. Return the number of characters read (not including the - null terminator), or -1 on error or EOF. */ - -int getstr (char ** lineptr, size_t *n, FILE * stream, char terminator, int offset) -{ - int nchars_avail; /* Allocated but unused chars in *LINEPTR. */ - char *read_pos; /* Where we're reading into *LINEPTR. */ - int ret; - - if (!lineptr || !n || !stream) - return -1; - - if (!*lineptr) - { - *n = 64; - *lineptr = (char *) malloc (*n); - if (!*lineptr) - return -1; - } - - nchars_avail = *n - offset; - read_pos = *lineptr + offset; - - for (;;) - { - register int c = getc (stream); - - /* We always want at least one char left in the buffer, since we - always (unless we get an error while reading the first char) - NUL-terminate the line buffer. */ - - assert(*n - nchars_avail == read_pos - *lineptr); - if (nchars_avail < 1) - { - if (*n > 64) - *n *= 2; - else - *n += 64; - - nchars_avail = *n + *lineptr - read_pos; - *lineptr = (char *) realloc (*lineptr, *n); - if (!*lineptr) - return -1; - read_pos = *n - nchars_avail + *lineptr; - assert(*n - nchars_avail == read_pos - *lineptr); - } - - if (c == EOF || ferror (stream)) - { - /* Return partial line, if any. */ - if (read_pos == *lineptr) - return -1; - else - break; - } - - *read_pos++ = c; - nchars_avail--; - - if (c == terminator) - /* Return the line. */ - break; - } - - /* Done - NUL terminate and return the number of chars read. */ - *read_pos = '\0'; - - ret = read_pos - (*lineptr + offset); - return ret; -} - -ssize_t getline(char **lineptr, size_t *n, FILE *stream) -{ - return getstr (lineptr, n, stream, '\n', 0); -} diff --git a/clipper/gff2gtf b/clipper/gff2gtf deleted file mode 100755 index e6cdeae..0000000 --- a/clipper/gff2gtf +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/perl - -# Copyright (c) 2011 Erik Aronesty (erik@q32.com) -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# ALSO, IT WOULD BE NICE IF YOU LET ME KNOW YOU USED IT. - -use strict; - -use Data::Dumper; - -my $in = shift @ARGV; - -open (IN, ($in =~ /\.gz$/ ? "gunzip -c $in|" : $in =~ /\.zip$/ ? "unzip -p $in|" : "$in")) || die "$!"; -my (%mrnas, %gids, %tids, $haveexon, $gff); -while () { - $gff = 2 if /^##gff-version 2/; - $gff = 3 if /^##gff-version 3/; - next if /^#/; - - s/\s+$//; - # 0-chr 1-src 2-feat 3-beg 4-end 5-scor 6-dir 7-fram 8-attr - my @f = split /\t/; - - my ($chr, $fil, $typ, $beg, $end, undef, $dir, $frame, $attr) = @f; - - # most ver 2's stick gene names in the id field - my ($tid) = $attr =~ /\bParent="?([^";]+)"?/; - my ($id) = $attr =~ /\bID="?([^";]+)"?/; - my ($name) = $attr =~ /\bName="?([^";]+)"?/; - - next unless $tid; - - if ($typ eq 'exon' || $typ eq 'CDS') { - die "no position at $typ on line $." if ! $beg; - for (split(/,/,$tid)) { - push @{$tids{$_}}, \@f; - } - $haveexon = 1 if $typ eq 'exon'; - } - if ($typ eq 'mRNA') { - $mrnas{$id} = $tid; - } - if ($typ eq 'gene' && $name) { - $gids{$id} = $name; - } -} - -for my $tid (keys(%tids)) { - for (sort {$a->[3] <=> $b->[3]} (@{$tids{$tid}})) { - my ($chr, $fil, $typ, $beg, $end, undef, $dir, $frame, $attr) = @$_; - my ($pid) = $attr =~ /\bParent="?([^";]+)"?/; - my ($gid) = $attr =~ /\bID="?([^";]+)"?/; - my ($id) = $attr =~ /\bName="?([^";]+)"?/; - my ($exn) = $gid =~ /exon:(\d+)/; - my ($gnm) = ""; - - if (!$id) { - if ($mrnas{$pid}) { - $id = $mrnas{$pid}; - if ($gids{$gid}) { - $gnm=$gids{$id}; - } - } - } - - # gff3 puts :\d in exons sometimes - - $id =~ s/:\w+$//; - $tid =~ s/:\w+$//; - $id =~ s/-cds$//; - $tid =~ s/^CDS_//; - - $tid = "$tid:$id" if $tid !~ /^$id/; - - my $ex = ""; - $ex = " exon_number \"$exn\";" if $exn > 0; - -# for some this is needed... not for others? -# --$beg; --$end; - print "$chr\t$fil\t$typ\t$beg\t$end\t0\t$dir\t$frame\tgene_id \"$id\"; transcript_id \"$tid\";$ex\n"; - print "$chr\t$fil\texon\t$beg\t$end\t0\t$dir\t$frame\tgene_id \"$id\"; transcript_id \"$tid\";$ex\n" if !$haveexon; - } -} - -close IN; diff --git a/clipper/grun b/clipper/grun deleted file mode 100755 index 60a51cc..0000000 --- a/clipper/grun +++ /dev/null @@ -1,3930 +0,0 @@ -#!/usr/bin/perl - -# grun - lightweight jobs queueing system -# Copyright (C) 2011 Erik Aronesty -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -use strict; - -use Carp qw(carp croak confess cluck); -use Getopt::Long qw(GetOptions); -use Data::UUID; - -use ZMQ::LibZMQ3; -use ZMQ::Constants ':all'; -use JSON::XS; -use Time::HiRes; -use BSD::Resource; - -use IO::File; -use POSIX qw(:sys_wait_h strftime); -use Socket qw(IPPROTO_TCP TCP_NODELAY TCP_KEEPIDLE TCP_KEEPINTVL TCP_KEEPCNT); -use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK); -use Safe; -use Cwd qw(abs_path cwd); -use List::Util qw(min max); -use File::Basename qw(dirname); - -sub pretty_encode; - -our ($REVISION) = (q$LastChangedRevision$ =~ /(\d+)/); - -our $VERSION = "0.9.$REVISION"; # 0.10 wil be feature lock, after sql impl. 0.9.X is zmq & json::xs - -my $STATUS_NEVERRUN=199; -my $STATUS_ORPHAN=-8; -my $STATUS_UNKNOWN=-9; -my $STATUS_EXECERR=-10; -my $PPID=$$; -my $WIN32 = ($^O =~ /Win32/); -my $TIMEFMT = 'command:%C\ncpu-real:%E\ncpu-user:%U\ncpu-sys:%S\nmem-max:%M\nmem-avg:%t\nctx-wait:%w\nfs-in:%I\nfs-out:%O'; - -my ($daemon, $killjob, $editjob); -my (%conf, %def, @metrics, @labels); - -# defaults just run things locally, no master -$def{config} = "/etc/grun.conf"; # config file -$def{spool} = "/var/spool/grun"; # dir to place jobs -$def{port} = 5184; # listen/connect port -$def{bind} = '0.0.0.0'; # listen addr -$def{env} = ['PATH']; # list of environment vars to copy from submit through to exec -$def{default_memory} = 1000 * 1000; # default job memory -$def{default_priority} = 20; # default job priority (20 = always run) -$def{ping_secs} = 30; # how often to tell about load/mem/stats -$def{remove_secs} = '$ping_secs * 1000'; # don't even try kickstarting if the node is this old -$def{idle_load} = .3; # how often to tell about load/mem/stats -$def{retry_secs} = 10; # how often to retry notifications -$def{bench_secs} = 86400; # how often to re-benchmark -$def{max_buf} = 1000000; # how often to retry notifications -$def{expire_secs} = 14400; # remove jobs whose execution nodes haven't reported back in this amount of time -$def{io_keep} = 3600; # keep io for this long after a job with i/o is finished in a detached session -#$def{hard_factor} = 1.5; # hard limit factor -$def{max_sched} = 50; # how many different jobs to try and match before giving up on the rest (queue busy) -$def{spread_pct} = 5; # how often to "distribute jobs", versus "clump" them -$def{master} = 'localhost:5184'; # central scheduler -$def{services} = "queue exec"; # all can run -$def{pid_file} = "/var/run/grun.pid"; # pid file -$def{log_file} = "/var/log/grun.log"; # pid file -$def{hostname} = $ENV{HOSTNAME} ? $ENV{HOSTNAME} : $ENV{COMPUTERNAME} ? $ENV{COMPUTERNAME} : `hostname`; -$def{log_types} = "note error warn"; # log all -$def{nfs_sync} = 1; # enable nfs sync support - -chomp $def{hostname}; - -sub debugging; - -my $GRUN_PATH=abs_path($0); - -my ($qinfo, $help, $config, $ver); - -Getopt::Long::Configure qw(require_order no_ignore_case passthrough); - -my $context = zmq_init(); - -my @ORIG_ARGV= @ARGV; - -GetOptions("daemon"=>\$daemon, "CONF:s"=>\$config, "trace"=>\$def{trace}, "query"=>\$qinfo, "V"=>\$ver, "help"=>\$help) || - die usage(); - -(print "grun $VERSION\n") && exit(0) if $ver; - -my @send_files; # files to send - -my $safe = new Safe; - -$def{config} = $config if $config; - -init(); - -my $stream_quit = 0; - -if ($ARGV[0] eq '-X') { - do_stream(); - exit(0); -} - -if ($ARGV[0] eq '-Y') { - do_execute(); - exit(0); -} - - -if ($ARGV[0] eq '-?') { - shift @ARGV; - $help = 1; -} - -$help = 1 if defined $config && !$config; - -if ($help) { - print usage(); - exit 0; -} - -if (!$daemon) { - # -k works as long as -d wasn't specified - GetOptions("kill"=>\$killjob, "trace"=>\$def{trace}, "edit|e"=>\$editjob) || - die usage(); -} - -if ($conf{debug_memory}) { - eval {require Devel::Gladiator;}; - die $@ if $@; -} - -my $gjobid = slurp("$conf{spool}/nextid"); -my $log_to_stderr = 0; - -if ($qinfo) { -# this is the code for grun -q - - Getopt::Long::Configure qw(no_require_order no_ignore_case passthrough); - my %opt; - GetOptions(\%opt, "silent", "inplace", "hosts=s", "debug") || die usage(); - my $cmd = shift @ARGV; - die usage() if !$cmd; - $log_to_stderr = 1 if $opt{debug}; - - my @arg = @ARGV; - $cmd =~ s/^-//; - my $tmp = substr bestunique($cmd, qw(config status jobs file history wait memory)), 0, 4; - if (!$tmp) { - die "Command $cmd is not available, for help type grun -query -?\n"; - } - $cmd = $tmp; - -# some commands default to localhost, others default to queue host... this is confusing... fix? - - my @dest = $opt{hosts} ? expandnodes($opt{hosts}) : - $cmd eq 'conf' ? [$conf{bind}, $conf{port}] : - [$conf{master},$conf{master_port}]; - - if ($cmd eq 'file' && @dest > 1) { - die "Command $cmd cannot be run on multiple hosts"; - } - - my $ok=0; - for my $d (@dest) { - my ($host, $port) = @$d; - - if ($cmd eq 'wait') { - my $st = 0; - for (@arg) { - my ($res) = waitmsg($host, $port, "jwait", $_); - if ($res && defined $res->{status}) { - print "Job $_ status $res->{status}\n"; - $st = $res->{status} if $res->{status}; - } else { - print "Job $_ status $STATUS_UNKNOWN\n"; - $st = $STATUS_UNKNOWN; - } - } - exit $st; - } elsif ($cmd eq 'file') { - my $cwd = cwd; - my @need; - for (@arg) { - next if -e $_; - if ($_ !~ /^\//) { - $_ = "$cwd/$_"; - } - push @need, $_; - } - die "not supported yet\n"; - # if (@need) { - # my ($res, $error) = waitio({inplace=>$opt{inplace}}, $host, $port, "xcmd", 'file', @need); - # die $error, "\n" if $error && !$opt{silent}; - # exit 1 if $error; - # } - } elsif ((!samehost($host,$conf{hostname}) || (!$ENV{_GRUN} && (!$conf{services}->{queue} || $cmd !~ /^stat|jobs|hist$/)))) { - # this could get ugly, if called a lot, may want to make more efficient - warn ("waitmsg($host, $port, 'xcmd', $cmd, @arg, @{[%opt]})\n") if $opt{debug}; - my ($ret) = waitmsg($host, $port, "xcmd", $cmd, @arg, %opt); - print $ret; - $ok=1 if $ret; - } else { - warn ("Using local queue status, host $host is $conf{bind}/$conf{hostip}, name is $conf{hostname} \n") if $opt{debug}; - my $ret; - if ($cmd eq 'stat') { - $ret = shownodes(@arg); - } elsif ($cmd eq 'jobs') { - $ret = showjobs(@arg); - } elsif ($cmd eq 'hist') { - $ret = showhist(@arg); - } - print $ret; - $ok=1 if $ret; - } - } - exit($ok ? 0 : 1); -} - -my $gpid; # daemon pid -if (open(IN, $conf{pid_file})) { - $gpid = ; - close IN; -} - -if ($killjob) { -# grun -k code - my $sig = 15; - my $kforce = 0; - Getopt::Long::Configure qw(no_require_order no_ignore_case); - GetOptions("signal|n=i"=>\$sig, "force"=>\$kforce) || die usage(); - - my $exit = 0; - for my $job (@ARGV) { - my @id; - if ($job !~ /^\d/) { - @id=(guid=>"$job"); - } else { - @id=(jid=>$job); - } - my $err = kill_job(@id, sig=>$sig, force=>$kforce); - if (!defined($err) && $@) { - warn $@,"\n"; - $exit=-1; - } else { - my $ok = ($err =~ /^Job.*(aborted|kill requested)/); - $err =~ s/\n$//; - warn "$err\n" if $ok; - $err = 'No remote response to jkill' if !$ok && !$err; - warn "Error: $err\n" if !$ok; - $exit=-1 if !$ok; - } - } - exit 0; -} - -if ($editjob) { - my %ed; - while (@ARGV) { - $_=$ARGV[0]; - for (split /,/, $_) { - my ($key, $val) = $_ =~ /^([^=]+)(?:=(.*))?$/; - my $nk = bestunique($key, qw(hold resume memory cpus state hosts), @metrics, @labels); - $key = $nk if $nk; - $key = 'state', $val = 'hold' if ($key eq 'hold'); - $key = 'state', $val = 'resume' if ($key eq 'resume'); - if ($key eq 'state') { - $val = substr bestunique($val, qw(hold resume)), 0, 4; - die "' must be one of: h(old) r(esume)\n" unless $val; - } - $ed{$key}=$val; - } - shift; - last unless $ARGV[0] =~ /=/; - } - my @jids = @ARGV; - - die usage() if !%ed || !@jids; - - my $ex = 0; - for my $jid (@jids) { - warn "Edit " . packdump(\%ed) . "\n"; - my ($err) = waitmsg($conf{master}, $conf{master_port}, 'jedit', $jid, %ed); - my $ok = ($err =~ /^Job.*edited/); - $err=~ s/\n$//; - warn "$err\n" if $ok; - $err = 'No remote response to jedit' if !$ok && !$err; - warn "Error: $err\n" if !$ok; - $ex = 1 if !$ok; - } - exit $ex; -} - - - - -my ($router, $read_set, $write_set, $quit, %pid_jobs, %j_wait, %io_wait, %start_wait); # daemon globals -my %ZMQS; # hash of open sockets -my %nodes; # hash of registered nodes - -if ($daemon) { - startdaemon(); -} else { - grun_client(); -} - -#################### -# client mode - -my $make; -my %sync_after; -my %sync_before; -my %sync_already; - -sub grun_client { - my %jobs; - my %opt; - - $opt{wait} = 1; # keep socket open until job is finished - $opt{io} = 1; # copy io back on the socket, implies wait - - Getopt::Long::Configure qw(require_order no_ignore_case passthrough); - - GetOptions(\%opt, "file=s", "int|I", "memory|m=i", "hosts|h=s", "cpus|c=f", "io!", "wait!", "err_a|err-append|ea=s", "err|e=s", "out|o=s", "out_a|out-append|oa=s", "ouer|out-err|oe=s", "ouer_a|out-err-append|oea=s", "jobx|jobid|j=s", "verbose", "make|M", "debug|D", "env|E=s", "alert=s", "param|p=s@", "wait-exists|W", "priority|r=i"); - - if ((!!$opt{out} + !!$opt{out_a} + !!$opt{ouer} + !!$opt{ouer_a})>1) { - $config=undef; - die "ERROR: Specify only one of --out, --out-append, --out-err or --out-err-append\n\n" . usage() - } - - if ((!!$opt{err} + !!$opt{err_a} + !!$opt{ouer} + !!$opt{ouer_a})>1) { - $config=undef; - die "ERROR: Specify only one of --err, --err-append, --out-err or --out-err-append\n\n" . usage() - } - - if (my $t=$opt{out_a}?$opt{out_a}:$opt{ouer_a}) { - $opt{out}=$t; - $opt{out_a}=1; - delete $opt{ouer_a}; - } - if (my $t=$opt{err_a}?$opt{err_a}:$opt{ouer_a}) { - $opt{err}=$t; - $opt{err_a}=1; - delete $opt{ouer_a}; - } - if ($opt{ouer}) { - $opt{out}=$opt{err}=$opt{ouer}; delete $opt{ouer}; - } - - my $verbose = $opt{verbose}; delete $opt{verbose}; - my $env = $opt{env}; delete $opt{env}; - $make = $opt{make}; delete $opt{make}; - $log_to_stderr = 1 if $opt{debug}; - - if ($< == 0) { - die "Won't run a job as root\n"; - } - - if ($opt{err} && $opt{out}) { - $opt{io} = 0; - } - - while ($ARGV[0] =~ /^--([\w-]+)=([\w=]+)/) { - # allow arbitrary job options, that jan later be referred to in match expressions - # or in execution wrappers, etc - $opt{$1} = $2; - shift @ARGV; - } - - if ($make || $verbose) { - GetOptions(\%opt, "noexec"); - } - - my @cmd = @ARGV; - - if ($opt{file}) { - # read options from a file - funpack($opt{file}, \%opt); - if ($opt{cmd}) { - if (@ARGV) { - die "Can't supply cmd: in the file and '@cmd' on the command line\n"; - } - if ($opt{cmd} !~ /^[\w0-9:\/\t -]+$/) { - # not simple: let bash handle it - @cmd = ('bash', '-c', $opt{cmd}); - } else { - # simple: split, pass as is to exec - $opt{cmd} =~ s/^\s+//; - $opt{cmd} =~ s/\s+$//; - @cmd = split /\s+/, $opt{cmd}; - } - } - } - - # force exec in "same as current dir" - $opt{cwd} = cwd; - if (!$opt{cwd}) { - die "Can't get current working directory, not executing unanchored remote command.\n"; - } - - if ($make) { - # %i:input %o:output - my (@i, @o); - for (@cmd) { - my @t = m/[#%]([io]):(\S+)/g; - if (@t) { - for (my $i=0;$i<@t;++$i) { - push @o, $t[$i+1] if $t[$i] eq 'o'; - push @i, $t[$i+1] if $t[$i] eq 'i'; - } - s/%[io]:(\S+)/$1/g; - s/#[io]:\S+//g; - } - my @t = m/([<>])\s*(\S+)/g; - if (@t) { - for (my $i=0;$i<@t;$i+=2) { - push @i, $t[$i+1] if $t[$i] eq '<' && $t[$i+1]=~/^\s*\w/; - push @o, $t[$i+1] if $t[$i] eq '>' && $t[$i+1]=~/^\s*\w/; - } - } - s/\%\!\>(>?\s*\S+)/>$1/g; - } - die "Unable to determine i/o for -M (make) semantics\n\n" . usage() - if !@i || !@o; - - my $need=0; - for my $i (@i) { - syncfile($i); - add_syncfile_before($i); - for my $o (@o) { - syncfile($o); - if (! (-s $o) || (fmodtime($i) > fmodtime($o))) { - warn "# need $o\n" if $opt{noexec} || $verbose; - $need=1; - } - } - } - if (!$need) { - warn "Skipping: @cmd\n"; - exit 0; - } - for (@o) { - add_syncfile_after($_); - } - warn "+@cmd\n" if $opt{noexec} || $verbose; - } else { - for (@cmd) { - if (m{([^\s,:]+)/([^\s,:]+)}) { - add_syncfile_after($_); - add_syncfile_before($_); - } - } - add_syncdir_after($opt{cwd}); - add_syncdir_before($opt{cwd}); - } - - if ($ARGV[0] =~ /^-/) { - die "Unknown option $ARGV[0]\n"; - } - - - #die pretty_encode \@cmd if $opt{debug}; - - if (!@cmd) { - die usage(); - } - - if ($cmd[$#cmd] =~ /\&$/) { - # TODO: grun should wait for all kids, and disallow detaching, not just get rude here - die "Not running background-only job. You might mean: grun \"command\" &.\n"; - } - - if ($conf{auto_profile}) { - if (-e ($conf{auto_profile})) { - my $cmd = join ' ', @cmd; - # safe'ish eval, just so there aren't weird side effects - my ($cpu, $mem, $prof) = evalctx(slurp($conf{auto_profile}) . ";\nreturn (\$cpu, \$mem, \%prof);", cmd=>$cmd, cmd=>\@cmd); - - $prof = $cpu if ref($cpu) eq 'HASH'; - - # alias names - $prof->{cpus}=$prof->{cpu} if !$prof->{cpus} && $prof->{cpu}; - $prof->{memory}=$prof->{mem} if !$prof->{memory} && $prof->{mem}; - - if ($prof && ref($prof) eq 'HASH') { - $prof->{memory} = $mem if defined($mem) && !ref($mem) && !$prof->{memory}; - $prof->{cpus} = $cpu if defined($cpu) && !ref($cpu) && !$prof->{cpus}; - - $opt{memory}=$prof->{memory} if $prof->{memory} && !$opt{memory}; - $opt{cpus}=$prof->{cpus} if $prof->{cpus} && !$opt{cpus}; - $opt{hosts}=$prof->{hosts} if $prof->{hosts} && !$opt{hosts}; - $opt{priority}=$prof->{priority} if $prof->{priority} && !$opt{priority}; - - for ((@metrics,@labels)) { - # as if the user entered it - next if !$_; - push @{$opt{"param"}}, "$_=" . $prof->{$_} if defined($prof->{$_}); - } - } else { - $opt{memory}=$mem if ($mem > $opt{memory}); - $opt{cpus}=$cpu if ($cpu > $opt{cpus}); - } - - if ($@) { - die "Can't run $conf{auto_profile}: $@\n"; - } - } else { - die "Can't find $conf{auto_profile}: $!\n"; - } - } - - my %param; - if ($opt{param}) { - for (@{$opt{param}}) { - if (/^([^=]+)=(.*)/) { - $param{$1} = $2; - } else { - die "Parameter $_: should be name=value\n"; - } - } - } - $opt{param} = \%param; - - $opt{priority} = $ENV{GRUN_PRIORITY}+0 if !$opt{priority} && $ENV{GRUN_PRIORITY} >= 1; - $opt{priority} = $conf{default_priority} if !$opt{priority}; - - # convert memory to kB - if ($opt{memory}) { - if ($opt{memory} =~ /kb?$/i) { - # internal memory unit is kB - } elsif ($opt{memory} =~ /gb?$/i) { - # convert gB to kB - $opt{memory} *= 1000000; - } else { - # convert mB to kB - $opt{memory} *= 1000; - } - } else { - $opt{memory} = $conf{default_memory}; - } - - # no socket io unless waiting - if (!$opt{wait}) { - delete $opt{io}; - } - - - # copy env - if ($env eq '*' || ($conf{env} && ($conf{env}->[0] eq '*')) ) { - for (keys %ENV) { - if (! /^_|LS_COLORS/) { - $opt{env}->{$_} = $ENV{$_}; - } - } - } else { - for (@{$conf{env}}) { - $opt{env}->{$_} = $ENV{$_} if defined $ENV{$_}; - } - for (split /\s+/, $env) { - $opt{env}->{$_} = $ENV{$_} if defined $ENV{$_}; - } - } - - $opt{user} = getpwuid($>); - $opt{group}=$); - $opt{umask} = umask(); - $opt{env}->{USER} = $opt{user}; - - if (!$opt{wait}) { - open STDERR, ">&STDOUT"; - } - - $opt{memory} = $opt{memory} ? $opt{memory} : $conf{default_memory}; - $opt{cpus} = $opt{cpus} ? $opt{cpus} : 1; - - for (@metrics) { - if ($conf{"default_$_"}) { - $opt{$_} = $opt{$_} ? $opt{$_} : $conf{"default_$_"}; - } - } - - if ($verbose) { - printf STDERR "Memory: %d\n", $opt{memory}; - printf STDERR "CPUs: %d\n", $opt{cpus}; - printf STDERR "Hosts: %s\n", $opt{hosts} if $opt{hosts}; - for ((@metrics,@labels)) { - printf STDERR proper($_) . ": %s\n", $opt{param}->{$_} ? $opt{param}->{$_} : 1; - } - } - - if ($opt{jobx}) { - if ($opt{jobx} =~ /^\d/) { - die "External job id's should start with a non-numeric\n"; - } - } - - my %info; - - sub client_sigh { - my $signame = shift; - $SIG{INT} = undef; - $SIG{TERM} = undef; - $SIG{PIPE} = undef; - if ($info{jid}||$info{guid}) { - if (!($signame eq 'PIPE')) { - print STDERR "Aborting command, sending jkill for $info{jid}\n"; - } - my $code = $signame eq 'INT' ? 2 : $signame eq 'PIPE' ? 13 : 15; - my $err = kill_job(jid=>$info{jid}, guid=>$opt{guid}, sig=>$code, termio=>1); - if (!($signame eq 'PIPE')) { - if (!defined($err) && $@) { - warn $@,"\n"; - } - } - exit 128+$code; - } else { - die "Interrupted before job sent\n"; - } - }; - - # for testing -M make - exit 0 if $opt{noexec}; - - $SIG{INT} = \&client_sigh; - $SIG{TERM} = \&client_sigh; - $SIG{PIPE} = \&client_sigh; - - $opt{cmd} = \@cmd; - $opt{hard_factor} = $conf{hard_factor}; - $opt{frompid} = $$; - $opt{guid} = $opt{jobx} ? $opt{jobx} : create_guid(); - $opt{syncdirs} = [keys(%sync_before)]; - %info = waitmsg($conf{master}, $conf{master_port}, 'run', \%opt); - - if (!%info) { - die ($@ ? $@ : "No response to 'run'") . "\n"; - } - - if ($info{error}) { - print STDERR $info{error}, "\n"; - exit -1; - } - - if (!$info{jid}) { - print STDERR "Failed to submit job", "\n"; - exit -1; - } - my $save_jid = $info{jid}; - - $0 = "GRUN:$save_jid"; - - if ($verbose) { - printf STDERR "Job_ID: $info{jid}\n"; - } - - if ($info{already}) { - if ($opt{"wait-exists"}) { - my ($res) = waitmsg($conf{master},$conf{master_port}, "jwait", $info{jid}); - my $st; - if ($res && defined $res->{status}) { - print "Job $_ status $res->{status}\n"; - $st = $res->{status} if $res->{status}; - } else { - print "Job $_ status $STATUS_UNKNOWN\n"; - $st = $STATUS_UNKNOWN; - } - exit $st; - } else { - print STDOUT "Job_ID: $info{jid} \n" if !$verbose; - printf STDERR "Already running job named $opt{jobx}, try grun -q wait JOB\n"; - exit -1; - } - } - - if ($opt{wait}) { - # wait for a job ip - while (!defined($info{ip})) { - my %tmp = waitmsg_retry($conf{retry_secs}*1000, $conf{master}, $conf{master_port}, 'jinfo', $info{jid}); - - if ($tmp{error}) { - print STDERR $tmp{error}, "\n"; - exit $tmp{status} != 0 ? $tmp{status} : -1; - } - - if (!defined($tmp{ip})) { - xlog("error","Had to retry after a retry... BUG in job $save_jid\n"); - sleep(5); - } else { - %info=%tmp; - } - } - - my $host = $info{hostname} ? $info{hostname} : $info{ip}; # support old ver which didn't have hostname - - if ($verbose) { - printf STDERR "Host: %s\n", $host; - } - - # look at all the work you can avoid if you don't wait - my ($stat, $err, $diderr); - # connect to executing node directly and ask for stderr, stdout, and status based on job id - if (defined $info{status}) { - $stat=$info{status}; - $err=$info{error}; - } - while (!defined $stat && !defined $err) { - # shadow watcher.... - if ($info{ip}=~/^\d/) { - if ($opt{io} && !($opt{err} && $opt{out}) ) { - ($stat, $err, $diderr) = waitio($info{ip}, $info{port}, $info{jid}, \%opt); - } else { - my ($key, $dat) = waitmsg_retry($conf{retry_secs}*1000, $info{ip}, $info{port}, 'xstat', $info{jid}); - $stat=$dat->{status}; - $err=$dat->{error}; - } - if ($stat == 65280 && !$err) { - print STDERR "Error: [$host] Command returned -1\n"; - } - } else { - $stat=$STATUS_UNKNOWN; - $err="Error in grun protocol (ip=$info{ip}), unknown status!\n"; - } - sleep 5 if (!defined $stat && !defined $err); - } - - # send this command into the ether...if exec doesn't get it, clean up after timeout - if ($opt{io}||$opt{wait}) { - if ($info{ip}=~/^\d/) { - sendcmd($info{ip}, $info{port}, 'xclean', $info{jid}); - } - } - if ($stat == 11) { - $err = 'Segmentation fault'; - } - if ($stat > 127) { - # shift... but if that doesn't get you anything, set to -1 (unknown error) - $stat = $stat>>8; - $stat = -1 if !$stat; - } - syncafter(); - if ($err) { - print STDERR "[$host] $err", "\n"; - $stat = -1 if !$stat; # unknown error if undefined - } else { - if ($stat != 0 && ! $diderr) { - print STDERR "Error: [$host] Command returned $stat\n"; - } - } - unlink("$ENV{HOME}/.grun/jobx/$opt{jobx}") if $opt{jobx}; - - exit($stat); - } else { - # aah... nicer - print STDOUT "Job_ID: $info{jid} \n" if !$verbose; - } -} - -### nfs sync support - -sub syncdirs { - for (@_) { - syncdir($_); - } -} - -sub syncafter { - %sync_already = (); - return unless $conf{nfs_sync}; - syncdirs(keys(%sync_after)); -} - -sub add_syncdir_after { - my ($d) = @_; - return unless $conf{nfs_sync}; - $sync_after{abs_path($d)}=1; -} - -sub add_syncdir_before { - my ($d) = @_; - return unless $conf{nfs_sync}; - $sync_before{abs_path($d)}=1; -} - -sub add_syncfile_before { - my ($f) = @_; - return unless $conf{nfs_sync}; - add_syncdir_before(-d $f ? $f : dirname($f)); -} - -sub add_syncfile_after { - my ($f) = @_; - return unless $conf{nfs_sync}; - add_syncdir_after(-d $f ? $f : dirname($f)); -} - -sub syncfile { - my ($f) = @_; - return unless $conf{nfs_sync}; - syncdir(-d $f ? $f : dirname($f)); -} - -# this refreshes the lookupcasche, which is an issue when running scripts back to back on multiple nodes using NFS -sub syncdir { - my ($d) = @_; - my $tmp; - return if $sync_already{$d}; - opendir($tmp,$d); - closedir($tmp); -} - -sub readsocks { - my $did; - # identity & data received - my $cnt; - - if (!$router) { - xlog("debug", "Readsocks called with no router: " . Carp::longmess() ); - return; - } - - while (my $id= zmq_recvmsg($router,ZMQ_NOBLOCK)) { - ++$cnt; - $did=1; - $id = zmq_msg_data($id); - - if (zmq_getsockopt($router,ZMQ_RCVMORE)) { -# print "getting sep\n"; - my $sep = zmq_recvmsg($router); - } - if (zmq_getsockopt($router,ZMQ_RCVMORE)) { -# print "getting data\n"; - my $msg = zmq_recvmsg($router); - my $data = zmq_msg_data($msg); - my @resp = process_message($data, $id); - if (@resp) { - print("Got resp: @resp\n"); - replymsg($id, @resp); - } else { -# warn("No resp for $data\n"); - } - } - while (zmq_getsockopt($router,ZMQ_RCVMORE)) { - print("Discarding excess multipart data!\n"); - } - if ($cnt > 100000) { - xlog("error", "Getting flooded with messages"); - last; - } - } - return $did; -} - -sub jhiststat { - my ($jid) = @_; - my $jhistfile=jhistpath($jid); - if (-e $jhistfile) { - # job is toast... but maybe some streams are waiting - my $job=unpack_file($jhistfile); - delete $job->{env}; - $job->{host}="n/a" if !$job->{host} && !defined $job->{status}; - $job->{ip}=host2ip($job->{host}) if !$job->{ip} && ! defined $job->{status}; - # needs ip! - $job->{ip}="n/a" if defined $job->{status} && ! $job->{ip}; - $job->{hostname}=$job->{host}; - return $job; - } - return undef; -} - -sub replymsg { - my ($id, @resp) = @_; - if (debugging) { - my $hid=unpack("h*",$id); - xlog("debug", "Reply ($hid) " . packdump(\@resp) . "\n") if $conf{trace}; - } - zmq_send($router, $id, length($id), ZMQ_SNDMORE); - zmq_send($router, "", 0, ZMQ_SNDMORE); - zmq_send($router, packref(\@resp)); -} - -sub selfcmd { - my $cmd = packcmd(@_); - process_message($cmd, undef); -} - -my $debugzid; -sub process_message { - my ($src_data, $zid) = @_; - - my ($ip, $trace, $cmd, @args) = unpackcmd($src_data); - - $trace=$conf{trace} if !$trace; - - if (debugging|$trace) { - my $hid=defined($zid) ? unpack("h*",$zid) : ""; - xlog($trace ? "trace" : "debug", "Received command ($hid) '$cmd' : $src_data\n") if $trace; - } - - return ('error'=>$@) if ($@); - - if ($cmd eq 'xcmd') { -# these commands 'query or interfere' with normal running of the server -# they are initiated by a user -# they are limped together like this for basically no reason - - if ($args[0] eq 'relo') { -# reread config... maybe rebind stuff too - xlog("note", "Reload from remote command (ARGS: @ORIG_ARGV)"); - eval{init();}; - if ($@) { - return "Error: $conf{config}, $@"; - } else { - return "Ok, reloaded from $conf{config}"; - } - } elsif ($args[0] eq 'term') { - xlog("note", "Shutdown from remote command"); - $quit = 1; - return 'Ok, shutdown initiated'; - } elsif ($args[0] eq 'rest') { - xlog("note", "Restarting from remote command ($GRUN_PATH @ORIG_ARGV)"); - $quit = 1; - zmq_unbind($router, "tcp://$conf{bind}:$conf{port}"); - if (!fork) { - zmq_fork_undef(); - exec($GRUN_PATH, @ORIG_ARGV); - } - return "Ok, restart initiated"; - } elsif ($args[0] eq 'stat') { - shift @args; - return shownodes(@args); - } elsif ($args[0] eq 'hist') { - shift @args; -# if (@args && (@args > 1 || $args[0] !~ /^\d+$/)) { - # fork... do it in parallel -# forkandgo($zid, \&showhist, @args); -# return(); -# } else { - # inline... do it now, less expensive than fork! - return showhist(@args); -# } - } elsif ($args[0] eq 'conf') { - return showconf(); - } elsif ($args[0] eq 'memo') { - return showmem(); - } elsif ($args[0] eq 'jobs') { - shift @args; - return showjobs(@args); -# } elsif ($args[0] eq 'file') { -# shift @args; -# xlog("note", "Sending file [@args] to remote"); -# return ($SOCK_FILE, @args); - } else { - return "Error: unknown xcmd '$args[0]'"; - } - } elsif ($cmd eq 'frep') { -# warn("router is $router, zid is $debugzid\n"); - my ($dat) = @args; - if ($dat->{zid}) { - xlog("debug", "Sending response to $dat->{zid}"); - replymsg(pack("h*",$dat->{zid}),$dat->{out},$dat->{more}); - #replymsg($debugzid,$dat->{out}); - } - } elsif ($cmd eq 'node') { -# this is the 'node ping' - if (ref($args[0]) eq 'HASH') { # bit of validation - my $node = $args[0]; - - $node->{ip}=$ip unless $node->{ip}; - $ip=$node->{ip}; - - if ($ip) { - my $file = "$conf{spool}/nodes/$ip.reg"; - open(F, ">$file") || return("Error: can't create $file : $!"); - print F packfile($node); - close F; - # also stick in memory - - if (!$nodes{$ip}) { - xlog("note", "Registering node $ip:$node->{port} $node->{hostname}"); - } - - $node->{ping} = time(); - $node->{ex_ping} = $nodes{$ip}->{ping}; - $node->{zid} = $zid; - - $nodes{$ip} = $node; - } else { - xlog("note", "Can't register node with no ip"); - } -# save execution node ping time for diagnostic (times out of sync or very slow transmission, etc) - } else { - return "Error: invalid node registration info"; - } - return (); - } elsif ($cmd eq 'xedit') { - my ($jid, $ed) = @args; - if ($ed->{state} =~ /hold|resu/) { - my $job = unpack_file("$conf{spool}/jpids/$jid"); - - if ($job && $job->{pid}) { - my ($sig, $stat); - if ($ed->{state} eq 'hold') { - $sig=-19; $stat="susp"; - } else { - $sig=-18; $stat=""; - } - kill($sig, $job->{pid}); - sendcmd($conf{master},$conf{master_port}, 'jedit', $job->{id}, state=>$stat); - } - } - } elsif ($cmd eq 'jedit') { - my ($jid, %ed) = @args; - my $fname; - if (!$jid || !%ed) { - xlog("error", "Invalid edit request (@args)"); - return "Invalid edit request (@args)\n"; - } elsif (! -e "$conf{spool}/jobs/$jid") { - if (! -e "$conf{spool}/jobs/$jid.ip") { - xlog("error", "Job $jid not found during jedit"); - return "Job $jid not found during jedit"; - } else { - my $job_ip = slurp("$conf{spool}/jobs/$jid.ip"); - # send an 'xedit' to the running node - # needed only for certain edits....think about this! - $fname = "$conf{spool}/jobs/$jid:$job_ip.run"; - if ($ed{state} =~ /hold|resu/) { - if ($nodes{$job_ip}) { - sendcmd_nowait($job_ip, $nodes{$job_ip}->{port}, 'xedit', $jid, \%ed); - } - } - # for now we allow edit-in-place.... for no effect in some cases, but not others - } - } else { - $fname = "$conf{spool}/jobs/$jid"; - } - - # assert($fname) - my $ref = unpack_file($fname); - for my $key (keys(%ed)) { - $ref->{$key} = $ed{$key}; - } - burp("$conf{spool}/jobs/$jid.jedit", packfile($ref)); - rename("$conf{spool}/jobs/$jid.jedit", $fname); - return "Job $jid edited\n"; - } elsif ($cmd eq 'jwait') { - my ($job) = @args; - - # user can specify guid or jid - my $jid = jid_from_opts($job=~/^\d/?{jid=>$job}:{guid=>$job}); - if (!$jid) { - return {error=>"Job $job not found"}; - } - if ( -e "$conf{spool}/jobs/$jid" || -e "$conf{spool}/jobs/$jid.ip" ) { - $j_wait{$jid}->{$zid}=time(); - return (); - } else { - my $jhistfile=jhistpath($jid); - if (-e $jhistfile) { - # repeated acks are ok - my $job=unpack_file($jhistfile); - if ($job) { - return $job; - } else { - return {error=>"Invalid job history $jhistfile"}; - } - } else { - return {error=>"Job not running, and has no history"}; - } - } - } elsif ($cmd eq 'jkill') { -# this is the 'job kill command' - my ($job) = @args; - - # user can specify guid or jid - my $jid = jid_from_opts($job); - if (!$jid) { - if ($job->{guid}) { - return "Job $job->{guid} not found\n"; - } else { - return "No job specified for jkill\n"; - } - } - if (! -e "$conf{spool}/jobs/$jid") { - if (! -e "$conf{spool}/jobs/$jid.ip") { - xlog("error", "Job $jid not running or queued, but kill requested"); - return "Job $jid not running or queued"; - } else { -# send xabort to correct node - my $job_ip = slurp("$conf{spool}/jobs/$jid.ip"); - if (!$job_ip) { - xlog("error", "Job $jid empty ip!"); - my $job = unpack_file("$conf{spool}/jobs/$jid"); - $job->{error}="Unknown state"; - archive_job($jid, $job, $STATUS_UNKNOWN, undef, undef); - return "Job $jid, unknown state"; - } else { - if ($job->{force}) { - xlog("error", "Job $jid forced kill"); - my $job = unpack_file("$conf{spool}/jobs/$jid:$job_ip.run"); - if ($nodes{$job_ip}) { - sendcmd_nowait($job_ip, $nodes{$job_ip}->{port}, 'xabort', $jid, 9); - } - $job->{error}="Forced kill"; - archive_job($jid, $job, $STATUS_UNKNOWN, undef, undef); - return "Job $jid forced kill\n"; - } else { - if ($nodes{$job_ip}) { - return "Forward $jid $job_ip:" . $nodes{$job_ip}->{port}; - } else { - return "Job $jid, node $job_ip not online, can't kill\n"; - } - } - } - } - } else { - my $job = unpack_file("$conf{spool}/jobs/$jid"); - $job->{error}="Killed"; - archive_job($jid, $job, $STATUS_NEVERRUN, undef, undef); - return "Job $jid aborted"; - } - } elsif ($cmd eq 'jstat') { -# sent by the execution node to say what the status of a job is - my %opts = %{$args[0]}; - if (my $jid = $opts{id}) { - my $should = slurp("$conf{spool}/jobs/$opts{id}.ip"); - - if (! -e "$conf{spool}/jobs/$opts{id}:$ip.run") { - if (!$should) { - # this could be a repeat, and that's ok - xlog("debug", "Probably already got 'jstat' for $jid"); - } else { - if ($opts{pid}<0) { - xlog("error", "Orphaned job report $jid, from $ip for $should, status: $opts{status}"); - $ip=$should if $opts{status} == $STATUS_ORPHAN; - } else { - if (!($ip eq $should)) { - xlog("error", "Got a report ($opts{status},$opts{jrun}) for job $jid from $ip, should be $should"); - } else { - xlog("error", "Got a report ($opts{status},$opts{jrun}) for job $jid, but there's no $jid:$ip.run file"); - } - } - } - } - if ($opts{jrun}) { -# just a ping - xlog("trace", "Still alive $jid from $ip") if $trace; - touch("$conf{spool}/jobs/$jid:$ip.run") - if -e "$conf{spool}/jobs/$jid:$ip.run"; - if ( ! -e "$conf{spool}/jobs/$jid.ok" ) { - # jexok didn't come through, but should have - xlog("error", "Writing $jid.ok, from jrun signal, may need to restart exec node"); - burp("$conf{spool}/jobs/$jid.ok","jrun"); - } - return(); # no dacks for jrun - } elsif (defined $opts{status}) { -# job is done - if ( -e "$conf{spool}/jobs/$jid:$ip.run" ) { - my $job = unpack_file("$conf{spool}/jobs/$jid:$ip.run"); - if ($job) { - if (my $n=$nodes{$ip}) { - xlog("debug", "Clearing cpu: $job->{cpus}, memory: $job->{memory} from $ip"); - $n->{a_cpus} -= $job->{cpus}; # deallocate - $n->{a_memory} -= $job->{memory}; # deallocate - for (@metrics) { - $n->{"a_$_"} -= $job->{param}->{$_}; - } - # TODO: probably would be nice, in a jstat, to include metrics so all these aren't guessing - - $n->{avail} += $job->{cpus}; # return to avail, until %node is updated - $n->{mem} += $job->{memory}; # return mem - $n->{avail} = max($n->{avail},min($n->{cpus},$n->{orig_cpus}-$n->{load})); # better guess - } else { - xlog("error", "Got a report for $jid, from $ip, but there's no node like that"); - } - archive_job($jid, $job, $opts{status}, $ip, \%opts); - } else { - xlog("debug", "Bad job file $conf{spool}/jobs/$jid:$ip.run"); - } - } else { - my $jhistfile=jhistpath($jid); - if (-e $jhistfile) { - # repeated acks are ok - xlog("debug", "Got a duplicate report from $conf{master} for job $jid ($jhistfile)"); - } else { - xlog("error", "Got a report for an unknown job $jid, from $ip, status: $opts{status}"); - } - } - sendcmd_nowait($ip, $opts{replyport}?$opts{replyport}:$conf{port}, 'dack', jid=>$jid); - } else { - xlog("error", "Got a report for a job $jid with no status info ($src_data)"); - } -# return ack even if not exists - } - } elsif ($cmd eq 'dack') { -# ackknowledge receipt of status signal, so you don't have to do it again - my %dack = @args; - xlog("debug", "Got dack for $dack{jid}") if $trace; - if ($dack{jid}) { - if (!$dack{jrun}) { - if (!$io_wait{$dack{jid}} || !$io_wait{$dack{jid}}->{streams}) { - exec_clean($dack{jid}); - } else { - xlog("debug", "Still waiting on i/o: " . packdump($io_wait{$dack{jid}}) . ", will clean later") if $trace; - # ready to clean up - burp("$conf{spool}/jstat/$dack{jid}.dack",1); - } - } - } - } elsif ($cmd eq 'jexok') { - my ($jex) = @args; - my $jid = $jex->{id}; - xlog("debug", "Writing $jid.ok") if $trace; - touch("$conf{spool}/jobs/$jid:$ip.run"); - burp("$conf{spool}/jobs/$jid.ok",packfile($jex)); - } elsif ($cmd eq 'xexec') { - my ($opts) = @args; - execute_job($opts); - } elsif ($cmd eq 'xclean') { -# cleanup iowait stuff.. i got everything - my ($jid) = @args; - xlog("debug", "Client is finished with $jid\n"); - delete $io_wait{$jid}; - delete $start_wait{$jid}; - if (-e "$conf{spool}/jstat/$jid.dack") { - exec_clean($jid); - } - } elsif ($cmd eq 'xabort') { -# kill job - my ($jid, $sig, $termio) = @args; - - if ($io_wait{$jid} && $io_wait{$jid}->{streams}) { - xlog("debug", "Alerting streams that $jid is dead\n");; - for(values %{$io_wait{$jid}->{streams}}) { - replymsg($_, "quit"); - } - delete $io_wait{$jid}->{streams}; - touch("$conf{spool}/jstat/$jid.dumped"); - } - - my $job = unpack_file("$conf{spool}/jpids/$jid"); - xlog("debug", "Found job $jid with pid $job->{pid}\n");; - if ((my $pid = $job->{pid}) > 1) { - $sig = 2 if $sig !~ /^\d+$/; # force sig to 2 if not a number -# kill the whole shebang - my $ok = kill(-$sig, $pid); - xlog("note", "Kill ($sig) job $jid (pgrp:$pid), return: $ok"); - - if ($ok) { - # report status as "killed" - selfcmd("sstat", {id=>$jid,status=>127+$sig,error=>"Job $jid aborted",dumped=>1}); - return "Job $jid aborted"; - } else { - return "Job $jid kill $sig failed : $!"; - } - if ($io_wait{$jid} && $io_wait{$jid}->{zid}) { - # tell waiters it's dead, and streams are dumped - replymsg($io_wait{$jid}->{zid},"$jid:stat",{status=>127+$sig, error=>"Job $jid aborted", dumped=>1}); - } - } else { - return "Job $jid not found for xabort"; - } - } elsif ($cmd eq 'xio') { - my ($jid) = @args; - my $ready = 0; - my $known = 0; - if ($io_wait{$jid} && $io_wait{$jid}->{streams}) { - # definitely not dumped - $ready = 1; - for(values %{$io_wait{$jid}->{streams}}) { - replymsg($_, "ready"); - } - delete $io_wait{$jid}->{streams}; - $known = 1; - } - - # set wait flag, if i/o wasn't dumped - my $stat=getjobstathash($jid); - - # streams are ready, or job isn't done, or io wasn't dumped - if ($ready||!$stat||!$stat->{dumped}) { - my $end_time; - # job is done - if ($stat && $stat->{rtime}) { - $end_time = (stat("$conf{spool}/jstat/$jid.stat"))[9]+$stat->{rtime}; - } - # finished a while ago - if ($stat && ($end_time < (time()-(5*$conf{ping_secs}))) ) { - xlog("error", "Dumping i/o for completed job $jid because streamer hasn't responded in $def{ping_secs} secs, end-time: $end_time"); - touch("$conf{spool}/jstat/$jid.dumped"); - $stat->{dumped}=1; - } else { - xlog("debug", "Creating io_wait hash entry for $jid, (E:$end_time, $stat)") unless $io_wait{$jid}->{zid} eq $zid; - $io_wait{$jid}->{type} = 'io'; - $io_wait{$jid}->{zid} = $zid; - $io_wait{$jid}->{time} = time(); # toss this entry if it gets oldi - $known = 1; - } - } - - if ($stat) { - if ($stat->{dumped} && $ready ) { - xlog("error", "Dumped stream $jid before ready received"); - } - xlog("debug", "Returning $jid:stat for $jid"); - return("$jid:stat", $stat); - } - if (!$known) { - # unknown... no iowait, no stat - xlog("debug", "Returning $jid:unk for $jid, no io_wait set"); - return("$jid:unk"); - } else { - # iowait ready - return() - } - } elsif ($cmd eq 'xstat') { - my ($jid) = @args; - - if ($io_wait{$jid} && $io_wait{$jid}->{streams}) { - for(values %{$io_wait{$jid}->{streams}}) { - replymsg($_, "quit"); - } - delete $io_wait{$jid}->{streams}; - } - - my $stat=getjobstathash($jid); - return("$jid:stat", $stat) if $stat; - - # only set wait flag if not found - xlog("debug", "Creating io_wait hash 'xstat' entry for $jid"); - - $io_wait{$jid}->{type} = 'stat'; - $io_wait{$jid}->{zid} = $zid; - $io_wait{$jid}->{time} = time(); # toss this entry if it gets old - - return (); # wait for response - } elsif ($cmd eq 'jinfo') { # tell me what host a job is on - my ($jid) = @args; - if (!$jid) { - xlog("error", "Job '$jid' does not exist from $ip"); - return(error=>"Job '$jid' does not exist from $ip"); - } - if (! -e "$conf{spool}/jobs/$jid") { - if (! -e "$conf{spool}/jobs/$jid.ip") { - my $jhist=jhiststat($jid); - if (! $jhist) { - xlog("error", "Job '$jid' does not exist from $ip") if $jid; - return (error=>"Job '$jid' does not exist during jinfo."); - } else { - return(%$jhist); - } - } else { - my $job_ip = slurp("$conf{spool}/jobs/$jid.ip"); - if (!$job_ip) { - xlog("error", "No ip for job $jid"); - return (); - } else { -# route to correct node - if (!$nodes{$job_ip}) { - my $jhist=jhiststat($jid); - if (!$jhist) { - xlog("error", "Job $jid is linked to $job_ip which is not responding"); - return (warn=>"Job $jid is linked to $job_ip which is not responding"); - } else { - return(%$jhist); - } - } else { - return (jid=>$jid, ip=>$job_ip, port=>$nodes{$job_ip}->{port}, hostname=>$nodes{$job_ip}->{hostname}); - } - } - } - } else { - # wait for job start - $start_wait{$jid}->{zid} = $zid; # set router id - $start_wait{$jid}->{time} = time(); # refresh timestamp - return (); # wait for response - } - } elsif ($cmd eq 'run') { -# user command, returns jid=>jobid [, error=>string] - if (!$conf{services}->{queue}) { - return (error=>"No queue service running on this host"); - } else { - my $time = time(); - ++$gjobid; - burp("$conf{spool}/nextid", $gjobid); - -# the job file - my $jid = $gjobid; - my $file = "$conf{spool}/jobs/$jid"; - my $job = $args[0]; - my $gfile = "$conf{spool}/guids/$job->{guid}"; - -# stick the ip the job came from in the options - $job->{time}=time(); - $job->{fromip}=$ip; - $job->{trace}=$trace; - - if ( -e $gfile) { - return (jid=>slurp($gfile), already=>1); - } - xlog("debug", "Created $file\n") if $trace; - open(G, ">$gfile") || return('error'=>"Can't create $gfile : $!"); - open(F, ">$file") || return('error'=>"Can't create $file : $!"); - print F packfile($job); - close F; - - print G $jid; - close G; - return (jid=>$jid); - } - } elsif ($cmd eq 'sstat') { - my ($stat) = @args; - notifystat($stat); - } elsif ($cmd eq 'sready') { - my ($key) = @args; - my ($jid) = $key =~ /^(\d+)/; - if ($io_wait{$jid} && $io_wait{$jid}->{zid}) { - if (!($io_wait{$jid}->{type} eq 'io')) { - return('quit'); - } else { - return('ready'); - } - } - if (! -e "$conf{spool}/jpids/$jid" ) { - xlog("debug", "Dumping stream, $jid is dead\n"); - delete $io_wait{$jid}; - return('quit'); - } - if ( -s "$conf{spool}/jstat/$jid.stat" ) { - if ( $conf{loop_num} > 4 ) { - # any time you check mod times or abandon things, remember to ensure your loop num is more than some small number - if (fmodtime("$conf{spool}/jstat/$jid.stat"){streams}->{$key}=$zid; - $io_wait{$jid}->{time}=time(); - return (); - } elsif ($cmd eq 'stream') { - my ($key, $data) = @args; - my ($jid) = ($key =~ /^(\d+)/); - if ($io_wait{$jid} && $io_wait{$jid}->{type} eq 'io' && $io_wait{$jid}->{zid}) { - replymsg($io_wait{$jid}->{zid},$key, $data); - } else { - xlog("debug", "Dumping stream $key, no wait $jid\n") if $trace; - if ($data !~ /:end/) { - burp("$conf{spool}/jstat/$jid.dumped",1) if length($data)>0; - } else { - touch("$conf{spool}/jstat/$jid.dumped"); - } - } - return (); - } else { - return ('error'=>"Unknown command $cmd ($src_data)"); - } - - return (); -} - -sub jhistpath { - my ($id) = @_; - my $left = int($id/10000); - my $right = $id; - my $dir = "$conf{spool}/jhist/$left"; - mkdir($dir) if ! -d $dir; - return "$dir/$right"; -} - -sub child_exit { - my ($kid, $status) = @_; - if ($pid_jobs{$kid}) { - my $jid=$pid_jobs{$kid}->{jid}; - if ($jid) { - if (-s "$conf{spool}/jstat/$jid.stat") { - notifystat(unpack_file("$conf{spool}/jstat/$jid.stat"), 1); - touch("$conf{spool}/jpids/$jid") if -e "$conf{spool}/jpids/$jid"; - } - } - delete $pid_jobs{$kid}; - } -} - -sub schedule { - my $did=0; - - return unless %nodes; - - while ((my $kid = waitpid(-1, WNOHANG))>1) { - $did=1; - if ($conf{services}->{exec}) { - child_exit($kid, $?); - } - } - - my $tcpu; - for my $n (values %nodes) { - if (defined $n->{a_cpus}) { - $n->{a_cpus} = $n->{a_memory} = 0; - } - $tcpu+=$n->{cpus}; - } - - # pass 1 : deduct resources for running jobs - opendir(D,"$conf{spool}/jobs"); - my @D = sort {(.5-rand()) cmp (.5-rand())} readdir(D); - closedir(D); - - if (($conf{loop_num}%100)==5) { - # ocassionally check for expiration of start_waits, though it should never happen - for my $jid (keys(%start_wait)) { - if ($conf{expire_secs} && (time() > $start_wait{$jid}->{time}+$conf{expire_secs})) { - my $jhistfile=jhistpath($jid); - if ( -e $jhistfile ) { - $did=1; - my $job=unpack_file($jhistfile); - # possibly killed during messaging? in general this shouldn't happen anymore, so it's an error - xlog("error", "Job $jid, reply to jinfo after archive"); - replymsg($start_wait{$jid}->{zid},jid=>$jid,status=>$job->{status}, error=>$job->{error}, hostname=>$job->{host}, ip=>"n/a"); - } - } - } - } - - my $jcnt=0; - my $jcpu=0; - my $jnee=0; - for my $jrun (@D) { - ++$jnee unless ($jrun =~ /\.ip$/); - next unless ($jrun =~ /\.run$/); - --$jnee; - - my $job=read_job($jrun); - my $job_ip=$1 if $jrun=~/\:(\S+)\.run$/; - - # this should be config, min requirements - $job->{cpus} = 1 if $job->{cpus} == 0; - $job->{memory} = ($conf{default_memory}*1000) if $job->{memory} == 0; - for ((@metrics, @labels)) { - $job->{$_} = $conf{"default-$_"} if !$job->{$_} && $conf{"default-$_"}; - } - - # job is running, make sure it's resources are somewhat locked - my ($jid) = $jrun =~ m/^(\d+)/; - - # check to see whether job was ever started - if ($conf{loop_num}>5 && (fmodtime($job->{file}) < (time()-$conf{ping_secs})) && ! -e "$conf{spool}/jobs/$jid.ok") { - rename("$conf{spool}/jobs/$jrun","$conf{spool}/jobs/$jid"); - delete $nodes{$job_ip}; - xlog("error", "No execution confirm. Deregister $job_ip as bad, put job $jid back in the queue"); - } - # check to see whether job has expired - if ($conf{loop_num}>5 && $conf{expire_secs} && (fmodtime($job->{file}) < (time()-$conf{expire_secs}))) { - $did=1; - selfcmd('jstat', {pid=>-1, id=>$jid, status => $STATUS_ORPHAN, error=>"Orphaned job (" . (time()-fmodtime($job->{file})) . "s)"}); - } else { - $job_ip = slurp("$conf{spool}/jobs/$jid.ip") unless $job_ip; - if ($job_ip =~ /\d/ && $nodes{$job_ip} && $nodes{$job_ip}->{ip}) { - ++$jcnt; - $jcpu+=$job->{cpus}; - $nodes{$job_ip}->{a_cpus} += $job->{cpus}; - $nodes{$job_ip}->{a_memory} += $job->{memory}; - for (@metrics) { - $nodes{$job_ip}->{"a_$_"} += $job->{param}->{$_}; - } - } - } - } - - - my @nlist = values %nodes; - # no attempt here to prioritize jobs, just match and go - my $cnt=0; - my $full = ($jcpu/$tcpu); - - for my $jid (@D) { - next unless ($jid =~ /^\d+$/o); - - my $job = read_job($jid); - - next if $job->{state} eq 'hold'; - - $job->{priority} = $conf{default_priority} if !$job->{priority}; - next if ($job->{priority} < 20) && ($job->{priority}/5 < (sqrt(rand())*$full)); - - $full+=($job->{priority}*$job->{cpus})/($tcpu*5); - - # this should be config, min requirements - $job->{cpus} = 1 if $job->{cpus} == 0; - $job->{memory} = ($conf{default_memory}*1000) if $job->{memory} == 0; - - my @dereg; - my @n; - my ($max_av, $max_n); - - if ($cnt >= $conf{max_sched}) { - last; - } - if (!@nlist) { - xlog("debug", "No available nodes, not scheduling"); - last; - } - - ++$cnt; - my $spread = rand() > $conf{spread_pct}/100; - - for (my $i = 0; $i < @nlist; ++$i) { - my $n = $nlist[$i]; - - # jobs need enough memory, cpu availability and disk space... that's it - if (!$n->{ip}) { - xlog("error", "Node has no ip! " . packdump($n)); - next; - } - my $cpus = $n->{cpus} - $n->{a_cpus}; - $cpus = $n->{avail} if $n->{avail} < $cpus; - - my $mem = $n->{tmem} - $n->{a_memory}; - $mem = $n->{mem} if ($n->{tmem} == 0) || ($n->{mem} < $mem); - -# See below, only log reason -# if (debugging()) { -# xlog("debug", "Sched $jid: $n->{ip}: jcpu:$job->{cpus}, norig: $n->{orig_cpus}, ncpu:$n->{cpus}, nall:$n->{a_cpus}, nav:$n->{avail}, cpus:$cpus , jmem:$job->{memory}, nmem:$n->{mem}, avmem:$mem"); -# } - - if ($cpus <= 0) { - # pull the node out of the list - xlog("debug", "Removing $n->{hostname} from node list, cpus are $cpus"); - splice(@nlist, $i, 1); - --$i; - } - # did it ping recently? - if ($n->{ping} > (time()-$conf{ping_secs}*6)) { - my $ok = 1; - for (@metrics) { - if (($n->{"param-$_"} - $n->{"a_$_"}) < $job->{param}->{$_}) { - $ok =0; - } - } - for (@labels) { - if (!($n->{"param-$_"} eq $job->{param}->{$_})) { - $ok =0; - } - } - - if ( ($mem >= $job->{memory}) && - (($cpus+$conf{idle_load}) >= $job->{cpus}) && - ($n->{disk} >= $job->{disk}) && - ($ok) - ) { - next if $job->{hosts} && $job->{hosts} !~ /$n->{hostname}/; - - my $match = 1; - if ($conf{match}) { - $match = evalctx($conf{match}, node=>$n, job=>$job); # eval perl expression - if ($@) { - $match = 1; # permit all on error? - } - } - next unless $match; - - if ($spread) { - # use *least* busy node - if ($n->{load} < $conf{idle_load}) { - # don't bother checking further, this node is bored - $max_n = $n; - last; - } else { - if ($n->{avail} > $max_av) { - $max_n = $n; - $max_av = $n->{avail}; - } - } - } else { - # use *first* node - $max_n = $n; - $max_av = $n->{avail}; - last; - } - } else { - my $reason = ""; - if (!($mem >= $job->{memory})) { - $reason = "memory ($mem)"; - } elsif (!(($cpus+$conf{idle_load}) >= $job->{cpus})) { - $reason = "cpus ($cpus)"; - } elsif (!(($n->{disk} >= $job->{disk}))) { - $reason = "disk ($n->{disk})"; - } else { - for (@metrics) { - if (($n->{"param-$_"} - $n->{"a_$_"}) < $job->{param}->{$_}) { - $reason = "$_ (" . $n->{"a_$_"} . ")"; - } - } - } - xlog("debug", "Sched $jid: $n->{ip}: $reason"); - } - } else { - push @dereg, $n->{ip} if $n->{ip}; - } - } - for my $ip (@dereg) { - xlog("note", "Deregister node '$ip', last ping was " . (time()-$nodes{$ip}->{ping}) . " seconds ago"); - delete $nodes{$ip}; - $did=1; - } - if ($max_n) { - $did=1; - xlog("debug", "Matched '$max_n->{ip}' to job $job->{file}") if $job->{trace}; - - # todo... change this... it's an ugly way of owning jobs - my $jmine = "$job->{file}:" . $max_n->{ip} . ".run"; - touch($job->{file}) if -e $job->{file}; - rename($job->{file}, $jmine); - if ( -e $jmine ) { - my $jptr = "$job->{file}" . ".ip"; - burp($jptr, $max_n->{ip}); - noderun($max_n, $jid, $job); - - # TODO: handle metrics universally, allocated, total, and current - - $max_n->{a_cpus} += $job->{cpus}; # allocate - $max_n->{a_memory} += $job->{memory}; - for (@metrics) { - $max_n->{"a_$_"} += $job->{param}->{$_}; - } - $max_n->{avail} -= $job->{cpus}; # assume being used - $max_n->{mem} -= $job->{memory}; # assume being used - ++$jcnt; - } else { - xlog("error", "Rename failed for $jmine\n"); - } - } else { - if ($conf{backup_grid}) { - # TODO: fork exec to backup grid, and add to list of pids to track... as if you're an exec node - } - xlog("debug", "Can't find node for $jid, $jcnt jobs running did=$did\n") if $conf{trace}; - } - } - - # kickstart nodes, if needed - $did|=kicknodes(); - - return $did; -} - -sub read_job { - my ($jid)=@_; - my $jfil = "$conf{spool}/jobs/$jid"; - next unless -f $jfil; - my $ref = unpack_file($jfil); - if (!(ref($ref) eq 'HASH')) { - xlog("error", "Invalid job file format ($ref): $jfil -> $conf{spool}/trash/$jid\n"); - rename($jfil, "$conf{spool}/trash/$jid"); - } - $ref->{file}=$jfil; - return $ref; -} - -sub noderun { - my ($n, $jid, $job) = @_; - # send 'exec' - $job->{port} = $conf{port}; # reply to me on this port - $job->{id} = $jid; - if ($start_wait{$jid}) { - # info needed for status/stdio collection from execution node - replymsg($start_wait{$jid}->{zid},jid=>$jid, ip=>$n->{ip}, port=>$n->{port}, hostname=>$n->{hostname}); - delete $start_wait{$jid}; - } - sendcmd($n->{ip},$n->{port},'xexec', $job); -} - -# called at start, and kill -HUP -sub init { - $ENV{HOSTNAME} = `hostname`; - chomp $ENV{HOSTNAME}; - readconf(); - $conf{version}=$VERSION; - if ($daemon) { - mkdir $conf{spool}; - mkdir "$conf{spool}/jobs"; - mkdir "$conf{spool}/jstat"; - mkdir "$conf{spool}/jhist"; - mkdir "$conf{spool}/nodes"; - mkdir "$conf{spool}/pids"; - mkdir "$conf{spool}/jpids"; - mkdir "$conf{spool}/trash"; - mkdir "$conf{spool}/guids"; - # reregister on reread - delete $conf{node}; - } - - $conf{hostip} = host2ip($conf{hostname}) unless $conf{hostip}; - - if (!$conf{hostip}) { - die "Can't start server without knowing ip. $conf{hostname} does not resolve to ip, and no hostip defined\n"; - } -} - -sub getmem { - my ($cache, $free, $tot); - open F, "/proc/meminfo"; - while () { - $tot = $1 if /MemTotal:\s*(\d+)/i; - $free = $1 if /MemFree:\s*(\d+)/i; - $cache = $1 if /Cached:\s*(\d+)/i; - last if $cache & $free; - } - close F; - return ($tot, $cache + $free); -} - -sub getcpus { - my $cores; - open F, "/proc/cpuinfo"; - my %cores; - while () { - $cores{$1}=1 if /processor\s*:\s*(\d+)/i; - } - close F; - $cores = scalar keys %cores if %cores; - return $cores; -} - -sub getbench { - my ($force)=@_; - my $bench = slurp("$conf{spool}/bench"); - if (!$bench||$force||(fmodtime("$conf{spool}/bench")<(time()-$conf{bench_secs}))) { - my $s = Time::HiRes::time(); - my $i=0; - while (Time::HiRes::time() < $s+3) { - my %d = (1..10000); - map {$d{$_}*=3.333} keys(%d); - map {$d{$_}/=2.222} keys(%d); - ++$i; - } - my $e = Time::HiRes::time(); - $bench=$i/($e-$s); - burp("$conf{spool}/bench",$bench); - } - return $bench; -} - -sub slurp -{ - my $dat; - my $in = new IO::File; - return undef unless open($in, $_[0]); - local $/ = undef; - $dat = $in->getline; - $in->close; - close($in); - return $dat; -} - -sub srvexec { - my $did=0; - - # assure we can't flood on misconfig - $conf{ping_secs} = 5 if $conf{ping_secs} == 0; - - if ($conf{services}->{exec} && (!$conf{node} || (time() > ($conf{node}->{ping}+$conf{ping_secs}-1)))) { - # ping master with stats - $conf{node}->{arch} = `arch`; chomp $conf{node}->{arch}; - ($conf{node}->{tmem},$conf{node}->{mem}) = getmem(); # free mem - $conf{node}->{load} = slurp("/proc/loadavg"); # load - $conf{node}->{orig_cpus} = getcpus(); - $conf{node}->{cpus} = $conf{cpus} ? $conf{cpus} : $conf{node}->{orig_cpus}; # num cores - $conf{node}->{bench} = $conf{bench} ? $conf{bench} : getbench(); # num cores - $conf{node}->{avail} = min($conf{node}->{cpus}, $conf{node}->{orig_cpus} - $conf{node}->{load}); - $conf{node}->{ping} = time(); - $conf{node}->{port} = $conf{port}; - $conf{node}->{ip} = $conf{hostip}; - $conf{node}->{hostname} = $conf{hostname}; - $conf{node}->{kernel} = `uname -rv`; chomp $conf{node}->{kernel}; - $conf{node}->{arch} = `uname -m`; chomp $conf{node}->{arch}; - - for ((@labels,@metrics)) { - $conf{node}->{"param-$_"} = $conf{"param-$_"}; - } - - $did=1; - $conf{registered} = 1; - if (!sendcmd($conf{master}, $conf{master_port}, 'node', $conf{node})) { - $conf{registered} = 0; - } - } - - while ((my $kid = waitpid(-1, WNOHANG))>1) { - $did=1; - child_exit($kid, $?); - } - - if (time() > ($conf{lastpidtime}+$conf{ping_secs})) { - # check for expiration of io_wait - if ($conf{loop_num}>5) { - for (keys(%io_wait)) { - if ($conf{expire_secs} && (time() > $io_wait{$_}->{time}+$conf{expire_secs})) { - delete $io_wait{$_}; - } - } - } - - $did=1; - opendir(D,"$conf{spool}/jpids") or die "Can't open jpids\n"; - - my $mjob; - my $oksusp; - while(my $jid = readdir(D)) { - next unless $jid =~ /^\d/; - next unless fmodtime("$conf{spool}/jpids/$jid") < time()-$conf{ping_secs}; - if (-s "$conf{spool}/jstat/$jid.stat") { - notifystat(unpack_file("$conf{spool}/jstat/$jid.stat"), 1); - next; - } - # been a while... check to see if it's alive - my $job = unpack_file("$conf{spool}/jpids/$jid"); - my $pid = $job->{pid}; - - # there could be a fake pid for a jobs that "ran" but for whatever reason, never started - - next unless $pid =~ /^\d+$/; - - if ($conf{node}->{avail} < -($conf{node}->{cpus}/2)) { - if (!$mjob && ($job->{priority} < $mjob->{priority})) { - $mjob = $job; - } - ++$oksusp; - } - - if ($conf{node}->{avail} > 0) { - if ( -e "$conf{spool}/jstat/$job->{id}.held" ) { - kill(-18, $pid); - xlog("note", "Resuming $job->{id}, because node is available"); - sendcmd($conf{master},$conf{master_port}, 'jedit', $mjob->{id}, state=>''); - unlink("$conf{spool}/jstat/$job->{id}.held"); - } - } - - # wait for pids - my $alive = kill(0, $pid); - if ($alive) { - $io_wait{$jid}->{time}=time() if ($io_wait{$jid}); - notifystat({id=>$jid, jrun=>1}); - touch("$conf{spool}/jpids/$jid") if -e "$conf{spool}/jpids/$jid"; - } else { - notifystat({id=>$jid, status=>$STATUS_ORPHAN, error=>"Unknown $jid exit code, really bad!", dumped=>1}); - } - } - closedir D; - - if ($mjob && $oksusp > 1) { - kill(-19, $mjob->{pid}); - touch("$conf{spool}/jstat/$mjob->{id}.held"); - xlog("note", "Suspending $mjob->{id}, because node is busy"); - sendcmd($conf{master},$conf{master_port}, 'jedit', $mjob->{id}, state=>'susp'); - } - - $conf{lastpidtime} = time(); - } -} - -sub touch { - my $nowisthe=time(); - return utime($nowisthe, $nowisthe, @_); -} - -sub fmodtime { - return (stat($_[0]))[9]; -} - -sub notifystat { - my ($stat, $from_jstat, $nowait) = @_; - - confess("stat is required\n") if (!$stat); - - if (!$stat->{jrun}) { - if ($io_wait{$stat->{id}} && $io_wait{$stat->{id}}->{zid}) { - # tell the client that the job is done - replymsg($io_wait{$stat->{id}}->{zid},"$stat->{id}:stat",$stat); - } else { - # it's not a request to notify that came from the file - # and yet, the file is there, with, presumably, valid status info - # so which do we report? - - # I assume, report what's in the file....ie: it was there first - # this can (rarely) happen if you kill a job after it completes successfully, for example - - # TODO: the safer thing is to report the "worst case" ... ie: if either is an error, report error - # and if both agree ... then don't log anything here... not a problem - - if ( ! $from_jstat && -s "$conf{spool}/jstat/$stat->{id}.stat") { - # log the problem for inspection - xlog("error", "Got alternative status for $stat->{id}, this may not be correct!"); - # save the new status as an error file to inspect later - burp("$conf{spool}/jstat/$stat->{id}.stat-err", packfile($stat)); - } - } - } - - # already dack'ed - if ( -e "$conf{spool}/jstat/$stat->{id}.dack" ) { - xlog("debug", "Not notifying status for $stat->{id}, dack already set"); - exec_clean($stat->{id}); - return; - } - - xlog("debug", "Notifying status " . packdump($stat) . ".\n") if ($conf{trace} || $stat->{trace}); - - # tell main queue about the status change - $stat->{replyport}=$conf{port}; - if ($nowait) { - sendcmd_nowait($conf{master},$conf{master_port}, 'jstat', $stat); - } else { - sendcmd($conf{master},$conf{master_port}, 'jstat', $stat); - } -} - -# unpack a very simple configuration-style file -sub funpack { - my ($fil, $dat) = @_; - return gunpack(slurp($fil), $dat); -} - -sub gunpack { - my ($msg, $dat) = @_; - $dat = {} if !$dat; - for (split(/\n/, $msg)) { - my ($k, $v) = m/^\s*([^:=]+)?\s*[:=]\s*(.*?)\s*$/; - $k = lc($k); - $dat->{$k}=$v; - } - return $dat; -} - -# more complex config file support -# contains logic for turning delimited lists into array configs, etc. -sub readconf { - %conf = %def; - - _readconf("$conf{config}"); - - # defines happen at the end so defaults can get unpacked - for (keys %conf) { - next if ref $conf{$_}; - if ($_ eq 'match' || $_ =~ /^label/) { - # match rules are evaluated during matching, but reval now just to test - my $test = $conf{$_}; - # see http://www.perlmonks.org/?node_id=685699 for why this is OK - $test =~ s/`[^`]+`/1/g; # turn off backtics - $test =~ s/system\([^\)]\)/1/g; # turn off system calls - $safe->reval($test); # check syntax - if ($@) { - # report a problem with the rule - xlog("error", "Error testing match rule : $@"); - } - $@=''; - } elsif ( ! ($conf{$_} =~ s/^\{(.*)\}$/eval($1)/gei) ) { - # evaluate simple inline vars at configure-time - if ( $conf{$_} =~ m/\$([\w-]+)\{/) { - xlog("error", "Error, rule has a hash variable, which requires braces\n"); - } else { - $conf{$_} =~ s/\$([\w-]+)/$conf{lc($1)}?$conf{lc($1)}:$1/gei; - } - } - if ($_=~ /^param-(.*)/) { - my $nm=$1; - # evaluates to the value for that param... if numeric is a "metric" otherwise is a "label" - if ($conf{$_} =~ /^[\d.]+$/) { - push @metrics, $nm; - } else { - push @labels, $nm; - } - } - } - - # reorganize some conf vars into a hash - for my $k (qw(services log_types)) { - my $v; - $v = $conf{$k}; - $conf{$k} = {}; - for (split(/[\s,]+/,$v)) { - $conf{$k}->{$_} = 1; - } - } - - # these low-level entries are controlled by trace bits in packets... not by user preference - $conf{log_types}->{trace}=1; - - # stored as an array reference - $conf{env} = [split(/[\s,]+/,$conf{env})] unless ref($conf{env}) eq 'ARRAY'; - - # split up host/port - $conf{port} = $1 if $conf{bind} =~ s/:(\d+)$//; - # same for master (if different - has to be if there's a queue/exec on the same box) - $conf{master_port} = $1 if $conf{master} =~ s/:(\d+)$//; - $conf{master_port} = $conf{port} if !$conf{master_port}; -} - -# basic config reader, like funpack, but uses the %conf and %def hashes -sub _readconf { - my ($f) = @_; - %conf = %def; - if (!open(CONF, $f)) { - xlog("error", "Can't open '$f'"); - die("Can't open config '$f'\n"); - } - while() { - next if /^\s*#/; - my ($k, $v) = m/^\s*([^:]+)?\s*:\s*(.*?)\s*$/; - $k = lc($k); - if ($k eq 'include') { - _readconf($v); - } else { - $conf{$k} = $v; - } - } - close CONF; -} - -# log stuff. TODO: cache opened handles and test for operation... that way you won't have to reopen so many! -sub xlog { - my $m = join("\t", @_); - my $class = $_[0]; - return unless ref($conf{log_types}) && $conf{log_types}->{$class}; - $m =~ s/\n/ /g; - my $line = scalar(localtime) . "\t" . $m . "\n"; - my $log = $conf{"log_file"}; - if ($log && ! ($log eq '-')) { - open LOG, ">>" . $log; - print LOG $line; - close LOG; - print STDERR $line if $log_to_stderr; - } else { - print $line; - } - return $line; -} - -# wait for STDERR and STDOUT from a command -sub waitio { - my ($host, $port, $jobid, $opt) = @_; - my @resp; - my $stat; - my $err; - my $diderr; - - my $sock = _sendcmd($host, $port, 'xio', $jobid); - - my $stat_time; - $|=1; - my $needio = !$opt->{err}+!$opt->{out}; - my $start_wait=time(); - my $unk; - while ((!defined $stat) || $needio) { - my $got = 0; - # wait up to 5 seconds for output - zmq_poll([{ - socket=>$sock, events=>ZMQ_POLLIN, callback=> sub { - my ($ip, $trace, $key, $dat) = recvmsg($sock); - if ($ip) { - $got = 1; - my ($jid, $type, $cmd) = split /:/, $key; - if ($type eq 'err') { - $diderr = 1 if $dat; - print STDERR $dat if $dat; - --$needio if $cmd eq 'end'; - } elsif($type eq 'out') { - print STDOUT $dat if $dat; - --$needio if $cmd eq 'end'; - } elsif($type eq 'stat') { - $stat = $dat->{status}; - $err = $dat->{error}; - $stat_time=time() if !$stat_time; - - if (time()>($stat_time+$conf{expire_secs})) { - # i'm taking charge of dumping it - xlog("error", "Job $jobid, dumping i/o, and reporting failure... took too long"); - $dat->{dumped}=1; - } - - if ($dat->{dumped}) { - # don't wait longer for i/o if the i/o was lost - # todo... fail here if stat is 0? - if (!$stat) { - $stat=37; - $err="Failing because i/o was dumped"; - } - $needio = 0; - } - # what does the client do with the times? - } elsif($type eq 'unk') { - ++$unk; - sleep(1); - } else { - xlog("error", "Job $jobid, got message ($jid, $type, $cmd) in response to xio"); - } - } else { - xlog("error", "Job $jobid, got message ($key) in response to xio"); - } - }}],$conf{retry_secs}*2*1000); - - if (!$got) { - # if you didn't get anything, ask again - $sock = _sendcmd($host, $port, 'xio', $jobid); - if (time()>$start_wait+$conf{retry_secs}*7) { - # been a while...ask head node if this job is dead? - my %info = waitmsg($conf{master}, $conf{master_port}, 'jinfo', $jobid); - if ($info{status} =~ /\d/) { - $stat=$info{status}; - $err=$info{error}; - $needio = 0; - } - if ($unk > 200) { - $stat=$STATUS_UNKNOWN; - $err="Error, job submission failed"; - $needio = 0; - } - # restart wait time - $start_wait=time(); - } - } - } - return ($stat, $err, $diderr); -} - -sub waitmsg { - my $sock = _sendcmd(@_); - my ($ip, $trace, @msg) = recvmsg($sock); - return @msg; -} - -# this tries over and over to get a response.... -# usually this is not needed, but if the outer disappears, the zqm-id will be lost, so -# this is just for recovery in the event of the router shutting down -sub waitmsg_retry { - my $retry = shift @_; - - my $got=0; - my ($ip, $trace, @msg); - my $sock=_sendcmd(@_); - while (!$got) { - zmq_poll([ - { - socket=>$sock, events=>ZMQ_POLLIN, callback=> sub { - $got=1; - ($ip, $trace, @msg) = recvmsg($sock); - }}, - ],$retry); - - if (!$got){ - $sock=_sendcmd(@_); - } - } - return @msg; -} - -sub sendcmd_nowait { - my ($host, $port, @cmd) = @_; - return 0 unless my $sock = getsock($host, $port); - my $xcmd = packcmd(@cmd); - - # 1 millisecond wait -# zmq_poll([ -# { -# socket=>$sock, events=>ZMQ_POLLOUT, callback=> sub {} -# }, -# ],1000); - - if (zmq_send($sock, "", 0, ZMQ_SNDMORE|ZMQ_NOBLOCK)==0) { - if (zmq_send($sock, $xcmd)==-1) { - xlog("error","Can't send [@cmd] to $host:$port : $!", Carp::longmess()); - return 0; - } - } else { - return 0; - } - return 1; -} - -sub recvmsg { - my ($sock) = @_; - my @ret; - my ($buf, $dat); - if (my $msg = zmq_recvmsg($sock)) { - $msg = zmq_recvmsg($sock); - if ($msg) { - my $buf = zmq_msg_data($msg); - xlog("debug", "Client $$ got response: $buf") if $conf{trace}; - if ($buf) { - return unpackcmd($buf); - } - } - } - return @ret; -} - - -sub sendcmd { - my $sock = _sendcmd(@_); - return $sock ? 1 : undef; -} - -sub packcmd { - if (!$conf{hostip}) { - confess("Need a defined hostip"); - } - return encode_json([$conf{hostip},$conf{trace},@_]); -} - -sub packref { - if (!(ref($_[0]) eq 'ARRAY')) { - croak "All packrefs are arrays"; - } else { - return encode_json([$conf{hostip},$conf{trace},@{$_[0]}]); - } -} - -sub unpackcmd { - my $ref = eval{decode_json($_[0])}; - if (!$@ && (ref($ref) eq 'ARRAY')) { - return @$ref; - } else { - return undef; - } -} - -sub packfile { - croak unless ref $_[0]; - if (ref $_[0] eq 'HASH') { - $_[0]->{version}=$VERSION; - } - return encode_json($_[0]); -} - -sub unpack_file { - my $ref; - eval { - $ref=decode_json(slurp($_[0])); - }; - carp "$@" if $@; - return $ref; -} - -### sends a command to a server/router, returns the socket to wait on -sub getsock { - my ($host, $port) = @_; - my $sock; - if (!$ZMQS{"tcp://$host:$port"}) { - $sock = zmq_socket($context, ZMQ_DEALER); - if (!$daemon) { - # clients should block if messages are queued, not bang on nonexistant servers - zmq_setsockopt($sock, ZMQ_HWM, 50); - xlog("debug", "Set HWM to 50 for $host in pid $$\n"); - } - if (!zmq_connect($sock,"tcp://$host:$port")) { - $ZMQS{"tcp://$host:$port"} = $sock; - } else { - croak "Can't connect to tcp://$host:$port: $@\n"; - } - } else { - $sock = $ZMQS{"tcp://$host:$port"}; - } - - if (!$sock) { - xlog("error",$@="Can't connect to $host:$port", Carp::longmess()); - return undef; - } - return $sock; -} - -sub _sendcmd { - my ($host, $port, @cmd) = @_; - return undef unless my $sock = getsock($host, $port); - my $xcmd = packcmd(@cmd); - zmq_send($sock, "", 0, ZMQ_SNDMORE); - if (zmq_send($sock, $xcmd)==-1) { - xlog("error","Can't send [@cmd] to $host:$port : $!", Carp::longmess()); - } - return $sock; -} - -sub burp -{ - my ($f, $dat) = @_; - my $h = new IO::File; - do { - eval { - open ($h, ">$f.tmp") || die "$f: $!"; - print $h $dat; - close $h; - rename("$f.tmp", $f) || die "$f: $!"; - }; - if ($@) { - xlog("error",$!); - } - } while ($@); -} - -sub usage { - my $u; - $u .= <<'EOF' unless $make; -Usage: grun command... - or: grun -d [] - or: grun -k [] - or: grun -e key=val[,key2=val2...] [] - or: grun -q [] - -Lightweight job queueing system - -For more help, run grun -?, grun -d -?, grun -C -? or grun -q -?. -EOF - - $u .= <<'EOF' unless $daemon || $qinfo || $editjob || $make; - -Execution Options: - -f|ile FILE Read FILE for job options (mem, cpu, cmd, etc) - -m|em INT memory minimum in MB - -c|pu CPUS minimum number of cpus - -host N1,N2 specify certain hosts - -j|obid TEXT user-supplied job ID - -v|erbose print job id, execution node and stats to STDERR - -M|make only run job if inputs are newer than outputs - -r|priority INT run job with only run job if inputs are newer than outputs - - -noio disable io-processing, but wait for completion - -nowait no io and don't wait, just start the command - -e|rr FILE write stderr directly to FILE, no spool * - -o|ut FILE write stdout directly to FILE, no spool * - -All options can be abbreviated to uniqueness. - -* You can append error & output with -oa, -ea or -out-append -err-append, -or both with -oea, or --out-err-append. - -If the command contains shell metacharacters, it's wrapped in a bash script -EOF - - $u .= <<'EOF' if $make; -Make Semantics: - - %i:file Input file, left in the command line - #i:file Input file, removed the command line before executing - %o:file Output file, left in the command line - #o:file Output file, removed the command line before executing - < file Input file, left in the command line - > file Output file, left in the command line - %!>file Output, but don't set as a dependency - -For Example: - grun "gzip %i:x.foo #o>x.foo.gz" - -If a command fails under Make Semantics, the output file(s) will be -set to FILE.failed. - -NFS sync works better with make semantics. - -EOF - - $u .= <<'EOF' if $qinfo; - -Query Options: - -a|ll Query all nodes - -n|odes ($master) List of nodes to query - -Query Commands: - [-]status List nodes (q) - [-]jobs List jobs (q) - [-]history List prior jobs (q) - [-]conf Dump config from memory (q,e) -EOF - - $u .= <<'EOF' if $daemon; - -Daemon Options: - -h|osts (local) One or more hosts - -r|eload Reload config - -k|ill Kill running server - -R|ESTART Kill and restart a running server - -Without an option, -d just starts the daemon on the local machine. -EOF - $u .= <<'EOF' if $editjob; - -Edit Keys: - hold Hold job (no value needed) - resume Resume job - memory=N Memory in MB - cpus=N # of Cpus needed -EOF - - $u .= <<'EOF' if !$make; - -Common Options: - -C FILE (/etc/grun.conf) Config file location - -t|race Turn on debugging in the log file - -V Print version and exit - -? Show this help page -EOF - - $u .= <<'EOF' if defined($config) && $config eq ''; - -Configuration File: - -All config variables written as {value} are interpreted as perl code, and get evaluated at startup. - -The "include" varialbe actually just includes the file specified, as if it were part of the original file. - -All non-code configuration variables can include '$varname', which gets expanded to the value of another config var. - -Be careful with match code. It it's slow, it will kill the performance of your main node. - -Common variables: - - master (localhost) Hostname[:port] of master node - spool (/var/spool/grun) Location for queue & io temp storage - log_file Location of the log - services Must be 'queue' and/or 'exec' - port Port to listen on (5184) - bind[:port] Address to bind to (0.0.0.0) - trace Turn tracing on for the whole server - -Queue config vars: - - env (PATH) List of environment varialbes to copy to the processes. An asterisk (*) means 'ALL' - expire_secs (0) If set, jobs that aren't pinged in time get (failed or retried) - expire_action (retry) Can be 'retry', 'fail' - idle_load (.3) If load is less than this amount, then considered idle - io_keep (3600) Time to keep unretrieved stdio files (0=forever) - log_file Where to send "xlog" output - pid_file (/var/run/grun.pid) - ping_secs (30) Nodes ping the master this often. - ping_expire (2*$ping_secs) Drop a node if it doesn't ping in time - -Cli vars & defaults: - - nfs_sync (1) Whether to force-sync the directory cache after a job is run - default_cpu (1) Default cpu reservation - default_memory (1m) Default memory for jobs - default_priority (20) Default priority for jobs - -Execution node config vars: - - match Perl code that must eval to TRUE for a node match - full_match (1) If jobs queue is full, this is evaluated - full_exec If full match returns true, then this command is run - wrap Job command wrapper - -EOF - return $u; -} - -sub showconf { - return pretty_encode(\%conf); -} - -sub showhist { - my %opt; - - $opt{fmt} = '%jid\t%user\t%stat\t%cwd\t%cmd\t%host\t%mtime\n'; - - { - local @ARGV = @_; - GetOptions(\%opt, "count|c=i", "user=s","job=i@","resubmit","fmt|F=s","long","grep|g=s","dump"); - @_=@ARGV; - } - - if ($_[0] =~ /[a-z]/ && !$opt{user}) { - $opt{user} = $_[0] - } else { - while ($_[0] =~ /^\d+$/) { - push @{$opt{job}}, $_[0]; - shift; - } - } - - my $r; # the result - - my $count = $opt{count}; - $count = 10 if !$count; - my @J; - if ($opt{job}) { - for (@{$opt{job}}) { - my $f = (jhistpath($_)); - if ( -e $f ) { - my $t=unpack_file($f); - my ($jid) = $f =~ /\/(.+)$/; - $t->{jid}=$jid; - my $mtime = (stat($f))[9]; - $t->{mtime}=$mtime; - push @J, $t; - } else { - xlog("error", "History for job $_ requested, but file not found\n"); - } - } - } else { - my $k = 5; - my @mx = ((-1) x $k); - opendir(D,"$conf{spool}/jhist"); - while(defined ($_=readdir(D))) { - next unless /^\d+$/; - for (my $i = 0; $i < $k; ++$i) { - if ($_ > $mx[$i]) { - # shift everything up - my $top=$i++; - for (; $i < $k; ++$i) { - $mx[$i]=$mx[$i-1]; - } - $mx[$top]=$_; - last; - } - } - } - closedir(D); - - for (my $i = 0; $i < $k; ++$i) { - if (@J < $count) { - opendir(D,"$conf{spool}/jhist/$mx[$i]"); - my @T = readdir(D); - @T = sort {$b <=> $a} @T; - closedir(D); - # prepend dir - for my $jid (@T) { - next unless $jid=~/^\d/; - my $f = "$conf{spool}/jhist/$mx[$i]/$jid"; - my $job=eval{unpack_file($f)}; - next unless ref($job); - - # support array/text formats - my @cmd=ref $job->{cmd} ? @{$job->{cmd}} : ($job->{cmd}); - - # user supplied filter - next if $opt{user} && ! ($job->{user} eq $opt{user}); - next if $opt{grep} && "$job->{user}\t@cmd\t$job->{cwd}" !~ $opt{grep}; - - my $mtime = (stat($f))[9]; - - next unless $mtime; - - $job->{jid}=$jid; - $job->{mtime}=$mtime; - - push @J, $job; - last if @J >= $count; - } - } - } - } - - for my $job (@J) { - my $jid=$job->{jid}; - my $mtime = $job->{mtime}; - - my @cmd=ref $job->{cmd} ? @{$job->{cmd}} : ($job->{cmd}); - next if $opt{user} && ! ($job->{user} eq $opt{user}); - next if $opt{grep} && "$job->{user}\t@cmd\t$job->{cwd}" !~ $opt{grep}; - --$count; - my %job=%{$job}; - - $job{status} = $job->{usage}->{status} if $job->{usage} && ! $job->{status}; - $job{status} = ($job{status} >> 8) if 0 == ($job{status} & 0xFF); - # standard - $job{status} = 'OK' if $job{status} eq 0; - $job{status} = 'KILLED' if $job{status} eq 199; - $job{status} = 'INT' if $job{status} eq 2; - $job{status} = 'ORPHAN' if $job{status} eq $STATUS_ORPHAN; - $job{status} = 'SIGSEGV' if $job{status} eq 11; - $job{status} = 'SIGPIPE' if $job{status} eq 13; - $job{status} = 'SIGFPE' if $job{status} eq 8; - - # linux specific - $job{status} = 'NOTFOUND' if $job{status} eq 127; - $job{status} = 'ASSERT' if $job{status} eq 134; - $job{status} = 'OUTOFMEM' if $job{status} eq 137; - $job{status} = 'ALTSEGV' if $job{status} eq 139; - $job{stat} = $job{status}; - - $job{wait} = $job{usage}->{start_time}-$job{time}; - - my $cmd = join(' ', @cmd); - $cmd =~ s/\n\s+/\n/g; - $cmd =~ s/^\s+//; - $cmd =~ s/\s+$//; - $cmd =~ s/\n/;/g; - if ($nodes{$job{host}} && $nodes{$job{host}}->{hostname}) { - $job{host}=$nodes{$job{host}}->{hostname} - } elsif (-e (my $n="$conf{spool}/nodes/$job{host}.reg")) { - my $node=unpack_file($n); - $job{host}=$node->{hostname}; - } - $job{jid}=$jid; - $job{cmd}=$cmd; -# $job{env}=join ':' . map { $_.'='.$job{env}{$_} } keys %{$job{env}}; - $job{mtime}=fmtime($mtime); - if (ref($job{usage})) { - for (keys(%{$job{usage}})) { - $job{"usage_".$_}=$job{usage}{$_}; - } - delete $job{usage}; - } - if ($opt{long}) { - $r .= "----------\n"; - for(sort(keys(%job))) { - $r .= "$_=" . (ref($job{$_})?packdump($job{$_}):$job{$_}) . "\n"; - } - } elsif ($opt{dump}) { - $r .= packdump($job) . "\n"; - } else { - $r .= fmtstr($opt{fmt}, \%job); - } - - last if $count == 0; - } - return $r; -} - -sub fmtime { - my ($t) = @_; - return strftime("%m/%d %H:%M",localtime($t)); -} - -# grun -q status -sub shownodes { - my $r; - $r .= sprintf "%-15s %-14s %-8s Bench\n", 'Hostname','Memory', 'Cpu'; - my @nodes = getnodes(); - for my $node (sort {$a->{hostname} cmp $b->{hostname}} @nodes) { - if ($node->{ping} > time() - ($conf{ping_secs} * 2) ) { - chomp($node->{hostname}); - $node->{hostname} = substr($node->{hostname},0,15); - - my $cpus = $node->{cpus} - $node->{a_cpus}; - $cpus = $node->{avail} if $node->{avail} < $cpus; - - my $mem = $node->{tmem} - $node->{a_memory}; - $mem = $node->{mem} if $node->{tmem} > 0 && $node->{mem} < $mem; - - $r .= sprintf "%-15s %6dm/%-6d %4.1f/%-2d %3d\n", $node->{hostname}, $node->{mem}/1000, $node->{tmem}/1000,$node->{avail},$node->{cpus},$node->{bench}; - } - } - return $r; -} - -# grun -q jobs -sub showjobs { - my %opt; - - $opt{fmt} = '%s:jid\t%s:user\t%s:stat\t%s:cwd\t%s:cmd\n'; - { - local @ARGV = @_; - GetOptions(\%opt, "dump|d", "user=s","job=i","fmt|F=s","long","debug"); - @_=@ARGV; - } - - if ($_[0]) { - my $user = shift @_; - if ($user =~ /^\d+$/) { - $opt{job}=$user; - } else { - $opt{user}=$user if !($user eq ''); - } - } - - xlog("debug", "Show job for user:$opt{user}, job:$opt{job}\n"); - - my $r; -# $r .= sprintf "%s\t%s\t%s\t%s\t%s\n", 'JobID','User','Host','Cwd','Command'; - - my $now = time(); - opendir(D,"$conf{spool}/jobs"); - while(my $jid=readdir(D)) { - next if $jid =~ /\.ip$/; - next if $jid =~ /\.ok$/; - my $f = "$conf{spool}/jobs/$jid"; - next unless -f $f; - my $job = unpack_file($f); - if (ref($job)) { - my %job=%{$job}; - next if $opt{user} && ! ($opt{user} eq $job{user}); - next if $opt{job} && ! ($jid =~ /^$opt{job}\b/); - my $stat = '(I)'; - $stat = '(H)' if $job->{state} eq 'hold'; - if ($jid =~ s/:([.\d]+?)\.run$//) { - my $ip = $1; - my $node = unpack_file("$conf{spool}/nodes/$ip.reg"); - $stat = $node->{hostname}; chomp $stat; - $job->{host} = $stat; - # ip file is created at start - # run file is updated regularly to prevent orphans - if ( -e "$conf{spool}/jobs/$jid.ip" ) { - $job->{start} = (stat("$conf{spool}/jobs/$jid.ip"))[9]; - } - $stat .= ' (S)' if $job->{state} eq 'susp'; - } else { - $stat = '(S)' if $job->{state} eq 'susp'; - } - # trim for display - my @cmd = @{$job->{cmd}}; - for (@cmd) { - s/^\s+//g; - s/\n\s*/;/g; - } - $job->{wait} = ($job->{start}?$job->{start}:$now)-$job->{time}; - $job->{jid} = $jid; - $job->{stat} = $stat; - $job->{cpus} = 1 if ! $job->{cpus}; - $job->{memory} = $conf{default_memory} if ! $job->{memory}; - $job->{priority} = $conf{default_priority} if ! $job->{priority}; - $job->{cmd} = join(' ', @cmd); - if ($opt{long}) { - $r .= "----------\n"; - for(sort(keys(%$job))) { - $r .= "$_=" . (ref($job->{$_})?packdump($job->{$_}):$job->{$_}) . "\n"; - } - } elsif ($opt{dump}) { - $r .= packdump($job) . "\n"; - } else { - $r .= fmtstr($opt{fmt}, $job); - } - } - } - closedir(D); - return $r; -} - -sub fmtstr { - my ($fmt, $hash) = @_; - -# get list of fields - my @fds = $fmt =~ m/%(?:[#0 +,I:-]*(?:\d+)?(?:\.\d+)?\w{1,2}:)?([\w-]+|(?:{[^{}]+}))/g; - - %{$safe->varglob("i")}=%{$hash}; - my @vals; - for (@fds) { - if ($_ =~ /^\{(.+)\}/) { - push @vals, $safe->reval($1); - } else { - if (ref($hash->{$_}) eq 'HASH') { - push @vals, packdump($hash->{$_}); - } else { - push @vals, $hash->{$_}; - } - } - } - undef %{$safe->varglob("i")}; - - # replace formatted - with format-only - $fmt =~ s/(%[#0 +,I:-]*(?:\d+)?(?:\.\d+)?\w{1,2}):([\w-]+|({[^{}]+}))/$1/g; - - my $fds=join '|', map quotemeta($_), @fds; - # replace pure-fields with field-only - $fmt =~ s/%($fds)/%s/g; - # expand vars - - $fmt =~ s/\\n/\n/g; - $fmt =~ s/\\t/\t/g; - $fmt =~ s/\\r/\r/g; - - # format the rest - return sprintf($fmt, @vals); -} - -sub bestunique { - my ($c, @c) = @_; - my $b; - for (@c) { - if ($_ =~ /^$c/) { - return undef if ($b); - $b = $_; - } - } - return $b; -} - -# returns an array of [host,port], given a list of host[:port] names -sub expandnodes { - my @r; - my @n; - for (split(/[\s,]/, join ' ', @_)) { - my ($h, $p) = m/^(.*)(:\d+)?$/; - $p = $conf{port} if !$p; - if ($h =~ s/\*/\.\*/g) { - if (!@n) { - @n=getnodes(); - } - for (@n) { - push @r, [$_->{hostname}, $p] if $_->{hostname} =~ /$h/; - } - } else { - push @r, [$h, $p]; - } - } - return @r; -} - -sub evalctx { - my ($expr, @ctx) = @_; - my $msafe = new Safe; - $msafe->permit(qw(:subprocess :filesys_read)); # allow backticks - for(my $i = 0; $i < @ctx; $i+=2) { - my ($name, $var) = ($ctx[$i], $ctx[$i+1]); - # references to hashes/arrays become dereferenced hashes/arrays - if (ref($var) eq 'HASH') { - %{$msafe->varglob($name)}=%{$var}; - } elsif (ref($var) eq 'ARRAY') { - @{$msafe->varglob($name)}=@{$var}; - } else { - ${$msafe->varglob($name)}=$var; - } - } - $msafe->share(qw(%conf %ENV)); -# if ($conf{trace}) { -# xlog("debug", "Evaluating {$expr}\n"); -# } - my ($res, @res); - if (wantarray) { - @res = $msafe->reval($expr); - } else { - $res = $msafe->reval($expr); - } - my $save = $@; - if ($@) { - xlog("error", "Error evaluating {$expr} : $@\n"); - return undef; - } - $@=$save; - if (wantarray) { - return @res; - } else { - return $res; - } -} - -sub kicknodes { - my $did=0; - my @nodes = getnodes(cached=>1); - return if !$conf{kickstart}; - return if (time() < ($conf{lastkicktime} + $conf{ping_secs} * 4)); - $conf{lastkicktime} = time(); - for my $node (@nodes) { - # not just started - if ($conf{loop_num} > 5) { - # sometime in the last 24 hours? - if ($node->{ping} > (time() - ($conf{remove_secs}))) { - # but not in the last couple minutes - if ($node->{ping} < (time() - ($conf{ping_secs} * 4)) ) { - # kick it - $did=1; - xlog("note", "Kicking node $node->{hostname}\n"); - if (!fork) { - eval { - zmq_fork_undef(); - # be sure this is gone - my $cmd = $conf{kickstart}; - if ($cmd =~ /^\{(.*)\}$/) { - $cmd = evalctx($1, node=>$node); - } - if ($cmd && $cmd !~ /\$/) { - exec("$cmd"); - } - }; - exit(0); - } - } - } - } - } - return $did; -} - -sub getnodes { - my (%opt) = @_; - my @r; - if (!$opt{cached} && %nodes) { - # return memcached values - return values %nodes; - } - # read all from disk, including old ones - opendir(D,"$conf{spool}/nodes"); - while($_=readdir(D)) { - $_ = "$conf{spool}/nodes/$_"; - next unless -f $_; - my $node=eval{unpack_file($_)}; - if ($node) { - if (! defined $node->{avail}) { - $node->{avail} = $node->{cpus}-$node->{load}; - } - push @r, $node; - } - } - closedir D; - return @r; -} - -sub startdaemon { - my ($dkill, $restart, $reload, $node, $all, $dobench, $nofork); - - GetOptions("kill"=>\$dkill, "restart|R"=>\$restart, "benchmark|B"=>\$dobench, "reload|r"=>\$reload, "host=s"=>\$node, "all"=>\$all, "nofork|F"=>\$nofork) || - die usage(); - - $node = '*' if $all; - - if ($reload || $node) { - my @n = $node ? expandnodes($node) : ([$conf{master},$conf{master_port}]); - - my $stat = 0; - my $xcmd = $reload ? 'relo' : $restart ? 'rest' : $dkill ? 'term' : ''; - if (!$xcmd) { - die usage(); - } - for (@n) { - my ($res) = waitmsg($_->[0], $_->[1], "xcmd", $xcmd); - if (! defined $res) { - print "$@\n"; - $stat = 1; - } else { - print "$res\n"; - } - } - exit $stat; - } - - if ($dobench) { - print STDERR "Bench\t" . int(getbench(1)) . "\n"; - exit 0; - } - - if ($restart) { - $daemon = 1; - } - - killgpid() if $dkill || $restart; - exit 0 if $dkill; - sleep 1 if $restart; - - # start daemon - if ($gpid) { # already running? - if (kill(0, $gpid)) { - die "Already running ($gpid), not starting twice\n"; - } - } - xlog("note", "Starting daemon as " . getpwuid($<)); - - my $limit = `bash -c "ulimit -v -f -t -m -s"`; - - if (@{[($limit =~ m/unlimited$/mg)]}!=5) { - my @n=qw(virt file time mem stack); - my @v=$limit =~ m/(\w+)$/mg; - my %d; - map {$d{$n[$_]}=$v[$_] if ! ($v[$_] eq 'unlimited')} (0..4); - warn "Note: ulimit is not unlimited for daemon (" . join(' ',%d) . ")\n"; - } - - if ($conf{ulimit}) { - if (eval {require BSD::Resource;}) { - local @ARGV = split / /, $conf{ulimit}; - Getopt::Long::Configure qw(no_require_order no_ignore_case); - my %opt; - GetOptions(\%opt,"f=i","v=i","m=i","t=i"); - if (@ARGV) { - die "Options @ARGV not supported by grun, use a regular ulimit wrapper"; - } - no strict "subs"; - BSD::Resource::setrlimit(BSD::Resource::RLIMIT_FSIZE(),$opt{f},$opt{f}) if ($opt{f}); - BSD::Resource::setrlimit(BSD::Resource::RLIMIT_VMEM(),$opt{v},$opt{v}) if ($opt{v}); - BSD::Resource::setrlimit(BSD::Resource::RLIMIT_RSS(),$opt{m},$opt{m}) if ($opt{m}); - BSD::Resource::setrlimit(BSD::Resource::RLIMIT_CPU(),$opt{t},$opt{t}) if ($opt{t}); - } else { - die "Please install BSD::Resource to use the 'ulimit' option in $def{config}\n"; - } - } - - zmq_safe_term(); - - if ($nofork || (!($gpid=fork))) { - zmq_fork_undef() if !$nofork; - - $log_to_stderr = 1 if $nofork; - $gpid = $$ if $nofork; - die "Can't fork child process\n" if (! defined $gpid); - - $context=zmq_init(); - open (P, ">$conf{pid_file}") || die "Can't open pidfile '$conf{pid_file}' : $!\n"; - print P $$; - close P; # save pid - - if (!$nofork) { - open STDIN, '/dev/null'; - open STDERR, '>&STDOUT'; - } - } - - POSIX::setsid(); - - $SIG{INT} = sub { $quit = 1; }; - $SIG{TERM} = $SIG{INT}; - $SIG{HUP} = \&init; - - $router = zmq_socket($context, ZMQ_ROUTER); - - zmq_bind($router, "tcp://$conf{bind}:$conf{port}") - and die "Can't make ZMQ router on port $conf{port}: $!"; - - $quit = 0; - $conf{loop_num} = 0; - while (!$quit) { - my $did=0; - my $start = Time::HiRes::time(); - ++$conf{loop_num}; - eval {$did|=readsocks()}; - last if $quit; - xlog("error", "Daemon $$ readsocks exception: $@") if $@; - - # theoretically these could be in separate threads, or forked off - if ( $conf{services}->{queue} ) { - eval {$did|=schedule()}; - xlog("error", "Daemon $$ schedule exception: $@") if $@; - } - - if ( $conf{services}->{exec} ) { - eval {$did|=srvexec()}; - xlog("error", "Daemon $$ srvexec exception: $@") if $@; - }; - - if (!$did) { - my $elapsed = Time::HiRes::time()-$start; - if ($elapsed < .25) { - # fractional sleep -# xlog("debug", "Did nothing, fractional sleep for " . (.25-$elapsed)); - select(undef, undef, undef, .25-$elapsed); - } - } -# print "HERE\n"; - } - xlog("note", "Shutdown"); - zmq_unbind($router, "tcp://$conf{bind}:$conf{port}"); - sleep(1); - eval {readsocks()}; - zmq_safe_term(); - unlink $conf{pid_file}; - } - exit 0; -} - -sub END { - zmq_safe_term(); -} - -sub zmq_safe_term() { - # if i'm the parent pid - if ($router) { - zmq_setsockopt($router, ZMQ_LINGER, 1); - zmq_unbind($router,"tcp://$conf{bind}:$conf{port}"); - zmq_close($router); - $router=undef; - } - # these are all the execution nodes... if any - for (values(%ZMQS)) { - zmq_setsockopt($_, ZMQ_LINGER, 1); - zmq_close($_); - } - %ZMQS=(); - if ($context) { - zmq_term($context); - $context=undef; - } -} - -sub zmq_fork_undef() { - # close all duped file descriptors - opendir(D,"/proc/$$/fd"); - while(my $fd = readdir(D)) { - if ($fd > 2 && (POSIX::lseek($fd, 0, POSIX::SEEK_CUR) == -1)) { - if (POSIX::ESPIPE == POSIX::errno()) { - POSIX::close($fd) if $fd > 2; - } - } - } - closedir(D); - # kill access to any forked sockets - $router=undef; - %ZMQS=(); - $context=undef; -} - - -sub killgpid { - die "Can't find pid $conf{pid_file} for daemon\n" if !$gpid; - if (!kill(2, $gpid)) { - die "Can't kill -INT $gpid: $!\n"; - } - sleep 1; - $gpid = 0; -} - -sub samehost { - my($h1, $h2) = @_; - $h1 =~ s/\s+$//; - $h2 =~ s/\s+$//; - $h1=host2ip($h1); - $h2=host2ip($h2); - # localhost = dig `hostname` - $h1 =~ s/^(0\.0\.0\.0|127\.0\.0\.1)$/$conf{hostip}/; - $h2 =~ s/^(0\.0\.0\.0|127\.0\.0\.1)$/$conf{hostip}/; - return $h1 eq $h2; -} - -sub host2ip { - my (@octets, $raw_addr, $ip); - return $_[0] if $_[0] =~ /^(\d+\.){3}\d+$/; - $raw_addr = (gethostbyname($_[0]))[4]; - @octets = unpack("C4", $raw_addr); - $ip = join(".", @octets); - return($ip); -} - -sub packdump { - return encode_json($_[0]); -} - -sub kill_job { - my %op = @_; - my ($err) = waitmsg($conf{master}, $conf{master_port}, 'jkill', \%op); - if ($err =~ /Forward (\d+):?\s*([\d.]+):?(\d*)/i) { - my ($jid, $ip, $port) = ($1, $2, $3); - $port = $conf{port} if !$port; - ($err) = waitmsg($ip, $port, 'xabort', $jid, $op{sig}, $op{termio}); - } - return $err; -} - -sub proper { - my $x = shift; - $x=~ s/\b(\S)/uc($1)/eg; - return $x; -} - -sub execute_job { - my ($opts) = @_; - my @cmd = @{$opts->{cmd}}; - - my ($uid, $gid, $err, $ret); - if ($opts->{user}) { - (undef, undef, $uid, $gid) = getpwnam($opts->{user}); - } - if (defined($uid) && !$conf{run_asroot} && !$uid) { - $err="Won't run as root"; - } - if (!defined($uid)) { - $err="User $opts->{user} is unknown on this machine, not executing"; - } - if ($opts->{group}) { - $gid=$opts->{group}; - } -# expecting someone to come pick up output? - xlog("Creating io_wait for $opts->{id}") if $opts->{wait} || $opts->{io}; - $io_wait{$opts->{id}}->{type} = 'stat' if $opts->{wait}; # status wait - $io_wait{$opts->{id}}->{type} = 'io' if $opts->{io}; # io wait - $io_wait{$opts->{id}}->{time} = time() if $opts->{wait} || $opts->{io}; # io wait - - my $pid; - - if ($conf{wrap}) { - @cmd = ($conf{wrap}, @cmd); - } - - my $pfile = "$conf{spool}/jpids/$opts->{id}"; - - if (-e $pfile) { - xlog($err="Job file $pfile already exists, not executing."); - } else { - if (!open(PF, ">$pfile")) { - xlog($err="Can't create $pfile: $!"); - } - } - - my $bfile = "$conf{spool}/jstat/$opts->{id}"; - my $tfile = "$bfile.stat"; - my $ifile = "$bfile.job"; - - $opts->{uid}=$uid; - $opts->{gid}=$gid; - - # job info, saved - burp($ifile, packfile($opts)); - chown($uid,0,$ifile); - - if (!open(XOUT, ">", "$tfile")) { - $err=$!; - $ret=$?; - } - chown($uid,0,$tfile); - # leave the file open for fork - - if (!$err && !($pid=fork)) { - if (! defined $pid) { - $err = "Can't fork"; - } else { - $0="GRUN:$opts->{id}"; - zmq_fork_undef(); - - # restore signal to default ... regular kill - $SIG{INT} = undef; - $SIG{TERM} = undef; - $ENV{USER} = $opts->{user}; - - # kill me with a negative number, all kids die too - # kill my parent.... i stay alive, and my IO is still ready to go - my $pgid=POSIX::setsid(); - xlog("debug", "PGID set to $pgid\n"); - - # copy in the umask & the environment - umask $opts->{umask}; - for (keys(%{$opts->{env}})) { - $ENV{$_}=$opts->{env}->{$_}; - } - - for (keys(%{$opts})) { - next if ref($opts->{$_}); - $ENV{"_GRUN_OPT_$_"} = $opts->{$_}; - } - $ENV{"_GRUN"} = $opts->{id}; - $ENV{"SGE_TASK_ID"} = $opts->{id} if (!$ENV{SGE_TASK_ID}); - - my ($err, $ret); - - my $shfile = "$bfile.sh"; - if (!open(SHFILE, ">", $shfile)) { - $err=$!; - $ret=$?; - } - chown($uid,0,$shfile); - - my $hard_factor = defined($opts->{hard_factor}) ? $opts->{hard_factor} : $conf{hard_factor}; - if ($hard_factor && $opts->{memory}) {eval{ - # add 4mb for o/s stuff to load - print SHFILE "ulimit -v " . (4000+int(($opts->{memory} * $conf{hard_factor}))) . "\n" - if $opts->{memory}; - }} - - if ($cmd[0] !~ / /) { - for (@cmd) { - if ($_ =~ / /) { - $_ =~ s/"/\\"/g; - $_ = '"' . $_ . '"'; - } - } - } - - print SHFILE join(" ", @cmd), "\n"; - close SHFILE; - - xlog("debug", "Wrote $shfile\n") if $opts->{trace}; - - if (!$err) { - xlog("debug", "Setting uid to $uid, gid to $gid.\n") if $opts->{trace}; - eval { - if ($gid) { - $) = $gid; - $( = $gid; - } - $> = $uid; - $< = $uid; - if ($opts->{cwd}) { - if (!chdir($opts->{cwd})) { - $err = "Can't cd to $opts->{cwd} : $!"; - $ret = 103; - } - } - }; - } - - if (!$err && $@) { - $ret = 102; - $err = "Error setting uid to $uid: $@\n"; - } - - xlog("debug", "About to launch (@cmd)\n") if $opts->{trace}; - - if (!$err) { - my $confarg = "-C $conf{config}"; # same config! - # this frees all ram... yay, finally - exec("$GRUN_PATH $confarg -Y $bfile"); - $err = "Can't exec: $!"; - $pid=-1; - } else { - eval { - # save output - - # immediate reply if possible - xlog("debug", "Error before launch: $ret \"$err\" (@cmd)\n") if $opts->{trace}; - my $out = { - id=>$opts->{id}, - status=>$ret, - error=>$err, - dumped=>1, - }; - print XOUT packfile($out); - close XOUT; - $context=zmq_init(); - send_status_for_job($out); - printf STDERR "$err\n"; - }; - if ($@) { - xlog("error", "Error reporting error : $@\n"); - } - exit $ret; - } - } - } - -# fake pid - if ($err) { - $ret = $STATUS_EXECERR if !$ret; - $pid = 'e' . $opts->{id}; - xlog("note", "Error '$err' with job $opts->{id}, pid '$pid'"); - my $out = { - id=>$opts->{id}, - status=>$ret, - error=>$err, - dumped=>1, - }; - print XOUT packfile($out); - close XOUT; - - xlog("debug", "FILE: $tfile"); - - notifystat($out, 1, 1); - # special case... exec failed - exit 1 if $pid == -1; - } else { - xlog("note", "Started job $opts->{id}, pid $pid, '@cmd'") if !$err; - close XOUT; - # record pid for wait - $pid_jobs{$pid}->{jid}=$opts->{id}; - $pid_jobs{$pid}->{time}=time(); - } - - $opts->{pid} = $pid; - $opts->{err} = $err; - print PF packfile($opts); - close PF; - - # ok we've officially either a) started this job or b) notified of failure at this point.... - sendcmd_nowait($conf{master}, $conf{port}, 'jexok', { map { $_ => $opts->{$_} } qw/id pid uid gid err/ }); -} - -sub send_status_for_job { - my ($stat, %op) = @_; -# this could be in a fork... be safe - my $sock = zmq_socket($context, ZMQ_DEALER); - xlog("note", "Sending status for $stat->{id} as $stat->{status}\n") if $conf{trace}; - zmq_connect($sock,"tcp://$conf{bind}:$conf{port}"); - zmq_send($sock, "", 0, ZMQ_SNDMORE); - zmq_send($sock, packcmd("sstat", $stat)); - zmq_close($sock); - zmq_term($context); -} - -sub jid_from_opts { - my ($job) =@_; - return $job->{jid} ? $job->{jid} : jid_from_guid($job->{guid}); -} - -sub jid_from_guid { - my ($guid) = @_; - if (-s "$conf{spool}/guids/$guid") { - return slurp("$conf{spool}/guids/$guid"); - } -} - -sub create_guid { - substr(Data::UUID->new()->create_hex(),2) -} - -sub exec_clean { - my ($jid) = @_; - if (!-e "$conf{spool}/jpids/$jid") { - xlog("debug", "Clean $jid which is already gone"); - } else { - xlog("debug", "Cleaning $jid") if $conf{trace}; - # stop tracking this pid, head node got all the info - my $job = unpack_file("$conf{spool}/jpids/$jid"); - # nobody asked for the job info, so don't keep it around after exec node knows about it - unlink("$conf{spool}/jpids/$jid"); - unlink("$conf{spool}/jstat/$jid.stat"); - unlink("$conf{spool}/jstat/$jid.held"); - unlink("$conf{spool}/jstat/$jid.stat-err"); - unlink("$conf{spool}/jstat/$jid.sh"); - unlink("$conf{spool}/jstat/$jid.job"); - unlink("$conf{spool}/jstat/$jid.dack"); - unlink("$conf{spool}/jstat/$jid.dumped"); - } -} - -sub stream_sigh { - xlog("debug", "stream $$ SIG $_[0]"); - - # set the quit flag - $stream_quit = 1; - close STDIN; - close STDOUT; - close STDERR; - # don't exit... you still need to send the "quit" signal -# exit(-1); -} - -sub do_stream { - # stream results back to execution top - - $SIG{INT} = \&stream_sigh; - $SIG{TERM} = \&stream_sigh; - $SIG{PIPE} = \&stream_sigh; - - # shift off the -X - shift @ARGV; - - my $termio; - - # line by line? - if ($ARGV[0] eq '-I') { - $termio=1; - shift @ARGV; - } - - my $connect = shift @ARGV; - my $key = shift @ARGV; - my $data = shift @ARGV; - my $sock = zmq_socket($context, ZMQ_DEALER); - - zmq_setsockopt($sock, ZMQ_LINGER, 1000); - zmq_setsockopt($sock, ZMQ_HWM, 100); -# zmq_setsockopt($sock, ZMQ_RCVTIMEO, 1000); - - xlog("debug", "stream $$ $connect $key"); - - zmq_connect($sock,"tcp://$connect"); - - xlog("debug", "stream sready $$ $connect $key"); - - zmq_send($sock, "", 0, ZMQ_SNDMORE); - zmq_send($sock, packcmd('sready', $key)); - - my $ready=0; - my $time=time(); - my $wait = 5; - while (!$stream_quit && !$ready) { - my $got = 0; - zmq_poll([{ - socket=>$sock, events=>ZMQ_POLLIN, callback=> sub { - my $ignore = zmq_recvmsg($sock); - my $msg = zmq_recvmsg($sock); - my $data = zmq_msg_data($msg); - $ready = $data=~/ready|quit/; - $stream_quit = $data=~/quit/; - $got = 1; - }}],1000); - if (!$stream_quit && !$got && (time() > ($time+$wait))) { - # ask again ... are you ready for the stream - zmq_send($sock, "", 0, ZMQ_SNDMORE); - zmq_send($sock, packcmd('sready', $key)); - $time=time(); - $wait += 5; - if ($wait > 3600) { - xlog("debug", "stream abandon $$ $key\n"); - exit(0); - } - } - } - - xlog("debug", "stream response $$ $key $data\n"); - - my $sent = 1; - while(!$stream_quit) { - if ($sent) { - if ($termio) { - # line by line - $_=<>; - } else { - # block by block - read STDIN, $_, 4096; - } - if ($_ eq "") { - $stream_quit = 1 ; - last; - } - $sent=0; - } - zmq_poll([{ - socket=>$sock, events=>ZMQ_POLLOUT, callback=> sub { - my $ret; - if ($ret=zmq_send($sock, "", 0, ZMQ_SNDMORE)) { - xlog("debug", "stream error $ret $$ $key : $?/$!\n"); - } else { - if (($ret=zmq_send($sock, packcmd('stream', $key, $_))) && $? ) { - xlog("debug", "stream error $ret $$ $key : $?/$!\n"); - } else { - # ok, that chunk of data went out - $sent=1; - } - } - }}]); - } - - # let daddy know we're done - - zmq_send($sock, "", 0, ZMQ_SNDMORE); - zmq_send($sock, packcmd("stream", "$key:end")); - zmq_close($sock); - zmq_term($context); - - xlog("debug", "stream exit $$ $key\n"); - - exit(0); -} - -sub debugging { - return $conf{log_types}->{"debug"} -} - -sub getjobstathash { - my ($jid)=@_; - if ( -s "$conf{spool}/jstat/$jid.stat" ) { - my $stat = unpack_file("$conf{spool}/jstat/$jid.stat"); - if ( $stat && -e "$conf{spool}/jstat/$jid.dumped" ) { - $stat->{dumped}=slurp("$conf{spool}/jstat/$jid.dumped"); - } - return $stat; - } - if ( -s "$conf{spool}/jstat/$jid.stat-err" ) { - my $stat = unpack_file("$conf{spool}/jstat/$jid.stat-err"); - if ( $stat && -e "$conf{spool}/jstat/$jid.dumped" ) { - $stat->{dumped}=slurp("$conf{spool}/jstat/$jid.dumped"); - } - return $stat; - } - return undef; -} - -sub forkandgo { - my ($zid, $sub, @args) = @_; - -print("FORKING\n"); - - if (!(my $pid=fork)) { - my $out=""; - my $err=""; - if (! defined $pid) { - $err = "Error: Can't fork"; - sendcmd($conf{bind}, $conf{port}, 'frep', {zid=>unpack("h*",$zid), out=>$err}); - } else { - eval { - zmq_fork_undef(); - $daemon=0; - $context=zmq_init(); - $0="GRUN:fork-handler"; - # no accidental messages go out on this context - $out=eval{&$sub(@args)}; - $err=$@; - $out = $err if $err && !$out; - while(length($out)>100000) { - sendcmd($conf{bind}, $conf{port}, 'frep', {zid=>unpack("h*",$zid), out=>substr($out,0,100000,""), more=>1}); - } - sendcmd($conf{bind}, $conf{port}, 'frep', {zid=>unpack("h*",$zid), out=>$out}); - }; - exit(0); - } - } -} - -sub archive_job { - my ($jid, $job, $status, $ip, $usage) = @_; - - # double-check - carp "Need a job ref" unless ref($job); - carp "Need a usage ref" unless !defined($usage) || ref($usage); - - $status+=0; - if ($usage) { - delete $usage->{ip}; - delete $usage->{id}; - $usage->{status} = $status if defined $status; - $job->{usage} = $usage; - } else { - $job->{usage}->{status} = $status if defined($status); - } - - $job->{status} = $status; - if ($ip) { - $job->{host} = $nodes{$ip} && $nodes{$ip}->{hostname} ? $nodes{$ip}->{hostname} : $ip; - $job->{hostip} = $ip; - } - - for (keys(%{$j_wait{$jid}})) { - replymsg($_, $job); - } - delete $j_wait{$jid}; - - my $jhistfile=jhistpath($jid); - xlog("debug", "Writing history for $jid to $jhistfile"); - open(ST, ">$jhistfile"); - print ST packfile($job); - close ST; - - xlog("debug", "Unlinking $conf{spool}/jobs/$jid:$ip.run, $conf{spool}/jobs/$jid.ip, $conf{spool}/jobs/$jid"); - - if (!$ip) { - $ip = slurp("$conf{spool}/jobs/$jid.ip"); - } - unlink("$conf{spool}/jobs/$jid:$ip.run"); - unlink("$conf{spool}/jobs/$jid.ip"); - unlink("$conf{spool}/jobs/$jid.ok"); - unlink("$conf{spool}/jobs/$jid"); - if ($job->{guid}) { -# can't query by guid anymore, except maybe in a history database - unlink("$conf{spool}/guids/$job->{guid}"); - } - - if ($start_wait{$jid}) { - # info needed for status/stdio collection from execution node - replymsg($start_wait{$jid}->{zid},jid=>$jid, status=>$status, error=>$job->{error}, hostname=>$job->{host}, ip=>$job->{host}?$job->{host}:"n/a"); - delete $start_wait{$jid}; - } -} - -my $coder; -sub pretty_encode { - $coder = JSON::XS->new->ascii->pretty->canonical->allow_blessed unless defined $coder; - if (@_ > 1 || !ref(@_[0])) { - $coder->encode([@_]); - } else { - $coder->encode(@_[0]); - } -} - -sub showmem { - require PadWalker; - my $o = PadWalker::peek_our(0); - my $h = PadWalker::peek_my(1); - for (keys(%$o)) { - $h->{$_}=$o->{$_}; - } - for (keys(%$h)) { - $h->{$_}=${$h->{$_}} if ref($h->{$_}) eq 'SCALAR'; - $h->{$_}=${$h->{$_}} if ref($h->{$_}) eq 'REF'; - } - return pretty_encode($h); -} - -sub do_execute { - # shift off the -Y - shift @ARGV; - my ($bfile) = @ARGV; - - my $opts = unpack_file("$bfile.job"); - my $uid = $opts->{uid}; - - my $code = -1; - my $start = Time::HiRes::time(); - - my $shfile = "$bfile.sh"; - - my @cmd = ("bash", $shfile); - - open(OLDERR, ">&STDERR"); - open(OLDOUT, ">&STDOUT"); - - close(STDERR); - close(STDOUT); - - my ($out_pid, $err_pid); - - $SIG{INT} = $SIG{TERM} = sub { - kill 2, $out_pid; - kill 2, $err_pid; - }; - - my ($err, $ret); - - my $ok=1; - eval { - if ($opts->{out}) { - if ($opts->{out_a}) { - $ok&&=open(STDOUT, ">>$opts->{out}"); - } else { - $ok&&=open(STDOUT, ">$opts->{out}"); - } - if ($opts->{out} eq $opts->{err}) { - $ok&&=open(STDERR, ">&STDOUT"); - } - } - if ($opts->{err} && !(($opts->{out} eq $opts->{err}))) { - if ($opts->{err_a}) { - $ok&&=open(STDERR, ">>$opts->{err}"); - } else { - $ok&&=open(STDERR, ">$opts->{err}"); - } - } - if ($opts->{io}) { - my $confarg = "-C $conf{config}"; # same config! - my $streamarg = "-X"; # grun streamer - $streamarg .= " -I" if $opts->{int}; # interactive mode - if (!$opts->{out}) { - my $cmd="/usr/bin/perl $GRUN_PATH $confarg $streamarg $conf{bind}:$conf{port} $opts->{id}:out"; - $out_pid=open(STDOUT, "|$cmd"); - $ok&&=$out_pid; - } - if (!$opts->{err}) { - my $cmd="/usr/bin/perl $GRUN_PATH $confarg $streamarg $conf{bind}:$conf{port} $opts->{id}:err"; - $err_pid=open(STDERR, "|$cmd"); - $ok&&=$err_pid; - } - } else { -# save disk and time, i never want i/o - if (!$opts->{err}) { - $ok&&=open(STDERR, ">/dev/null"); - } - if (!$opts->{out}) { - $ok&&=open(STDOUT, ">/dev/null"); - } - } - }; - - if ($@ || !$ok) { - close(STDERR); - close(STDOUT); - open(STDERR, ">&OLDERR"); - open(STDOUT, ">&OLDOUT"); - if ($@) { - $err=$@; - $ret=109; - } else { - $err="Error opening i/o files: $!"; - $ret=109; - } - xlog("error", "$ret: $err\n"); - } - - my $elapsed=0; - - # deal with nfs sync, if needed - syncdirs(@{$opts->{syncdirs}}) if $opts->{syncdirs}; - - if (!$err) { - eval { - $code = system(@cmd); - $0="GRUN:$opts->{id}:$code"; - }; - $elapsed = Time::HiRes::time() - $start; - } else { - $code = $ret ? $ret : -1; - } - - open(SAVERR, ">&STDERR"); - open(SAVOUT, ">&STDOUT"); - - open(STDERR, ">&OLDERR"); - open(STDOUT, ">&OLDOUT"); - - xlog("debug", "Job $opts->{id} original exit code is $code"); - - $code = ($code == -1) ? $code : ($code & 127) ? $code & 127 : ($code >> 8); - - xlog("debug", "Done running job $opts->{id}, code $code as user $uid") if $opts->{trace}; - - my ($utime, $stime, - $maxrss, $ixrss, $idrss, $isrss, $minflt, $majflt, $nswap, - $inblock, $oublock, $msgsnd, $msgrcv, - $nsignals, $nvcsw, $nivcsw); - - eval { - ($utime, $stime, - $maxrss, $ixrss, $idrss, $isrss, $minflt, $majflt, $nswap, - $inblock, $oublock, $msgsnd, $msgrcv, - $nsignals, $nvcsw, $nivcsw) = getrusage(RUSAGE_CHILDREN); - }; - - xlog("debug", "Really done with job $opts->{id} (@cmd = $@)\n") if $opts->{trace}; - - # $msgsnd, $msgrcv, $nsignals not used in Linux.... - - my $out = { - id=>$opts->{id}, - status=>$code, - start_time=>$start, - utime=>$utime, - stime=>$stime, - rtime=>$elapsed, - pid=>$$, - maxrss=>$maxrss, - minflt=>$minflt, - majflt=>$majflt, - nswap=>$nswap, - inblock=>$inblock, - oublock=>$oublock, - nvcsw=>$nvcsw, - nivcsw=>$nivcsw - }; - - $out->{error} = $err if $code && $err; - - xlog("debug", "Writing output job $opts->{id}\n") if $opts->{trace}; - print XOUT packfile($out); - close XOUT; - xlog("debug", "Job $opts->{id} exit code $code\n") if $opts->{trace}; - send_status_for_job($out); - exit $code; -# special exit code 101 means couldn't run the command - close STDOUT; - close STDERR; - exit(0); -} - diff --git a/clipper/gtf2bed b/clipper/gtf2bed deleted file mode 100755 index 2a06e1f..0000000 --- a/clipper/gtf2bed +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/perl - -# Copyright (c) 2011 Erik Aronesty (erik@q32.com) -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# ALSO, IT WOULD BE NICE IF YOU LET ME KNOW YOU USED IT. - -use Data::Dumper; -use Getopt::Long; - -my $extended; -GetOptions("x"=>\$extended); - -$in = shift @ARGV; - -my $in_cmd =($in =~ /\.gz$/ ? "gunzip -c $in|" : $in =~ /\.zip$/ ? "unzip -p $in|" : "$in") || die "Can't open $in: $!\n"; -open IN, $in_cmd; - -while () { - $gff = 2 if /^##gff-version 2/; - $gff = 3 if /^##gff-version 3/; - next if /^#/ && $gff; - - s/\s+$//; - # 0-chr 1-src 2-feat 3-beg 4-end 5-scor 6-dir 7-fram 8-attr - my @f = split /\t/; - if ($gff) { - # most ver 2's stick gene names in the id field - ($id) = $f[8]=~ /\bID="([^"]+)"/; - # most ver 3's stick unquoted names in the name field - ($id) = $f[8]=~ /\bName=([^";]+)/ if !$id && $gff == 3; - } else { - ($id) = $f[8]=~ /transcript_id "([^"]+)"/; - } - - next unless $id && $f[0]; - - if ($f[2] eq 'exon') { - die "no position at exon on line $." if ! $f[3]; - # gff3 puts :\d in exons sometimes - $id =~ s/:\d+$// if $gff == 3; - push @{$exons{$id}}, \@f; - # save lowest start - $trans{$id} = \@f if !$trans{$id}; - } elsif ($f[2] eq 'start_codon') { - #optional, output codon start/stop as "thick" region in bed - $sc{$id}->[0] = $f[3]; - } elsif ($f[2] eq 'stop_codon') { - $sc{$id}->[1] = $f[4]; - } elsif ($f[2] eq 'miRNA' ) { - $trans{$id} = \@f if !$trans{$id}; - push @{$exons{$id}}, \@f; - } -} - -for $id ( - # sort by chr then pos - sort { - $trans{$a}->[0] eq $trans{$b}->[0] ? - $trans{$a}->[3] <=> $trans{$b}->[3] : - $trans{$a}->[0] cmp $trans{$b}->[0] - } (keys(%trans)) ) { - my ($chr, undef, undef, undef, undef, undef, $dir, undef, $attr, undef, $cds, $cde) = @{$trans{$id}}; - my ($cds, $cde); - ($cds, $cde) = @{$sc{$id}} if $sc{$id}; - - # sort by pos - my @ex = sort { - $a->[3] <=> $b->[3] - } @{$exons{$id}}; - - my $beg = $ex[0][3]; - my $end = $ex[-1][4]; - - if ($dir eq '-') { - # swap - $tmp=$cds; - $cds=$cde; - $cde=$tmp; - $cds -= 2 if $cds; - $cde += 2 if $cde; - } - - # not specified, just use exons - $cds = $beg if !$cds; - $cde = $end if !$cde; - - # adjust start for bed - --$beg; --$cds; - - my $exn = @ex; # exon count - my $exst = join ",", map {$_->[3]-$beg-1} @ex; # exon start - my $exsz = join ",", map {$_->[4]-$_->[3]+1} @ex; # exon size - - my $gene_id; - my $extend = ""; - if ($extended) { - ($gene_id) = $attr =~ /gene_name "([^"]+)"/; - ($gene_id) = $attr =~ /gene_id "([^"]+)"/ unless $gene_id; - $extend="\t$gene_id"; - } - # added an extra comma to make it look exactly like ucsc's beds - print "$chr\t$beg\t$end\t$id\t0\t$dir\t$cds\t$cde\t0\t$exn\t$exsz,\t$exst,$extend\n"; -} - - -close IN; diff --git a/clipper/install-bamtools.sh b/clipper/install-bamtools.sh deleted file mode 100644 index 70bf11a..0000000 --- a/clipper/install-bamtools.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -git clone git@github.com:pezmaster31/bamtools.git -mkdir build -cd build -cmake .. -make -j 6 -sudo make install -sudo mv /usr/local/include/bamtools/* /usr/local/include/ -sudo mv /usr/local/lib/bamtools/libbamtools.* /usr/local/lib -sudo ldconfig diff --git a/clipper/master-barcodes.txt b/clipper/master-barcodes.txt deleted file mode 100755 index 9b70aef..0000000 --- a/clipper/master-barcodes.txt +++ /dev/null @@ -1,862 +0,0 @@ -id seq style -D701 ATTACTCG Nextera1 -D702 TCCGGAGA Nextera1 -D703 CGCTCATT Nextera1 -D704 GAGATTCC Nextera1 -D705 ATTCAGAA Nextera1 -D706 GAATTCGT Nextera1 -D707 CTGAAGCT Nextera1 -D708 TAATGCGC Nextera1 -D709 CGGCTATG Nextera1 -D710 TCCGCGAA Nextera1 -D711 TCTCGCGC Nextera1 -D712 AGCGATAG Nextera1 -LB1 ATCACG TruSeq -LB2 CGATGT TruSeq -LB3 TTAGGC TruSeq -LB4 TGACCA TruSeq -LB5 ACAGTG TruSeq -LB6 GCCAAT TruSeq -LB7 CAGATC TruSeq -LB8 ACTTGA TruSeq -LB9 GATCAG TruSeq -LB10 TAGCTT TruSeq -LB11 GGCTAC TruSeq -LB12 CTTGTA TruSeq -LB13 AGTCAA TruSeq -LB14 AGTTCC TruSeq -LB15 ATGTCA TruSeq -LB16 CCGTCC TruSeq -LB17 GTAGAG TruSeq -LB18 GTCCGC TruSeq -LB19 GTGAAA TruSeq -LB20 GTGGCC TruSeq -LB21 GTTTCG TruSeq -LB22 CGTACG TruSeq -LB23 GAGTGG TruSeq -LB24 GGTAGC TruSeq -LB25 ACTGAT TruSeq -LB26 ATGAGC TruSeq -LB27 ATTCCT TruSeq -LB28 CAAAAG TruSeq -LB29 CAACTA TruSeq -LB30 CACCGG TruSeq -LB31 CACGAT TruSeq -LB32 CACTCA TruSeq -LB33 CAGGCG TruSeq -LB34 CATGGC TruSeq -LB35 CATTTT TruSeq -LB36 CCAACA TruSeq -LB37 CGGAAT TruSeq -LB38 CTAGCT TruSeq -LB39 CTATAC TruSeq -LB40 CTCAGA TruSeq -LB41 GACGAC TruSeq -LB42 TAATCG TruSeq -LB43 TACAGC TruSeq -LB44 TATAAT TruSeq -LB45 TCATTC TruSeq -LB46 TCCCGA TruSeq -LB47 TCGAAG TruSeq -LB48 TCGGCA TruSeq -SSXT1 ATCACG SureSelect_XT -SSXT2 CGATGT SureSelect_XT -SSXT3 TTAGGC SureSelect_XT -SSXT4 TGACCA SureSelect_XT -SSXT5 ACAGTG SureSelect_XT -SSXT6 GCCAAT SureSelect_XT -SSXT7 CAGATC SureSelect_XT -SSXT8 ACTTGA SureSelect_XT -SSXT9 GATCAG SureSelect_XT -SSXT10 TAGCTT SureSelect_XT -SSXT11 GGCTAC SureSelect_XT -SSXT12 CTTGTA SureSelect_XT -SSXT13 AAACAT SureSelect_XT -SSXT14 CAAAAG SureSelect_XT -SSXT15 GAAACC SureSelect_XT -SSXT16 AAAGCA SureSelect_XT -LI2 CCTTCT Craig -LI3 GATCGT Craig -LI4 GCATGT Craig -LI5 AACCAT Craig -LI6 CCCCCT Craig -LI8 TCGATT Craig -LI9 TGCATT Craig -LI10 CAACCT Craig -LI11 GGTTGT Craig -LI13 AGCTAT Craig -LI15 ACACAT Craig -LI16 AATTAT Craig -LI20 ATCACG Craig -LI21 CGATGT Craig -LI22 TTAGGC Craig -LI23 TGACCA Craig -LI24 ACAGTG Craig -LI25 GCCAAT Craig -LI26 CAGATC Craig -LI27 ACTTGA Craig -LI28 GATCAG Craig -LI29 TAGCTT Craig -LI30 GGCTAC Craig -LI31 CTTGTA Craig -LI61 ATCACG Illumina -LI62 CGATGT Illumina -LI63 TTAGGC Illumina -LI64 TGACCA Illumina -LI65 ACAGTG Illumina -LI66 GCCAAT Illumina -LI67 CAGATC Illumina -LI68 ACTTGA Illumina -LI69 GATCAG Illumina -LI70 TAGCTT Illumina -LI71 GGCTAC Illumina -LI72 CTTGTA Illumina -LI41 ATCACG Illumina-IDT -LI42 CGATGT Illumina-IDT -LI43 TTAGGC Illumina-IDT -LI44 TGACCA Illumina-IDT -LI45 ACAGTG Illumina-IDT -LI46 GCCAAT Illumina-IDT -LI47 CAGATC Illumina-IDT -LI48 ACTTGA Illumina-IDT -LI49 GATCAG Illumina-IDT -LI50 TAGCTT Illumina-IDT -LI51 GGCTAC Illumina-IDT -LI52 CTTGTA Illumina-IDT -A01_01 TAGCTTGT Fluidigm -B01_02 CGATGTTT Fluidigm -C01_03 GCCAATGT Fluidigm -D01_04 ACAGTGGT Fluidigm -E01_05 ATCACGTT Fluidigm -F01_06 GATCAGCG Fluidigm -G01_07 CAGATCTG Fluidigm -H01_08 TTAGGCAT Fluidigm -A02_09 GGCTACAG Fluidigm -B02_10 CTTGTACT Fluidigm -C02_11 ACTTGATG Fluidigm -D02_12 TGACCACT Fluidigm -E02_13 TGGTTGTT Fluidigm -F02_14 TCTCGGTT Fluidigm -G02_15 TAAGCGTT Fluidigm -H02_16 TCCGTCTT Fluidigm -A03_17 TGTACCTT Fluidigm -B03_18 TTCTGTGT Fluidigm -C03_19 TCTGCTGT Fluidigm -D03_20 TTGGAGGT Fluidigm -E03_21 TCGAGCGT Fluidigm -F03_22 TGATACGT Fluidigm -G03_23 TGCATAGT Fluidigm -H03_24 TTGACTCT Fluidigm -A04_25 TGCGATCT Fluidigm -B04_26 TTCCTGCT Fluidigm -C04_27 TAGTGACT Fluidigm -D04_28 TACAGGAT Fluidigm -E04_29 TCCTCAAT Fluidigm -F04_30 TGTGGTTG Fluidigm -G04_31 TAGTCTTG Fluidigm -H04_32 TTCCATTG Fluidigm -A05_33 TCGAAGTG Fluidigm -B05_34 TAACGCTG Fluidigm -C05_35 TTGGTATG Fluidigm -D05_36 TGAACTGG Fluidigm -E05_37 TACTTCGG Fluidigm -F05_38 TCTCACGG Fluidigm -G05_39 TCAGGAGG Fluidigm -H05_40 TAAGTTCG Fluidigm -A06_41 TCCAGTCG Fluidigm -B06_42 TGTATGCG Fluidigm -C06_43 TCATTGAG Fluidigm -D06_44 TGGCTCAG Fluidigm -E06_45 TATGCCAG Fluidigm -F06_46 TCAGATTC Fluidigm -G06_47 TACTAGTC Fluidigm -H06_48 TTCAGCTC Fluidigm -A07_49 TGTCTATC Fluidigm -B07_50 TATGTGGC Fluidigm -C07_51 TTACTCGC Fluidigm -D07_52 TCGTTAGC Fluidigm -E07_53 TACCGAGC Fluidigm -F07_54 TGTTCTCC Fluidigm -G07_55 TTCGCACC Fluidigm -H07_56 TTGCGTAC Fluidigm -A08_57 TCTACGAC Fluidigm -B08_58 TGACAGAC Fluidigm -C08_59 TAGAACAC Fluidigm -D08_60 TCATCCTA Fluidigm -E08_61 TGCTGATA Fluidigm -F08_62 TAGACGGA Fluidigm -G08_63 TGTGAAGA Fluidigm -H08_64 TCTCTTCA Fluidigm -A09_65 TTGTTCCA Fluidigm -B09_66 TGAAGCCA Fluidigm -C09_67 TACCACCA Fluidigm -D09_68 TGCGTGAA Fluidigm -E09_69 GGTGAGTT Fluidigm -F09_70 GATCTCTT Fluidigm -G09_71 GTGTCCTT Fluidigm -H09_72 GACGGATT Fluidigm -A10_73 GCAACATT Fluidigm -B10_74 GGTCGTGT Fluidigm -C10_75 GAATCTGT Fluidigm -D10_76 GTACATCT Fluidigm -E10_77 GAGGTGCT Fluidigm -F10_78 GCATGGCT Fluidigm -G10_79 GTTAGCCT Fluidigm -H10_80 GTCGCTAT Fluidigm -A11_81 GGAATGAT Fluidigm -B11_82 GAGCCAAT Fluidigm -C11_83 GCTCCTTG Fluidigm -D11_84 GTAAGGTG Fluidigm -E11_85 GAGGATGG Fluidigm -F11_86 GTTGTCGG Fluidigm -G11_87 GGATTAGG Fluidigm -H11_88 GATAGAGG Fluidigm -A12_89 GTGTGTCG Fluidigm -B12_90 GCAATCCG Fluidigm -C12_91 GACCTTAG Fluidigm -D12_92 GCCTGTTC Fluidigm -E12_93 GCACTGTC Fluidigm -F12_94 GCTAACTC Fluidigm -G12_95 GATTCATC Fluidigm -H12_96 GTCTTGGC Fluidigm -FLD0001 GTATCGTCGT FLD_BiDirectional -FLD0002 GTGTATGCGT FLD_BiDirectional -FLD0003 TGCTCGTAGT FLD_BiDirectional -FLD0004 GTCGTCGTCT FLD_BiDirectional -FLD0005 GTGCGTGTGT FLD_BiDirectional -FLD0006 GCGTCGTGTA FLD_BiDirectional -FLD0007 GTCGTGTACT FLD_BiDirectional -FLD0008 GATGTAGCGT FLD_BiDirectional -FLD0009 GAGTGATCGT FLD_BiDirectional -FLD0010 CGCTATCAGT FLD_BiDirectional -FLD0011 CGCTGTAGTC FLD_BiDirectional -FLD0012 GCTAGTGAGT FLD_BiDirectional -FLD0013 GAGCTAGTGA FLD_BiDirectional -FLD0014 CGTGCTGTCA FLD_BiDirectional -FLD0015 GATCGTCTCT FLD_BiDirectional -FLD0016 GTGCTGTCGT FLD_BiDirectional -FLD0017 TGAGCGTGCT FLD_BiDirectional -FLD0018 CATGTCGTCA FLD_BiDirectional -FLD0019 TCAGTGTCTC FLD_BiDirectional -FLD0020 GTGCTCATGT FLD_BiDirectional -FLD0021 CGTATCTCGA FLD_BiDirectional -FLD0022 GTCATGCGTC FLD_BiDirectional -FLD0023 CTATGCGATC FLD_BiDirectional -FLD0024 TGCTATGCTG FLD_BiDirectional -FLD0025 TGTGTGCATG FLD_BiDirectional -FLD0026 GAGTGTCACT FLD_BiDirectional -FLD0027 CTAGTCTCGT FLD_BiDirectional -FLD0028 GAGTGCATCT FLD_BiDirectional -FLD0029 TGCGTAGTCG FLD_BiDirectional -FLD0030 CTGTGTCGTC FLD_BiDirectional -FLD0031 CTGTAGTGCG FLD_BiDirectional -FLD0032 GTGCGCTAGT FLD_BiDirectional -FLD0033 TGTGCTCGCA FLD_BiDirectional -FLD0034 GATGCGAGCT FLD_BiDirectional -FLD0035 CTGTACGTGA FLD_BiDirectional -FLD0036 GCGATGATGA FLD_BiDirectional -FLD0037 TGTCGAGTCA FLD_BiDirectional -FLD0038 GTCTACTGTC FLD_BiDirectional -FLD0039 CAGTCAGAGT FLD_BiDirectional -FLD0040 CGCAGTCTAT FLD_BiDirectional -FLD0041 GTATGAGCAC FLD_BiDirectional -FLD0042 CGAGTGCTGT FLD_BiDirectional -FLD0043 TATAGCACGC FLD_BiDirectional -FLD0044 TCATGCGCGA FLD_BiDirectional -FLD0045 TATGCGCTGC FLD_BiDirectional -FLD0046 TCTCTGTGCA FLD_BiDirectional -FLD0047 CTATCGCGTG FLD_BiDirectional -FLD0048 TACGCTGCTG FLD_BiDirectional -FLD0049 CTGCATGATC FLD_BiDirectional -FLD0050 CGCGTATCAT FLD_BiDirectional -FLD0051 GTATCTCTCG FLD_BiDirectional -FLD0052 GCTCATATGC FLD_BiDirectional -FLD0053 CACTATGTCG FLD_BiDirectional -FLD0054 TAGCGCGTAG FLD_BiDirectional -FLD0055 CGTCACAGTA FLD_BiDirectional -FLD0056 TCGCGTGAGA FLD_BiDirectional -FLD0057 TACATCGCTG FLD_BiDirectional -FLD0058 GTGAGAGACA FLD_BiDirectional -FLD0059 GACTGTACGT FLD_BiDirectional -FLD0060 GCACGTAGCT FLD_BiDirectional -FLD0061 TCACGCTATG FLD_BiDirectional -FLD0062 CGTACTACGT FLD_BiDirectional -FLD0063 CAGCTGAGTA FLD_BiDirectional -FLD0064 GAGATCAGTC FLD_BiDirectional -FLD0065 TACTGAGCTG FLD_BiDirectional -FLD0066 TAGTAGCGCG FLD_BiDirectional -FLD0067 GACGTCTGCT FLD_BiDirectional -FLD0068 GTACTCGCGA FLD_BiDirectional -FLD0069 TCTGAGCGCA FLD_BiDirectional -FLD0070 TAGACGTGCT FLD_BiDirectional -FLD0071 GTGACTCGTC FLD_BiDirectional -FLD0072 TCGAGTAGCG FLD_BiDirectional -FLD0073 CGTATGATGT FLD_BiDirectional -FLD0074 TAGTCTGTCA FLD_BiDirectional -FLD0075 TGTCTCTATC FLD_BiDirectional -FLD0076 CTAGAGTATC FLD_BiDirectional -FLD0077 TATCATGTGC FLD_BiDirectional -FLD0078 CATGAGTGTA FLD_BiDirectional -FLD0079 TGTCGTCATA FLD_BiDirectional -FLD0080 TATCTCATGC FLD_BiDirectional -FLD0081 TGTGTCACTA FLD_BiDirectional -FLD0082 TATCGATGCT FLD_BiDirectional -FLD0083 TAGAGTCTGT FLD_BiDirectional -FLD0084 CATGCATCAT FLD_BiDirectional -FLD0085 TGATCAGTCA FLD_BiDirectional -FLD0086 CGTCTATGAT FLD_BiDirectional -FLD0087 GTGATACTGA FLD_BiDirectional -FLD0088 CTAGATCTGA FLD_BiDirectional -FLD0089 TATCAGTCTG FLD_BiDirectional -FLD0090 TCAGATGCTA FLD_BiDirectional -FLD0091 TATGTACGTG FLD_BiDirectional -FLD0092 CTATACAGTG FLD_BiDirectional -FLD0093 TGATACTCTG FLD_BiDirectional -FLD0094 TCAGCGATAT FLD_BiDirectional -FLD0095 CTACTGATGA FLD_BiDirectional -FLD0096 GTAGTACACA FLD_BiDirectional -FLD0097 TGCTACATCA FLD_BiDirectional -FLD0098 AGTGTGTCTA FLD_BiDirectional -FLD0099 TCATATCGCG FLD_BiDirectional -FLD0100 TACGTATAGC FLD_BiDirectional -FLD0101 CAGCTATAGC FLD_BiDirectional -FLD0102 TCGATGCGCT FLD_BiDirectional -FLD0103 GCACGCGTAT FLD_BiDirectional -FLD0104 GCAGTATGCG FLD_BiDirectional -FLD0105 TGATAGAGAG FLD_BiDirectional -FLD0106 GCTACTAGCG FLD_BiDirectional -FLD0107 TGCGAGACGT FLD_BiDirectional -FLD0108 CGATGACAGA FLD_BiDirectional -FLD0109 GACTCATGCT FLD_BiDirectional -FLD0110 GTCTGATACG FLD_BiDirectional -FLD0111 ACTAGCTGTC FLD_BiDirectional -FLD0112 GCGTAGACGA FLD_BiDirectional -FLD0113 CTCAGCAGTG FLD_BiDirectional -FLD0114 CAGTCTACAT FLD_BiDirectional -FLD0115 TACTGCAGCG FLD_BiDirectional -FLD0116 TACACAGTAG FLD_BiDirectional -FLD0117 CACATACAGT FLD_BiDirectional -FLD0118 CACAGTGATG FLD_BiDirectional -FLD0119 CGAGCTAGCA FLD_BiDirectional -FLD0120 GAGACTATGC FLD_BiDirectional -FLD0121 CAGAGCTAGT FLD_BiDirectional -FLD0122 CGCAGAGCAT FLD_BiDirectional -FLD0123 TGTACAGCGA FLD_BiDirectional -FLD0124 ACGTCAGTAT FLD_BiDirectional -FLD0125 TCACAGCATA FLD_BiDirectional -FLD0126 ACTGCGTGTC FLD_BiDirectional -FLD0127 CGATCGACTG FLD_BiDirectional -FLD0128 GCGAGATGTA FLD_BiDirectional -FLD0129 CTGATGCAGA FLD_BiDirectional -FLD0130 GTGACGTACG FLD_BiDirectional -FLD0131 CGACGCTGAT FLD_BiDirectional -FLD0132 CTACGATCAG FLD_BiDirectional -FLD0133 GCACTAGACA FLD_BiDirectional -FLD0134 CTAGCAGATG FLD_BiDirectional -FLD0135 CATGATACGC FLD_BiDirectional -FLD0136 GCAGCTGTCA FLD_BiDirectional -FLD0137 ACGTATCATC FLD_BiDirectional -FLD0138 AGTATCGTAC FLD_BiDirectional -FLD0139 GATACACTGA FLD_BiDirectional -FLD0140 GACTAGTCAG FLD_BiDirectional -FLD0141 GATGACTACG FLD_BiDirectional -FLD0142 CAGAGAGTCA FLD_BiDirectional -FLD0143 TCGATCGACA FLD_BiDirectional -FLD0144 ACTGATGTAG FLD_BiDirectional -FLD0145 ACTCGATAGT FLD_BiDirectional -FLD0146 GACGATCGCA FLD_BiDirectional -FLD0147 TCATCATGCG FLD_BiDirectional -FLD0148 ACATGTCTGA FLD_BiDirectional -FLD0149 AGTCATCGCA FLD_BiDirectional -FLD0150 TAGCATACAG FLD_BiDirectional -FLD0151 AGAGTCGCGT FLD_BiDirectional -FLD0152 TCTACGACAT FLD_BiDirectional -FLD0153 CACGAGATGA FLD_BiDirectional -FLD0154 ACGCACATAT FLD_BiDirectional -FLD0155 ACGTGCTCTG FLD_BiDirectional -FLD0156 ACGATCACAT FLD_BiDirectional -FLD0157 AGTGTACTCA FLD_BiDirectional -FLD0158 TGATGTATGT FLD_BiDirectional -FLD0159 GATATATGTC FLD_BiDirectional -FLD0160 TAGTACTAGA FLD_BiDirectional -FLD0161 TATAGAGATC FLD_BiDirectional -FLD0162 TCGATATCTA FLD_BiDirectional -FLD0163 TACATGATAG FLD_BiDirectional -FLD0164 TGAGATCATA FLD_BiDirectional -FLD0165 CTACATACTA FLD_BiDirectional -FLD0166 ATCAGTGTAT FLD_BiDirectional -FLD0167 ATCATATCTC FLD_BiDirectional -FLD0168 AGTAGATCAT FLD_BiDirectional -FLD0169 ACATAGTATC FLD_BiDirectional -FLD0170 ATGTATAGTC FLD_BiDirectional -FLD0171 ACAGTCATAT FLD_BiDirectional -FLD0172 ACATATACGT FLD_BiDirectional -FLD0173 AGCATCTATA FLD_BiDirectional -FLD0174 AGACTATATC FLD_BiDirectional -FLD0175 CAGCATCTAG FLD_BiDirectional -FLD0176 CGAGACGACA FLD_BiDirectional -FLD0177 ATCACTCATA FLD_BiDirectional -FLD0178 AGCTCTGTGA FLD_BiDirectional -FLD0179 ATGTCATGCT FLD_BiDirectional -FLD0180 GCTGACAGAG FLD_BiDirectional -FLD0181 ATACAGTCTC FLD_BiDirectional -FLD0182 CATAGACGTG FLD_BiDirectional -FLD0183 AGAGATATCA FLD_BiDirectional -FLD0184 ATGCTGCGCT FLD_BiDirectional -FLD0185 AGTCAGACGC FLD_BiDirectional -FLD0186 ACGATACACT FLD_BiDirectional -FLD0187 AGCGAGTATG FLD_BiDirectional -FLD0188 ATCGCTACAT FLD_BiDirectional -FLD0189 ATGCTAGAGA FLD_BiDirectional -FLD0190 AGCAGTACTC FLD_BiDirectional -FLD0191 ATCTAGATCA FLD_BiDirectional -FLD0192 ATCGCATAGA FLD_BiDirectional -FLD0193 TTGTTGCTGT FLD_BiDirectional -FLD0194 GTGTGGTTGT FLD_BiDirectional -FLD0195 TAGGTGGAAT FLD_BiDirectional -FLD0196 TGTAGGTGGA FLD_BiDirectional -FLD0197 TTAGTGGTGA FLD_BiDirectional -FLD0198 GTGAAGGTAA FLD_BiDirectional -FLD0199 TGTTGTGGTA FLD_BiDirectional -FLD0200 GTTGATGAGT FLD_BiDirectional -FLD0201 GGTCAGTGTA FLD_BiDirectional -FLD0202 GTAATGGAGT FLD_BiDirectional -FLD0203 CTCGTTATTC FLD_BiDirectional -FLD0204 GGAAGTAAGG FLD_BiDirectional -FLD0205 CGGTGTGTGT FLD_BiDirectional -FLD0206 CGTCTTCTTA FLD_BiDirectional -FLD0207 TGTGAATCTC FLD_BiDirectional -FLD0208 CTAATCGTGT FLD_BiDirectional -FLD0209 CTCTTAGTTC FLD_BiDirectional -FLD0210 GGATAGGATC FLD_BiDirectional -FLD0211 GGTGTCTTGT FLD_BiDirectional -FLD0212 GATGGTTGTA FLD_BiDirectional -FLD0213 CCTCGTTGTT FLD_BiDirectional -FLD0214 GGTTGGAGTT FLD_BiDirectional -FLD0215 TGGTGTCCGT FLD_BiDirectional -FLD0216 CGTTAGCGTA FLD_BiDirectional -FLD0217 TACTAGGATC FLD_BiDirectional -FLD0218 GTCTCAATGT FLD_BiDirectional -FLD0219 GATGAGGTAT FLD_BiDirectional -FLD0220 GGTGTTAGTG FLD_BiDirectional -FLD0221 CATTCTCTGA FLD_BiDirectional -FLD0222 CATCTGGAGT FLD_BiDirectional -FLD0223 GAATGGAAGA FLD_BiDirectional -FLD0224 GGCTGTGATC FLD_BiDirectional -FLD0225 TGGTGCTGGA FLD_BiDirectional -FLD0226 TATGGTAAGG FLD_BiDirectional -FLD0227 GTTCGATTGT FLD_BiDirectional -FLD0228 GGTAGAATGA FLD_BiDirectional -FLD0229 TTCTCATCGT FLD_BiDirectional -FLD0230 CTCAATCGTA FLD_BiDirectional -FLD0231 CGCTAATGTA FLD_BiDirectional -FLD0232 GCGTCTGAAT FLD_BiDirectional -FLD0233 TTCTGTTGCC FLD_BiDirectional -FLD0234 TTGTCCTTGC FLD_BiDirectional -FLD0235 CCTGTGTAGA FLD_BiDirectional -FLD0236 GATAAGAAGG FLD_BiDirectional -FLD0237 CAGGTCACAT FLD_BiDirectional -FLD0238 GCCATGTCAT FLD_BiDirectional -FLD0239 TCTGCCTATA FLD_BiDirectional -FLD0240 CTTAGTTCGC FLD_BiDirectional -FLD0241 CGTAATGAGC FLD_BiDirectional -FLD0242 TTGCTTAGTC FLD_BiDirectional -FLD0243 TCTTGTTCAC FLD_BiDirectional -FLD0244 GTGGCTTCGT FLD_BiDirectional -FLD0245 TGTTCGATAG FLD_BiDirectional -FLD0246 TCATTCAGTG FLD_BiDirectional -FLD0247 GTGGAGAGCT FLD_BiDirectional -FLD0248 GTAGAAGTGG FLD_BiDirectional -FLD0249 TGGAGCATGT FLD_BiDirectional -FLD0250 GAAGGAGATA FLD_BiDirectional -FLD0251 CGAATGTATG FLD_BiDirectional -FLD0252 TCGTGAATGA FLD_BiDirectional -FLD0253 GAATAGCTGA FLD_BiDirectional -FLD0254 TTGTCACATC FLD_BiDirectional -FLD0255 CTGGAGGCTA FLD_BiDirectional -FLD0256 TGTCAGCTTA FLD_BiDirectional -FLD0257 GTTCTTCGTA FLD_BiDirectional -FLD0258 TTACACGTTC FLD_BiDirectional -FLD0259 GTAGCCAGTA FLD_BiDirectional -FLD0260 TGAGAAGGTA FLD_BiDirectional -FLD0261 CCATATGATC FLD_BiDirectional -FLD0262 CGATCCTATA FLD_BiDirectional -FLD0263 TGACTAGCTT FLD_BiDirectional -FLD0264 TAACTCTGCT FLD_BiDirectional -FLD0265 TCGAATGTGC FLD_BiDirectional -FLD0266 TCGCTGAACA FLD_BiDirectional -FLD0267 GCGTTATTGC FLD_BiDirectional -FLD0268 GAACTATCAC FLD_BiDirectional -FLD0269 TCGAGGTACT FLD_BiDirectional -FLD0270 TGCGGATGGT FLD_BiDirectional -FLD0271 TTCGAGCTAT FLD_BiDirectional -FLD0272 GGTCTGGTGT FLD_BiDirectional -FLD0273 CTAAGTCATG FLD_BiDirectional -FLD0274 TTGCAGATCA FLD_BiDirectional -FLD0275 CTGCGAATGT FLD_BiDirectional -FLD0276 CTGTTCTAGC FLD_BiDirectional -FLD0277 CACTTGTGTG FLD_BiDirectional -FLD0278 TGGATGACAT FLD_BiDirectional -FLD0279 GATCCTGAGC FLD_BiDirectional -FLD0280 GTCGGTCTGA FLD_BiDirectional -FLD0281 TGTTACGATC FLD_BiDirectional -FLD0282 GTCTTGGCTC FLD_BiDirectional -FLD0283 GGTCGTGCAT FLD_BiDirectional -FLD0284 CAGGCTCAGT FLD_BiDirectional -FLD0285 TAGCTTCACT FLD_BiDirectional -FLD0286 CAGATGTCCT FLD_BiDirectional -FLD0287 TTACGCAGTG FLD_BiDirectional -FLD0288 TTCGTTCCTG FLD_BiDirectional -FLD0289 CACTGCTTGA FLD_BiDirectional -FLD0290 TCTAGCGTGG FLD_BiDirectional -FLD0291 GCATAATCGC FLD_BiDirectional -FLD0292 GTCGTAACAC FLD_BiDirectional -FLD0293 GAGATTGCTA FLD_BiDirectional -FLD0294 GGACAGATGG FLD_BiDirectional -FLD0295 CTTACGTTGC FLD_BiDirectional -FLD0296 GTGTTCGGTC FLD_BiDirectional -FLD0297 CTCAAGAAGC FLD_BiDirectional -FLD0298 TCTCGGATAG FLD_BiDirectional -FLD0299 CTCTGGACGA FLD_BiDirectional -FLD0300 CGAGCATTGT FLD_BiDirectional -FLD0301 CCAAGAAGAA FLD_BiDirectional -FLD0302 TCCTTGTTCT FLD_BiDirectional -FLD0303 GTAACGATGT FLD_BiDirectional -FLD0304 TGGACTCAGA FLD_BiDirectional -FLD0305 GGCATCATGC FLD_BiDirectional -FLD0306 GTATAACGCT FLD_BiDirectional -FLD0307 GCAGATAAGT FLD_BiDirectional -FLD0308 GTCGGCTCTA FLD_BiDirectional -FLD0309 TTCGATAGCA FLD_BiDirectional -FLD0310 GTCTAGCAGG FLD_BiDirectional -FLD0311 GGAACACAGG FLD_BiDirectional -FLD0312 TGGTTCGCTG FLD_BiDirectional -FLD0313 CACATTAGCG FLD_BiDirectional -FLD0314 GAAGCGCACT FLD_BiDirectional -FLD0315 GCATGCCAGT FLD_BiDirectional -FLD0316 GGAGACTGTA FLD_BiDirectional -FLD0317 TCGAACTGCA FLD_BiDirectional -FLD0318 GAGAGGACAT FLD_BiDirectional -FLD0319 GAGCACGGAA FLD_BiDirectional -FLD0320 GCTCTAACAT FLD_BiDirectional -FLD0321 TGCTGGCTTG FLD_BiDirectional -FLD0322 TGCATGGAGC FLD_BiDirectional -FLD0323 GTACTAAGAG FLD_BiDirectional -FLD0324 GAAGTCAAGC FLD_BiDirectional -FLD0325 GCGCATTATG FLD_BiDirectional -FLD0326 GTCCAGACAT FLD_BiDirectional -FLD0327 GAGACCTCTA FLD_BiDirectional -FLD0328 TTGCACTCAG FLD_BiDirectional -FLD0329 TGCGGCGATA FLD_BiDirectional -FLD0330 AGTTGCTAGT FLD_BiDirectional -FLD0331 AGGATTGAGG FLD_BiDirectional -FLD0332 CCAGAACAGA FLD_BiDirectional -FLD0333 CGTCAAGCAT FLD_BiDirectional -FLD0334 TTGTCGAGAC FLD_BiDirectional -FLD0335 GACAGGTGAC FLD_BiDirectional -FLD0336 CTGACAAGTG FLD_BiDirectional -FLD0337 CACGAAGAGC FLD_BiDirectional -FLD0338 CATACCTGAT FLD_BiDirectional -FLD0339 GACGTGCTTC FLD_BiDirectional -FLD0340 ATTGTGGAGT FLD_BiDirectional -FLD0341 TCTGGTCTCA FLD_BiDirectional -FLD0342 AGGTAAGAGG FLD_BiDirectional -FLD0343 TCCTGACAGA FLD_BiDirectional -FLD0344 GCACTGTTGC FLD_BiDirectional -FLD0345 ACCATGAGTC FLD_BiDirectional -FLD0346 AATGCAGTGT FLD_BiDirectional -FLD0347 ATATGGTGGA FLD_BiDirectional -FLD0348 ACTCAGTTAC FLD_BiDirectional -FLD0349 AAGTGCGATG FLD_BiDirectional -FLD0350 CCACAGAGTG FLD_BiDirectional -FLD0351 AGTGGTGATC FLD_BiDirectional -FLD0352 ACTTCTTAGC FLD_BiDirectional -FLD0353 GCCACATATA FLD_BiDirectional -FLD0354 ACGCAGGAGT FLD_BiDirectional -FLD0355 AATATGCTGC FLD_BiDirectional -FLD0356 AAGCGTAGAA FLD_BiDirectional -FLD0357 GACAGCAAGC FLD_BiDirectional -FLD0358 CTGACCGAGA FLD_BiDirectional -FLD0359 CGCGACTTGT FLD_BiDirectional -FLD0360 CATCAACATG FLD_BiDirectional -FLD0361 TGGCTACGCT FLD_BiDirectional -FLD0362 ACGCGGACTA FLD_BiDirectional -FLD0363 AGAGGTCGGA FLD_BiDirectional -FLD0364 AATCGAGCGT FLD_BiDirectional -FLD0365 AAGTACACTC FLD_BiDirectional -FLD0366 AGCTGAATGA FLD_BiDirectional -FLD0367 ATGCCTATCA FLD_BiDirectional -FLD0368 ACTGTAGGAC FLD_BiDirectional -FLD0369 ATAGCCGTGT FLD_BiDirectional -FLD0370 TCACGACGAA FLD_BiDirectional -FLD0371 ATCTGTCCAT FLD_BiDirectional -FLD0372 ACTTAGAGAG FLD_BiDirectional -FLD0373 AGTGGCAGGT FLD_BiDirectional -FLD0374 ATGAGGTCGT FLD_BiDirectional -FLD0375 AGGAGAAGGA FLD_BiDirectional -FLD0376 ACAACTGCAA FLD_BiDirectional -FLD0377 ATTAGCGAGT FLD_BiDirectional -FLD0378 ACAACGAACA FLD_BiDirectional -FLD0379 AGAGCGCCAA FLD_BiDirectional -FLD0380 AGGTAGCTCA FLD_BiDirectional -FLD0381 AACGCCAAGA FLD_BiDirectional -FLD0382 AAGGTATGAG FLD_BiDirectional -FLD0383 ATGGAGCACT FLD_BiDirectional -FLD0384 ACGGTGCTAG FLD_BiDirectional -NGOBC1 AAGGGA NuGen_Ovation -NGOBC2 CCTTCA NuGen_Ovation -NGOBC3 GGACCC NuGen_Ovation -NGOBC4 TTCAGC NuGen_Ovation -NGOBC5 AAGACG NuGen_Ovation -NGOBC6 CCTCGG NuGen_Ovation -NGOBC7 GGATGT NuGen_Ovation -NGOBC8 TTCGCT NuGen_Ovation -NGOBC9 ACACGA NuGen_Ovation -NGOBC10 CACACA NuGen_Ovation -NGOBC11 GTGTTA NuGen_Ovation -NGOBC12 TGTGAA NuGen_Ovation -NGOBC13 ACAAAC NuGen_Ovation -NGOBC14 CACCTC NuGen_Ovation -NGOBC15 GTGGCC NuGen_Ovation -NGOBC16 TGTTGC NuGen_Ovation -ION1 CTAAGGTAAC IonXpress -ION2 TAAGGAGAAC IonXpress -ION3 AAGAGGATTC IonXpress -ION4 TACCAAGATC IonXpress -ION5 CAGAAGGAAC IonXpress -ION6 CTGCAAGTTC IonXpress -ION7 TTCGTGATTC IonXpress -ION8 TTCCGATAAC IonXpress -ION9 TGAGCGGAAC IonXpress -ION10 CTGACCGAAC IonXpress -ION11 TCCTCGAATC IonXpress -ION12 TAGGTGGTTC IonXpress -ION13 TCTAACGGAC IonXpress -ION14 TTGGAGTGTC IonXpress -ION15 TCTAGAGGTC IonXpress -ION16 TCTGGATGAC IonXpress -ION17 TCTATTCGTC IonXpress -ION18 AGGCAATTGC IonXpress -ION19 TTAGTCGGAC IonXpress -ION20 CAGATCCATC IonXpress -ION21 TCGCAATTAC IonXpress -ION22 TTCGAGACGC IonXpress -ION23 TGCCACGAAC IonXpress -ION24 AACCTCATTC IonXpress -ION25 CCTGAGATAC IonXpress -ION26 TTACAACCTC IonXpress -ION27 AACCATCCGC IonXpress -ION28 ATCCGGAATC IonXpress -ION29 TCGACCACTC IonXpress -ION30 CGAGGTTATC IonXpress -ION31 TCCAAGCTGC IonXpress -ION32 TCTTACACAC IonXpress -ION33 TTCTCATTGAAC IonXpress -ION34 TCGCATCGTTC IonXpress -ION35 TAAGCCATTGTC IonXpress -ION36 AAGGAATCGTC IonXpress -ION37 CTTGAGAATGTC IonXpress -ION38 TGGAGGACGGAC IonXpress -ION39 TAACAATCGGC IonXpress -ION40 CTGACATAATC IonXpress -ION41 TTCCACTTCGC IonXpress -ION42 AGCACGAATC IonXpress -ION43 CTTGACACCGC IonXpress -ION44 TTGGAGGCCAGC IonXpress -ION45 TGGAGCTTCCTC IonXpress -ION46 TCAGTCCGAAC IonXpress -ION47 TAAGGCAACCAC IonXpress -ION48 TTCTAAGAGAC IonXpress -ION49 TCCTAACATAAC IonXpress -ION50 CGGACAATGGC IonXpress -ION51 TTGAGCCTATTC IonXpress -ION52 CCGCATGGAAC IonXpress -ION53 CTGGCAATCCTC IonXpress -ION54 CCGGAGAATCGC IonXpress -ION55 TCCACCTCCTC IonXpress -ION56 CAGCATTAATTC IonXpress -ION57 TCTGGCAACGGC IonXpress -ION58 TCCTAGAACAC IonXpress -ION59 TCCTTGATGTTC IonXpress -ION60 TCTAGCTCTTC IonXpress -ION61 TCACTCGGATC IonXpress -ION62 TTCCTGCTTCAC IonXpress -ION63 CCTTAGAGTTC IonXpress -ION64 CTGAGTTCCGAC IonXpress -ION65 TCCTGGCACATC IonXpress -ION66 CCGCAATCATC IonXpress -ION67 TTCCTACCAGTC IonXpress -ION68 TCAAGAAGTTC IonXpress -ION69 TTCAATTGGC IonXpress -ION70 CCTACTGGTC IonXpress -ION71 TGAGGCTCCGAC IonXpress -ION72 CGAAGGCCACAC IonXpress -ION73 TCTGCCTGTC IonXpress -ION74 CGATCGGTTC IonXpress -ION75 TCAGGAATAC IonXpress -ION76 CGGAAGAACCTC IonXpress -ION77 CGAAGCGATTC IonXpress -ION78 CAGCCAATTCTC IonXpress -ION79 CCTGGTTGTC IonXpress -ION80 TCGAAGGCAGGC IonXpress -ION81 CCTGCCATTCGC IonXpress -ION82 TTGGCATCTC IonXpress -ION83 CTAGGACATTC IonXpress -ION84 CTTCCATAAC IonXpress -ION85 CCAGCCTCAAC IonXpress -ION86 CTTGGTTATTC IonXpress -ION87 TTGGCTGGAC IonXpress -ION88 CCGAACACTTC IonXpress -ION89 TCCTGAATCTC IonXpress -ION90 CTAACCACGGC IonXpress -ION91 CGGAAGGATGC IonXpress -ION92 CTAGGAACCGC IonXpress -ION93 CTTGTCCAATC IonXpress -ION94 TCCGACAAGC IonXpress -ION95 CGGACAGATC IonXpress -ION96 TTAAGCGGTC IonXpress -NGEBC1 AACCAG NuGen_Encore -NGEBC2 TGGTGA NuGen_Encore -NGEBC3 AGTGAG NuGen_Encore -NGEBC4 GCACTA NuGen_Encore -NGEBC5 ACCTCA NuGen_Encore -NGEBC6 GTGCTT NuGen_Encore -NGEBC7 AAGCCT NuGen_Encore -NGEBC8 GTCGTA NuGen_Encore -NGEBC9 AAGAGG NuGen_Encore -NGEBC10 GGAGAA NuGen_Encore -NGEBC11 AGCATG NuGen_Encore -NGEBC12 GAGTCA NuGen_Encore -NGEBC13 CGTAGA NuGen_Encore -NGEBC14 TCAGAG NuGen_Encore -NGEBC15 CACAGT NuGen_Encore -NGEBC16 TTGGCA NuGen_Encore -N701 TAAGGCGA Nextera_XT1 -N702 CGTACTAG Nextera_XT1 -N703 AGGCAGAA Nextera_XT1 -N704 TCCTGAGC Nextera_XT1 -N705 GGACTCCT Nextera_XT1 -N706 TAGGCATG Nextera_XT1 -N707 CTCTCTAC Nextera_XT1 -N708 CAGAGAGG Nextera_XT1 -N709 GCTACGCT Nextera_XT1 -N710 CGAGGCTG Nextera_XT1 -N711 AAGAGGCA Nextera_XT1 -N712 GTAGAGGA Nextera_XT1 -A701 ATCACGAC Nextera_TSACP1 -A702 ACAGTGGT Nextera_TSACP1 -A703 CAGATCCA Nextera_TSACP1 -A704 ACAAACGG Nextera_TSACP1 -A705 ACCCAGCA Nextera_TSACP1 -A706 AACCCCTC Nextera_TSACP1 -A707 CCCAACCT Nextera_TSACP1 -A708 CACCACAC Nextera_TSACP1 -A709 GAAACCCA Nextera_TSACP1 -A710 TGTGACCA Nextera_TSACP1 -A711 AGGGTCAA Nextera_TSACP1 -A712 AGGAGTGG Nextera_TSACP1 -SSXT96-1 AACGTGAT SureSelect_XT_96_barcodes -SSXT96-2 AAACATCG SureSelect_XT_96_barcodes -SSXT96-3 ATGCCTAA SureSelect_XT_96_barcodes -SSXT96-4 AGTGGTCA SureSelect_XT_96_barcodes -SSXT96-5 ACCACTGT SureSelect_XT_96_barcodes -SSXT96-6 ACATTGGC SureSelect_XT_96_barcodes -SSXT96-7 CAGATCTG SureSelect_XT_96_barcodes -SSXT96-8 CATCAAGT SureSelect_XT_96_barcodes -SSXT96-9 CGCTGATC SureSelect_XT_96_barcodes -SSXT96-10 ACAAGCTA SureSelect_XT_96_barcodes -SSXT96-11 CTGTAGCC SureSelect_XT_96_barcodes -SSXT96-12 AGTACAAG SureSelect_XT_96_barcodes -SSXT96-13 AACAACCA SureSelect_XT_96_barcodes -SSXT96-14 AACCGAGA SureSelect_XT_96_barcodes -SSXT96-15 AACGCTTA SureSelect_XT_96_barcodes -SSXT96-16 AAGACGGA SureSelect_XT_96_barcodes -SSXT96-17 AAGGTACA SureSelect_XT_96_barcodes -SSXT96-18 ACACAGAA SureSelect_XT_96_barcodes -SSXT96-19 ACAGCAGA SureSelect_XT_96_barcodes -SSXT96-20 ACCTCCAA SureSelect_XT_96_barcodes -SSXT96-21 ACGCTCGA SureSelect_XT_96_barcodes -SSXT96-22 ACGTATCA SureSelect_XT_96_barcodes -SSXT96-23 ACTATGCA SureSelect_XT_96_barcodes -SSXT96-24 AGAGTCAA SureSelect_XT_96_barcodes -SSXT96-25 AGATCGCA SureSelect_XT_96_barcodes -SSXT96-26 AGCAGGAA SureSelect_XT_96_barcodes -SSXT96-27 AGTCACTA SureSelect_XT_96_barcodes -SSXT96-28 ATCCTGTA SureSelect_XT_96_barcodes -SSXT96-29 ATTGAGGA SureSelect_XT_96_barcodes -SSXT96-30 CAACCACA SureSelect_XT_96_barcodes -SSXT96-31 CAAGACTA SureSelect_XT_96_barcodes -SSXT96-32 CAATGGAA SureSelect_XT_96_barcodes -SSXT96-33 CACTTCGA SureSelect_XT_96_barcodes -SSXT96-34 CAGCGTTA SureSelect_XT_96_barcodes -SSXT96-35 CATACCAA SureSelect_XT_96_barcodes -SSXT96-36 CCAGTTCA SureSelect_XT_96_barcodes -SSXT96-37 CCGAAGTA SureSelect_XT_96_barcodes -SSXT96-38 CCGTGAGA SureSelect_XT_96_barcodes -SSXT96-39 CCTCCTGA SureSelect_XT_96_barcodes -SSXT96-40 CGAACTTA SureSelect_XT_96_barcodes -SSXT96-41 CGACTGGA SureSelect_XT_96_barcodes -SSXT96-42 CGCATACA SureSelect_XT_96_barcodes -SSXT96-43 CTCAATGA SureSelect_XT_96_barcodes -SSXT96-44 CTGAGCCA SureSelect_XT_96_barcodes -SSXT96-45 CTGGCATA SureSelect_XT_96_barcodes -SSXT96-46 GAATCTGA SureSelect_XT_96_barcodes -SSXT96-47 GACTAGTA SureSelect_XT_96_barcodes -SSXT96-48 GAGCTGAA SureSelect_XT_96_barcodes -SSXT96-49 GATAGACA SureSelect_XT_96_barcodes -SSXT96-50 GCCACATA SureSelect_XT_96_barcodes -SSXT96-51 GCGAGTAA SureSelect_XT_96_barcodes -SSXT96-52 GCTAACGA SureSelect_XT_96_barcodes -SSXT96-53 GCTCGGTA SureSelect_XT_96_barcodes -SSXT96-54 GGAGAACA SureSelect_XT_96_barcodes -SSXT96-55 GGTGCGAA SureSelect_XT_96_barcodes -SSXT96-56 GTACGCAA SureSelect_XT_96_barcodes -SSXT96-57 GTCGTAGA SureSelect_XT_96_barcodes -SSXT96-58 GTCTGTCA SureSelect_XT_96_barcodes -SSXT96-59 GTGTTCTA SureSelect_XT_96_barcodes -SSXT96-60 TAGGATGA SureSelect_XT_96_barcodes -SSXT96-61 TATCAGCA SureSelect_XT_96_barcodes -SSXT96-62 TCCGTCTA SureSelect_XT_96_barcodes -SSXT96-63 TCTTCACA SureSelect_XT_96_barcodes -SSXT96-64 TGAAGAGA SureSelect_XT_96_barcodes -SSXT96-65 TGGAACAA SureSelect_XT_96_barcodes -SSXT96-66 TGGCTTCA SureSelect_XT_96_barcodes -SSXT96-67 TGGTGGTA SureSelect_XT_96_barcodes -SSXT96-68 TTCACGCA SureSelect_XT_96_barcodes -SSXT96-69 AACTCACC SureSelect_XT_96_barcodes -SSXT96-70 AAGAGATC SureSelect_XT_96_barcodes -SSXT96-71 AAGGACAC SureSelect_XT_96_barcodes -SSXT96-72 AATCCGTC SureSelect_XT_96_barcodes -SSXT96-73 AATGTTGC SureSelect_XT_96_barcodes -SSXT96-74 ACACGACC SureSelect_XT_96_barcodes -SSXT96-75 ACAGATTC SureSelect_XT_96_barcodes -SSXT96-76 AGATGTAC SureSelect_XT_96_barcodes -SSXT96-77 AGCACCTC SureSelect_XT_96_barcodes -SSXT96-78 AGCCATGC SureSelect_XT_96_barcodes -SSXT96-79 AGGCTAAC SureSelect_XT_96_barcodes -SSXT96-80 ATAGCGAC SureSelect_XT_96_barcodes -SSXT96-81 ATCATTCC SureSelect_XT_96_barcodes -SSXT96-82 ATTGGCTC SureSelect_XT_96_barcodes -SSXT96-83 CAAGGAGC SureSelect_XT_96_barcodes -SSXT96-84 CACCTTAC SureSelect_XT_96_barcodes -SSXT96-85 CCATCCTC SureSelect_XT_96_barcodes -SSXT96-86 CCGACAAC SureSelect_XT_96_barcodes -SSXT96-87 CCTAATCC SureSelect_XT_96_barcodes -SSXT96-88 CCTCTATC SureSelect_XT_96_barcodes -SSXT96-89 CGACACAC SureSelect_XT_96_barcodes -SSXT96-90 CGGATTGC SureSelect_XT_96_barcodes -SSXT96-91 CTAAGGTC SureSelect_XT_96_barcodes -SSXT96-92 GAACAGGC SureSelect_XT_96_barcodes -SSXT96-93 GACAGTGC SureSelect_XT_96_barcodes -SSXT96-94 GAGTTAGC SureSelect_XT_96_barcodes -SSXT96-95 GATGAATC SureSelect_XT_96_barcodes -SSXT96-96 GCCAAGAC SureSelect_XT_96_barcodes -NGOTEBC1 CACGTCTANNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC2 AGCTAGTGNNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC3 ACTATCGCNNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC4 GCGTATCANNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC5 ACTCTCCANNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC6 CGTCCATTNNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC7 AGCCGTAANNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC8 GAGTAGAGNNNNNN Nugen_Ovation_Target_Enrichment - diff --git a/clipper/merge-fifo b/clipper/merge-fifo deleted file mode 100755 index dd42261..0000000 --- a/clipper/merge-fifo +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/perl - -use Getopt::Long; -use IO::Select; -use IO::File; - -die "usage: $0 FIFO-LIST - -This allows you to merge multiple fifo outputs without causing a read -block on one to prevent reading from the other (deadlock!) - -Reads from ANY of the fifos in the list that are -available. If one blocks in the middle of a line, for -example, this program will not block. -" unless @ARGV; - -my $i = 0; -my @findex; -my @fbuf; -my $sel= IO::Select->new(); -for my $file (@ARGV) { - open($fin[$i],$file) || die "$file: $!\n";; - $fin[$i]->blocking(0); - $findex[fileno($fin[$i])]=$i; - $sel->add($fin[$i]); - ++$i; -} - -my $closed = 0; -while ( @ready = $sel->can_read() ) { - for my $h (@ready) { - my $ret=sysread($h, $char, 1); - - if ($ret) { - my $fn; - $fbuf[$fn=fileno($h)] .= $char; - if ($char eq "\n") { - print $fbuf[$fn]; - $fbuf[$fn]=""; - } - } else { - $sel->remove($h); - if (!$h->close()) { - die "ERROR during close: $!\n"; - } else { - ++$closed; - } - } - } -} - -if ($closed != @ARGV) { - die "ERROR during merge\n"; -} diff --git a/clipper/mirna-quant.cpp b/clipper/mirna-quant.cpp deleted file mode 100644 index 98eae13..0000000 --- a/clipper/mirna-quant.cpp +++ /dev/null @@ -1,710 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // or sparse_hash_set, dense_hash_map, ... -#include - -typedef struct line { - char *s; int n; size_t a; -} line; - -struct fq { - line id; - line seq; - line com; - line qual; -}; - -class to_merge { -public: - std::string sseq; - int cnt; - to_merge(std::string s, int c) {sseq=s; cnt=c;}; - to_merge() {}; -}; - -class ent { -public: - std::string seq; - int cnt; - - ent(const std::string &s, const int &c) { seq=s; cnt=c; }; - - static bool comp_cnt (const ent &a, const ent &b) { - return a.cnt < b.cnt; - }; -}; -class idseq { -public: - std::string id; - std::string seq; - - idseq(const std::string &s, const std::string &i) { seq=s; id=i; }; -}; - -// get file extension -const char *fext(const char *f); -FILE *gzopen(const char *f, const char *m, bool*isgz); - -int read_line(FILE *in, struct line &l); // 0=done, 1=ok, -1=err+continue -int read_fq(FILE *in, int &lno, struct fq *fq); // 0=done, 1=ok, -1=err+continue -int read_fa(FILE *in, int &lno, struct fq *fq); // 0=done, 1=ok, -1=err+continue -#ifdef _WIN32 - ssize_t getline(char **lineptr, size_t *n, FILE *stream); -#endif -void usage(FILE *f); -double quantile(std::vector vec, double p); -#define meminit(l) (memset(&l,0,sizeof(l))) -FILE *openordie(const char *nam, const char * mode, FILE *def, const char *errstr, bool *isgz=NULL); - -std::string string_format(const std::string &fmt, ...); -bool file_newer(const char *f1, const char *f2); -std::vector split(char* str,const char* delim); - -#define MAX_EX 4 - -int main (int argc, char **argv) { - char *in = NULL; - char *out = NULL; - char *stat = NULL; - char *ref = NULL; - char *pat = NULL; - char *vexcl[MAX_EX] = {NULL}; - - int excl_n = 0; - int targ = 1000; - int thr = -1; - int mergs = 1; - int mergc = 0; - int mergn = 0; - bool debug = false; - - char c; - while ( (c = getopt (argc, argv, "-hdi:o:s:p:r:n:t:x:m:")) != -1) { - switch (c) { - case '\1': - if (!in) - in=optarg; - else { - fprintf(stderr, "Unknown parameter '%s'.\n", optarg); - exit(1); - } - case 'i': - in = optarg; break; - case 'o': - out = optarg; break; - case 's': - stat = optarg; break; - case 'm': - mergs = atoi(optarg); break; - case 'r': - ref = optarg; break; - case 'p': - pat = optarg; break; - case 'x': - vexcl[excl_n++] = optarg; break; - case 'n': - targ = atoi(optarg); break; - case 't': - thr = atoi(optarg); break; - case 'd': - debug=true; break; - case 'h': - usage(stdout); - exit(0); - case '?': - if (strchr("iosrn", optopt)) - fprintf (stderr, "Option -%c requires an argument.\n", optopt); - else if (isprint(optopt)) - fprintf (stderr, "Unknown option `-%c'.\n", optopt); - else - fprintf (stderr, - "Unknown option character `\\x%x'.\n", - optopt); - usage(stderr); - return 1; - } - } - - FILE *fin, *fout, *fstat, *fref = NULL, *fpat=NULL, *ftmp=NULL; - bool fingz; - fin = openordie(in, "r", stdin, "Error opening file '%s': %s\n", &fingz); - fout = openordie(out, "w", stdout, "Error writing to file '%s': %s\n"); - fstat = openordie(stat, "w", stderr, "Error writing to file '%s': %s\n"); - - if (ref) - fref = openordie(ref, "r", NULL, "Error opening file '%s': %s\n"); - - if (pat) - fpat = openordie(pat, "r", NULL, "Error opening file '%s': %s\n"); - - google::sparse_hash_map mmap; - - - int read_ok, nref=0, nrec = 0, lno = 0, npat=0; struct fq fq; meminit(fq); - - if (fref) { - // read fasta referernce - lno = 0; - while (read_ok=read_fa(fref, lno, &fq)) { - ++nref; - char * p=strchr(fq.id.s, ' '); - if (p) *p='\0'; - mmap[fq.seq.s] = fq.id.s+1; - } - fprintf(fstat,"nrefseq\t%d\n", nref); - } - - std::vector pvec; - if (fpat) { - // patterns to search and exclude - lno = 0; - while (read_ok=read_fa(fpat, lno, &fq)) { - ++npat; - char * p=strchr(fq.id.s, ' '); - if (p) *p='\0'; - idseq np(fq.seq.s,fq.id.s+1); - pvec.push_back(np); - } - fprintf(fstat,"npatseq\t%d\n", npat); - } - - - // map all sequences to the hash - google::sparse_hash_map pmap; - lno = 0; - while (read_ok=read_fq(fin, lno, &fq)) { - ++nrec; -// fprintf(stderr, "read %d '%s'\n", nrec, fq.seq.s); - if (fq.seq.n > 1) { - ++pmap[fq.seq.s]; - } - } - if (thr<0) thr = (int)(log(1+nrec)/log(10)); - - std::vector vec; - std::vector lvec; - std::vector lis; - - std::string tmp; - if (excl_n) { - // make a temp file - if (in) { - tmp=string_format("%s.tmp.fq", in); - } else { - tmp=string_format("/tmp/mirna-quant-%d.tmp.fq", getpid()); - } - ftmp = openordie(tmp.c_str(), "w", NULL, "Error opening file '%s': %s\n"); - } - - if (npat > 0 || excl_n) { - // fill mmap with pattern matches, and fill tmp fastq with sequences - std::vector::iterator pit; - google::sparse_hash_map::iterator it = pmap.begin(); - while (it != pmap.end()) { - if (excl_n) { - fputs("@\n", ftmp); - fputs(it->first.c_str(),ftmp); - fputs("\n+\n", ftmp); - int i; - for(i=0;ifirst.size();++i) { - fputc('h',ftmp); - } - fputc('\n', ftmp); - } - if (npat > 0) { - for (pit=pvec.begin(); pit != pvec.end(); ++pit) { - if (it->first.find(pit->seq) != std::string::npos) { - mmap[it->first]=pit->id; - break; - } - } - } - ++it; - } - } - - if (excl_n) { - int i; - for (i=0;i /dev/null", excl, excl).c_str(); - fprintf(stderr,"+%s\n",cmd.c_str()); - if (ret=system(cmd.c_str())) { - exit(ret >> 8); - } - } - cmd = string_format("bowtie --sam-nohead -S %s %s 2> /dev/null", excl, tmp.c_str()); - fprintf(stderr,"+%s\n",cmd.c_str()); - FILE *aln; - if (!(aln=popen(cmd.c_str(),"r"))) { - fprintf(stderr, "Can't run bowtie: $!\n", strerror(errno)); - exit(1); - } - struct line l; meminit(l); - while (read_line(aln, l)>0) { - std::vector v = split(l.s,"\t"); - if (v[9].size() > 17) { - if (atoi(v[3].c_str()) > 0) { - // add to mmap - mmap[v[9]]=v[2]; - } - } - } - unlink(tmp.c_str()); - } - } - - if (mergs > 0) { - if (debug) fprintf(stderr, "merge\n"); - google::sparse_hash_map::iterator it = pmap.begin(); - google::sparse_hash_map::iterator mit; - std::string sseq; - std::string oseq; - std::vector merge_list; - while (it != pmap.end()) { - int i; - for (i=1;i<=mergs;++i) { - sseq = it->first; - if (sseq.length() > i) { - oseq=sseq; - sseq.erase(sseq.length()-i); - if (debug) fprintf(stderr, "merge %s %s\n", oseq.c_str(), sseq.c_str()); - - // search for "close enough" ref seq - mit = mmap.find(sseq); - // merge named sequences - if (mit != mmap.end()) { - // not safe to search map while iterating! - if (debug) fprintf(stderr, "found: %d+%d\n", it->second, (int)pmap[oseq]); - ++mergn; - mergc+=it->second; - merge_list.push_back(to_merge(sseq, it->second)); - break; - } - } - } - ++it; - } - int i; - for (i=0;i::iterator it = pmap.begin(); - while (it != pmap.end()) { - ent e(it->first,it->second); - lvec.push_back(it->first.size()); - if (it->second >= thr) { - vec.push_back(it->second); - tot+=it->second; - } - lis.push_back(e); - ++it; - } - - std::sort(vec.begin(), vec.end()); - std::sort(lvec.begin(), lvec.end()); - std::sort(lis.begin(), lis.end(), ent::comp_cnt); - - fprintf(fstat, "reads\t%d\n", nrec); - fprintf(fstat, "threshold\t%d\n", thr); - fprintf(fstat, "pass num\t%d\n", (int)vec.size()); - fprintf(fstat, "pass tot\t%d\n", tot); - - if (mergc>0) fprintf(fstat, "merge tot\t%d\n", mergc); - if (mergn>0) fprintf(fstat, "merge num\t%d\n", mergn); - - if (vec.size() == 0) { - exit(0); - } - - int q1=(int)quantile(vec,.25); - int q2=(int)quantile(vec,.50); - double q3=quantile(vec,.75); - int q4=(int)quantile(vec,1); - - int lq0=(int)quantile(lvec,0); - int lq1=(int)quantile(lvec,.25); - int lq2=(int)quantile(lvec,.50); - int lq3=(int)quantile(lvec,.75); - int lq4=(int)quantile(lvec,1); - - double norm = ((double)targ)/q3; - if (targ) - fprintf(fstat, "q3 target\t%d\n", targ); - - if (mergs) - fprintf(fstat, "allow mismatch\t%d\n", mergs); - - fprintf(fstat, "cnt q1\t%d\n", q1); - fprintf(fstat, "cnt med\t%d\n", q2); - fprintf(fstat, "cnt q3\t%d\n", (int) q3); - fprintf(fstat, "cnt max\t%d\n", q4); - - fprintf(fstat, "len min\t%d\n", lq0); - fprintf(fstat, "len q1\t%d\n", lq1); - fprintf(fstat, "len med\t%d\n", lq2); - fprintf(fstat, "len q3\t%d\n", lq3); - fprintf(fstat, "len max\t%d\n", lq4); - - int i = 0; - std::vector::iterator vit; - for (vit=(lis.end()-1); vit>=lis.begin();--vit) { - ++i; - std::string anno; - google::sparse_hash_map::iterator mit = mmap.find(vit->seq); - if (mit != mmap.end()) { - anno=mit->second; - } - fprintf(fstat, "top %d\t%d\t%s\t%s\n", i, vit->cnt, vit->seq.c_str(), anno.c_str()); - if (i >= 10) break; - } - - google::sparse_hash_map::iterator fn; - std::string seq; - int ncnt, idf; - for (vit=(lis.end()-1); vit>=lis.begin();--vit) { - if (vit->cnt <= thr) { - break; - } - seq=vit->seq; - - std::string anno; - // merge map - google::sparse_hash_map::iterator mit = mmap.find(seq); - if (mit != mmap.end()) { - anno=mit->second; - } - ncnt = (int) (norm * (double) vit->cnt); - fprintf(fout, "%s\t%d\t%d\t%s\n", seq.c_str(), vit->cnt, ncnt, anno.c_str()); - } - -} - -////////////// pasted library stuff //////////////// - -double quantile(std::vector vec, double p) { - int l = vec.size(); - double t = ((double)l-1)*p; - int it = (int) t; - int v=vec[it]; - if (t > (double)it) { - return (v + (t-it) * (vec[it+1] - v)); - } else { - return v; - } -} - -FILE *openordie(const char *nam, const char * mode, FILE *def, const char *errstr, bool *isgz) { - FILE *r; - if (!nam && def) r = def; - else { - if (isgz) { - r = gzopen(nam, mode, isgz); - } else { - r = fopen(nam, mode); - } - if (!r) { - fprintf(stderr, errstr,nam, strerror(errno)); - exit(1); - } - } - return r; -} - - -#define comp(c) ((c)=='A'?'T':(c)=='a'?'t':(c)=='C'?'G':(c)=='c'?'g':(c)=='G'?'C':(c)=='g'?'c':(c)=='T'?'A':(c)=='t'?'a':(c)) -void revcomp(struct fq *d, struct fq *s) { - if (!d->seq.s) { - d->seq.s=(char *) malloc(d->seq.a=s->seq.n); - d->qual.s=(char *) malloc(d->qual.a=s->qual.n); - } else if (d->seq.a < s->seq.n) { - d->seq.s=(char *) realloc(s->seq.s, d->seq.a=s->seq.n); - d->qual.s=(char *) realloc(s->qual.s, d->qual.a=s->qual.n); - } - int i; - for (i=0;iseq.n/2;++i) { - char b=s->seq.s[i]; - char q=s->qual.s[i]; - //printf("%d: %c, %c\n", i, comp(s->seq.s[s->seq.n-i-1]), s->qual.s[s->qual.n-i-1]); - d->seq.s[i]=comp(s->seq.s[s->seq.n-i-1]); - d->qual.s[i]=s->qual.s[s->qual.n-i-1]; - //printf("%d: %c, %c\n", s->seq.n-i-1, comp(b), q); - d->seq.s[s->seq.n-i-1]=comp(b); - d->qual.s[s->seq.n-i-1]=q; - } - if (s->seq.n % 2) { - //printf("%d: %c, %c\n", 1+s->seq.n/2, comp(s->seq.s[s->seq.n/2])); - d->seq.s[s->seq.n/2] = comp(s->seq.s[s->seq.n/2]); - d->qual.s[s->seq.n/2] = s->qual.s[s->seq.n/2]; - } - d->seq.n=s->seq.n; - d->qual.n=s->qual.n; -} - -int read_line(FILE *in, struct line &l) { - l.n = getline(&l.s, &l.a, in); - if (l.n > 1 && l.s[l.n-1] == '\n' && l.s[l.n-2] == '\r') { - --l.n; - l.s[l.n-1] = '\n'; - l.s[l.n] = '\0'; - } - return l.n; -} - -int read_fa(FILE *in, int &lno, struct fq *fa) { -// note: this only reads one line of sequence! - read_line(in, fa->id); - read_line(in, fa->seq); - lno+=2; - if (fa->seq.n <= 0) - return 0; - if (fa->id.s[0] != '>') { - fprintf(stderr, "Malformed fasta record at line %d\n", lno+1); - return -1; - } - fa->seq.s[--fa->seq.n] = '\0'; - fa->id.s[--fa->id.n] = '\0'; -} - -int read_fq(FILE *in, int &lno, struct fq *fq) { - read_line(in, fq->id); - read_line(in, fq->seq); - read_line(in, fq->com); - read_line(in, fq->qual); - lno+=4; - if (fq->qual.n <= 0) - return 0; - if (fq->id.s[0] != '@' || fq->com.s[0] != '+' || fq->seq.n != fq->qual.n) { - if (fq->seq.n) fq->seq.s[--fq->seq.n] = '\0'; - if (fq->id.n) fq->id.s[--fq->id.n] = '\0'; - if (fq->com.n) fq->com.s[--fq->com.n] = '\0'; - if (fq->qual.n) fq->qual.s[--fq->qual.n] = '\0'; - fprintf(stderr, "Malformed fastq record at line %d\n", lno+1); - return -1; - } - // chomp - fq->seq.s[--fq->seq.n] = '\0'; - fq->qual.s[--fq->qual.n] = '\0'; - return 1; -} - -void usage(FILE *f) { - fputs( -"Usage: mirna-quant [options] [reads.fq]\n" -"\n" -"Computes counts of miRNA species.\n" -"\n" -"Options and (defaults):\n" -"\n" -"-o FIL Output file (stdout)\n" -"-i FIL Input file (stdin)\n" -"-s FIL Stats file (stderr)\n" -"-r FIL miRNA reference fasta (none)\n" -"-x FIL Annot via alignment, ie: rRNA (none)\n" -"-n INT Upper quartile normalize with target (1000)\n" -"-t INT Threshold (log10(record count))\n" -"-m INT Combine known (-r) seqs with up to INT mismatches\n" -"\n" - ,f); -} - -/* getline.c -- Replacement for GNU C library function getline - -Copyright (C) 1993 Free Software Foundation, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -/* Written by Jan Brittenson, bson@gnu.ai.mit.edu. */ - -#include -#include -#include -#include - -/* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR - + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from - malloc (or NULL), pointing to *N characters of space. It is realloc'd - as necessary. Return the number of characters read (not including the - null terminator), or -1 on error or EOF. */ - -int getstr (char ** lineptr, size_t *n, FILE * stream, char terminator, int offset) -{ - int nchars_avail; /* Allocated but unused chars in *LINEPTR. */ - char *read_pos; /* Where we're reading into *LINEPTR. */ - int ret; - - if (!lineptr || !n || !stream) - return -1; - - if (!*lineptr) - { - *n = 64; - *lineptr = (char *) malloc (*n); - if (!*lineptr) - return -1; - } - - nchars_avail = *n - offset; - read_pos = *lineptr + offset; - - for (;;) - { - register int c = getc (stream); - - /* We always want at least one char left in the buffer, since we - always (unless we get an error while reading the first char) - NUL-terminate the line buffer. */ - - assert(*n - nchars_avail == read_pos - *lineptr); - if (nchars_avail < 1) - { - if (*n > 64) - *n *= 2; - else - *n += 64; - - nchars_avail = *n + *lineptr - read_pos; - *lineptr = (char *) realloc (*lineptr, *n); - if (!*lineptr) - return -1; - read_pos = *n - nchars_avail + *lineptr; - assert(*n - nchars_avail == read_pos - *lineptr); - } - - if (c == EOF || ferror (stream)) - { - /* Return partial line, if any. */ - if (read_pos == *lineptr) - return -1; - else - break; - } - - *read_pos++ = c; - nchars_avail--; - - if (c == terminator) - /* Return the line. */ - break; - } - - /* Done - NUL terminate and return the number of chars read. */ - *read_pos = '\0'; - - ret = read_pos - (*lineptr + offset); - return ret; -} - -#ifdef _WIN32 -ssize_t getline(char **lineptr, size_t *n, FILE *stream) -{ - return getstr(lineptr, n, stream, '\n', 0); -} -#endif - -std::string string_format(const std::string &fmt, ...) { - int n, size=100; - std::string str; - va_list ap; - while (1) { - str.resize(size); - va_start(ap, fmt); - int n = vsnprintf((char *)str.c_str(), size, fmt.c_str(), ap); - va_end(ap); - if (n > -1 && n < size) - return str; - if (n > -1) - size=n+1; - else - size*=2; - } -} - -bool file_newer(const char *f1, const char *f2) { - struct stat st1, st2; - st1.st_mtime = st2.st_mtime = 0; - stat(f1, &st1); - stat(f2, &st2); - return (st1.st_mtime > st2.st_mtime); -} - - -std::vector split(char* str,const char* delim) -{ - char* token = strtok(str,delim); - std::vector result; - while(token != NULL) - { - result.push_back(token); - token = strtok(NULL,delim); - } - return result; -} - -int gzclose(FILE *f, bool isgz) { - return isgz ? pclose(f) : fclose(f); -} - -FILE *gzopen(const char *f, const char *m, bool*isgz) { - // maybe use zlib some day? - FILE *h; - if (!strcmp(fext(f),".gz")) { - char *tmp=(char *)malloc(strlen(f)+100); - if (strchr(m,'w')) { - strcpy(tmp, "gzip > '"); - strcat(tmp, f); - strcat(tmp, "'"); - } else { - strcpy(tmp, "gunzip -c '"); - strcat(tmp, f); - strcat(tmp, "'"); - } - h = popen(tmp, m); - *isgz=1; - free(tmp); - } else { - h = fopen(f, m); - *isgz=0; - } - if (!h) { - fprintf(stderr, "Error opening file '%s': %s\n",f, strerror(errno)); - exit(1); - } - return h; -} - -const char *fext(const char *f) { - const char *x=strrchr(f,'.'); - return x ? x : ""; -} - diff --git a/clipper/mixfastqs.pl b/clipper/mixfastqs.pl deleted file mode 100644 index 28eb0e7..0000000 --- a/clipper/mixfastqs.pl +++ /dev/null @@ -1,18 +0,0 @@ -use Getopt::Long; -GetOptions("count=i"); -my ($f1, $f2) = @ARGV; -open IN1, $f1; -open IN2, $f2; -while($i1=) { - $s1=; - $c1=; - $q1=; - $i2=; - $s2=; - $c2=; - $q2=; - print $i1, $s1, $c1, $q1, $i2, $s2, $c2, $q2; - $c+=2; - last if $c >= $opt_count; -} - diff --git a/clipper/multx.sh b/clipper/multx.sh deleted file mode 100755 index 238ea02..0000000 --- a/clipper/multx.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -#g++ -g fastq-mcf.c -o fastq-mcf.ex && ./fastq-mcf.ex $* -g++ -g fastq-multx.c -o fastq-multx.ex && gdb --eval-command=run --args ./fastq-multx.ex $* diff --git a/clipper/pbi-clean.cpp b/clipper/pbi-clean.cpp deleted file mode 100644 index 31f8b60..0000000 --- a/clipper/pbi-clean.cpp +++ /dev/null @@ -1,279 +0,0 @@ -///A tutorial about local alignments. -#include -#include -//#include -//#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace seqan; - -void revcomp(struct fq *dest, struct fq* src); - -struct fq { - char *id; int nid; size_t naid; - char *seq; int nseq; size_t naseq; - char *com; int ncom; size_t nacom; - char *qual; int nqual; size_t naqual; -}; -int read_fq(FILE *in, int rno, struct fq *fq); // 0=done, 1=ok, -1=err+continue - -const char *adapter = "TCTCTCTCAACAACAACAACGGAGGAGGAGGAAAAGAGAGAGA"; - -#define stdev(cnt, sum, ssq) sqrt((((double)cnt)*ssq-pow((double)sum,2)) / ((double)cnt*((double)cnt-1))) -int quantile(std::vector vec, double p); -#define strendcmp(hay, nee) strcmp(hay+strlen(hay)-strlen(nee), nee) - -int main(int argc, char **argv) -{ - if (argc < 2) { - fprintf(stderr, "usage: pbi-clean FASTQ > CLEANED\n"); - exit(1); - } - - int al = strlen(adapter); - const char *in = argv[1]; - FILE *fin; - - if (!strendcmp(in,".gz")) { - std::string gunz = "gunzip -c '"; - gunz += in; - gunz += "'"; - fin=popen(gunz.c_str(), "r"); - } else { - fin = !strcmp(in,"-")?stdin:fopen(in,"r"); - } - - if (!fin) { - fprintf(stderr, "%s : %s\n",argv[1],strerror(errno)); - exit(1); - } - - struct fq fq, rc; - memset(&fq, 0, sizeof(fq)); - - bool read_ok; int nrec=0; - Score score(3,-3,-2, -2); - std::vector cnt_vec; - std::vector len_vec; - int cnt_sum=0, cnt_ssq=0, len_sum=0, len_ssq=0; - while (read_ok=read_fq(fin, nrec, &fq)) { - ++nrec; - Align< String > ali; - appendValue(rows(ali), adapter); - appendValue(rows(ali), fq.seq); - LocalAlignmentFinder<> finder(ali); - if (fq.nseq > al*1.5) { - try { - int s; - int cnt = 0; - while ((s=localAlignment(ali, finder, score, (int)(al*1.8), WatermanEggert()))>0) { - int b=clippedBeginPosition(row(ali, 1)); - int e=clippedEndPosition(row(ali, 1)); -// printf("%d<-->%d\n", b,e); - fq.seq[b]='\1'; - fq.seq[e]='\2'; - ++cnt; - } - if (cnt > 0) { - cnt = 0; - char *b = fq.seq; - char *p = fq.seq; - char *e = fq.seq+fq.nseq; - char *t; - // Align< String > sub; - while (p <= e) { - if (*p == '\1' || *p =='\0') { - char *m = (char *) ((unsigned long)p/2+(unsigned long)b/2); - for (t = b; t < p; ++t) { - if (*t=='\1' || *t=='\2') { - if (t < m) { - b=t+1; - } else { - p=t-1; - break; - } - } - } - *p = '\0'; - fq.qual[(p-fq.seq)]='\0'; - if ((p-b) > al && *b) { - // String dq = b; - // assignQualities(dq,fq.qual+(b-fq.seq)); - // if (cnt % 2 == 1) - // dq=DnaStringReverseComplement(dq); - // appendValue(rows(sub),dq); - - printf("%s:%d-%d\n", fq.id, (int)(b-fq.seq), (int)(p-fq.seq-1)); - printf("%s\n", b); - printf("+\n"); - printf("%s\n", fq.qual+(b-fq.seq)); - len_vec.push_back(p-b); - len_ssq+=(p-b)*(p-b); - len_sum+=p-b; - ++cnt; - } - ++p; - while (p < e && *p != '\2') - ++p; - p=b=p+1; - } else { - ++p; - } - } - if (cnt > 1) { - /* - typedef String TSequence; // sequence type - typedef Align TAlign; // align type - typedef Row::Type TRow; - typedef Iterator::Type TIterator; - for (unsigned i = 1; i < length(rows(sub)); ++i) { - TAlign pw; - appendValue(rows(pw),row(sub,i-1)); - appendValue(rows(pw),row(sub,i)); - int sc = localAlignment(pw, score); - printf("Score: %d\n", sc); - ::std::cout << pw << ::std::endl; - - TIterator it = iter(row(pw,0),0); - int alEnd = _max(length(row(pw, 0)), length(row(pw, 1))); - TIterator itEnd = iter(row(pw,0),alEnd); - }*/ - // globalMsaAlignment(sub, score); - - //computeProfiles(prof, pinfo, sub); - } - } else { - cnt = 1; - printf("%s:%d-%d\n", fq.id, 0, fq.nseq-1); - printf("%s\n", fq.seq); - printf("+\n"); - printf("%s\n", fq.qual); - len_vec.push_back(fq.nseq); - len_ssq+=fq.nseq*fq.nseq; - len_sum+=fq.nseq; - } - cnt_vec.push_back(cnt); - cnt_ssq+=cnt*cnt; - cnt_sum+=cnt; -// if (cnt_vec.size() > 50) { -// goto JUMP; -// } - } catch (...) { - fprintf(stderr,"Alignment error, line %d\n", nrec*4); - } - } - } -//JUMP: - fprintf(stderr,"reads\t%d\n",nrec); - if (len_vec.size() > 0) { - std::sort(cnt_vec.begin(), cnt_vec.end()); - std::sort(len_vec.begin(), len_vec.end()); - double sd; - float mn = cnt_sum/(float)cnt_vec.size(); - int q1=quantile(len_vec,.25); - int q2=quantile(len_vec,.50); - int q3=quantile(len_vec,.75); - fprintf(stderr,"subreads\t%d\n",cnt_sum); - fprintf(stderr,"len max\t%d\n",len_vec[len_vec.size()-1]); - if (cnt_vec.size() > 1) { - fprintf(stderr,"len mean\t%2.2f\n",(double)len_sum/len_vec.size()); - sd = stdev(len_vec.size(), len_sum, len_ssq); - fprintf(stderr,"len stdev\t%2.2f\n",sd); - fprintf(stderr,"len q1\t%d\n",q1); - fprintf(stderr,"len q2\t%d\n",q2); - fprintf(stderr,"len q3\t%d\n",q3); - } - fprintf(stderr,"cyc max\t%d\n",cnt_vec[cnt_vec.size()-1]); - if (cnt_vec.size() > 1) { - int q1=quantile(cnt_vec,.25); - int q2=quantile(cnt_vec,.50); - int q3=quantile(cnt_vec,.75); - fprintf(stderr,"cyc mean\t%2.2f\n",(double)cnt_sum/cnt_vec.size()); - sd = stdev(cnt_vec.size(), cnt_sum, cnt_ssq); - fprintf(stderr,"cyc stdev\t%2.2f\n",sd); - fprintf(stderr,"cyc q1\t%d\n",q1); - fprintf(stderr,"cyc q2\t%d\n",q2); - fprintf(stderr,"cyc q3\t%d\n",q3); - } - } else { - fprintf(stderr,"subreads\t%d\n",0); - } - - return 0; -} - -#define MAXWARN 10 -int read_fq(FILE *in, int rno, struct fq *fq) { - static int fq_warncount=0; - fq->nid = getline(&fq->id, &fq->naid, in); - fq->nseq = getline(&fq->seq, &fq->naseq, in); - fq->ncom = getline(&fq->com, &fq->nacom, in); - fq->nqual = getline(&fq->qual, &fq->naqual, in); - if (fq->nqual <= 0) - return 0; - if (fq->id[0] != '@' || fq->com[0] != '+' || fq->nseq != fq->nqual) { - if (fq_warncount < MAXWARN) { - fprintf(stderr, "Malformed fastq record at line %d\n", rno*2+1); - ++fq_warncount; - } - return -1; - } - - // chomp - fq->id[--fq->nid] = '\0'; - fq->seq[--fq->nseq] = '\0'; - fq->qual[--fq->nqual] = '\0'; - return 1; -} - -#define comp(c) ((c)=='A'?'T':(c)=='a'?'t':(c)=='C'?'G':(c)=='c'?'g':(c)=='G'?'C':(c)=='g'?'c':(c)=='T'?'A':(c)=='t'?'a':(c)) -void revcomp(struct fq *d, struct fq *s) { - if (!d->seq) { - d->seq=(char *) malloc(d->naseq=s->nseq); - d->qual=(char *) malloc(d->naqual=s->nqual); - } else if (d->naseq < s->nseq) { - d->seq=(char *) realloc(s->seq, d->naseq=s->nseq); - d->qual=(char *) realloc(s->qual, d->naqual=s->nqual); - } - int i; - for (i=0;inseq/2;++i) { - char b=s->seq[i]; - char q=s->qual[i]; - //printf("%d: %c, %c\n", i, comp(s->seq.s[s->seq.n-i-1]), s->qual.s[s->qual.n-i-1]); - d->seq[i]=comp(s->seq[s->nseq-i-1]); - d->qual[i]=s->qual[s->nqual-i-1]; - //printf("%d: %c, %c\n", s->seq.n-i-1, comp(b), q); - d->seq[s->nseq-i-1]=comp(b); - d->qual[s->nseq-i-1]=q; - } - if (s->nseq % 2) { - //printf("%d: %c, %c\n", 1+s->seq.n/2, comp(s->seq.s[s->seq.n/2])); - d->seq[s->nseq/2] = comp(s->seq[s->nseq/2]); - d->qual[s->nseq/2] = s->qual[s->nseq/2]; - } - d->nseq=s->nseq; - d->nqual=s->nqual; -} - - -int quantile(std::vector vec, double p) { - int l = vec.size(); - double t = ((double)l-1)*p; - int it = (int) t; - int v=vec[it]; - if (t > (double)it) { - return v + (t-it) * (vec[it+1] - v); - } else { - return v; - } -} - diff --git a/clipper/qsh b/clipper/qsh deleted file mode 100755 index f4df932..0000000 --- a/clipper/qsh +++ /dev/null @@ -1,455 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Getopt::Long; -use Data::Dumper; - -Getopt::Long::Configure(qw(passthrough require_order no_ignore_case)); - -# TODO: put these in a config file, it can still be perl...for now it's simple enough to edit here - -my %nologic = map {($_, 1)} qw(if [ calc echo . alc for export); - -# always send to grid engine, no matter how big -my %wrap = map {($_, 1)} qw(bowtie-build tophat juncsdb bwa cufflinks countannot calc-numaligned fastx_quality_stats); - -# never send to grid engine, no matter how big -my %nowrap = map {($_, 1)} qw(condor_run run-analysis mv grun qpipe ea); - -# always run these, regardless of dependencies - still send to grid if needed -my %nodep = map {($_, 1)} qw(); - -# this can be condor_run, qsub... whatever you want -my $grid_engine = 'grun'; - -# alter default 'big' size and parameter parsing -my %info = ( - cp => {big=>'20g'}, - # input doesn't need to exist, output is calculated from the input - gunzip => {big=>'10g', in=>{_noex=>1}, out=>{_eval=>sub{$_[0]=~m/(.*)\.gz$/; return $1}}}, - gzip => {big=>'20g', in=>{_noex=>1}, out=>{_eval=>sub{$_[0].".gz"}}}, - - 'auto-clip.sh' => {out=>{_eval=>sub{$_[0]=~ s/\.(fastq|fq)//; return ($_[0].".qcStats", $_[0].".adapters")}}}, - bowtie => {big=>'20m'}, - bwa => {big=>'20m'}, - tophat => {big=>'10m'}, - cufflinks => {big=>'10m', in=>{b=>1, r=>1, G=>1}}, - 'cufflinks0.9.3' => {big=>'10m', in=>{b=>1, r=>1, G=>1}}, - fastx_quality_stats => {in=>{i=>1}, out=>{o=>1}}, - samtools => { match => [ - { pat=>qr/sort\s*(?:-n)?\s+(\S+bam)\s*(\S+)/, post=>'$out[0] .= ".bam"' } , - { pat=>qr/pileup.*\s(\S+[bs]am)/ } , - ] }, - bwasam => { match => [ - { pat=>qr/(?:-o \S+\s+)?(?:\S+)\s+(\S+)/, post=>'$out[1] = "$out[0].sam"; $out[0] = "$out[0].bam"'} , - ] }, - # change to asterisk for dependency globbing - 'fastq-multx' => {out=>{o=>sub {s/%/\*/}}, in=>{l=>1, g=>1, B=>1}}, - - 'fastq-mcf' => {out=>{o=>1}}, -); - -our $VERSION = '0.9.46'; - -my ($debug, $check, $inline, $verbose, $help, $rules_file, $list, $noexec, $passopts, $waitout, $force); - -$| = 1; - -$waitout=1; # by default we wait for grid jobs output - -GetOptions("DEBUG"=>\$debug, "K"=>\$check, "force"=>\$force, "grid"=>\$grid_engine, "waitout"=>\$waitout, "cmd=s"=>\$inline, "noexec"=>\$noexec, "l"=>\$list, "verbose|v"=>\$verbose, "help"=>\$help, "rules=s"=>\$rules_file) || die usage(); - -$verbose = 1 if $debug; -$noexec = 1 if $debug; - -$passopts = '-v' if $verbose; -$passopts .= ' -l' if $list; -$passopts .= ' -D' if $debug; -$passopts .= ' -n' if $noexec; -$passopts .= ' -f' if $force; - -if ($help || $ARGV[0] =~ /^-\?/) { - print usage(); - exit 0 -} - -sub reptail { - my ($f, $r) = @_; - $f =~ s/\Q$r\E$//; - return $f; -} - -sub repwith { - my ($f, $r, $t) = @_; - $f =~ s/\Q$r\E/$t/; - return $f; -} - -if ($check) { - # base executable name - my $orig_cmd = shift @ARGV; - my $cmd = $orig_cmd; - $cmd =~ s/.*\///; - - my $cmd_nv = $cmd; - $cmd_nv =~ s/\-[0-9.-]+//; - $cmd_nv = $cmd if $cmd_nv !~ /^[\w-]+$/; - - - my @argv = @ARGV; - print STDERR "QSH preex '$orig_cmd @argv'\n" if $debug; - for (@argv) { - # bash vars come in unexpanded... expand them - s/\$(\w+)/$ENV{$1}/g; - s/\${(\w+)}/$ENV{$1}/g; - s/\${(\w+)\%([^{}]+)}/reptail($ENV{$1},$2)/ge; - s/\${(\w+)\/([^\/]+)\/([^{}]+)}/repwith($ENV{$1},$2,$3)/ge; - } - print STDERR "QSH top '$cmd @argv'\n" if $debug; - # don't try to alter non executable lines - exit 0 if $cmd !~ /^[\w.-]+$/; - - # don't ever check dependencies, or wrap these commands - if ($nologic{$cmd}) { - print STDERR "QSH ignore command '$cmd'\n" if $verbose; - if ($debug) { - print STDERR "QSH debug: '$cmd @ARGV'"; - } - exit 0; - } - - print STDERR "QSH check command $cmd\n" if $verbose; - - # walk through arguments, determining inputs, outputs and total sizes - my ($opt, %opt, $first, $firstnox, $last, @in, @out, $sz); - my $info = $info{$cmd} ? $info{$cmd} : $info{$cmd_nv}; - for (@argv) { - if (s/^--?//) { - $opt = $_; - next; - } - if ($opt) { - if ($opt eq '<' || $info->{in}->{$opt}) { - push @in, $_; - } - if ($opt eq '>>' || $opt eq '>' || $info->{out}->{$opt}) { - push @out, $_; - } - $opt = ''; - next; - } - $opt = '>' if ($_ eq '>'); - $opt = '<' if ($_ eq '<'); - $_ =~ s/^~/$ENV{HOME}/; - if (!$firstnox) { - $firstnox = $_ - } - if (!$first) { - if ( $info->{in}->{_noex} || -e $_ ) { - $first = $_ - } - } else { - $last = $_; - } - $sz += -s $_; - } - - push @in, $first if $first && (!@in); # no input ? assume first file that exists - push @in, $firstnox if $firstnox && (!@in); # no input ? assume first file - - if ( $info->{match} ) { - my $args = "@ARGV"; - for my $m (@{$info->{match}}) { - my @m = $args =~ /$m->{pat}/; - if (@m) { - @in = shift @m; - if (@m) { - @out = @m; - if ($m->{post}) { - eval($m->{post}); - } - } - } - } - } - if ($info->{post}) { - eval($info->{post}); - } - - if ( $info->{in}->{_noin} ) { - @in = (); - $last = $first; - } - - if ($info->{out}->{_eval}) { - my ($i, $o) = ($in[0], $out[0]); - @out = &{$info->{out}->{_eval}}($i, $o); - print STDERR "QSH eval $cmd: @out\n" if $verbose; - if ($@) { - print STDERR "QSH error: $@\n"; - } - } - - push @out, $last if $last && (!@out); # no output ? assume last argument - pop @out if $out[0] eq $in[0]; # no in's = outs - - print STDERR "QSH check: $cmd : sz: $sz, in: @in, out: @out\n" if $verbose; - - my $mx; - for (@in) { - print STDERR "$_\n" if $list; - my $m = fmodtime($_); - $mx = $m if ($m > $mx); - } - my ($nox, $need); - for (@out) { - if ($_ =~ /\*/) { - # TODO: fileglob all outputs, pick oldest, use that. - } - if ($mx < fmodtime($_)) { - $nox=1; - } else { - $need=1; - } - } - - if (!$need && $nox && !$force) { - print STDERR "QSH suppress: @out, already done\n" if $verbose || $noexec || $debug; - print "true"; - } else { - my $wrap = $wrap{$cmd} || $wrap{$cmd_nv}; - - my $big = $info->{big}; - if (!$big) { - $big = '50m'; - } - - if (!$wrap) { - my $t = $big; - $t *= 1000000 if ($t =~ /m$/i); - $t *= 1000000000 if ($t =~ /g$/i); - $wrap = $sz >= $t; - } - - # never submit a job to the condor, if we're already in condor - $wrap = 0 if $ENV{"_CONDOR_SLOT"}; - $wrap = 0 if $nowrap{$cmd}; - $wrap = 0 if $cmd eq $grid_engine; - # || $ENV{"_GRUN"}; # grun's more friendly about sub-submits... not sure whether to allow? - - if ($list) { - print STDERR `which $orig_cmd 2>/dev/null`; - } - my $suff = "#>\"" . join('" "',@out) . "\""; - - $suff .= "#wait" if !$debug && ($wrap || ($cmd eq $grid_engine)); - - print STDERR "QSH debug: wait '$out[0]' " . ($wrap || ($cmd eq $grid_engine)) . "\n" if $debug; - if ($wrap) { - print STDERR "QSH wrap $orig_cmd, input size:$sz big:$big\n" if $verbose; - quoteargv(); - if ($list) { - print "false"; - } else { - print "$grid_engine \"$orig_cmd @ARGV\" $suff"; - } - } else { - print STDERR "QSH no wrap $orig_cmd @ARGV, input size $sz big: $big\n" if $verbose; - if ($list) { - print "false"; - } elsif ($suff) { - print "$orig_cmd @ARGV $suff"; - } - } - } - - exit 0; -} - -sub bash_prefix; - -#TODO ... would be nice if this could be interactive... -# but there's a whole TTY attach/reattach thing I can't figure out - -open STDERR, "|sort|uniq\n" if $list; - -my $in; - -if (!$inline) { - $in = shift @ARGV; - if (!$in) { - die "qsh: missing input file operand\n" - } - open(IN, $in) || die "qsh: can't open $in: $!\n"; -} - -no strict 'refs'; -if (pipe_to_fork('FOO')) { - print STDERR "QSH start\n" if $verbose; - use strict; - # parent - print FOO bash_prefix(); - if ($inline) { - print FOO "\n$inline\n"; - } else { - while ( ) { - print FOO $_ - } - } - close FOO; - while (wait > 1) {}; -} else { - quoteargv(); - exec("bash -s @ARGV"); - while (wait > 1) {}; -} - -sub quoteargv { - for (@ARGV) { - s/(['"()])/\\$1/g; - } -} - -sub fmodtime { - return (stat($_[0]))[9]; -} - - -sub bash_prefix { - my $r; - my $wx; - my ($won, $woff); - - $wx = '[ -n "$wait" ] && qsh_waitforoutput $out' if ($waitout); - - $won = 'wait=1' if $waitout; - $woff = 'wait=' if $waitout; - - my $dx; - $dx = 'echo QSH debug: Cmd=$cmd Out=$out Wait=$wait 1>&2' if $debug; - $dx = 'echo "$cmd"' if $noexec && !$debug; - - $r = "POPTS=\"$passopts\"\n" if $passopts; - $r .= <(.*)" ]]; then - cmd=\${BASH_REMATCH[1]} - out=\${BASH_REMATCH[2]} - fi - - $woff - if [[ \$out =~ "(.*)#wait" ]]; then - out=\${BASH_REMATCH[1]} - $won - fi - $dx - - if [ -n "\$cmd" ]; then - if [ -n "\$out" ]; then - if [ -z "$noexec" ]; then - echo "+ \$cmd" 1>&2 - bash -c "\$cmd" || qsh_rmdie \$out - $wx - fi - else - if [ -z "$noexec" ]; then - echo "+ \$cmd" 1>&2 - \$cmd - fi - fi - false - fi - fi -} - -function qsh_rmdie { - if [ ! "" == "\$*" ]; then - for xout in \$*; do - if [ -n \$xout ]; then - echo QSH removing \$xout 1>&2 - fi - rm -rf \$xout - done - fi - exit 1 -} - -function qsh_waitforoutput { - i=0 - while [ \$i -lt 80 ] - do - (( i++ )) - if [ -z "\$1" ]; then - break; - fi - if [ -e "\$1" ]; then - break; - fi - sleep .25 - done -} - -shopt -s extdebug -set -o functrace -set -a - -trap qsh_on_debug DEBUG -EOF -return $r; -die $r; -} - -sub pipe_to_fork ($) { - my $parent = shift; - pipe my $child, $parent or die; - my $pid = fork(); - die "fork() failed: $!" unless defined $pid; - if ($pid) { - close $child; - } - else { - close $parent; - open(STDIN, "<&=" . fileno($child)) or die; - } - $pid; -} - -sub usage { -< - or: qsh [options] -c "commands to be run" - -Options: - -d|ebug debug - -l|ist guess list of dependencies - -v|erbose verbose output to STDERR - -h|elp show this help - -r|ules FILE use FILE instead of /etc/qsh.conf - -Description: - -This is a wrapper around 'bash' that passes each command executed -to an evaluator that determines whether the command should run -based on it's parsed inputs and outputs. - -In addition, the wrapper determines if the command should be -sent to a "grid engine" based on the size of the inputs and -the type of command. - -The purpose is to enable "fluid" development of simple pipeline -scripts without having to recode them into Makefiles or other -even more cumbersome DAG scripts, etc. - -Problems: - - It's inevitable that qsh might get some things wrong, - and prevent maximum efficiency. - - It's often better to carefully plan workflows -EOF -} - diff --git a/clipper/qsub b/clipper/qsub deleted file mode 100755 index e96d98c..0000000 --- a/clipper/qsub +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/bin/perl - -# qsub -pe smp ${NPROC} -S /bin/bash -V -q secondary -N ${JOB_ID} -o ${STDOUT_FILE} -e ${STDERR_FILE} ${EXTRAS} ${CMD} - -use strict; -use Getopt::Long qw(:config no_ignore_case); -use Data::Dumper; -use Cwd qw(cwd); - -open LOG, ">>/opt/log/qsub.log"; -print LOG scalar(localtime), "\t", cwd(), "\t", join " ", @ARGV, "\n"; -close LOG; - -my $wd = cwd(); - -$ENV{SGE_ROOT} = "$wd"; -mkdir("qtmp"); -$ENV{SGE_CELL} = "qtmp"; -mkdir("qtmp/common"); -open Z, ">qtmp/common/settings.sh"; -close Z; -chmod 0755, "qtmp/common/settings.sh"; - -my %opt; - -my $nproc; -# get rid of weird 2-argument -pe option -for (my $i=0;$i<@ARGV;++$i) { - $_=$ARGV[$i]; - if (/-pe/) { - $opt{pe} = $ARGV[$i+1]; - $nproc = $ARGV[$i+2]; - splice @ARGV, $i, 3; - last; - } -} - -GetOptions(\%opt, "A=s", "S=s", "V", "p=s", "q=s", "N=s", "hold_jid=s", "o=s", "e=s", "I", "j=s", "l=s@", "memory|m=s", "M=s", "v=s@", "sync=s", "cwd", "t=s") || die; -$nproc = 1 if !$nproc; - -die "qsub: some weird option not supported: $ARGV[0]\n" if $ARGV[0] =~ /^-/; -die "qsub: bad args for -pe\n" unless $nproc > 0; -die "qsub: no command specified\n" unless @ARGV; - -for (@ARGV) { - if (/\'/) { - s/'/"'"/g; - } else { - if (/\"/) { - if (/\'/) { - s/'/"'"/g; - } - $_="'".$_."'"; - } - } -} - -my $cmd = join " ", @ARGV; - -if ($opt{o}) { - $cmd = "$cmd > $opt{o}" -} else { - die "qsub: need output file (-o)\n"; -} - - -my @opj; - -if ($opt{N}) { - @opj = ("-j", "qsub$opt{N}"); - $opt{e} = "STDIN.e$opt{N}" if !$opt{e}; - $ENV{SGE_TASK_ID} = $opt{N}; -} else { - $ENV{SGE_TASK_ID} = time(); -} - -# what does qsub do when no jobid is specified? -$opt{e} = "STDIN.e" if !$opt{e}; -$cmd = "$cmd 2> $opt{e}"; - - -$opt{memory} = 1000 * $nproc; - -if ($opt{hold_jid}) { - my $running = `/opt/bin/grun -q jo -f '%jid\t%jobx' | grep '$opt{hold_jid}\$'`; - print "/opt/bin/grun -q jo -f '%jid\t%jobx' | grep '$opt{hold_jid}\$'\n"; - $running =~ s/\s+//g; - while ($running) { - sleep(30); - } -} - -if ($ENV{GRUN_HOSTS}) { - push @opj, ("-h", $ENV{GRUN_HOSTS}); -} - -my $taskid = -1; -if ($opt{t}) { - my ($l, $h) = $opt{t} =~ /(\d+)-(\d+)/; - if (!$l) { - $l = 0; - $h = $opt{t}-1; - } - $ENV{SGE_TASK_FIRST} = $l; - $ENV{SGE_TASK_LAST} = $h; - my @jobl; - push @opj, "-nowait"; - for (my $i = $l; $i<= $h; ++$i) { - $ENV{SGE_TASK_ID} = $i; - push @jobl, dojob(); - } - print "DEBUG START $opt{N}: jobs @jobl\n"; - if($opt{sync}) { - my $running = 1; - while ($running) { - sleep(15); - my $runl = `/opt/bin/grun -q jo -f '%jid\\n'`; - #my $runl = `/opt/bin/grun -q jo`; - if (!$runl) { - print "DEBUG NO JOBS???? [$?] $opt{N}: ((($runl)))\n"; - next; - } - my %runl = map {chomp; $_=>1} $runl; - my @runl = %runl; - $running = 0; - for (@jobl) { - #if ($runl{$_}) { - if ($runl =~ /$_/) { - $running = 1; - } - } - if (!$running) { - print "DEBUG DONE $opt{N}: ((( $runl )))\n"; - } else { - print "DEBUG WAITING $opt{N}: ( $runl )\n"; - } - } - sleep(15); - } else { - print "DEBUG NOSYNC $opt{N}\n"; - } -} else { - if(!$opt{sync}) { - push @opj, "-nowait"; - } else { - print "DEBUG SYNC 1 JOB $opt{N}\n"; - } - dojob(); -} - -sub dojob { - my $grun_out; - my $tmpf = "/opt/tmp/qsub.$$.out"; - my $ext = ""; - if ($taskid >=0 ) { - $tmpf = "/opt/tmp/qsub.$$.$taskid.out"; - $ext = " [$taskid]"; - } - open OLDOUT, ">&STDOUT"; - open OLDERR, ">&STDERR"; - open STDOUT, ">$tmpf" or die "Can't open STDOUT: $!"; - open STDERR, ">&STDOUT"; - my $ret = system("grun", "-v", "-c", $nproc, "-m", $opt{memory}, @opj, $cmd); - open STDOUT, ">&OLDOUT"; - open STDERR, ">&OLDERR"; - my %grun; - open IN, $tmpf; - while() { - my ($k, $v) = m/([^:]+):?\s*(.*)/; - $k =~ s/ /_/g; - $grun{lc($k)}=$v;; - } - close IN; - unlink $tmpf; - if ($ret == 0) { - print "Your job $grun{job_id}$ext \(\"$cmd\"\) has been submitted\n"; - } - if ($opt{sync} && ! -s $opt{e}) { - unlink($opt{e}); - } - return $grun{job_id}; -} diff --git a/clipper/randomFQ b/clipper/randomFQ deleted file mode 100755 index 272cd73..0000000 --- a/clipper/randomFQ +++ /dev/null @@ -1,245 +0,0 @@ -#!/usr/bin/perl -use strict; -use Getopt::Long; - -# Author: Erik Aronesty (earonesty@xpressionanalysis.com) -# Outputs a random sampled fastq or fasta file, from an input fastq -# Copyright (c) 2011 Expression Analysis - - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -my $cnt; -my $fasta; -my $out; -my $seed=1; -my $window; -my $always; -my $append; -my $pct; -GetOptions("count=i"=>\$cnt, "pct=f"=>\$pct, "fasta"=>\$fasta, "out=s"=>\$out, "seed=i"=>\$seed, "window=i"=>\$window, "always|a"=>\$always, "append|A"=>\$append) || die usage(); -if ($window < $cnt) { - $window = $cnt * 5; - $window = 100000 if $window < 100000; -} - -if ($seed) { - srand($seed); -} - -die usage() unless $cnt>0||$pct>0; - -my $in = shift; -my $mate = shift; -my $mate2 = shift; - -die "Can't see $in\n" unless -e $in; -die "Can't see $mate\n" unless !$mate || -e $mate; -die "Can't see $mate2\n" unless !$mate2 || -e $mate2; - -my $s = -s $in; -my $sm = -s $mate; -my $sm2 = -s $mate2; - -die "Need -out for paired-end" if $mate && !$out; - -my $suff; -if ($out =~ s/\%(.*)//) { - $suff = $1; -} -$out =~ s/_$//; - -my $gzmeth = $suff =~ /\.gz/ ? "|gzip -c " : ""; - -open(IN, $in=~/\.gz$/?"gunzip -c $in|":$in) || die; - -$append = $append ? ">>" : ">"; - -if ($mate) { - open(MI, $mate=~/\.gz$/?"gunzip -c $mate|":$mate) || die; - open(MI2, $mate2=~/\.gz$/?"gunzip -c $mate2|":$mate2) if $mate2; - open(O1, "$gzmeth$append${out}_1$suff") || die; - open(O2, "$gzmeth$append${out}_2$suff") || die; - if ($mate2) { - open(O3, "$gzmeth$append${out}_3$suff") || die; - } -} else { - my $gzmeth = $out =~ /\.gz/ ? "|gzip -c " : ""; - if ($out) { - open(O1, "$gzmeth$append$out"); - } else { - open(O1, ">&STDOUT"); - } -} - -my $lc = 0+`alc -o $in`; -my $stats = $in; $stats =~ s/\.gz$//; $stats .= ".stats"; -if (-e $stats) { - my $rlc = `grep ^reads $stats | cut -f 2`+0; - $lc = $rlc if $rlc; -} else { - if ($in =~ /gz$/) { - $lc *= .90; # lower guess - } -} - -if (!$always && ($cnt > $lc/2)) { - $cnt *= 4; - warn "Source is too small relative to count requested, just returning tail -$cnt\n"; - if ($mate) { - if ($in=~/gz$/) { - system("gunzip -c $in | head -$cnt $gzmeth $append ${out}_1$suff"); - } else { - system("tail -$cnt $in $gzmeth $append ${out}_1$suff"); - } - if ($mate=~/gz$/) { - system("gunzip -c $mate | head -$cnt $gzmeth $append ${out}_2$suff"); - } else { - system("tail -$cnt $mate $gzmeth $append ${out}_2$suff"); - } - if ($mate2=~/gz$/) { - system("gunzip -c $mate2 | head -$cnt $gzmeth $append ${out}_3$suff"); - } else { - system("tail -$cnt $mate2 $gzmeth $append ${out}_3$suff") if ($mate2); - } - exit 0; - } else { - if ($out) { - $gzmeth = $out =~ /\.gz/ ? "|gzip -c " : ""; - $out = "$gzmeth $append $out"; - } - if ($in=~/gz$/) { - exec("gunzip -c $in | head -$cnt $out"); - die("Exec failed : $!\n"); - } else { - exec("tail -$cnt $in $out"); - die("Exec failed : $!\n"); - } - } -} - -# reads to sample from....whole file or a smaller part? -$window = $lc if $window > $lc; - -my $fudge = 1.5; # top weighted -$fudge = 1.2 if $always; # less top-weighted - -# larger = more chance to keep read -my $prob; - -if ($pct) { - $prob = $pct/100; - $cnt = 10000000000; -} else { - $prob = ($cnt*$fudge)/$window; -} - -# we used to seek ... but this broke too much ... if you want to fix... fix randomFQ-broken ... -if (!$always && !$pct) { - # skip some reads at the beginning - my $skip = ($lc-$window) / 10; - $skip = 200000 if $skip > 200000; - for (my $i=0;$i<$skip;++$i) { - scalar ; scalar ; scalar ; scalar ; - scalar ; scalar ; scalar ; scalar ; - scalar ; scalar ; scalar ; scalar ; - } -} - -while ($cnt > 0) { - if (rand() > $prob) { - # discard - ; ; ; ; - ; ; ; ; - ; ; ; ; - next; - } - - # id - my $i = ; - if (!$i) { - $cnt = 0; - last; - } - my $i2 = if $mate; - my $i3 = if $mate2; - - # read - my $r = ; - my $r2 = if $mate; - my $r3 = if $mate2; - - if ($fasta) { - # only need id and read - $i=~ s/^\@/>/; - $i2=~ s/^\@/>/; - $i3=~ s/^\@/>/; - print O1 "$i$r"; - print O2 "$i2$r2" if $mate; - print O3 "$i3$r3" if $mate2; - ;; - ;; - } else { - # print id and read - print O1 "$i$r"; - print O2 "$i2$r2"; - print O3 "$i3$r3"; - # copy comment and quality - print O1 scalar ; - print O2 scalar if $mate; - print O3 scalar if $mate2; - print O1 scalar ; - print O2 scalar if $mate; - print O3 scalar if $mate2; - } - --$cnt; -} - -close IN; - -sub usage() { - return < | -p ) [-fasta] [-out ] [-seed ] [ [] ] - -Returns number of random entries from the input fastq. - -Output is fastq, unless you specify -fasta - -If the -out parameter ends in .gz, the result is gzipped in-place. - --p returns a % of total reads, -c returns a fixed count. - -SINGLE END: - -Outputs to standard output, unless -out is specified. - -PAIRED END: - -Pass 2 (or 3) files as input, -out is required. - -If the paired-end output contains a "%" sign, it is replaced with the 1 & 2 for paired-end. - -IE: -o output_%.fastq.gz - -Otherwise it's jsut output_1 and output_2 - -*** If one file is an indexed read, it has to be the 3rd file (for now). -EOF -} - -sub max { - return $_[0] > $_[1] ? $_[0] : $_[1]; -} - diff --git a/clipper/sam-stats.cpp b/clipper/sam-stats.cpp deleted file mode 100644 index 54eecae..0000000 --- a/clipper/sam-stats.cpp +++ /dev/null @@ -1,1152 +0,0 @@ -/* -# Copyright (c) 2011 Erik Aronesty -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -# ALSO, IT WOULD BE NICE IF YOU LET ME KNOW YOU USED IT. -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include // or sparse_hash_set, dense_hash_map, ... -#include // or sparse_hash_set, dense_hash_map, ... - -#include // samtools api - -#include "fastq-lib.h" - -const char * VERSION = "1.38.763"; - - -using namespace std; - -void usage(FILE *f); - -#define MAX_MAPQ 300 -// this factor is based on a quick empirical look at a few bam files.... -#define VFACTOR 1.5 - -//#define max(a,b) (a>b?a:b) -//#define min(a,b) (a - double quantile(const vtype &vec, double p); - -template - double quantile(const vector &vec, double p); - -std::string string_format(const std::string &fmt, ...); - -int debug=0; -int errs=0; -extern int optind; -int histnum=30; -bool isbwa=false; -int rnamode = 0; -bool allow_no_reads = false; - -// from http://programerror.com/2009/10/iterative-calculation-of-lies-er-stats/ -class cRunningStats -{ -private: - double m_n; // count - double m_m1; // mean - double m_m2; // second moment - double m_m3; // third moment - double m_m4; // fourth moment -public: - cRunningStats() : m_n(0.0), m_m1(0.0), m_m2(0.0), m_m3(0.0), m_m4(0.0) - { ; } - void Push(double x) - { - m_n++; - double d = (x - m_m1); - double d_n = d / m_n; - double d_n2 = d_n * d_n; - m_m4 += d * d_n2 * d_n * ((m_n - 1) * ((m_n * m_n) - 3 * m_n + 3)) + - 6 * d_n2 * m_m2 - 4 * d_n * m_m3; - m_m3 += d * d_n2 * ((m_n - 1) * (m_n - 2)) - 3 * d_n * m_m2; - m_m2 += d * d_n * (m_n - 1); - m_m1 += d_n; - } - double Mean() { return m_m1; } - double StdDeviation() { return sqrt(Variance()); } - double StdError() { return (m_n > 1.0) ? sqrt(Variance() / m_n) : 0.0; } - double Variance() { return (m_n > 1.0) ? (m_m2 / (m_n - 1.0)) : 0.0; } - double Skewness() { return sqrt(m_n) * m_m3 / pow(m_m2, 1.5); } - double Kurtosis() { return m_n * m_m4 / (m_m2 * m_m2); } -}; - -/// if we use this a lot may want to make it variable size -class scoverage { -public: - scoverage() {mapb=reflen=0; dist.resize(histnum+2); mapr=0;}; - long long int mapb; - long int mapr; - cRunningStats spos; - int reflen; - vector dist; -}; - -// sorted integer bucket ... good for ram with small max size, slow to access -class ibucket { -public: - int tot; - vector dat; - ibucket(int max) {dat.resize(max+1);tot=0;} - int size() const {return tot;}; - - int operator[] (int n) const { - assert(n < size()); - int i; - for (i=0;i visize; // all insert sizes - google::dense_hash_map covr; // # mapped per ref seq - google::sparse_hash_map dups; // alignments by read-id (not necessary for some pipes) - google::sparse_hash_map petab; // peread table - - // file-format neutral ... called per read... warning seq/qual are not necessarily null-terminated - void dostats(string name, int rlen, int bits, const string &ref, int pos, int mapq, const string &materef, int nmate, const string &seq, const char *qual, int nm, int del, int ins); - - // read a bam/sam file and call dostats over and over - bool parse_bam(const char *in); - bool parse_sam(FILE *f); -}; - -#define T_A 0 -#define T_C 1 -#define T_G 2 -#define T_T 3 -#define T_N 4 - -void build_basemap(); - -int dupreads = 1000000; -int max_chr = 1000; -bool trackdup=0; -FILE *sefq = NULL; -FILE *pefq1 = NULL; -FILE *pefq2 = NULL; -int basemap[256]; -int main(int argc, char **argv) { - const char *ext = NULL; - bool multi=0, newonly=0, inbam=0; - int fq_out=0; - const char *rnafile = NULL; - char c; - optind = 0; - struct option long_options[] = { - {"fastq", no_argument, NULL, 'o'}, - {0,0,0,0}, - }; - int long_index=0; - const char *prefix; - - while ( (c = getopt_long(argc, argv, "?BzArR:Ddx:MhS:", long_options, &long_index)) != -1) { - switch (c) { - case 'd': ++debug; break; // increment debug level - case 'D': ++trackdup; break; - case 'B': inbam=1; break; - case 'A': max_chr=1000000; break; // max chrom - case 'R': rnafile=optarg; // pass through - case 'r': max_chr=1000000; rnamode=1; if (histnum < 60) histnum=60; break; - case 'O': prefix=optarg; break; - case 'S': histnum=atoi(optarg); break; - case 'x': ext=optarg; break; - case 'M': newonly=1; break; - case 'z': allow_no_reads = true; break; - case 'o': fq_out=1; trackdup=1; break; // output suff - case 'h': usage(stdout); return 0; - case '?': - if (!optopt) { - usage(stdout); return 0; - } else if (optopt && strchr("ox", optopt)) - fprintf (stderr, "Option -%c requires an argument.\n", optopt); - else if (isprint(optopt)) - fprintf (stderr, "Unknown option `-%c'.\n", optopt); - else - fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); - usage(stderr); - return 1; - } - } - - // recompute argc owing to getopt (is this necessary? i don't think so) - const char *stdv[3] = {argv[0],"-",NULL}; - if (!argv[optind]) { - argc=2; - argv = (char **) stdv; - optind=1; - } - - multi = (argc-optind-1) > 0; // more than 1 input? - if (multi && !ext) - ext = "stats"; // force serial processed extension-mode - - build_basemap(); // precompute matrices for rabit base->integer (A->0, C->1,. ...etc) lookups - - debugout("argc:%d, argv[1]:%s, multi:%d, ext:%s\n", argc,argv[optind],multi,ext); - - FILE *rnao = NULL; - - - const char *p; - // for each input file - for (;optind < argc;++optind) { - sstats s; - const char *in = argv[optind]; - FILE *f; - FILE *o=NULL; - FILE *rnao=NULL; - bool needpclose = 0; - - // decide input format - string out; - - if (!strcmp(in,"-")) { - // read sam/bam from stdin - if (ext||fq_out) { - warn("Can't use file extension with stdin\n"); - continue; - } - f = stdin; - o = stdout; - } else { - if ((p = strrchr(in,'.')) && !strcmp(p, ".gz")) { - // maybe this is a gzipped sam file... - string cmd = string_format("gunzip -c '%s'", in); - f = popen(cmd.c_str(), "r"); - needpclose=1; - if (f) { - char c; - if (!inbam) { - // guess file format with 1 char - c=getc(f); ungetc(c,f); - if (c==-1) { - warn("Can't unzip %s\n", in); - pclose(f); - continue; - } - if (c==31) { - // bam file... reopen to reset stream... can't pass directly - string cmd = string_format("gunzip -c '%s'", in); - f = popen(cmd.c_str(), "r"); - inbam=1; - } - } else - c = 31; // user forced bam, no need to check/reopen - - if (inbam) { - // why did you gzip a bam... weird? - if (dup2(fileno(f),0) == -1) { - warn("Can't dup2 STDIN\n"); - continue; - } - in = "-"; - } - } else { - warn("Can't unzip %s: %s\n", in, strerror(errno)); - continue; - } - // extension mode... output to file minus .gz - if (ext||fq_out) - out=string(in, p-in); - } else { - f = fopen(in, "r"); - if (!f) { - warn("Can't open %s: %s\n", in, strerror(errno)); - continue; - } - // extension mode... output to file - if (ext||fq_out) - out=in; - } - if (fq_out) { - sefq=fopen((out+".fq").c_str(),"w"); - pefq1=fopen((out+".fq1").c_str(),"w"); - pefq2=fopen((out+".fq2").c_str(),"w"); - } - if (ext) { - ( out += '.') += ext; - o=fopen(out.c_str(), "w"); - if (!o) { - warn("Can't write %s: %s\n", out.c_str(), strerror(errno)); - continue; - } - } else - o=stdout; - } - - // more guessing - debugout("file:%s, f: %lx\n", in, (long int) f); - char c; - if (!inbam) { - // guess file format - c=getc(f); ungetc(c,f); - if (c==31 && !strcmp(in,"-")) { - // if bamtools api allowed me to pass a stream, this wouldn't be an issue.... - warn("Specify -B to read a bam file from standard input\n"); - continue; - } - } else - c = 31; // 31 == bam - - if (rnafile) { - rnao=fopen(rnafile,"w"); - if (!rnao) { - warn("Can't write %s: %s\n", rnafile, strerror(errno)); - return 1; - } - } else { - rnao=o; - } - - // parse sam or bam as needed - if (c != 31) { - // (could be an uncompressed bam... but can't magic in 1 char) - if (!s.parse_sam(f)) { - if (needpclose) pclose(f); else fclose(f); - warn("Invalid or corrupt sam file %s\n", in); - continue; - } - } else { - if (!s.parse_bam(in)) { - if (needpclose) pclose(f); else fclose(f); - warn("Invalid or corrupt bam file %s\n", in); - continue; - } - } - int ret; - if (needpclose) ret=pclose(f); else ret=fclose(f); - if (ret!=0) { - warn("Error closing '%s': %s\n", in, strerror(errno)); - continue; - } - - if (fq_out) { - if(sefq && s.dat.pe) { - fclose(sefq); - unlink((out+".fq").c_str()); - } - if (pefq1 && !s.dat.pe) { - fclose(pefq1); - fclose(pefq2); - unlink((out+".fq1").c_str()); - unlink((out+".fq2").c_str()); - } - } - - // sort sstats - sort(s.visize.begin(), s.visize.end()); - - int phred = s.dat.qualmin < 64 ? 33 : 64; - if (!s.dat.n && ! allow_no_reads) { - warn("No reads in %s\n", in); - continue; - } - fprintf(o, "reads\t%d\n", s.dat.n); - if (s.dat.secondary > 0) { - fprintf(o, "secondary\t%d\n", s.dat.secondary); - } - fprintf(o, "version\t%s\n", VERSION); - - // mapped reads is the number of reads that mapped at least once (either mated or not) - if (s.dat.mapn > 0) { - if (trackdup && s.dat.dupmax > (s.dat.pe+1)) { - google::sparse_hash_map::iterator it = s.dups.begin(); - vector vtmp; - int amb = 0; - int sing = 0; - while(it!=s.dups.end()) { - // *not* making the distinction between 2 singleton mappings and 1 paired here - if (it->second > (s.dat.pe+1)) { - ++amb; - } - if (it->second == 1 && s.dat.pe) { - ++sing; - } - ++it; - } - int mapped = (int) s.dups.size()*(s.dat.pe+1)-sing; - - fprintf(o,"mapped reads\t%d\n", mapped); - if (amb > 0) { - int unmapped=s.dat.n-s.dat.mapn; - fprintf(o,"pct align\t%.6f\n", 100.0*((double)mapped/(double)(mapped+unmapped))); - fprintf(o,"ambiguous\t%d\n", amb*(s.dat.pe+1)); - fprintf(o,"pct ambiguous\t%.6f\n", 100.0*((double)amb/(double)s.dups.size())); - fprintf(o,"max dup align\t%.d\n", s.dat.dupmax-s.dat.pe); - } else { - // no ambiguous mappings... simple - fprintf(o, "pct align\t%.6f\n", 100.0*(double)s.dat.mapn/(double)s.dat.n); - } - if (sing) - fprintf(o,"singleton mappings\t%.d\n", sing); - // number of total mappings - fprintf(o, "total mappings\t%d\n", s.dat.mapn); - } else { - // dup-id's not tracked - fprintf(o, "mapped reads\t%d\n", s.dat.mapn); - fprintf(o, "pct align\t%.6f\n", 100.0*(double)s.dat.mapn/(double)s.dat.n); - // todo: add support for bwa's multiple alignment tag - // fprintf(o, "total mappings\t%d\n", s.dat.mapn); - } - } else { - fprintf(o, "mapped reads\t%d\n", s.dat.mapn); - } - - if (s.dat.mapzero > 0) { - fprintf(o, "skipped mappings\t%d\n", s.dat.mapzero); - } - - fprintf(o, "mapped bases\t%.0f\n", s.dat.tmapb); - if (s.dat.pe) { - fprintf(o, "library\tpaired-end\n"); - } - if (s.dat.disc > 0) { - fprintf(o, "discordant mates\t%d\n", s.dat.disc); - } - if (s.dat.disc_pos > 0) { - fprintf(o, "distant mates\t%d\n", s.dat.disc_pos); - } - - if (s.dat.mapn > 0) { - if (s.dat.mapn > 100) { - // at least 100 mappings to call a meaningful "percentage" - fprintf(o, "pct forward\t%.3f\n", 100*(s.dat.nfor/(double)(s.dat.nfor+s.dat.nrev))); - } - - fprintf(o, "phred\t%d\n", phred); - fprintf(o, "forward\t%d\n", s.dat.nfor); - fprintf(o, "reverse\t%d\n", s.dat.nrev); - if (s.dat.lenmax != s.dat.lenmin) { - fprintf(o, "len max\t%d\n", s.dat.lenmax); - fprintf(o, "len mean\t%.4f\n", s.dat.lensum/s.dat.mapn); - fprintf(o, "len stdev\t%.4f\n", stdev(s.dat.mapn, s.dat.lensum, s.dat.lenssq)); - } else { - fprintf(o, "len max\t%d\n", s.dat.lenmax); - } - fprintf(o, "mapq mean\t%.4f\n", s.dat.mapsum/s.dat.mapn); - fprintf(o, "mapq stdev\t%.4f\n", stdev(s.dat.mapn, s.dat.mapsum, s.dat.mapssq)); - - fprintf(o, "mapq Q1\t%.2f\n", quantile(s.vmapq,.25)); - fprintf(o, "mapq median\t%.2f\n", quantile(s.vmapq,.50)); - fprintf(o, "mapq Q3\t%.2f\n", quantile(s.vmapq,.75)); - - if (s.dat.lensum > 0) { - fprintf(o, "snp rate\t%.6f\n", s.dat.nmsum/s.dat.lensum); - if (s.dat.ins >0 ) fprintf(o, "ins rate\t%.6f\n", s.dat.ins/s.dat.lensum); - if (s.dat.del >0 ) fprintf(o, "del rate\t%.6f\n", s.dat.del/s.dat.lensum); - fprintf(o, "pct mismatch\t%.4f\n", 100.0*((double)s.dat.nmnz/s.dat.mapn)); - } - - if (s.visize.size() > 0) { - double p10 = quantile(s.visize, .10); - double p90 = quantile(s.visize, .90); - double matsum=0, matssq=0; - int matc = 0; - int i; - for(i=0;i= p10 && v <= p90) { - ++matc; - matsum+=v; - matssq+=v*v; - } - } - fprintf(o, "insert mean\t%.4f\n", matsum/matc); - if (matc > 1) { - fprintf(o, "insert stdev\t%.4f\n", stdev(matc, matsum, matssq)); - fprintf(o, "insert Q1\t%.2f\n", quantile(s.visize, .25)); - fprintf(o, "insert median\t%.2f\n", quantile(s.visize, .50)); - fprintf(o, "insert Q3\t%.2f\n", quantile(s.visize, .75)); - } - } - - if (s.dat.nbase >0) { - fprintf(o,"base qual mean\t%.4f\n", (s.dat.qualsum/s.dat.nbase)-phred); - fprintf(o,"base qual stdev\t%.4f\n", stdev(s.dat.nbase, s.dat.qualsum, s.dat.qualssq)); - fprintf(o,"%%A\t%.4f\n", 100.0*((double)s.dat.basecnt[T_A]/(double)s.dat.nbase)); - fprintf(o,"%%C\t%.4f\n", 100.0*((double)s.dat.basecnt[T_C]/(double)s.dat.nbase)); - fprintf(o,"%%G\t%.4f\n", 100.0*((double)s.dat.basecnt[T_G]/(double)s.dat.nbase)); - fprintf(o,"%%T\t%.4f\n", 100.0*((double)s.dat.basecnt[T_T]/(double)s.dat.nbase)); - if (s.dat.basecnt[T_N] > 0) { - fprintf(o,"%%N\t%.4f\n", 100.0*((double)s.dat.basecnt[T_N]/(double)s.dat.nbase)); - } - } - // how many ref seqs have mapped bases? - int mseq=0; - google::dense_hash_map::iterator it = s.covr.begin(); - vector vtmp; - bool haverlen = 0; - while (it != s.covr.end()) { - if (it->second.mapb > 0) { - ++mseq; // number of mapped refseqs - if (mseq <= max_chr) vtmp.push_back(it->first); // don't bother if too many chrs - if (it->second.reflen > 0) haverlen = 1; - } - ++it; - } - // don't print per-seq percentages if size is huge, or is 1 - if ((haverlen || mseq > 1) && mseq <= max_chr) { // worth reporting - // sort the id's - sort(vtmp.begin(),vtmp.end()); - vector::iterator vit=vtmp.begin(); - double logb=log(2); - vector vcovrvar; - vector vcovr; - vector vskew; - // for each chromosome or reference sequence... - while (vit != vtmp.end()) { - scoverage &v = s.covr[*vit]; // coverage vector - if (v.reflen && histnum > 0) { // user asked for histogram - string sig; - int d; double logd, lsum=0, lssq=0; - - for (d=0;d VFACTOR*v.reflen/histnum) { - ++covr; // 100% covered this bin - } else { - // calc bases/(factor * size of bin) - covr += ((double)v.dist[d] / ((double)VFACTOR*v.reflen/histnum)); - } - } - double origcovr = covr; - covr /= (double) histnum; - covr = min(100.0*((double)v.mapb/v.reflen),100.0*covr); - // when dealing with "position skewness", you need to anchor things - v.spos.Push(v.reflen); - v.spos.Push(1); - double skew = -v.spos.Skewness(); - // if there's some coverage - if (v.mapr > 0) { - if (v.mapr > 10) { - // summary stats - vcovr.push_back(covr); // look at varition - vcovrvar.push_back(cv); // look at varition - vskew.push_back(skew); // and skew - } - if (rnao) { // "rna mode" = more detailed output of coverage and skewness of coverage - fprintf(rnao,"%s\t%d\t%ld\t%.2f\t%.4f\t%.4f\t%s\n", vit->c_str(), v.reflen, v.mapr, covr, skew, cv, sig.c_str()); - } - } - } else if (max_chr < 100) { // normal dna mode, just print percent alignment to each - fprintf(o,"%%%s\t%.2f\t%s\n", vit->c_str(), 100.0*((double)v.mapb/s.dat.lensum), sig.c_str()); - } else { - fprintf(o,"%%%s\t%.6f\t%s\n", vit->c_str(), 100.0*((double)v.mapb/s.dat.lensum), sig.c_str()); - } - } else { - if (max_chr < 100) { - fprintf(o,"%%%s\t%.2f\n", vit->c_str(), 100.0*((double)v.mapb/s.dat.lensum)); - } else { - fprintf(o,"%%%s\t%.6f\n", vit->c_str(), 100.0*((double)v.mapb/s.dat.lensum)); - } - } - ++vit; - } - if (rnamode) { - sort(vcovr.begin(), vcovr.end()); - sort(vcovrvar.begin(), vcovrvar.end()); - sort(vskew.begin(), vskew.end()); - double medcovrvar = quantile(vcovrvar,.5); - double medcovr = quantile(vcovr,.5); - double medskew = quantile(vskew,.5); - fprintf(o,"median skew\t%.2f\n", medskew); - fprintf(o,"median coverage cv\t%.2f\n", medcovrvar); - fprintf(o,"median coverage\t%.2f\n", medcovr); - } - } - if (s.covr.size() > 1) { - fprintf(o,"num ref seqs\t%d\n", (int) s.covr.size()); - fprintf(o,"num ref aligned\t%d\n", (int) mseq); - } - } else { - if (s.covr.size() > 1) { - fprintf(o,"num ref seqs\t%d\n", (int) s.covr.size()); - } - } - } - return errs ? 1 : 0; -} - -#define S_ID 0 -#define S_BITS 1 -#define S_NMO 2 -#define S_POS 3 -#define S_MAPQ 4 -#define S_CIG 5 -#define S_MATEREF 6 -#define S_MATE 8 -#define S_READ 9 -#define S_QUAL 10 -#define S_TAG 11 - -void sstats::dostats(string name, int rlen, int bits, const string &ref, int pos, int mapq, const string &materef, int nmate, const string &seq, const char *qual, int nm, int del, int ins) { - - ++dat.n; - - if (bits & 0x04) return; // bits say ... query was not mapped - - if (pos<=0) { - ++dat.mapzero; // quantify weird errors - return; // not mapped well enough to count - } - - ++dat.mapn; // mapped query - - // TODO: build a histogram of read lengths using the integer bucket - - // read length min/max - if (rlen > dat.lenmax) dat.lenmax = rlen; - if ((rlen < dat.lenmin) || dat.lenmin==0) dat.lenmin = rlen; - - // read length sum/ssq - dat.lensum += rlen; - dat.lenssq += rlen*rlen; - - // TODO: allow for alternate paired-end layouts besides Illumina's - - // reverse stranded query - if (bits & 16) - if (bits & 0x40) // first read in the pair - ++dat.nrev; // reverse - else - ++dat.nfor; // second read? actually was a forward alignment - else - if (bits & 0x40) // first read in the pair - ++dat.nfor; - else - ++dat.nrev; - - if (bits & 256) - ++dat.secondary; // secondary alignment - - // mapping quality mean/stdev - dat.mapsum += mapq; - dat.mapssq += mapq*mapq; - - // mapping quality histogram - vmapq.push(mapq); - - // TODO: NM histogram maybe? - - // number of mismateches - if (nm > 0) { - // nm is snp+ins+del... which is silly - dat.nmnz += 1; // how many read are not perfect matches? - dat.nmsum += nm-del-ins; // mismatch sum - } - dat.del+=del; // deletion sum - dat.ins+=ins; // insert sum - - // if we know about the reference sequence - if (ref.length()) { - scoverage *sc = &(covr[ref]); - if (sc) { // and we have ram for coverage - sc->mapb+=rlen; // total up mapped bases in that ref - if (rnamode) { // more detailed - int i; - sc->mapr+=1; - for (i=0;ispos.Push(pos+i); // per-position stats - } - if (histnum > 0 && sc->reflen > 0) { // if we're making a histogram - for (i=0;ireflen); // find the bucket this base is in - if (x < histnum) { - sc->dist[x]+=1; // add 1 to that bucket - } else { - // out of bounds.... what to do? - sc->dist[histnum] += 1; // out of bounds bases (fall off the edge) = extra bucket - } - } - } - } else if (histnum > 0 && sc->reflen > 0) { // lightweight... don't deal with each base, ok becauss CHRs are big - int x = histnum * ((double)pos / sc->reflen); - if (debug > 1) { - warn("chr: %s, hn: %d, pos: %d, rl: %d, x: %x\n", ref.c_str(), histnum, pos, sc->reflen, x); - } - if (x < histnum) { - sc->dist[x]+=rlen; - } else { - // out of bounds.... what to do? - sc->dist[histnum] +=rlen; - } - } - } - } - // total mapped bases += read length - dat.tmapb+=rlen; - if (nmate>0) { - // insert size histogram - visize.push_back(nmate); - dat.pe=1; - } - - // mate reference chromosome is not the same as my own? - if (materef.size() && (materef != "=" && materef != "*" && materef != ref)) { - // this is a discordant read - dat.disc++; - } else { - // mate reference chromosome is far (>50kb) from my own? - if (abs(nmate) > 50000) { - // this is discordant-by position - dat.disc_pos++; - } - } - - // walk along sequence, add qualities to overall min/max/mean/stdev - int i, j; - for (i=0;idat.qualmax) dat.qualmax=qual[i]; - if (qual[i] (sizeof(struct id_t)+1)) { - struct id_t id; - if (sscanf(name.data()+p+1,"%hu:%hu:%u", &id.i1, &id.i2, &id.i3) == 3) { - * (struct id_t *) (void *) (name.data()+p+1) = id; - name.resize(p+1+sizeof(id_t)); - } - } - } - } - } - } - } - - // count dups for that id - int x=++dups[name]; - - // keep track of max dups - if (x>dat.dupmax) - dat.dupmax=x; - - // fastq-output mode... - if (sefq) { - // if the data isn't paired end or if we're not sure yet - if (!dat.pe || dat.mapn < 1000) { - // output a single end fq - fprintf(sefq,"@%s\n%s\n+\n%s\n",name.c_str(), seq.c_str(), qual); - } - } - - // if we're outputting paired-end fastq's and if there's not a lot of dups - if (pefq1 && x < 4 && (dat.pe || dat.mapn < 1000)) { - fqent fq; - google::sparse_hash_map::iterator it=petab.find(name); - // find my mate? - if (it == petab.end()) { - // no, add me - fq.r=seq; - fq.q=qual; - fq.bits=bits&0x40; // mate flag - petab[name]=fq; - } else if (it->second.bits != bits) { - // yes? remove me - fq=it->second; - fprintf(pefq1,"@%s 1\n%s\n+\n%s\n",name.c_str(), fq.r.c_str(), fq.q.c_str()); - fprintf(pefq2,"@%s 2\n%s\n+\n%s\n",name.c_str(), seq.c_str(), qual); - petab.erase(it); - } - } - } -} - -// parse a sam file... maybe let samtools do this, and then handle stats in "bam mode"... faster for sure -bool sstats::parse_sam(FILE *f) { - line l; meminit(l); - int lineno=0; - int warnings=0; - while (read_line(f, l)>0) { - ++lineno; - char *sp; - if (l.s[0]=='@') { - if (!strncmp(l.s,"@SQ\t",4)) { - char *t=strtok_r(l.s, "\t", &sp); - string sname; int slen=0; - while(t) { - if (!strncmp(t,"SN:",3)) { - sname=&(t[3]); - if (slen) - break; - } else if (!strncmp(t,"LN:",3)) { - slen=atoi(&t[3]); - if (sname.length()) - break; - } - t=strtok_r(NULL, "\t", &sp); - } - covr[sname].reflen=slen; - } - continue; - } - char *t=strtok_r(l.s, "\t", &sp); - char *d[100]; meminit(d); - int n =0; - while(t) { - d[n++]=t; - t=strtok_r(NULL, "\t", &sp); - } - int nm=0; - int i; - // get # mismatches - for (i=S_TAG;iheader) { - int i; - for (i = 0; i < fp->header->n_targets; ++i) { - covr[fp->header->target_name[i]].reflen=fp->header->target_len[i]; - } - } - bam1_t *al=bam_init1(); - int ret=0; - while ( (ret=samread(fp, al)) > 0 ) { - uint32_t *cig = bam1_cigar(al); - char *name = bam1_qname(al); - int len = al->core.l_qseq; - uint8_t *tag=bam_aux_get(al, "NM"); // NM tag - int nm = tag ? bam_aux2i(tag) : 0; - int ins=0, del=0; - int i; - - // count inserts and deletions - for (i=0;icore.n_cigar;++i) { - int op = cig[i] & BAM_CIGAR_MASK; - if (op == BAM_CINS) { - ins+=(cig[i] >> BAM_CIGAR_SHIFT); - } else if (op == BAM_CDEL) { - del+=(cig[i] >> BAM_CIGAR_SHIFT); - } - } - - // crappy cigar? - if (al->core.n_cigar == 0) - al->core.pos=-1; // not really a match if there's no cigar string... this deals with bwa's issue - - char *qual = (char *) bam1_qual(al); // qual string - uint8_t * bamseq = bam1_seq(al); // sequence string - string seq; seq.resize(len); // ok... really make it a string - for (i=0;icore.flag,al->core.tid>=0?fp->header->target_name[al->core.tid]:"",al->core.pos+1,al->core.qual, al->core.mtid>=0?fp->header->target_name[al->core.mtid]:"", al->core.isize, seq, qual, nm, ins, del); - } - if (ret < -2) { - // no stats .. corrupt file - return false; - } - if (ret < -1) { - ++errs; - // truncated file, output stats, but return error code - return true; - } - return true; -} - -void usage(FILE *f) { - fprintf(f, -"Usage: sam-stats [options] [file1] [file2...filen]\n" -"Version: %s\n" -"\n" -"Produces lots of easily digested statistics for the files listed\n" -"\n" -"Options (default in parens):\n" -"\n" -"-D Keep track of multiple alignments\n" -"-O PREFIX Output prefix enabling extended output (see below)\n" -"-R FIL Coverage/RNA output (coverage, 3' bias, etc, implies -A)\n" -"-A Report all chr sigs, even if there are more than 1000\n" -"-b INT Number of reads to sample for per-base stats (1M)\n" -"-S INT Size of ascii-signature (30)\n" -"-x FIL File extension for handling multiple files (stats)\n" -"-M Only overwrite if newer (requires -x, or multiple files)\n" -"-B Input is bam, don't bother looking at magic\n" -"-z Don't fail when zero entries in sam\n" -"\n" -"OUTPUT:\n" -"\n" -"If one file is specified, then the output is to standard out. If\n" -"multiple files are specified, or if the -x option is supplied,\n" -"the output file is .. Default extension is 'stats'.\n" -"\n" -"Complete Stats:\n" -"\n" -" : mean, max, stdev, median, Q1 (25 percentile), Q3\n" -" reads : # of entries in the sam file, might not be # reads\n" -" phred : phred scale used\n" -" bsize : # reads used for qual stats\n" -" mapped reads : number of aligned reads (unique probe id sequences)\n" -" mapped bases : total of the lengths of the aligned reads\n" -" forward : number of forward-aligned reads\n" -" reverse : number of reverse-aligned reads\n" -" snp rate : mismatched bases / total bases (snv rate)\n" -" ins rate : insert bases / total bases\n" -" del rate : deleted bases / total bases\n" -" pct mismatch : percent of reads that have mismatches\n" -" pct align : percent of reads that aligned\n" -" len : read length stats, ignored if fixed-length\n" -" mapq : stats for mapping qualities\n" -" insert : stats for insert sizes\n" -" %% : percentage of mapped bases per chr, followed by a signature\n" -"\n" -"Subsampled stats (1M reads max):\n" -" base qual : stats for base qualities\n" -" %%A,%%T,%%C,%%G : base percentages\n" -"\n" -"Meaning of the per-chromosome signature:\n" -" A ascii-histogram of mapped reads by chromosome position.\n" -" It is only output if the original SAM/BAM has a header. The values\n" -" are the log2 of the # of mapped reads at each position + ascii '0'.\n" -"\n" -"Extended output mode produces a set of files:\n" -" .stats : primary output\n" -" .fastx : fastx-toolkit compatible output\n" -" .rcov : per-reference counts & coverage\n" -" .xdist : mismatch distribution\n" -" .ldist : length distribution (if applicable)\n" -" .mqdist : mapping quality distribution\n" -"\n" - ,VERSION); -} - -std::string string_format(const std::string &fmt, ...) { - int n, size=100; - std::string str; - va_list ap; - while (1) { - str.resize(size); - va_start(ap, fmt); - int n = vsnprintf((char *)str.c_str(), size, fmt.c_str(), ap); - va_end(ap); - if (n > -1 && n < size) - return str; - if (n > -1) - size=n+1; - else - size*=2; - } -} - -// R-compatible quantile code : TODO convert to template - -template -double quantile(const vtype &vec, double p) { - int l = vec.size(); - if (!l) return 0; - double t = ((double)l-1)*p; - int it = (int) t; - int v=vec[it]; - if (t > (double)it) { - return (v + (t-it) * (vec[it+1] - v)); - } else { - return v; - } -} - -template -double quantile(const vector &vec, double p) { - int l = vec.size(); - if (!l) return 0; - double t = ((double)l-1)*p; - int it = (int) t; - itype v=vec[it]; - if (t > (double)it) { - return (v + (t-it) * (vec[it+1] - v)); - } else { - return v; - } -} - -void build_basemap() { - int cb,j; - for (cb=0;cb<256;++cb) { - switch(cb) { - case 'A': case 'a': - j=T_A; break; - case 'C': case 'c': - j=T_C; break; - case 'G': case 'g': - j=T_G; break; - case 'T': case 't': - j=T_T; break; - default: - j=T_N; break; - } - basemap[cb]=j; - } -} - - diff --git a/clipper/sam-stats.pl b/clipper/sam-stats.pl deleted file mode 100755 index bbd8bef..0000000 --- a/clipper/sam-stats.pl +++ /dev/null @@ -1,343 +0,0 @@ -#!/usr/bin/perl - -# Copyright (c) 2011 Expression Analysis / Erik Aronesty -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -use strict; -use Getopt::Long; -use Data::Dumper; - - -my ($cq); - -# summary stats -my $n = 0; # numreads -my (%mapb, $mapb); # mapped bases -my ($lenmin, $lenmax, $lensum, $lenssq, $mapsum, $mapssq, $nmlen, $nmc, $insum, $dlsum, $nmsum, $nmnz); -my ($nbase, $qualmax, $qualmin, $qualsum, $qualssq, @basecnt); -my ($rev, $for); -my ($mapc, @mapq, @mat); - -# per-read -my ($id, $bits, $nmo, $mapq, $cig, $l, $q, $r, $mat, $nm, @fdx); - -my %opt; -GetOptions(\%opt, "help", "bases=i", "make|M", "count=i", "ext|x=s") || die usage(); -if ($opt{help}) { print usage(); exit 1;} - -my $multi = 1 if @ARGV > 1; -$opt{ext}='stats' if $multi && ! $opt{ext}; -$multi = 1 if $opt{ext}; - -$qualmin = 100000; -$lenmin = 100000; - -my $QSAMP=$opt{bases} ? $opt{bases} : 5000; # number of reads to track per-base quality stats (all other stats are for all reads) -my $MAXN=$opt{count} ? $opt{count} : 2000000000; # number of reads to track per-base quality stats (all other stats are for all reads) - -if (!@ARGV) { - $ARGV[0] = '-'; -} -while (@ARGV) { -my $in = shift @ARGV; -if ($in && !($in eq '-')) { - open(IN, ($in =~ /\.gz$/ ? "/bin/gunzip -c $in|" : $in)) || die "Can't open $in: $!\n"; -} else { - die "Can't read from stdin in multiple mode\n" if ($multi); - *IN=*STDIN; -} - -*OUT=*STDOUT; -my $out; -if ($multi) { - $out = $in; - $out =~ s/\.gz$//; - $out .= ".$opt{ext}"; - - if ($opt{make}) { - next if -s $out && (stat($out))[9] > (stat($in))[9]; - warn "+$in>$out\n"; - } - - open(OUT, ">$out.tmp") || die "Can't open $out\n"; -} - - (%mapb, $mapb, @basecnt, $lenmin, $lenmax, $lensum, $lenssq, $mapsum, $mapssq, $nmlen, $nmc, $insum, $dlsum, $nmsum, $nmnz, $nbase, $qualmax, $qualmin, $qualsum, $qualssq, $rev, $for, $mapc, @mapq, @mat, $n) = (undef) x 100; - - %mapb=(); -if ($in =~ /\.bam$/) { - close IN; - - require Bio::DB::Sam; - my $bam = Bio::DB::Bam->open($in); - my $header = $bam->header; - # reset stats - while (my $a = $bam->read1()) { - ++$n; - $cig = $a->cigar_str; - next if ($cig eq ''); - $nmo=$a->tid; - $mapq = $a->qual; - $bits = $a->flag; - $l = $a->query->length; - $mat = $a->isize; - ($nm) = $a->get_tag_values("NM"); - if ($mapc < $QSAMP) { - $r = $a->query->dna; - $q = join '', map {chr($_+33)} unpack('C*',$a->_qscore); - } - stats(); - last if $n > $MAXN; - } -} else { - while (my $i = ) { - next if $i =~ /^\@/; - ++$n; - ($id, $bits, $nmo, undef, $mapq, $cig, undef, undef, $mat, $r, $q, @fdx) = split /\t/, $i; - next if ($cig eq '*'); - $nm = ''; - for (@fdx) { - if (s/^NM:i://) { - $nm = $_; - last; - } - } - $l = length($r); - next unless $nmo; - stats(); - last if $n > $MAXN; - } -} - -$QSAMP=$mapc if $mapc < $QSAMP; - -@mapq = sort {$a <=> $b} @mapq; -@mat = sort {$a <=> $b} @mat; - -# autodetect phred -my $phred = 64; -$phred = 33 if ($qualmin < 64); - -printf OUT "reads\t%d\n", $n; -printf OUT "phred\t%d\n", $phred if $nbase > 0; -printf OUT "mapped reads\t%d\n", $mapc; -printf OUT "mapped bases\t%d\n", $mapb; - -if ($mapc > 0) { - printf OUT "foward\t%d\n", $for; - printf OUT "reverse\t%d\n", $rev; - - if ($lenmax != $lenmin) { - printf OUT "len max\t%.4f\n", $lenmax; - if ($n > 0 ) { - printf OUT "len mean\t%.4f\n", $lensum/$mapc; - if ($n > 1 ) { - printf OUT "len stdev\t%.4f\n", stdev($mapc, $lensum, $lenssq); - } - } - } else { - printf OUT "len max\t%d\n", $lenmax; - } - - printf OUT "mapq mean\t%.4f\n", ($mapsum/$mapc); - printf OUT "mapq stdev\t%.4f\n", stdev($mapc, $mapsum, $mapssq); - printf OUT "mapq Q1\t%.4f\n", quantile(\@mapq, .25); - printf OUT "mapq median\t%.4f\n", quantile(\@mapq, .50); - printf OUT "mapq Q3\t%.4f\n", quantile(\@mapq, .75); - - if ($nmlen > 0) { - printf OUT "snp rate\t%.6f\n", ($nmsum/$nmlen); - if ($insum > 0) { - printf OUT "ins rate\t%.6f\n", ($insum/$nmlen); - } - - if ($dlsum > 0) { - printf OUT "del rate\t%.6f\n", ($dlsum/$nmlen); - } - printf OUT "pct mismatch\t%.4f\n", 100*($nmnz/$nmc); - } - - if (@mat > 0) { - my $p10=quantile(\@mat,.10); - my $p90=quantile(\@mat,.90); - my ($matc, $matsum, $matssq); - for (@mat) { - if ($_ >= $p10 && $_ <= $p90) { - ++$matc; - $matsum+=$_; - $matssq+=$_*$_; - } - } - printf OUT "insert mean\t%.4f\n", ($matsum/$matc); - printf OUT "insert stdev\t%.4f\n", stdev($matc, $matsum, $matssq); - printf OUT "insert Q1\t%.4f\n", quantile(\@mat, .25); - printf OUT "insert median\t%.4f\n", quantile(\@mat, .50); - printf OUT "insert Q3\t%.4f\n", quantile(\@mat, .75); - } - - if ($nbase > 0) { - printf OUT "base qual mean\t%.4f\n", ($qualsum/$nbase)-$phred; - printf OUT "base qual stdev\t%.4f\n", stdev($nbase, $qualsum, $qualssq); - } -} - -if ($nbase) { - printf OUT "%%A\t%.4f\n", 100*$basecnt[0]/$nbase; - printf OUT "%%C\t%.4f\n", 100*$basecnt[1]/$nbase; - printf OUT "%%G\t%.4f\n", 100*$basecnt[2]/$nbase; - printf OUT "%%T\t%.4f\n", 100*$basecnt[3]/$nbase; - if ($basecnt[4] > 0) { - printf OUT "%%N\t%.4f\n", 100*$basecnt[4]/$nbase - } -} - -if (%mapb > 1 && %mapb <= 1000) { - for my $k (sort(keys(%mapb))) { - my $v = $mapb{$k}; - my ($n) = $k =~ m/([\w.-]+)/; - printf OUT "%%$n\t%.2f\n", 100*$v/$mapb; - } -} - -close OUT; -rename("$out.tmp", $out); -} - -sub stats -{ - my $strand = 1 - 2 * ($bits & 16); - - ++$mapc; - - $lenmax = $l if $l > $lenmax; - $lenmin = $l if $l < $lenmax; - - $lensum += $l; - $lenssq += $l*$l; - - if ($bits & 16) { - $rev += 1; - } else { - $for += 1; - } - - $mapsum += $mapq; - $mapssq += $mapq*$mapq; - - push @mapq, $mapq+0; - if (!($nm eq '')) { - $nmsum += $nm; - $nmnz += 1 if $nm > 0; - ++$nmc; - $nmlen += $l; - for ($cig =~ /D(\d+)/g) { - $dlsum+=$_; - } - for ($cig =~ /I(\d+)/g) { - $insum+=$_; - } - } - - if (%mapb <= 1000) { - $mapb{$nmo}+=$l; - } - - $mapb+=$l; - - if ($mat > 0) { - push @mat, $mat+0; - } - - if ($mapc < $QSAMP) { - # shorter length - for (my $i = 0; $i < $l; ++$i) { - $cq = ord(substr($q, $i, 1)); - ++$nbase; - $qualmax=$cq if $cq > $qualmax; - $qualmin=$cq if $cq < $qualmin; - $qualsum+=$cq; - $qualssq+=$cq*$cq; - my $cb = substr($r, $i, 1); - $cb =~ tr/ACGTN/01234/; - ++$basecnt[$cb]; - } - } -} - -# copied from EA.pm - -sub stdev($ $ $) { - my ($cnt, $sum, $ssq) = @_; - sqrt(($cnt*$ssq-($sum*$sum)) / ($cnt*($cnt-1))); -} - -sub quantile { - my ($a,$p) = @_; - my $l = scalar(@{$a}); - my $t = ($l-1)*$p; - my $v=$a->[int($t)]; - if ($t > int($t)) { - return $v + $p * ($a->[int($t)+1] - $v); - } else { - return $v; - } -} - -sub usage { -return < [.. Default extension is 'stats'. - -Complete Stats: - - : mean, max, stdev, median, Q1 (25 percentile), Q3 - reads : # of entries in the file - phred : phred scale used - mapped reads : number of aligned reads - mapped bases : total of the lengths of the aligned reads - forward : number of forward-aligned reads - reverse : number of reverse-aligned reads - snp rate : mismatched bases / total bases - ins rate : insert bases / total bases - del rate : deleted bases / total bases - pct mismatch : percent of reads that have mismatches - len : read length stats, ignored if fixed-length - mapq : stats for mapping qualities - insert : stats for insert sizes - % : percentage of mapped bases per chromosome (use to compute coverage) - -Subsampled stats: - base qual : stats for base qualities - %A,%T,%C,%G : base percentages -EOF -} - diff --git a/clipper/samtools/Makefile b/clipper/samtools/Makefile deleted file mode 100644 index dd8af13..0000000 --- a/clipper/samtools/Makefile +++ /dev/null @@ -1,86 +0,0 @@ -CC= gcc -CFLAGS= -g -Wall -O2 #-m64 #-arch ppc -DFLAGS= -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_USE_KNETFILE -D_CURSES_LIB=1 -KNETFILE_O= knetfile.o -LOBJS= bgzf.o kstring.o bam_aux.o bam.o bam_import.o sam.o bam_index.o \ - bam_pileup.o bam_lpileup.o bam_md.o razf.o faidx.o bedidx.o \ - $(KNETFILE_O) bam_sort.o sam_header.o bam_reheader.o kprobaln.o bam_cat.o -AOBJS= sam_view.o \ - bam_rmdup.o bam_rmdupse.o bam_mate.o bam_stat.o bam_color.o \ - bamtk.o kaln.o errmod.o sample.o \ - cut_target.o phase.o bam2depth.o -PROG= samtools -INCLUDES= -I. -SUBDIRS= . -LIBPATH= -LIBCURSES= -lcurses # -lXCurses - -.SUFFIXES:.c .o - -.c.o: - $(CC) -c $(CFLAGS) $(DFLAGS) $(INCLUDES) $< -o $@ - -all-recur lib-recur clean-recur cleanlocal-recur install-recur: - @target=`echo $@ | sed s/-recur//`; \ - wdir=`pwd`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - cd $$subdir; \ - $(MAKE) CC="$(CC)" DFLAGS="$(DFLAGS)" CFLAGS="$(CFLAGS)" \ - INCLUDES="$(INCLUDES)" LIBPATH="$(LIBPATH)" $$target || exit 1; \ - cd $$wdir; \ - done; - -all:libbam.a - -.PHONY:all lib clean cleanlocal -.PHONY:all-recur lib-recur clean-recur cleanlocal-recur install-recur - -lib:libbam.a - -libbam.a:$(LOBJS) - $(AR) -csru $@ $(LOBJS) - -razip:razip.o razf.o $(KNETFILE_O) - $(CC) $(CFLAGS) -o $@ razf.o razip.o $(KNETFILE_O) -lz - -bgzip:bgzip.o bgzf.o $(KNETFILE_O) - $(CC) $(CFLAGS) -o $@ bgzf.o bgzip.o $(KNETFILE_O) -lz - -razip.o:razf.h -bam.o:bam.h razf.h bam_endian.h kstring.h sam_header.h -sam.o:sam.h bam.h -bam_import.o:bam.h kseq.h khash.h razf.h -bam_pileup.o:bam.h razf.h ksort.h -bam_plcmd.o:bam.h faidx.h -bam_index.o:bam.h khash.h ksort.h razf.h bam_endian.h -bam_lpileup.o:bam.h ksort.h -bam_sort.o:bam.h ksort.h razf.h -bam_md.o:bam.h faidx.h -sam_header.o:sam_header.h khash.h -errmod.o:errmod.h -phase.o:bam.h khash.h ksort.h -bamtk.o:bam.h - -faidx.o:faidx.h razf.h khash.h -faidx_main.o:faidx.h razf.h - - -libbam.1.dylib-local:$(LOBJS) - libtool -dynamic $(LOBJS) -o libbam.1.dylib -lc -lz - -libbam.so.1-local:$(LOBJS) - $(CC) -shared -Wl,-soname,libbam.so -o libbam.so.1 $(LOBJS) -lc -lz - -dylib: - @$(MAKE) cleanlocal; \ - case `uname` in \ - Linux) $(MAKE) CFLAGS="$(CFLAGS) -fPIC" libbam.so.1-local;; \ - Darwin) $(MAKE) CFLAGS="$(CFLAGS) -fPIC" libbam.1.dylib-local;; \ - *) echo 'Unknown OS';; \ - esac - - -cleanlocal: - rm -fr gmon.out *.o a.out *.exe *.dSYM razip bgzip $(PROG) *~ *.a *.so.* *.so *.dylib - -clean:cleanlocal-recur diff --git a/clipper/samtools/bam.c b/clipper/samtools/bam.c deleted file mode 100644 index b00d6a6..0000000 --- a/clipper/samtools/bam.c +++ /dev/null @@ -1,474 +0,0 @@ -#include -#include -#include -#include -#include "bam.h" -#include "bam_endian.h" -#include "kstring.h" -#include "sam_header.h" - -int bam_is_be = 0, bam_verbose = 2, bam_no_B = 0; -char *bam_flag2char_table = "pPuUrR12sfd\0\0\0\0\0"; - -/************************** - * CIGAR related routines * - **************************/ - -uint32_t bam_calend(const bam1_core_t *c, const uint32_t *cigar) -{ - int k, end = c->pos; - for (k = 0; k < c->n_cigar; ++k) { - int op = bam_cigar_op(cigar[k]); - int len = bam_cigar_oplen(cigar[k]); - if (op == BAM_CBACK) { // move backward - int l, u, v; - if (k == c->n_cigar - 1) break; // skip trailing 'B' - for (l = k - 1, u = v = 0; l >= 0; --l) { - int op1 = bam_cigar_op(cigar[l]); - int len1 = bam_cigar_oplen(cigar[l]); - if (bam_cigar_type(op1)&1) { // consume query - if (u + len1 >= len) { // stop - if (bam_cigar_type(op1)&2) v += len - u; - break; - } else u += len1; - } - if (bam_cigar_type(op1)&2) v += len1; - } - end = l < 0? c->pos : end - v; - } else if (bam_cigar_type(op)&2) end += bam_cigar_oplen(cigar[k]); - } - return end; -} - -int32_t bam_cigar2qlen(const bam1_core_t *c, const uint32_t *cigar) -{ - uint32_t k; - int32_t l = 0; - for (k = 0; k < c->n_cigar; ++k) - if (bam_cigar_type(bam_cigar_op(cigar[k]))&1) - l += bam_cigar_oplen(cigar[k]); - return l; -} - -/******************** - * BAM I/O routines * - ********************/ - -bam_header_t *bam_header_init() -{ - bam_is_be = bam_is_big_endian(); - return (bam_header_t*)calloc(1, sizeof(bam_header_t)); -} - -void bam_header_destroy(bam_header_t *header) -{ - int32_t i; - extern void bam_destroy_header_hash(bam_header_t *header); - if (header == 0) return; - if (header->target_name) { - for (i = 0; i < header->n_targets; ++i) - free(header->target_name[i]); - free(header->target_name); - free(header->target_len); - } - free(header->text); - if (header->dict) sam_header_free(header->dict); - if (header->rg2lib) sam_tbl_destroy(header->rg2lib); - bam_destroy_header_hash(header); - free(header); -} - -bam_header_t *bam_header_read(bamFile fp) -{ - bam_header_t *header; - char buf[4]; - int magic_len; - int32_t i = 1, name_len; - // check EOF - i = bgzf_check_EOF(fp); - if (i < 0) { - // If the file is a pipe, checking the EOF marker will *always* fail - // with ESPIPE. Suppress the error message in this case. - if (errno != ESPIPE) perror("[bam_header_read] bgzf_check_EOF"); - } - else if (i == 0) fprintf(stderr, "[bam_header_read] EOF marker is absent. The input is probably truncated.\n"); - // read "BAM1" - magic_len = bam_read(fp, buf, 4); - if (magic_len != 4 || strncmp(buf, "BAM\001", 4) != 0) { - fprintf(stderr, "[bam_header_read] invalid BAM binary header (this is not a BAM file).\n"); - return 0; - } - header = bam_header_init(); - // read plain text and the number of reference sequences - bam_read(fp, &header->l_text, 4); - if (bam_is_be) bam_swap_endian_4p(&header->l_text); - header->text = (char*)calloc(header->l_text + 1, 1); - bam_read(fp, header->text, header->l_text); - bam_read(fp, &header->n_targets, 4); - if (bam_is_be) bam_swap_endian_4p(&header->n_targets); - // read reference sequence names and lengths - header->target_name = (char**)calloc(header->n_targets, sizeof(char*)); - header->target_len = (uint32_t*)calloc(header->n_targets, 4); - for (i = 0; i != header->n_targets; ++i) { - bam_read(fp, &name_len, 4); - if (bam_is_be) bam_swap_endian_4p(&name_len); - header->target_name[i] = (char*)calloc(name_len, 1); - bam_read(fp, header->target_name[i], name_len); - bam_read(fp, &header->target_len[i], 4); - if (bam_is_be) bam_swap_endian_4p(&header->target_len[i]); - } - return header; -} - -int bam_header_write(bamFile fp, const bam_header_t *header) -{ - char buf[4]; - int32_t i, name_len, x; - // write "BAM1" - strncpy(buf, "BAM\001", 4); - bam_write(fp, buf, 4); - // write plain text and the number of reference sequences - if (bam_is_be) { - x = bam_swap_endian_4(header->l_text); - bam_write(fp, &x, 4); - if (header->l_text) bam_write(fp, header->text, header->l_text); - x = bam_swap_endian_4(header->n_targets); - bam_write(fp, &x, 4); - } else { - bam_write(fp, &header->l_text, 4); - if (header->l_text) bam_write(fp, header->text, header->l_text); - bam_write(fp, &header->n_targets, 4); - } - // write sequence names and lengths - for (i = 0; i != header->n_targets; ++i) { - char *p = header->target_name[i]; - name_len = strlen(p) + 1; - if (bam_is_be) { - x = bam_swap_endian_4(name_len); - bam_write(fp, &x, 4); - } else bam_write(fp, &name_len, 4); - bam_write(fp, p, name_len); - if (bam_is_be) { - x = bam_swap_endian_4(header->target_len[i]); - bam_write(fp, &x, 4); - } else bam_write(fp, &header->target_len[i], 4); - } - bgzf_flush(fp); - return 0; -} - -static void swap_endian_data(const bam1_core_t *c, int data_len, uint8_t *data) -{ - uint8_t *s; - uint32_t i, *cigar = (uint32_t*)(data + c->l_qname); - s = data + c->n_cigar*4 + c->l_qname + c->l_qseq + (c->l_qseq + 1)/2; - for (i = 0; i < c->n_cigar; ++i) bam_swap_endian_4p(&cigar[i]); - while (s < data + data_len) { - uint8_t type; - s += 2; // skip key - type = toupper(*s); ++s; // skip type - if (type == 'C' || type == 'A') ++s; - else if (type == 'S') { bam_swap_endian_2p(s); s += 2; } - else if (type == 'I' || type == 'F') { bam_swap_endian_4p(s); s += 4; } - else if (type == 'D') { bam_swap_endian_8p(s); s += 8; } - else if (type == 'Z' || type == 'H') { while (*s) ++s; ++s; } - else if (type == 'B') { - int32_t n, Bsize = bam_aux_type2size(*s); - memcpy(&n, s + 1, 4); - if (1 == Bsize) { - } else if (2 == Bsize) { - for (i = 0; i < n; i += 2) - bam_swap_endian_2p(s + 5 + i); - } else if (4 == Bsize) { - for (i = 0; i < n; i += 4) - bam_swap_endian_4p(s + 5 + i); - } - bam_swap_endian_4p(s+1); - } - } -} - -int bam_read1(bamFile fp, bam1_t *b) -{ - bam1_core_t *c = &b->core; - int32_t block_len, ret, i; - uint32_t x[8]; - - assert(BAM_CORE_SIZE == 32); - if ((ret = bam_read(fp, &block_len, 4)) != 4) { - if (ret == 0) return -1; // normal end-of-file - else return -2; // truncated - } - if (bam_read(fp, x, BAM_CORE_SIZE) != BAM_CORE_SIZE) return -3; - if (bam_is_be) { - bam_swap_endian_4p(&block_len); - for (i = 0; i < 8; ++i) bam_swap_endian_4p(x + i); - } - c->tid = x[0]; c->pos = x[1]; - c->bin = x[2]>>16; c->qual = x[2]>>8&0xff; c->l_qname = x[2]&0xff; - c->flag = x[3]>>16; c->n_cigar = x[3]&0xffff; - c->l_qseq = x[4]; - c->mtid = x[5]; c->mpos = x[6]; c->isize = x[7]; - b->data_len = block_len - BAM_CORE_SIZE; - if (b->m_data < b->data_len) { - b->m_data = b->data_len; - kroundup32(b->m_data); - b->data = (uint8_t*)realloc(b->data, b->m_data); - } - if (bam_read(fp, b->data, b->data_len) != b->data_len) return -4; - b->l_aux = b->data_len - c->n_cigar * 4 - c->l_qname - c->l_qseq - (c->l_qseq+1)/2; - if (bam_is_be) swap_endian_data(c, b->data_len, b->data); - if (bam_no_B) bam_remove_B(b); - return 4 + block_len; -} - -inline int bam_write1_core(bamFile fp, const bam1_core_t *c, int data_len, uint8_t *data) -{ - uint32_t x[8], block_len = data_len + BAM_CORE_SIZE, y; - int i; - assert(BAM_CORE_SIZE == 32); - x[0] = c->tid; - x[1] = c->pos; - x[2] = (uint32_t)c->bin<<16 | c->qual<<8 | c->l_qname; - x[3] = (uint32_t)c->flag<<16 | c->n_cigar; - x[4] = c->l_qseq; - x[5] = c->mtid; - x[6] = c->mpos; - x[7] = c->isize; - bgzf_flush_try(fp, 4 + block_len); - if (bam_is_be) { - for (i = 0; i < 8; ++i) bam_swap_endian_4p(x + i); - y = block_len; - bam_write(fp, bam_swap_endian_4p(&y), 4); - swap_endian_data(c, data_len, data); - } else bam_write(fp, &block_len, 4); - bam_write(fp, x, BAM_CORE_SIZE); - bam_write(fp, data, data_len); - if (bam_is_be) swap_endian_data(c, data_len, data); - return 4 + block_len; -} - -int bam_write1(bamFile fp, const bam1_t *b) -{ - return bam_write1_core(fp, &b->core, b->data_len, b->data); -} - -char *bam_format1_core(const bam_header_t *header, const bam1_t *b, int of) -{ - uint8_t *s = bam1_seq(b), *t = bam1_qual(b); - int i; - const bam1_core_t *c = &b->core; - kstring_t str; - str.l = str.m = 0; str.s = 0; - - kputsn(bam1_qname(b), c->l_qname-1, &str); kputc('\t', &str); - if (of == BAM_OFDEC) { kputw(c->flag, &str); kputc('\t', &str); } - else if (of == BAM_OFHEX) ksprintf(&str, "0x%x\t", c->flag); - else { // BAM_OFSTR - for (i = 0; i < 16; ++i) - if ((c->flag & 1<tid < 0) kputsn("*\t", 2, &str); - else { - if (header) kputs(header->target_name[c->tid] , &str); - else kputw(c->tid, &str); - kputc('\t', &str); - } - kputw(c->pos + 1, &str); kputc('\t', &str); kputw(c->qual, &str); kputc('\t', &str); - if (c->n_cigar == 0) kputc('*', &str); - else { - uint32_t *cigar = bam1_cigar(b); - for (i = 0; i < c->n_cigar; ++i) { - kputw(bam1_cigar(b)[i]>>BAM_CIGAR_SHIFT, &str); - kputc(bam_cigar_opchr(cigar[i]), &str); - } - } - kputc('\t', &str); - if (c->mtid < 0) kputsn("*\t", 2, &str); - else if (c->mtid == c->tid) kputsn("=\t", 2, &str); - else { - if (header) kputs(header->target_name[c->mtid], &str); - else kputw(c->mtid, &str); - kputc('\t', &str); - } - kputw(c->mpos + 1, &str); kputc('\t', &str); kputw(c->isize, &str); kputc('\t', &str); - if (c->l_qseq) { - for (i = 0; i < c->l_qseq; ++i) kputc(bam_nt16_rev_table[bam1_seqi(s, i)], &str); - kputc('\t', &str); - if (t[0] == 0xff) kputc('*', &str); - else for (i = 0; i < c->l_qseq; ++i) kputc(t[i] + 33, &str); - } else kputsn("*\t*", 3, &str); - s = bam1_aux(b); - while (s < b->data + b->data_len) { - uint8_t type, key[2]; - key[0] = s[0]; key[1] = s[1]; - s += 2; type = *s; ++s; - kputc('\t', &str); kputsn((char*)key, 2, &str); kputc(':', &str); - if (type == 'A') { kputsn("A:", 2, &str); kputc(*s, &str); ++s; } - else if (type == 'C') { kputsn("i:", 2, &str); kputw(*s, &str); ++s; } - else if (type == 'c') { kputsn("i:", 2, &str); kputw(*(int8_t*)s, &str); ++s; } - else if (type == 'S') { kputsn("i:", 2, &str); kputw(*(uint16_t*)s, &str); s += 2; } - else if (type == 's') { kputsn("i:", 2, &str); kputw(*(int16_t*)s, &str); s += 2; } - else if (type == 'I') { kputsn("i:", 2, &str); kputuw(*(uint32_t*)s, &str); s += 4; } - else if (type == 'i') { kputsn("i:", 2, &str); kputw(*(int32_t*)s, &str); s += 4; } - else if (type == 'f') { ksprintf(&str, "f:%g", *(float*)s); s += 4; } - else if (type == 'd') { ksprintf(&str, "d:%lg", *(double*)s); s += 8; } - else if (type == 'Z' || type == 'H') { kputc(type, &str); kputc(':', &str); while (*s) kputc(*s++, &str); ++s; } - else if (type == 'B') { - uint8_t sub_type = *(s++); - int32_t n; - memcpy(&n, s, 4); - s += 4; // no point to the start of the array - kputc(type, &str); kputc(':', &str); kputc(sub_type, &str); // write the typing - for (i = 0; i < n; ++i) { - kputc(',', &str); - if ('c' == sub_type || 'c' == sub_type) { kputw(*(int8_t*)s, &str); ++s; } - else if ('C' == sub_type) { kputw(*(uint8_t*)s, &str); ++s; } - else if ('s' == sub_type) { kputw(*(int16_t*)s, &str); s += 2; } - else if ('S' == sub_type) { kputw(*(uint16_t*)s, &str); s += 2; } - else if ('i' == sub_type) { kputw(*(int32_t*)s, &str); s += 4; } - else if ('I' == sub_type) { kputuw(*(uint32_t*)s, &str); s += 4; } - else if ('f' == sub_type) { ksprintf(&str, "%g", *(float*)s); s += 4; } - } - } - } - return str.s; -} - -char *bam_format1(const bam_header_t *header, const bam1_t *b) -{ - return bam_format1_core(header, b, BAM_OFDEC); -} - -void bam_view1(const bam_header_t *header, const bam1_t *b) -{ - char *s = bam_format1(header, b); - puts(s); - free(s); -} - -int bam_validate1(const bam_header_t *header, const bam1_t *b) -{ - char *s; - - if (b->core.tid < -1 || b->core.mtid < -1) return 0; - if (header && (b->core.tid >= header->n_targets || b->core.mtid >= header->n_targets)) return 0; - - if (b->data_len < b->core.l_qname) return 0; - s = memchr(bam1_qname(b), '\0', b->core.l_qname); - if (s != &bam1_qname(b)[b->core.l_qname-1]) return 0; - - // FIXME: Other fields could also be checked, especially the auxiliary data - - return 1; -} - -// FIXME: we should also check the LB tag associated with each alignment -const char *bam_get_library(bam_header_t *h, const bam1_t *b) -{ - const uint8_t *rg; - if (h->dict == 0) h->dict = sam_header_parse2(h->text); - if (h->rg2lib == 0) h->rg2lib = sam_header2tbl(h->dict, "RG", "ID", "LB"); - rg = bam_aux_get(b, "RG"); - return (rg == 0)? 0 : sam_tbl_get(h->rg2lib, (const char*)(rg + 1)); -} - -/************ - * Remove B * - ************/ - -int bam_remove_B(bam1_t *b) -{ - int i, j, end_j, k, l, no_qual; - uint32_t *cigar, *new_cigar; - uint8_t *seq, *qual, *p; - // test if removal is necessary - if (b->core.flag & BAM_FUNMAP) return 0; // unmapped; do nothing - cigar = bam1_cigar(b); - for (k = 0; k < b->core.n_cigar; ++k) - if (bam_cigar_op(cigar[k]) == BAM_CBACK) break; - if (k == b->core.n_cigar) return 0; // no 'B' - if (bam_cigar_op(cigar[0]) == BAM_CBACK) goto rmB_err; // cannot be removed - // allocate memory for the new CIGAR - if (b->data_len + (b->core.n_cigar + 1) * 4 > b->m_data) { // not enough memory - b->m_data = b->data_len + b->core.n_cigar * 4; - kroundup32(b->m_data); - b->data = (uint8_t*)realloc(b->data, b->m_data); - cigar = bam1_cigar(b); // after realloc, cigar may be changed - } - new_cigar = (uint32_t*)(b->data + (b->m_data - b->core.n_cigar * 4)); // from the end of b->data - // the core loop - seq = bam1_seq(b); qual = bam1_qual(b); - no_qual = (qual[0] == 0xff); // test whether base quality is available - i = j = 0; end_j = -1; - for (k = l = 0; k < b->core.n_cigar; ++k) { - int op = bam_cigar_op(cigar[k]); - int len = bam_cigar_oplen(cigar[k]); - if (op == BAM_CBACK) { // the backward operation - int t, u; - if (k == b->core.n_cigar - 1) break; // ignore 'B' at the end of CIGAR - if (len > j) goto rmB_err; // an excessively long backward - for (t = l - 1, u = 0; t >= 0; --t) { // look back - int op1 = bam_cigar_op(new_cigar[t]); - int len1 = bam_cigar_oplen(new_cigar[t]); - if (bam_cigar_type(op1)&1) { // consume the query - if (u + len1 >= len) { // stop - new_cigar[t] -= (len - u) << BAM_CIGAR_SHIFT; - break; - } else u += len1; - } - } - if (bam_cigar_oplen(new_cigar[t]) == 0) --t; // squeeze out the zero-length operation - l = t + 1; - end_j = j; j -= len; - } else { // other CIGAR operations - new_cigar[l++] = cigar[k]; - if (bam_cigar_type(op)&1) { // consume the query - if (i != j) { // no need to copy if i == j - int u, c, c0; - for (u = 0; u < len; ++u) { // construct the consensus - c = bam1_seqi(seq, i+u); - if (j + u < end_j) { // in an overlap - c0 = bam1_seqi(seq, j+u); - if (c != c0) { // a mismatch; choose the better base - if (qual[j+u] < qual[i+u]) { // the base in the 2nd segment is better - bam1_seq_seti(seq, j+u, c); - qual[j+u] = qual[i+u] - qual[j+u]; - } else qual[j+u] -= qual[i+u]; // the 1st is better; reduce base quality - } else qual[j+u] = qual[j+u] > qual[i+u]? qual[j+u] : qual[i+u]; - } else { // not in an overlap; copy over - bam1_seq_seti(seq, j+u, c); - qual[j+u] = qual[i+u]; - } - } - } - i += len, j += len; - } - } - } - if (no_qual) qual[0] = 0xff; // in very rare cases, this may be modified - // merge adjacent operations if possible - for (k = 1; k < l; ++k) - if (bam_cigar_op(new_cigar[k]) == bam_cigar_op(new_cigar[k-1])) - new_cigar[k] += new_cigar[k-1] >> BAM_CIGAR_SHIFT << BAM_CIGAR_SHIFT, new_cigar[k-1] &= 0xf; - // kill zero length operations - for (k = i = 0; k < l; ++k) - if (new_cigar[k] >> BAM_CIGAR_SHIFT) - new_cigar[i++] = new_cigar[k]; - l = i; - // update b - memcpy(cigar, new_cigar, l * 4); // set CIGAR - p = b->data + b->core.l_qname + l * 4; - memmove(p, seq, (j+1)>>1); p += (j+1)>>1; // set SEQ - memmove(p, qual, j); p += j; // set QUAL - memmove(p, bam1_aux(b), b->l_aux); p += b->l_aux; // set optional fields - b->core.n_cigar = l, b->core.l_qseq = j; // update CIGAR length and query length - b->data_len = p - b->data; // update record length - return 0; - -rmB_err: - b->core.flag |= BAM_FUNMAP; - return -1; -} diff --git a/clipper/samtools/bam.h b/clipper/samtools/bam.h deleted file mode 100644 index a3305e3..0000000 --- a/clipper/samtools/bam.h +++ /dev/null @@ -1,793 +0,0 @@ -/* The MIT License - - Copyright (c) 2008-2010 Genome Research Ltd (GRL). - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -/* Contact: Heng Li */ - -#ifndef BAM_BAM_H -#define BAM_BAM_H - -/*! - @header - - BAM library provides I/O and various operations on manipulating files - in the BAM (Binary Alignment/Mapping) or SAM (Sequence Alignment/Map) - format. It now supports importing from or exporting to SAM, sorting, - merging, generating pileup, and quickly retrieval of reads overlapped - with a specified region. - - @copyright Genome Research Ltd. - */ - -#define BAM_VERSION "0.1.18-r580" - -#include -#include -#include -#include - -#ifndef BAM_LITE -#define BAM_VIRTUAL_OFFSET16 -#include "bgzf.h" -/*! @abstract BAM file handler */ -typedef BGZF *bamFile; -#define bam_open(fn, mode) bgzf_open(fn, mode) -#define bam_dopen(fd, mode) bgzf_fdopen(fd, mode) -#define bam_close(fp) bgzf_close(fp) -#define bam_read(fp, buf, size) bgzf_read(fp, buf, size) -#define bam_write(fp, buf, size) bgzf_write(fp, buf, size) -#define bam_tell(fp) bgzf_tell(fp) -#define bam_seek(fp, pos, dir) bgzf_seek(fp, pos, dir) -#else -#define BAM_TRUE_OFFSET -#include -typedef gzFile bamFile; -#define bam_open(fn, mode) gzopen(fn, mode) -#define bam_dopen(fd, mode) gzdopen(fd, mode) -#define bam_close(fp) gzclose(fp) -#define bam_read(fp, buf, size) gzread(fp, buf, size) -/* no bam_write/bam_tell/bam_seek() here */ -#endif - -/*! @typedef - @abstract Structure for the alignment header. - @field n_targets number of reference sequences - @field target_name names of the reference sequences - @field target_len lengths of the referene sequences - @field dict header dictionary - @field hash hash table for fast name lookup - @field rg2lib hash table for @RG-ID -> LB lookup - @field l_text length of the plain text in the header - @field text plain text - - @discussion Field hash points to null by default. It is a private - member. - */ -typedef struct { - int32_t n_targets; - char **target_name; - uint32_t *target_len; - void *dict, *hash, *rg2lib; - uint32_t l_text, n_text; - char *text; -} bam_header_t; - -/*! @abstract the read is paired in sequencing, no matter whether it is mapped in a pair */ -#define BAM_FPAIRED 1 -/*! @abstract the read is mapped in a proper pair */ -#define BAM_FPROPER_PAIR 2 -/*! @abstract the read itself is unmapped; conflictive with BAM_FPROPER_PAIR */ -#define BAM_FUNMAP 4 -/*! @abstract the mate is unmapped */ -#define BAM_FMUNMAP 8 -/*! @abstract the read is mapped to the reverse strand */ -#define BAM_FREVERSE 16 -/*! @abstract the mate is mapped to the reverse strand */ -#define BAM_FMREVERSE 32 -/*! @abstract this is read1 */ -#define BAM_FREAD1 64 -/*! @abstract this is read2 */ -#define BAM_FREAD2 128 -/*! @abstract not primary alignment */ -#define BAM_FSECONDARY 256 -/*! @abstract QC failure */ -#define BAM_FQCFAIL 512 -/*! @abstract optical or PCR duplicate */ -#define BAM_FDUP 1024 - -#define BAM_OFDEC 0 -#define BAM_OFHEX 1 -#define BAM_OFSTR 2 - -/*! @abstract defautl mask for pileup */ -#define BAM_DEF_MASK (BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP) - -#define BAM_CORE_SIZE sizeof(bam1_core_t) - -/** - * Describing how CIGAR operation/length is packed in a 32-bit integer. - */ -#define BAM_CIGAR_SHIFT 4 -#define BAM_CIGAR_MASK ((1 << BAM_CIGAR_SHIFT) - 1) - -/* - CIGAR operations. - */ -/*! @abstract CIGAR: M = match or mismatch*/ -#define BAM_CMATCH 0 -/*! @abstract CIGAR: I = insertion to the reference */ -#define BAM_CINS 1 -/*! @abstract CIGAR: D = deletion from the reference */ -#define BAM_CDEL 2 -/*! @abstract CIGAR: N = skip on the reference (e.g. spliced alignment) */ -#define BAM_CREF_SKIP 3 -/*! @abstract CIGAR: S = clip on the read with clipped sequence - present in qseq */ -#define BAM_CSOFT_CLIP 4 -/*! @abstract CIGAR: H = clip on the read with clipped sequence trimmed off */ -#define BAM_CHARD_CLIP 5 -/*! @abstract CIGAR: P = padding */ -#define BAM_CPAD 6 -/*! @abstract CIGAR: equals = match */ -#define BAM_CEQUAL 7 -/*! @abstract CIGAR: X = mismatch */ -#define BAM_CDIFF 8 -#define BAM_CBACK 9 - -#define BAM_CIGAR_STR "MIDNSHP=XB" -#define BAM_CIGAR_TYPE 0x3C1A7 - -#define bam_cigar_op(c) ((c)&BAM_CIGAR_MASK) -#define bam_cigar_oplen(c) ((c)>>BAM_CIGAR_SHIFT) -#define bam_cigar_opchr(c) (BAM_CIGAR_STR[bam_cigar_op(c)]) -#define bam_cigar_gen(l, o) ((l)<>((o)<<1)&3) // bit 1: consume query; bit 2: consume reference - -/*! @typedef - @abstract Structure for core alignment information. - @field tid chromosome ID, defined by bam_header_t - @field pos 0-based leftmost coordinate - @field bin bin calculated by bam_reg2bin() - @field qual mapping quality - @field l_qname length of the query name - @field flag bitwise flag - @field n_cigar number of CIGAR operations - @field l_qseq length of the query sequence (read) - */ -typedef struct { - int32_t tid; - int32_t pos; - uint32_t bin:16, qual:8, l_qname:8; - uint32_t flag:16, n_cigar:16; - int32_t l_qseq; - int32_t mtid; - int32_t mpos; - int32_t isize; -} bam1_core_t; - -/*! @typedef - @abstract Structure for one alignment. - @field core core information about the alignment - @field l_aux length of auxiliary data - @field data_len current length of bam1_t::data - @field m_data maximum length of bam1_t::data - @field data all variable-length data, concatenated; structure: qname-cigar-seq-qual-aux - - @discussion Notes: - - 1. qname is zero tailing and core.l_qname includes the tailing '\0'. - 2. l_qseq is calculated from the total length of an alignment block - on reading or from CIGAR. - 3. cigar data is encoded 4 bytes per CIGAR operation. - 4. seq is nybble-encoded according to bam_nt16_table. - */ -typedef struct { - bam1_core_t core; - int l_aux, data_len, m_data; - uint8_t *data; -} bam1_t; - -typedef struct __bam_iter_t *bam_iter_t; - -#define bam1_strand(b) (((b)->core.flag&BAM_FREVERSE) != 0) -#define bam1_mstrand(b) (((b)->core.flag&BAM_FMREVERSE) != 0) - -/*! @function - @abstract Get the CIGAR array - @param b pointer to an alignment - @return pointer to the CIGAR array - - @discussion In the CIGAR array, each element is a 32-bit integer. The - lower 4 bits gives a CIGAR operation and the higher 28 bits keep the - length of a CIGAR. - */ -#define bam1_cigar(b) ((uint32_t*)((b)->data + (b)->core.l_qname)) - -/*! @function - @abstract Get the name of the query - @param b pointer to an alignment - @return pointer to the name string, null terminated - */ -#define bam1_qname(b) ((char*)((b)->data)) - -/*! @function - @abstract Get query sequence - @param b pointer to an alignment - @return pointer to sequence - - @discussion Each base is encoded in 4 bits: 1 for A, 2 for C, 4 for G, - 8 for T and 15 for N. Two bases are packed in one byte with the base - at the higher 4 bits having smaller coordinate on the read. It is - recommended to use bam1_seqi() macro to get the base. - */ -#define bam1_seq(b) ((b)->data + (b)->core.n_cigar*4 + (b)->core.l_qname) - -/*! @function - @abstract Get query quality - @param b pointer to an alignment - @return pointer to quality string - */ -#define bam1_qual(b) ((b)->data + (b)->core.n_cigar*4 + (b)->core.l_qname + (((b)->core.l_qseq + 1)>>1)) - -/*! @function - @abstract Get a base on read - @param s Query sequence returned by bam1_seq() - @param i The i-th position, 0-based - @return 4-bit integer representing the base. - */ -//#define bam1_seqi(s, i) ((s)[(i)/2] >> 4*(1-(i)%2) & 0xf) -#define bam1_seqi(s, i) ((s)[(i)>>1] >> ((~(i)&1)<<2) & 0xf) - -#define bam1_seq_seti(s, i, c) ( (s)[(i)>>1] = ((s)[(i)>>1] & 0xf<<(((i)&1)<<2)) | (c)<<((~(i)&1)<<2) ) - -/*! @function - @abstract Get query sequence and quality - @param b pointer to an alignment - @return pointer to the concatenated auxiliary data - */ -#define bam1_aux(b) ((b)->data + (b)->core.n_cigar*4 + (b)->core.l_qname + (b)->core.l_qseq + ((b)->core.l_qseq + 1)/2) - -#ifndef kroundup32 -/*! @function - @abstract Round an integer to the next closest power-2 integer. - @param x integer to be rounded (in place) - @discussion x will be modified. - */ -#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) -#endif - -/*! - @abstract Whether the machine is big-endian; modified only in - bam_header_init(). - */ -extern int bam_is_be; - -/*! - @abstract Verbose level between 0 and 3; 0 is supposed to disable all - debugging information, though this may not have been implemented. - */ -extern int bam_verbose; - -extern int bam_no_B; - -/*! @abstract Table for converting a nucleotide character to the 4-bit encoding. */ -extern unsigned char bam_nt16_table[256]; - -/*! @abstract Table for converting a 4-bit encoded nucleotide to a letter. */ -extern char *bam_nt16_rev_table; - -extern char bam_nt16_nt4_table[]; - -#ifdef __cplusplus -extern "C" { -#endif - - /********************* - * Low-level SAM I/O * - *********************/ - - /*! @abstract TAM file handler */ - typedef struct __tamFile_t *tamFile; - - /*! - @abstract Open a SAM file for reading, either uncompressed or compressed by gzip/zlib. - @param fn SAM file name - @return SAM file handler - */ - tamFile sam_open(const char *fn); - - /*! - @abstract Close a SAM file handler - @param fp SAM file handler - */ - void sam_close(tamFile fp); - - /*! - @abstract Read one alignment from a SAM file handler - @param fp SAM file handler - @param header header information (ordered names of chromosomes) - @param b read alignment; all members in b will be updated - @return 0 if successful; otherwise negative - */ - int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b); - - /*! - @abstract Read header information from a TAB-delimited list file. - @param fn_list file name for the list - @return a pointer to the header structure - - @discussion Each line in this file consists of chromosome name and - the length of chromosome. - */ - bam_header_t *sam_header_read2(const char *fn_list); - - /*! - @abstract Read header from a SAM file (if present) - @param fp SAM file handler - @return pointer to header struct; 0 if no @SQ lines available - */ - bam_header_t *sam_header_read(tamFile fp); - - /*! - @abstract Parse @SQ lines a update a header struct - @param h pointer to the header struct to be updated - @return number of target sequences - - @discussion bam_header_t::{n_targets,target_len,target_name} will - be destroyed in the first place. - */ - int sam_header_parse(bam_header_t *h); - int32_t bam_get_tid(const bam_header_t *header, const char *seq_name); - - /*! - @abstract Parse @RG lines a update a header struct - @param h pointer to the header struct to be updated - @return number of @RG lines - - @discussion bam_header_t::rg2lib will be destroyed in the first - place. - */ - int sam_header_parse_rg(bam_header_t *h); - -#define sam_write1(header, b) bam_view1(header, b) - - - /******************************** - * APIs for string dictionaries * - ********************************/ - - int bam_strmap_put(void *strmap, const char *rg, const char *lib); - const char *bam_strmap_get(const void *strmap, const char *rg); - void *bam_strmap_dup(const void*); - void *bam_strmap_init(); - void bam_strmap_destroy(void *strmap); - - - /********************* - * Low-level BAM I/O * - *********************/ - - /*! - @abstract Initialize a header structure. - @return the pointer to the header structure - - @discussion This function also modifies the global variable - bam_is_be. - */ - bam_header_t *bam_header_init(); - - /*! - @abstract Destroy a header structure. - @param header pointer to the header - */ - void bam_header_destroy(bam_header_t *header); - - /*! - @abstract Read a header structure from BAM. - @param fp BAM file handler, opened by bam_open() - @return pointer to the header structure - - @discussion The file position indicator must be placed at the - beginning of the file. Upon success, the position indicator will - be set at the start of the first alignment. - */ - bam_header_t *bam_header_read(bamFile fp); - - /*! - @abstract Write a header structure to BAM. - @param fp BAM file handler - @param header pointer to the header structure - @return always 0 currently - */ - int bam_header_write(bamFile fp, const bam_header_t *header); - - /*! - @abstract Read an alignment from BAM. - @param fp BAM file handler - @param b read alignment; all members are updated. - @return number of bytes read from the file - - @discussion The file position indicator must be - placed right before an alignment. Upon success, this function - will set the position indicator to the start of the next - alignment. This function is not affected by the machine - endianness. - */ - int bam_read1(bamFile fp, bam1_t *b); - - int bam_remove_B(bam1_t *b); - - /*! - @abstract Write an alignment to BAM. - @param fp BAM file handler - @param c pointer to the bam1_core_t structure - @param data_len total length of variable size data related to - the alignment - @param data pointer to the concatenated data - @return number of bytes written to the file - - @discussion This function is not affected by the machine - endianness. - */ - int bam_write1_core(bamFile fp, const bam1_core_t *c, int data_len, uint8_t *data); - - /*! - @abstract Write an alignment to BAM. - @param fp BAM file handler - @param b alignment to write - @return number of bytes written to the file - - @abstract It is equivalent to: - bam_write1_core(fp, &b->core, b->data_len, b->data) - */ - int bam_write1(bamFile fp, const bam1_t *b); - - /*! @function - @abstract Initiate a pointer to bam1_t struct - */ -#define bam_init1() ((bam1_t*)calloc(1, sizeof(bam1_t))) - - /*! @function - @abstract Free the memory allocated for an alignment. - @param b pointer to an alignment - */ -#define bam_destroy1(b) do { \ - if (b) { free((b)->data); free(b); } \ - } while (0) - - /*! - @abstract Format a BAM record in the SAM format - @param header pointer to the header structure - @param b alignment to print - @return a pointer to the SAM string - */ - char *bam_format1(const bam_header_t *header, const bam1_t *b); - - char *bam_format1_core(const bam_header_t *header, const bam1_t *b, int of); - - /*! - @abstract Check whether a BAM record is plausibly valid - @param header associated header structure, or NULL if unavailable - @param b alignment to validate - @return 0 if the alignment is invalid; non-zero otherwise - - @discussion Simple consistency check of some of the fields of the - alignment record. If the header is provided, several additional checks - are made. Not all fields are checked, so a non-zero result is not a - guarantee that the record is valid. However it is usually good enough - to detect when bam_seek() has been called with a virtual file offset - that is not the offset of an alignment record. - */ - int bam_validate1(const bam_header_t *header, const bam1_t *b); - - const char *bam_get_library(bam_header_t *header, const bam1_t *b); - - - /*************** - * pileup APIs * - ***************/ - - /*! @typedef - @abstract Structure for one alignment covering the pileup position. - @field b pointer to the alignment - @field qpos position of the read base at the pileup site, 0-based - @field indel indel length; 0 for no indel, positive for ins and negative for del - @field is_del 1 iff the base on the padded read is a deletion - @field level the level of the read in the "viewer" mode - - @discussion See also bam_plbuf_push() and bam_lplbuf_push(). The - difference between the two functions is that the former does not - set bam_pileup1_t::level, while the later does. Level helps the - implementation of alignment viewers, but calculating this has some - overhead. - */ - typedef struct { - bam1_t *b; - int32_t qpos; - int indel, level; - uint32_t is_del:1, is_head:1, is_tail:1, is_refskip:1, aux:28; - } bam_pileup1_t; - - typedef int (*bam_plp_auto_f)(void *data, bam1_t *b); - - struct __bam_plp_t; - typedef struct __bam_plp_t *bam_plp_t; - - bam_plp_t bam_plp_init(bam_plp_auto_f func, void *data); - int bam_plp_push(bam_plp_t iter, const bam1_t *b); - const bam_pileup1_t *bam_plp_next(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp); - const bam_pileup1_t *bam_plp_auto(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp); - void bam_plp_set_mask(bam_plp_t iter, int mask); - void bam_plp_set_maxcnt(bam_plp_t iter, int maxcnt); - void bam_plp_reset(bam_plp_t iter); - void bam_plp_destroy(bam_plp_t iter); - - struct __bam_mplp_t; - typedef struct __bam_mplp_t *bam_mplp_t; - - bam_mplp_t bam_mplp_init(int n, bam_plp_auto_f func, void **data); - void bam_mplp_destroy(bam_mplp_t iter); - void bam_mplp_set_maxcnt(bam_mplp_t iter, int maxcnt); - int bam_mplp_auto(bam_mplp_t iter, int *_tid, int *_pos, int *n_plp, const bam_pileup1_t **plp); - - /*! @typedef - @abstract Type of function to be called by bam_plbuf_push(). - @param tid chromosome ID as is defined in the header - @param pos start coordinate of the alignment, 0-based - @param n number of elements in pl array - @param pl array of alignments - @param data user provided data - @discussion See also bam_plbuf_push(), bam_plbuf_init() and bam_pileup1_t. - */ - typedef int (*bam_pileup_f)(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data); - - typedef struct { - bam_plp_t iter; - bam_pileup_f func; - void *data; - } bam_plbuf_t; - - void bam_plbuf_set_mask(bam_plbuf_t *buf, int mask); - void bam_plbuf_reset(bam_plbuf_t *buf); - bam_plbuf_t *bam_plbuf_init(bam_pileup_f func, void *data); - void bam_plbuf_destroy(bam_plbuf_t *buf); - int bam_plbuf_push(const bam1_t *b, bam_plbuf_t *buf); - - int bam_pileup_file(bamFile fp, int mask, bam_pileup_f func, void *func_data); - - struct __bam_lplbuf_t; - typedef struct __bam_lplbuf_t bam_lplbuf_t; - - void bam_lplbuf_reset(bam_lplbuf_t *buf); - - /*! @abstract bam_plbuf_init() equivalent with level calculated. */ - bam_lplbuf_t *bam_lplbuf_init(bam_pileup_f func, void *data); - - /*! @abstract bam_plbuf_destroy() equivalent with level calculated. */ - void bam_lplbuf_destroy(bam_lplbuf_t *tv); - - /*! @abstract bam_plbuf_push() equivalent with level calculated. */ - int bam_lplbuf_push(const bam1_t *b, bam_lplbuf_t *buf); - - - /********************* - * BAM indexing APIs * - *********************/ - - struct __bam_index_t; - typedef struct __bam_index_t bam_index_t; - - /*! - @abstract Build index for a BAM file. - @discussion Index file "fn.bai" will be created. - @param fn name of the BAM file - @return always 0 currently - */ - int bam_index_build(const char *fn); - - /*! - @abstract Load index from file "fn.bai". - @param fn name of the BAM file (NOT the index file) - @return pointer to the index structure - */ - bam_index_t *bam_index_load(const char *fn); - - /*! - @abstract Destroy an index structure. - @param idx pointer to the index structure - */ - void bam_index_destroy(bam_index_t *idx); - - /*! @typedef - @abstract Type of function to be called by bam_fetch(). - @param b the alignment - @param data user provided data - */ - typedef int (*bam_fetch_f)(const bam1_t *b, void *data); - - /*! - @abstract Retrieve the alignments that are overlapped with the - specified region. - - @discussion A user defined function will be called for each - retrieved alignment ordered by its start position. - - @param fp BAM file handler - @param idx pointer to the alignment index - @param tid chromosome ID as is defined in the header - @param beg start coordinate, 0-based - @param end end coordinate, 0-based - @param data user provided data (will be transferred to func) - @param func user defined function - */ - int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func); - - bam_iter_t bam_iter_query(const bam_index_t *idx, int tid, int beg, int end); - int bam_iter_read(bamFile fp, bam_iter_t iter, bam1_t *b); - void bam_iter_destroy(bam_iter_t iter); - - /*! - @abstract Parse a region in the format: "chr2:100,000-200,000". - @discussion bam_header_t::hash will be initialized if empty. - @param header pointer to the header structure - @param str string to be parsed - @param ref_id the returned chromosome ID - @param begin the returned start coordinate - @param end the returned end coordinate - @return 0 on success; -1 on failure - */ - int bam_parse_region(bam_header_t *header, const char *str, int *ref_id, int *begin, int *end); - - - /************************** - * APIs for optional tags * - **************************/ - - /*! - @abstract Retrieve data of a tag - @param b pointer to an alignment struct - @param tag two-character tag to be retrieved - - @return pointer to the type and data. The first character is the - type that can be 'iIsScCdfAZH'. - - @discussion Use bam_aux2?() series to convert the returned data to - the corresponding type. - */ - uint8_t *bam_aux_get(const bam1_t *b, const char tag[2]); - - int32_t bam_aux2i(const uint8_t *s); - float bam_aux2f(const uint8_t *s); - double bam_aux2d(const uint8_t *s); - char bam_aux2A(const uint8_t *s); - char *bam_aux2Z(const uint8_t *s); - - int bam_aux_del(bam1_t *b, uint8_t *s); - void bam_aux_append(bam1_t *b, const char tag[2], char type, int len, uint8_t *data); - uint8_t *bam_aux_get_core(bam1_t *b, const char tag[2]); // an alias of bam_aux_get() - - - /***************** - * Miscellaneous * - *****************/ - - /*! - @abstract Calculate the rightmost coordinate of an alignment on the - reference genome. - - @param c pointer to the bam1_core_t structure - @param cigar the corresponding CIGAR array (from bam1_t::cigar) - @return the rightmost coordinate, 0-based - */ - uint32_t bam_calend(const bam1_core_t *c, const uint32_t *cigar); - - /*! - @abstract Calculate the length of the query sequence from CIGAR. - @param c pointer to the bam1_core_t structure - @param cigar the corresponding CIGAR array (from bam1_t::cigar) - @return length of the query sequence - */ - int32_t bam_cigar2qlen(const bam1_core_t *c, const uint32_t *cigar); - -#ifdef __cplusplus -} -#endif - -/*! - @abstract Calculate the minimum bin that contains a region [beg,end). - @param beg start of the region, 0-based - @param end end of the region, 0-based - @return bin - */ -static inline int bam_reg2bin(uint32_t beg, uint32_t end) -{ - --end; - if (beg>>14 == end>>14) return 4681 + (beg>>14); - if (beg>>17 == end>>17) return 585 + (beg>>17); - if (beg>>20 == end>>20) return 73 + (beg>>20); - if (beg>>23 == end>>23) return 9 + (beg>>23); - if (beg>>26 == end>>26) return 1 + (beg>>26); - return 0; -} - -/*! - @abstract Copy an alignment - @param bdst destination alignment struct - @param bsrc source alignment struct - @return pointer to the destination alignment struct - */ -static inline bam1_t *bam_copy1(bam1_t *bdst, const bam1_t *bsrc) -{ - uint8_t *data = bdst->data; - int m_data = bdst->m_data; // backup data and m_data - if (m_data < bsrc->data_len) { // double the capacity - m_data = bsrc->data_len; kroundup32(m_data); - data = (uint8_t*)realloc(data, m_data); - } - memcpy(data, bsrc->data, bsrc->data_len); // copy var-len data - *bdst = *bsrc; // copy the rest - // restore the backup - bdst->m_data = m_data; - bdst->data = data; - return bdst; -} - -/*! - @abstract Duplicate an alignment - @param src source alignment struct - @return pointer to the destination alignment struct - */ -static inline bam1_t *bam_dup1(const bam1_t *src) -{ - bam1_t *b; - b = bam_init1(); - *b = *src; - b->m_data = b->data_len; - b->data = (uint8_t*)calloc(b->data_len, 1); - memcpy(b->data, src->data, b->data_len); - return b; -} - -static inline int bam_aux_type2size(int x) -{ - if (x == 'C' || x == 'c' || x == 'A') return 1; - else if (x == 'S' || x == 's') return 2; - else if (x == 'I' || x == 'i' || x == 'f' || x == 'F') return 4; - else return 0; -} - -/********************************* - *** Compatibility with htslib *** - *********************************/ - -typedef bam_header_t bam_hdr_t; - -#define bam_get_qname(b) bam1_qname(b) -#define bam_get_cigar(b) bam1_cigar(b) - -#define bam_hdr_read(fp) bam_header_read(fp) -#define bam_hdr_write(fp, h) bam_header_write(fp, h) -#define bam_hdr_destroy(fp) bam_header_destroy(fp) - -#endif diff --git a/clipper/samtools/bam_aux.c b/clipper/samtools/bam_aux.c deleted file mode 100644 index 28b22e3..0000000 --- a/clipper/samtools/bam_aux.c +++ /dev/null @@ -1,213 +0,0 @@ -#include -#include "bam.h" -#include "khash.h" -typedef char *str_p; -KHASH_MAP_INIT_STR(s, int) -KHASH_MAP_INIT_STR(r2l, str_p) - -void bam_aux_append(bam1_t *b, const char tag[2], char type, int len, uint8_t *data) -{ - int ori_len = b->data_len; - b->data_len += 3 + len; - b->l_aux += 3 + len; - if (b->m_data < b->data_len) { - b->m_data = b->data_len; - kroundup32(b->m_data); - b->data = (uint8_t*)realloc(b->data, b->m_data); - } - b->data[ori_len] = tag[0]; b->data[ori_len + 1] = tag[1]; - b->data[ori_len + 2] = type; - memcpy(b->data + ori_len + 3, data, len); -} - -uint8_t *bam_aux_get_core(bam1_t *b, const char tag[2]) -{ - return bam_aux_get(b, tag); -} - -#define __skip_tag(s) do { \ - int type = toupper(*(s)); \ - ++(s); \ - if (type == 'Z' || type == 'H') { while (*(s)) ++(s); ++(s); } \ - else if (type == 'B') (s) += 5 + bam_aux_type2size(*(s)) * (*(int32_t*)((s)+1)); \ - else (s) += bam_aux_type2size(type); \ - } while(0) - -uint8_t *bam_aux_get(const bam1_t *b, const char tag[2]) -{ - uint8_t *s; - int y = tag[0]<<8 | tag[1]; - s = bam1_aux(b); - while (s < b->data + b->data_len) { - int x = (int)s[0]<<8 | s[1]; - s += 2; - if (x == y) return s; - __skip_tag(s); - } - return 0; -} -// s MUST BE returned by bam_aux_get() -int bam_aux_del(bam1_t *b, uint8_t *s) -{ - uint8_t *p, *aux; - aux = bam1_aux(b); - p = s - 2; - __skip_tag(s); - memmove(p, s, b->l_aux - (s - aux)); - b->data_len -= s - p; - b->l_aux -= s - p; - return 0; -} - -int bam_aux_drop_other(bam1_t *b, uint8_t *s) -{ - if (s) { - uint8_t *p, *aux; - aux = bam1_aux(b); - p = s - 2; - __skip_tag(s); - memmove(aux, p, s - p); - b->data_len -= b->l_aux - (s - p); - b->l_aux = s - p; - } else { - b->data_len -= b->l_aux; - b->l_aux = 0; - } - return 0; -} - -void bam_init_header_hash(bam_header_t *header) -{ - if (header->hash == 0) { - int ret, i; - khiter_t iter; - khash_t(s) *h; - header->hash = h = kh_init(s); - for (i = 0; i < header->n_targets; ++i) { - iter = kh_put(s, h, header->target_name[i], &ret); - kh_value(h, iter) = i; - } - } -} - -void bam_destroy_header_hash(bam_header_t *header) -{ - if (header->hash) - kh_destroy(s, (khash_t(s)*)header->hash); -} - -int32_t bam_get_tid(const bam_header_t *header, const char *seq_name) -{ - khint_t k; - khash_t(s) *h = (khash_t(s)*)header->hash; - k = kh_get(s, h, seq_name); - return k == kh_end(h)? -1 : kh_value(h, k); -} - -int bam_parse_region(bam_header_t *header, const char *str, int *ref_id, int *beg, int *end) -{ - char *s; - int i, l, k, name_end; - khiter_t iter; - khash_t(s) *h; - - bam_init_header_hash(header); - h = (khash_t(s)*)header->hash; - - *ref_id = *beg = *end = -1; - name_end = l = strlen(str); - s = (char*)malloc(l+1); - // remove space - for (i = k = 0; i < l; ++i) - if (!isspace(str[i])) s[k++] = str[i]; - s[k] = 0; l = k; - // determine the sequence name - for (i = l - 1; i >= 0; --i) if (s[i] == ':') break; // look for colon from the end - if (i >= 0) name_end = i; - if (name_end < l) { // check if this is really the end - int n_hyphen = 0; - for (i = name_end + 1; i < l; ++i) { - if (s[i] == '-') ++n_hyphen; - else if (!isdigit(s[i]) && s[i] != ',') break; - } - if (i < l || n_hyphen > 1) name_end = l; // malformated region string; then take str as the name - s[name_end] = 0; - iter = kh_get(s, h, s); - if (iter == kh_end(h)) { // cannot find the sequence name - iter = kh_get(s, h, str); // try str as the name - if (iter == kh_end(h)) { - if (bam_verbose >= 2) fprintf(stderr, "[%s] fail to determine the sequence name.\n", __func__); - free(s); return -1; - } else s[name_end] = ':', name_end = l; - } - } else iter = kh_get(s, h, str); - *ref_id = kh_val(h, iter); - // parse the interval - if (name_end < l) { - for (i = k = name_end + 1; i < l; ++i) - if (s[i] != ',') s[k++] = s[i]; - s[k] = 0; - *beg = atoi(s + name_end + 1); - for (i = name_end + 1; i != k; ++i) if (s[i] == '-') break; - *end = i < k? atoi(s + i + 1) : 1<<29; - if (*beg > 0) --*beg; - } else *beg = 0, *end = 1<<29; - free(s); - return *beg <= *end? 0 : -1; -} - -int32_t bam_aux2i(const uint8_t *s) -{ - int type; - if (s == 0) return 0; - type = *s++; - if (type == 'c') return (int32_t)*(int8_t*)s; - else if (type == 'C') return (int32_t)*(uint8_t*)s; - else if (type == 's') return (int32_t)*(int16_t*)s; - else if (type == 'S') return (int32_t)*(uint16_t*)s; - else if (type == 'i' || type == 'I') return *(int32_t*)s; - else return 0; -} - -float bam_aux2f(const uint8_t *s) -{ - int type; - type = *s++; - if (s == 0) return 0.0; - if (type == 'f') return *(float*)s; - else return 0.0; -} - -double bam_aux2d(const uint8_t *s) -{ - int type; - type = *s++; - if (s == 0) return 0.0; - if (type == 'd') return *(double*)s; - else return 0.0; -} - -char bam_aux2A(const uint8_t *s) -{ - int type; - type = *s++; - if (s == 0) return 0; - if (type == 'A') return *(char*)s; - else return 0; -} - -char *bam_aux2Z(const uint8_t *s) -{ - int type; - type = *s++; - if (s == 0) return 0; - if (type == 'Z' || type == 'H') return (char*)s; - else return 0; -} - -#ifdef _WIN32 -double drand48() -{ - return (double)rand() / RAND_MAX; -} -#endif diff --git a/clipper/samtools/bam_cat.c b/clipper/samtools/bam_cat.c deleted file mode 100644 index a7502b9..0000000 --- a/clipper/samtools/bam_cat.c +++ /dev/null @@ -1,185 +0,0 @@ -/* - -bam_cat -- efficiently concatenates bam files - -bam_cat can be used to concatenate BAM files. Under special -circumstances, it can be used as an alternative to 'samtools merge' to -concatenate multiple sorted files into a single sorted file. For this -to work each file must be sorted, and the sorted files must be given -as command line arguments in order such that the final read in file i -is less than or equal to the first read in file i+1. - -This code is derived from the bam_reheader function in samtools 0.1.8 -and modified to perform concatenation by Chris Saunders on behalf of -Illumina. - - -########## License: - -The MIT License - -Original SAMtools work copyright (c) 2008-2009 Genome Research Ltd. -Modified SAMtools work copyright (c) 2010 Illumina, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - - -/* -makefile: -""" -CC=gcc -CFLAGS+=-g -Wall -O2 -D_FILE_OFFSET_BITS=64 -D_USE_KNETFILE -I$(SAMTOOLS_DIR) -LDFLAGS+=-L$(SAMTOOLS_DIR) -LDLIBS+=-lbam -lz - -all:bam_cat -""" -*/ - - -#include -#include -#include - -#include "knetfile.h" -#include "bgzf.h" -#include "bam.h" - -#define BUF_SIZE 0x10000 - -#define GZIPID1 31 -#define GZIPID2 139 - -#define BGZF_EMPTY_BLOCK_SIZE 28 - - -int bam_cat(int nfn, char * const *fn, const bam_header_t *h, const char* outbam) -{ - BGZF *fp; - FILE* fp_file; - uint8_t *buf; - uint8_t ebuf[BGZF_EMPTY_BLOCK_SIZE]; - const int es=BGZF_EMPTY_BLOCK_SIZE; - int i; - - fp = strcmp(outbam, "-")? bgzf_open(outbam, "w") : bgzf_fdopen(fileno(stdout), "w"); - if (fp == 0) { - fprintf(stderr, "[%s] ERROR: fail to open output file '%s'.\n", __func__, outbam); - return 1; - } - if (h) bam_header_write(fp, h); - - buf = (uint8_t*) malloc(BUF_SIZE); - for(i = 0; i < nfn; ++i){ - BGZF *in; - bam_header_t *old; - int len,j; - - in = strcmp(fn[i], "-")? bam_open(fn[i], "r") : bam_dopen(fileno(stdin), "r"); - if (in == 0) { - fprintf(stderr, "[%s] ERROR: fail to open file '%s'.\n", __func__, fn[i]); - return -1; - } - if (in->is_write) return -1; - - old = bam_header_read(in); - if (h == 0 && i == 0) bam_header_write(fp, old); - - if (in->block_offset < in->block_length) { - bgzf_write(fp, in->uncompressed_block + in->block_offset, in->block_length - in->block_offset); - bgzf_flush(fp); - } - - j=0; -#ifdef _USE_KNETFILE - fp_file = fp->fp; - while ((len = knet_read(in->fp, buf, BUF_SIZE)) > 0) { -#else - fp_file = fp->fp; - while (!feof(in->file) && (len = fread(buf, 1, BUF_SIZE, in->file)) > 0) { -#endif - if(len= 0) { - switch (c) { - case 'h': { - tamFile fph = sam_open(optarg); - if (fph == 0) { - fprintf(stderr, "[%s] ERROR: fail to read the header from '%s'.\n", __func__, argv[1]); - return 1; - } - h = sam_header_read(fph); - sam_close(fph); - break; - } - case 'o': outfn = strdup(optarg); break; - } - } - if (argc - optind < 2) { - fprintf(stderr, "Usage: samtools cat [-h header.sam] [-o out.bam] [...]\n"); - return 1; - } - ret = bam_cat(argc - optind, argv + optind, h, outfn? outfn : "-"); - free(outfn); - return ret; -} diff --git a/clipper/samtools/bam_endian.h b/clipper/samtools/bam_endian.h deleted file mode 100644 index 0fc74a8..0000000 --- a/clipper/samtools/bam_endian.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef BAM_ENDIAN_H -#define BAM_ENDIAN_H - -#include - -static inline int bam_is_big_endian() -{ - long one= 1; - return !(*((char *)(&one))); -} -static inline uint16_t bam_swap_endian_2(uint16_t v) -{ - return (uint16_t)(((v & 0x00FF00FFU) << 8) | ((v & 0xFF00FF00U) >> 8)); -} -static inline void *bam_swap_endian_2p(void *x) -{ - *(uint16_t*)x = bam_swap_endian_2(*(uint16_t*)x); - return x; -} -static inline uint32_t bam_swap_endian_4(uint32_t v) -{ - v = ((v & 0x0000FFFFU) << 16) | (v >> 16); - return ((v & 0x00FF00FFU) << 8) | ((v & 0xFF00FF00U) >> 8); -} -static inline void *bam_swap_endian_4p(void *x) -{ - *(uint32_t*)x = bam_swap_endian_4(*(uint32_t*)x); - return x; -} -static inline uint64_t bam_swap_endian_8(uint64_t v) -{ - v = ((v & 0x00000000FFFFFFFFLLU) << 32) | (v >> 32); - v = ((v & 0x0000FFFF0000FFFFLLU) << 16) | ((v & 0xFFFF0000FFFF0000LLU) >> 16); - return ((v & 0x00FF00FF00FF00FFLLU) << 8) | ((v & 0xFF00FF00FF00FF00LLU) >> 8); -} -static inline void *bam_swap_endian_8p(void *x) -{ - *(uint64_t*)x = bam_swap_endian_8(*(uint64_t*)x); - return x; -} - -#endif diff --git a/clipper/samtools/bam_import.c b/clipper/samtools/bam_import.c deleted file mode 100644 index da2bf94..0000000 --- a/clipper/samtools/bam_import.c +++ /dev/null @@ -1,489 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#ifdef _WIN32 -#include -#endif -#include "kstring.h" -#include "bam.h" -#include "sam_header.h" -#include "kseq.h" -#include "khash.h" - -KSTREAM_INIT(gzFile, gzread, 16384) -KHASH_MAP_INIT_STR(ref, uint64_t) - -void bam_init_header_hash(bam_header_t *header); -void bam_destroy_header_hash(bam_header_t *header); -int32_t bam_get_tid(const bam_header_t *header, const char *seq_name); - -unsigned char bam_nt16_table[256] = { - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 1, 2, 4, 8, 15,15,15,15, 15,15,15,15, 15, 0 /*=*/,15,15, - 15, 1,14, 2, 13,15,15, 4, 11,15,15,12, 15, 3,15,15, - 15,15, 5, 6, 8,15, 7, 9, 15,10,15,15, 15,15,15,15, - 15, 1,14, 2, 13,15,15, 4, 11,15,15,12, 15, 3,15,15, - 15,15, 5, 6, 8,15, 7, 9, 15,10,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15, - 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15 -}; - -unsigned short bam_char2flag_table[256] = { - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,BAM_FREAD1,BAM_FREAD2,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - BAM_FPROPER_PAIR,0,BAM_FMREVERSE,0, 0,BAM_FMUNMAP,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, BAM_FDUP,0,BAM_FQCFAIL,0, 0,0,0,0, 0,0,0,0, - BAM_FPAIRED,0,BAM_FREVERSE,BAM_FSECONDARY, 0,BAM_FUNMAP,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 -}; - -char *bam_nt16_rev_table = "=ACMGRSVTWYHKDBN"; - -struct __tamFile_t { - gzFile fp; - kstream_t *ks; - kstring_t *str; - uint64_t n_lines; - int is_first; -}; - -char **__bam_get_lines(const char *fn, int *_n) // for bam_plcmd.c only -{ - char **list = 0, *s; - int n = 0, dret, m = 0; - gzFile fp = (strcmp(fn, "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(fn, "r"); - kstream_t *ks; - kstring_t *str; - str = (kstring_t*)calloc(1, sizeof(kstring_t)); - ks = ks_init(fp); - while (ks_getuntil(ks, '\n', str, &dret) > 0) { - if (n == m) { - m = m? m << 1 : 16; - list = (char**)realloc(list, m * sizeof(char*)); - } - if (str->s[str->l-1] == '\r') - str->s[--str->l] = '\0'; - s = list[n++] = (char*)calloc(str->l + 1, 1); - strcpy(s, str->s); - } - ks_destroy(ks); - gzclose(fp); - free(str->s); free(str); - *_n = n; - return list; -} - -static bam_header_t *hash2header(const kh_ref_t *hash) -{ - bam_header_t *header; - khiter_t k; - header = bam_header_init(); - header->n_targets = kh_size(hash); - header->target_name = (char**)calloc(kh_size(hash), sizeof(char*)); - header->target_len = (uint32_t*)calloc(kh_size(hash), 4); - for (k = kh_begin(hash); k != kh_end(hash); ++k) { - if (kh_exist(hash, k)) { - int i = (int)kh_value(hash, k); - header->target_name[i] = (char*)kh_key(hash, k); - header->target_len[i] = kh_value(hash, k)>>32; - } - } - bam_init_header_hash(header); - return header; -} -bam_header_t *sam_header_read2(const char *fn) -{ - bam_header_t *header; - int c, dret, ret, error = 0; - gzFile fp; - kstream_t *ks; - kstring_t *str; - kh_ref_t *hash; - khiter_t k; - if (fn == 0) return 0; - fp = (strcmp(fn, "-") == 0)? gzdopen(fileno(stdin), "r") : gzopen(fn, "r"); - if (fp == 0) return 0; - hash = kh_init(ref); - ks = ks_init(fp); - str = (kstring_t*)calloc(1, sizeof(kstring_t)); - while (ks_getuntil(ks, 0, str, &dret) > 0) { - char *s = strdup(str->s); - int len, i; - i = kh_size(hash); - ks_getuntil(ks, 0, str, &dret); - len = atoi(str->s); - k = kh_put(ref, hash, s, &ret); - if (ret == 0) { - fprintf(stderr, "[sam_header_read2] duplicated sequence name: %s\n", s); - error = 1; - } - kh_value(hash, k) = (uint64_t)len<<32 | i; - if (dret != '\n') - while ((c = ks_getc(ks)) != '\n' && c != -1); - } - ks_destroy(ks); - gzclose(fp); - free(str->s); free(str); - fprintf(stderr, "[sam_header_read2] %d sequences loaded.\n", kh_size(hash)); - if (error) return 0; - header = hash2header(hash); - kh_destroy(ref, hash); - return header; -} -static inline uint8_t *alloc_data(bam1_t *b, int size) -{ - if (b->m_data < size) { - b->m_data = size; - kroundup32(b->m_data); - b->data = (uint8_t*)realloc(b->data, b->m_data); - } - return b->data; -} -static inline void parse_error(int64_t n_lines, const char * __restrict msg) -{ - fprintf(stderr, "Parse error at line %lld: %s\n", (long long)n_lines, msg); - abort(); -} -static inline void append_text(bam_header_t *header, kstring_t *str) -{ - size_t x = header->l_text, y = header->l_text + str->l + 2; // 2 = 1 byte dret + 1 byte null - kroundup32(x); kroundup32(y); - if (x < y) - { - header->n_text = y; - header->text = (char*)realloc(header->text, y); - if ( !header->text ) - { - fprintf(stderr,"realloc failed to alloc %ld bytes\n", y); - abort(); - } - } - // Sanity check - if ( header->l_text+str->l+1 >= header->n_text ) - { - fprintf(stderr,"append_text FIXME: %ld>=%ld, x=%ld,y=%ld\n", header->l_text+str->l+1,(long)header->n_text,x,y); - abort(); - } - strncpy(header->text + header->l_text, str->s, str->l+1); // we cannot use strcpy() here. - header->l_text += str->l + 1; - header->text[header->l_text] = 0; -} - -int sam_header_parse(bam_header_t *h) -{ - char **tmp; - int i; - free(h->target_len); free(h->target_name); - h->n_targets = 0; h->target_len = 0; h->target_name = 0; - if (h->l_text < 3) return 0; - if (h->dict == 0) h->dict = sam_header_parse2(h->text); - tmp = sam_header2list(h->dict, "SQ", "SN", &h->n_targets); - if (h->n_targets == 0) return 0; - h->target_name = calloc(h->n_targets, sizeof(void*)); - for (i = 0; i < h->n_targets; ++i) - h->target_name[i] = strdup(tmp[i]); - free(tmp); - tmp = sam_header2list(h->dict, "SQ", "LN", &h->n_targets); - h->target_len = calloc(h->n_targets, 4); - for (i = 0; i < h->n_targets; ++i) - h->target_len[i] = atoi(tmp[i]); - free(tmp); - return h->n_targets; -} - -bam_header_t *sam_header_read(tamFile fp) -{ - int ret, dret; - bam_header_t *header = bam_header_init(); - kstring_t *str = fp->str; - while ((ret = ks_getuntil(fp->ks, KS_SEP_TAB, str, &dret)) >= 0 && str->s[0] == '@') { // skip header - str->s[str->l] = dret; // note that str->s is NOT null terminated!! - append_text(header, str); - if (dret != '\n') { - ret = ks_getuntil(fp->ks, '\n', str, &dret); - str->s[str->l] = '\n'; // NOT null terminated!! - append_text(header, str); - } - ++fp->n_lines; - } - sam_header_parse(header); - bam_init_header_hash(header); - fp->is_first = 1; - return header; -} - -int sam_read1(tamFile fp, bam_header_t *header, bam1_t *b) -{ - int ret, doff, doff0, dret, z = 0; - bam1_core_t *c = &b->core; - kstring_t *str = fp->str; - kstream_t *ks = fp->ks; - - if (fp->is_first) { - fp->is_first = 0; - ret = str->l; - } else { - do { // special consideration for empty lines - ret = ks_getuntil(fp->ks, KS_SEP_TAB, str, &dret); - if (ret >= 0) z += str->l + 1; - } while (ret == 0); - } - if (ret < 0) return -1; - ++fp->n_lines; - doff = 0; - - { // name - c->l_qname = strlen(str->s) + 1; - memcpy(alloc_data(b, doff + c->l_qname) + doff, str->s, c->l_qname); - doff += c->l_qname; - } - { // flag - long flag; - char *s; - ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; - flag = strtol((char*)str->s, &s, 0); - if (*s) { // not the end of the string - flag = 0; - for (s = str->s; *s; ++s) - flag |= bam_char2flag_table[(int)*s]; - } - c->flag = flag; - } - { // tid, pos, qual - ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->tid = bam_get_tid(header, str->s); - if (c->tid < 0 && strcmp(str->s, "*")) { - if (header->n_targets == 0) { - fprintf(stderr, "[sam_read1] missing header? Abort!\n"); - exit(1); - } else fprintf(stderr, "[sam_read1] reference '%s' is recognized as '*'.\n", str->s); - } - ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->pos = isdigit(str->s[0])? atoi(str->s) - 1 : -1; - ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; c->qual = isdigit(str->s[0])? atoi(str->s) : 0; - if (ret < 0) return -2; - } - { // cigar - char *s, *t; - int i, op; - long x; - c->n_cigar = 0; - if (ks_getuntil(ks, KS_SEP_TAB, str, &dret) < 0) return -3; - z += str->l + 1; - if (str->s[0] != '*') { - uint32_t *cigar; - for (s = str->s; *s; ++s) { - if ((isalpha(*s)) || (*s=='=')) ++c->n_cigar; - else if (!isdigit(*s)) parse_error(fp->n_lines, "invalid CIGAR character"); - } - b->data = alloc_data(b, doff + c->n_cigar * 4); - cigar = bam1_cigar(b); - for (i = 0, s = str->s; i != c->n_cigar; ++i) { - x = strtol(s, &t, 10); - op = toupper(*t); - if (op == 'M') op = BAM_CMATCH; - else if (op == 'I') op = BAM_CINS; - else if (op == 'D') op = BAM_CDEL; - else if (op == 'N') op = BAM_CREF_SKIP; - else if (op == 'S') op = BAM_CSOFT_CLIP; - else if (op == 'H') op = BAM_CHARD_CLIP; - else if (op == 'P') op = BAM_CPAD; - else if (op == '=') op = BAM_CEQUAL; - else if (op == 'X') op = BAM_CDIFF; - else if (op == 'B') op = BAM_CBACK; - else parse_error(fp->n_lines, "invalid CIGAR operation"); - s = t + 1; - cigar[i] = bam_cigar_gen(x, op); - } - if (*s) parse_error(fp->n_lines, "unmatched CIGAR operation"); - c->bin = bam_reg2bin(c->pos, bam_calend(c, cigar)); - doff += c->n_cigar * 4; - } else { - if (!(c->flag&BAM_FUNMAP)) { - fprintf(stderr, "Parse warning at line %lld: mapped sequence without CIGAR\n", (long long)fp->n_lines); - c->flag |= BAM_FUNMAP; - } - c->bin = bam_reg2bin(c->pos, c->pos + 1); - } - } - { // mtid, mpos, isize - ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; - c->mtid = strcmp(str->s, "=")? bam_get_tid(header, str->s) : c->tid; - ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; - c->mpos = isdigit(str->s[0])? atoi(str->s) - 1 : -1; - ret = ks_getuntil(ks, KS_SEP_TAB, str, &dret); z += str->l + 1; - c->isize = (str->s[0] == '-' || isdigit(str->s[0]))? atoi(str->s) : 0; - if (ret < 0) return -4; - } - { // seq and qual - int i; - uint8_t *p = 0; - if (ks_getuntil(ks, KS_SEP_TAB, str, &dret) < 0) return -5; // seq - z += str->l + 1; - if (strcmp(str->s, "*")) { - c->l_qseq = strlen(str->s); - if (c->n_cigar && c->l_qseq != (int32_t)bam_cigar2qlen(c, bam1_cigar(b))) { - fprintf(stderr, "Line %ld, sequence length %i vs %i from CIGAR\n", - (long)fp->n_lines, c->l_qseq, (int32_t)bam_cigar2qlen(c, bam1_cigar(b))); - parse_error(fp->n_lines, "CIGAR and sequence length are inconsistent"); - } - p = (uint8_t*)alloc_data(b, doff + c->l_qseq + (c->l_qseq+1)/2) + doff; - memset(p, 0, (c->l_qseq+1)/2); - for (i = 0; i < c->l_qseq; ++i) - p[i/2] |= bam_nt16_table[(int)str->s[i]] << 4*(1-i%2); - } else c->l_qseq = 0; - if (ks_getuntil(ks, KS_SEP_TAB, str, &dret) < 0) return -6; // qual - z += str->l + 1; - if (strcmp(str->s, "*") && c->l_qseq != strlen(str->s)) - parse_error(fp->n_lines, "sequence and quality are inconsistent"); - p += (c->l_qseq+1)/2; - if (strcmp(str->s, "*") == 0) for (i = 0; i < c->l_qseq; ++i) p[i] = 0xff; - else for (i = 0; i < c->l_qseq; ++i) p[i] = str->s[i] - 33; - doff += c->l_qseq + (c->l_qseq+1)/2; - } - doff0 = doff; - if (dret != '\n' && dret != '\r') { // aux - while (ks_getuntil(ks, KS_SEP_TAB, str, &dret) >= 0) { - uint8_t *s, type, key[2]; - z += str->l + 1; - if (str->l < 6 || str->s[2] != ':' || str->s[4] != ':') - parse_error(fp->n_lines, "missing colon in auxiliary data"); - key[0] = str->s[0]; key[1] = str->s[1]; - type = str->s[3]; - s = alloc_data(b, doff + 3) + doff; - s[0] = key[0]; s[1] = key[1]; s += 2; doff += 2; - if (type == 'A' || type == 'a' || type == 'c' || type == 'C') { // c and C for backward compatibility - s = alloc_data(b, doff + 2) + doff; - *s++ = 'A'; *s = str->s[5]; - doff += 2; - } else if (type == 'I' || type == 'i') { - long long x; - s = alloc_data(b, doff + 5) + doff; - x = (long long)atoll(str->s + 5); - if (x < 0) { - if (x >= -127) { - *s++ = 'c'; *(int8_t*)s = (int8_t)x; - s += 1; doff += 2; - } else if (x >= -32767) { - *s++ = 's'; *(int16_t*)s = (int16_t)x; - s += 2; doff += 3; - } else { - *s++ = 'i'; *(int32_t*)s = (int32_t)x; - s += 4; doff += 5; - if (x < -2147483648ll) - fprintf(stderr, "Parse warning at line %lld: integer %lld is out of range.", - (long long)fp->n_lines, x); - } - } else { - if (x <= 255) { - *s++ = 'C'; *s++ = (uint8_t)x; - doff += 2; - } else if (x <= 65535) { - *s++ = 'S'; *(uint16_t*)s = (uint16_t)x; - s += 2; doff += 3; - } else { - *s++ = 'I'; *(uint32_t*)s = (uint32_t)x; - s += 4; doff += 5; - if (x > 4294967295ll) - fprintf(stderr, "Parse warning at line %lld: integer %lld is out of range.", - (long long)fp->n_lines, x); - } - } - } else if (type == 'f') { - s = alloc_data(b, doff + 5) + doff; - *s++ = 'f'; - *(float*)s = (float)atof(str->s + 5); - s += 4; doff += 5; - } else if (type == 'd') { - s = alloc_data(b, doff + 9) + doff; - *s++ = 'd'; - *(float*)s = (float)atof(str->s + 9); - s += 8; doff += 9; - } else if (type == 'Z' || type == 'H') { - int size = 1 + (str->l - 5) + 1; - if (type == 'H') { // check whether the hex string is valid - int i; - if ((str->l - 5) % 2 == 1) parse_error(fp->n_lines, "length of the hex string not even"); - for (i = 0; i < str->l - 5; ++i) { - int c = toupper(str->s[5 + i]); - if (!((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F'))) - parse_error(fp->n_lines, "invalid hex character"); - } - } - s = alloc_data(b, doff + size) + doff; - *s++ = type; - memcpy(s, str->s + 5, str->l - 5); - s[str->l - 5] = 0; - doff += size; - } else if (type == 'B') { - int32_t n = 0, Bsize, k = 0, size; - char *p; - if (str->l < 8) parse_error(fp->n_lines, "too few values in aux type B"); - Bsize = bam_aux_type2size(str->s[5]); // the size of each element - for (p = (char*)str->s + 6; *p; ++p) // count the number of elements in the array - if (*p == ',') ++n; - p = str->s + 7; // now p points to the first number in the array - size = 6 + Bsize * n; // total number of bytes allocated to this tag - s = alloc_data(b, doff + 6 * Bsize * n) + doff; // allocate memory - *s++ = 'B'; *s++ = str->s[5]; - memcpy(s, &n, 4); s += 4; // write the number of elements - if (str->s[5] == 'c') while (p < str->s + str->l) ((int8_t*)s)[k++] = (int8_t)strtol(p, &p, 0), ++p; - else if (str->s[5] == 'C') while (p < str->s + str->l) ((uint8_t*)s)[k++] = (uint8_t)strtol(p, &p, 0), ++p; - else if (str->s[5] == 's') while (p < str->s + str->l) ((int16_t*)s)[k++] = (int16_t)strtol(p, &p, 0), ++p; // FIXME: avoid unaligned memory - else if (str->s[5] == 'S') while (p < str->s + str->l) ((uint16_t*)s)[k++] = (uint16_t)strtol(p, &p, 0), ++p; - else if (str->s[5] == 'i') while (p < str->s + str->l) ((int32_t*)s)[k++] = (int32_t)strtol(p, &p, 0), ++p; - else if (str->s[5] == 'I') while (p < str->s + str->l) ((uint32_t*)s)[k++] = (uint32_t)strtol(p, &p, 0), ++p; - else if (str->s[5] == 'f') while (p < str->s + str->l) ((float*)s)[k++] = (float)strtod(p, &p), ++p; - else parse_error(fp->n_lines, "unrecognized array type"); - s += Bsize * n; doff += size; - } else parse_error(fp->n_lines, "unrecognized type"); - if (dret == '\n' || dret == '\r') break; - } - } - b->l_aux = doff - doff0; - b->data_len = doff; - if (bam_no_B) bam_remove_B(b); - return z; -} - -tamFile sam_open(const char *fn) -{ - tamFile fp; - gzFile gzfp = (strcmp(fn, "-") == 0)? gzdopen(fileno(stdin), "rb") : gzopen(fn, "rb"); - if (gzfp == 0) return 0; - fp = (tamFile)calloc(1, sizeof(struct __tamFile_t)); - fp->str = (kstring_t*)calloc(1, sizeof(kstring_t)); - fp->fp = gzfp; - fp->ks = ks_init(fp->fp); - return fp; -} - -void sam_close(tamFile fp) -{ - if (fp) { - ks_destroy(fp->ks); - gzclose(fp->fp); - free(fp->str->s); free(fp->str); - free(fp); - } -} diff --git a/clipper/samtools/bam_index.c b/clipper/samtools/bam_index.c deleted file mode 100644 index d6b94e2..0000000 --- a/clipper/samtools/bam_index.c +++ /dev/null @@ -1,724 +0,0 @@ -#include -#include -#include "bam.h" -#include "khash.h" -#include "ksort.h" -#include "bam_endian.h" -#ifdef _USE_KNETFILE -#include "knetfile.h" -#endif - -/*! - @header - - Alignment indexing. Before indexing, BAM must be sorted based on the - leftmost coordinate of alignments. In indexing, BAM uses two indices: - a UCSC binning index and a simple linear index. The binning index is - efficient for alignments spanning long distance, while the auxiliary - linear index helps to reduce unnecessary seek calls especially for - short alignments. - - The UCSC binning scheme was suggested by Richard Durbin and Lincoln - Stein and is explained by Kent et al. (2002). In this scheme, each bin - represents a contiguous genomic region which can be fully contained in - another bin; each alignment is associated with a bin which represents - the smallest region containing the entire alignment. The binning - scheme is essentially another representation of R-tree. A distinct bin - uniquely corresponds to a distinct internal node in a R-tree. Bin A is - a child of Bin B if region A is contained in B. - - In BAM, each bin may span 2^29, 2^26, 2^23, 2^20, 2^17 or 2^14 bp. Bin - 0 spans a 512Mbp region, bins 1-8 span 64Mbp, 9-72 8Mbp, 73-584 1Mbp, - 585-4680 128Kbp and bins 4681-37449 span 16Kbp regions. If we want to - find the alignments overlapped with a region [rbeg,rend), we need to - calculate the list of bins that may be overlapped the region and test - the alignments in the bins to confirm the overlaps. If the specified - region is short, typically only a few alignments in six bins need to - be retrieved. The overlapping alignments can be quickly fetched. - - */ - -#define BAM_MIN_CHUNK_GAP 32768 -// 1<<14 is the size of minimum bin. -#define BAM_LIDX_SHIFT 14 - -#define BAM_MAX_BIN 37450 // =(8^6-1)/7+1 - -typedef struct { - uint64_t u, v; -} pair64_t; - -#define pair64_lt(a,b) ((a).u < (b).u) -KSORT_INIT(off, pair64_t, pair64_lt) - -typedef struct { - uint32_t m, n; - pair64_t *list; -} bam_binlist_t; - -typedef struct { - int32_t n, m; - uint64_t *offset; -} bam_lidx_t; - -KHASH_MAP_INIT_INT(i, bam_binlist_t) - -struct __bam_index_t { - int32_t n; - uint64_t n_no_coor; // unmapped reads without coordinate - khash_t(i) **index; - bam_lidx_t *index2; -}; - -// requirement: len <= LEN_MASK -static inline void insert_offset(khash_t(i) *h, int bin, uint64_t beg, uint64_t end) -{ - khint_t k; - bam_binlist_t *l; - int ret; - k = kh_put(i, h, bin, &ret); - l = &kh_value(h, k); - if (ret) { // not present - l->m = 1; l->n = 0; - l->list = (pair64_t*)calloc(l->m, 16); - } - if (l->n == l->m) { - l->m <<= 1; - l->list = (pair64_t*)realloc(l->list, l->m * 16); - } - l->list[l->n].u = beg; l->list[l->n++].v = end; -} - -static inline void insert_offset2(bam_lidx_t *index2, bam1_t *b, uint64_t offset) -{ - int i, beg, end; - beg = b->core.pos >> BAM_LIDX_SHIFT; - end = (bam_calend(&b->core, bam1_cigar(b)) - 1) >> BAM_LIDX_SHIFT; - if (index2->m < end + 1) { - int old_m = index2->m; - index2->m = end + 1; - kroundup32(index2->m); - index2->offset = (uint64_t*)realloc(index2->offset, index2->m * 8); - memset(index2->offset + old_m, 0, 8 * (index2->m - old_m)); - } - if (beg == end) { - if (index2->offset[beg] == 0) index2->offset[beg] = offset; - } else { - for (i = beg; i <= end; ++i) - if (index2->offset[i] == 0) index2->offset[i] = offset; - } - index2->n = end + 1; -} - -static void merge_chunks(bam_index_t *idx) -{ -#if defined(BAM_TRUE_OFFSET) || defined(BAM_VIRTUAL_OFFSET16) - khash_t(i) *index; - int i, l, m; - khint_t k; - for (i = 0; i < idx->n; ++i) { - index = idx->index[i]; - for (k = kh_begin(index); k != kh_end(index); ++k) { - bam_binlist_t *p; - if (!kh_exist(index, k) || kh_key(index, k) == BAM_MAX_BIN) continue; - p = &kh_value(index, k); - m = 0; - for (l = 1; l < p->n; ++l) { -#ifdef BAM_TRUE_OFFSET - if (p->list[m].v + BAM_MIN_CHUNK_GAP > p->list[l].u) p->list[m].v = p->list[l].v; -#else - if (p->list[m].v>>16 == p->list[l].u>>16) p->list[m].v = p->list[l].v; -#endif - else p->list[++m] = p->list[l]; - } // ~for(l) - p->n = m + 1; - } // ~for(k) - } // ~for(i) -#endif // defined(BAM_TRUE_OFFSET) || defined(BAM_BGZF) -} - -static void fill_missing(bam_index_t *idx) -{ - int i, j; - for (i = 0; i < idx->n; ++i) { - bam_lidx_t *idx2 = &idx->index2[i]; - for (j = 1; j < idx2->n; ++j) - if (idx2->offset[j] == 0) - idx2->offset[j] = idx2->offset[j-1]; - } -} - -bam_index_t *bam_index_core(bamFile fp) -{ - bam1_t *b; - bam_header_t *h; - int i, ret; - bam_index_t *idx; - uint32_t last_bin, save_bin; - int32_t last_coor, last_tid, save_tid; - bam1_core_t *c; - uint64_t save_off, last_off, n_mapped, n_unmapped, off_beg, off_end, n_no_coor; - - h = bam_header_read(fp); - if(h == 0) { - fprintf(stderr, "[bam_index_core] Invalid BAM header."); - return NULL; - } - - idx = (bam_index_t*)calloc(1, sizeof(bam_index_t)); - b = (bam1_t*)calloc(1, sizeof(bam1_t)); - c = &b->core; - - idx->n = h->n_targets; - bam_header_destroy(h); - idx->index = (khash_t(i)**)calloc(idx->n, sizeof(void*)); - for (i = 0; i < idx->n; ++i) idx->index[i] = kh_init(i); - idx->index2 = (bam_lidx_t*)calloc(idx->n, sizeof(bam_lidx_t)); - - save_bin = save_tid = last_tid = last_bin = 0xffffffffu; - save_off = last_off = bam_tell(fp); last_coor = 0xffffffffu; - n_mapped = n_unmapped = n_no_coor = off_end = 0; - off_beg = off_end = bam_tell(fp); - while ((ret = bam_read1(fp, b)) >= 0) { - if (c->tid < 0) ++n_no_coor; - if (last_tid < c->tid || (last_tid >= 0 && c->tid < 0)) { // change of chromosomes - last_tid = c->tid; - last_bin = 0xffffffffu; - } else if ((uint32_t)last_tid > (uint32_t)c->tid) { - fprintf(stderr, "[bam_index_core] the alignment is not sorted (%s): %d-th chr > %d-th chr\n", - bam1_qname(b), last_tid+1, c->tid+1); - return NULL; - } else if ((int32_t)c->tid >= 0 && last_coor > c->pos) { - fprintf(stderr, "[bam_index_core] the alignment is not sorted (%s): %u > %u in %d-th chr\n", - bam1_qname(b), last_coor, c->pos, c->tid+1); - return NULL; - } - if (c->tid >= 0 && !(c->flag & BAM_FUNMAP)) insert_offset2(&idx->index2[b->core.tid], b, last_off); - if (c->bin != last_bin) { // then possibly write the binning index - if (save_bin != 0xffffffffu) // save_bin==0xffffffffu only happens to the first record - insert_offset(idx->index[save_tid], save_bin, save_off, last_off); - if (last_bin == 0xffffffffu && save_tid != 0xffffffffu) { // write the meta element - off_end = last_off; - insert_offset(idx->index[save_tid], BAM_MAX_BIN, off_beg, off_end); - insert_offset(idx->index[save_tid], BAM_MAX_BIN, n_mapped, n_unmapped); - n_mapped = n_unmapped = 0; - off_beg = off_end; - } - save_off = last_off; - save_bin = last_bin = c->bin; - save_tid = c->tid; - if (save_tid < 0) break; - } - if (bam_tell(fp) <= last_off) { - fprintf(stderr, "[bam_index_core] bug in BGZF/RAZF: %llx < %llx\n", - (unsigned long long)bam_tell(fp), (unsigned long long)last_off); - return NULL; - } - if (c->flag & BAM_FUNMAP) ++n_unmapped; - else ++n_mapped; - last_off = bam_tell(fp); - last_coor = b->core.pos; - } - if (save_tid >= 0) { - insert_offset(idx->index[save_tid], save_bin, save_off, bam_tell(fp)); - insert_offset(idx->index[save_tid], BAM_MAX_BIN, off_beg, bam_tell(fp)); - insert_offset(idx->index[save_tid], BAM_MAX_BIN, n_mapped, n_unmapped); - } - merge_chunks(idx); - fill_missing(idx); - if (ret >= 0) { - while ((ret = bam_read1(fp, b)) >= 0) { - ++n_no_coor; - if (c->tid >= 0 && n_no_coor) { - fprintf(stderr, "[bam_index_core] the alignment is not sorted: reads without coordinates prior to reads with coordinates.\n"); - return NULL; - } - } - } - if (ret < -1) fprintf(stderr, "[bam_index_core] truncated file? Continue anyway. (%d)\n", ret); - free(b->data); free(b); - idx->n_no_coor = n_no_coor; - return idx; -} - -void bam_index_destroy(bam_index_t *idx) -{ - khint_t k; - int i; - if (idx == 0) return; - for (i = 0; i < idx->n; ++i) { - khash_t(i) *index = idx->index[i]; - bam_lidx_t *index2 = idx->index2 + i; - for (k = kh_begin(index); k != kh_end(index); ++k) { - if (kh_exist(index, k)) - free(kh_value(index, k).list); - } - kh_destroy(i, index); - free(index2->offset); - } - free(idx->index); free(idx->index2); - free(idx); -} - -void bam_index_save(const bam_index_t *idx, FILE *fp) -{ - int32_t i, size; - khint_t k; - fwrite("BAI\1", 1, 4, fp); - if (bam_is_be) { - uint32_t x = idx->n; - fwrite(bam_swap_endian_4p(&x), 4, 1, fp); - } else fwrite(&idx->n, 4, 1, fp); - for (i = 0; i < idx->n; ++i) { - khash_t(i) *index = idx->index[i]; - bam_lidx_t *index2 = idx->index2 + i; - // write binning index - size = kh_size(index); - if (bam_is_be) { // big endian - uint32_t x = size; - fwrite(bam_swap_endian_4p(&x), 4, 1, fp); - } else fwrite(&size, 4, 1, fp); - for (k = kh_begin(index); k != kh_end(index); ++k) { - if (kh_exist(index, k)) { - bam_binlist_t *p = &kh_value(index, k); - if (bam_is_be) { // big endian - uint32_t x; - x = kh_key(index, k); fwrite(bam_swap_endian_4p(&x), 4, 1, fp); - x = p->n; fwrite(bam_swap_endian_4p(&x), 4, 1, fp); - for (x = 0; (int)x < p->n; ++x) { - bam_swap_endian_8p(&p->list[x].u); - bam_swap_endian_8p(&p->list[x].v); - } - fwrite(p->list, 16, p->n, fp); - for (x = 0; (int)x < p->n; ++x) { - bam_swap_endian_8p(&p->list[x].u); - bam_swap_endian_8p(&p->list[x].v); - } - } else { - fwrite(&kh_key(index, k), 4, 1, fp); - fwrite(&p->n, 4, 1, fp); - fwrite(p->list, 16, p->n, fp); - } - } - } - // write linear index (index2) - if (bam_is_be) { - int x = index2->n; - fwrite(bam_swap_endian_4p(&x), 4, 1, fp); - } else fwrite(&index2->n, 4, 1, fp); - if (bam_is_be) { // big endian - int x; - for (x = 0; (int)x < index2->n; ++x) - bam_swap_endian_8p(&index2->offset[x]); - fwrite(index2->offset, 8, index2->n, fp); - for (x = 0; (int)x < index2->n; ++x) - bam_swap_endian_8p(&index2->offset[x]); - } else fwrite(index2->offset, 8, index2->n, fp); - } - { // write the number of reads coor-less records. - uint64_t x = idx->n_no_coor; - if (bam_is_be) bam_swap_endian_8p(&x); - fwrite(&x, 8, 1, fp); - } - fflush(fp); -} - -static bam_index_t *bam_index_load_core(FILE *fp) -{ - int i; - char magic[4]; - bam_index_t *idx; - if (fp == 0) { - fprintf(stderr, "[bam_index_load_core] fail to load index.\n"); - return 0; - } - fread(magic, 1, 4, fp); - if (strncmp(magic, "BAI\1", 4)) { - fprintf(stderr, "[bam_index_load] wrong magic number.\n"); - fclose(fp); - return 0; - } - idx = (bam_index_t*)calloc(1, sizeof(bam_index_t)); - fread(&idx->n, 4, 1, fp); - if (bam_is_be) bam_swap_endian_4p(&idx->n); - idx->index = (khash_t(i)**)calloc(idx->n, sizeof(void*)); - idx->index2 = (bam_lidx_t*)calloc(idx->n, sizeof(bam_lidx_t)); - for (i = 0; i < idx->n; ++i) { - khash_t(i) *index; - bam_lidx_t *index2 = idx->index2 + i; - uint32_t key, size; - khint_t k; - int j, ret; - bam_binlist_t *p; - index = idx->index[i] = kh_init(i); - // load binning index - fread(&size, 4, 1, fp); - if (bam_is_be) bam_swap_endian_4p(&size); - for (j = 0; j < (int)size; ++j) { - fread(&key, 4, 1, fp); - if (bam_is_be) bam_swap_endian_4p(&key); - k = kh_put(i, index, key, &ret); - p = &kh_value(index, k); - fread(&p->n, 4, 1, fp); - if (bam_is_be) bam_swap_endian_4p(&p->n); - p->m = p->n; - p->list = (pair64_t*)malloc(p->m * 16); - fread(p->list, 16, p->n, fp); - if (bam_is_be) { - int x; - for (x = 0; x < p->n; ++x) { - bam_swap_endian_8p(&p->list[x].u); - bam_swap_endian_8p(&p->list[x].v); - } - } - } - // load linear index - fread(&index2->n, 4, 1, fp); - if (bam_is_be) bam_swap_endian_4p(&index2->n); - index2->m = index2->n; - index2->offset = (uint64_t*)calloc(index2->m, 8); - fread(index2->offset, index2->n, 8, fp); - if (bam_is_be) - for (j = 0; j < index2->n; ++j) bam_swap_endian_8p(&index2->offset[j]); - } - if (fread(&idx->n_no_coor, 8, 1, fp) == 0) idx->n_no_coor = 0; - if (bam_is_be) bam_swap_endian_8p(&idx->n_no_coor); - return idx; -} - -bam_index_t *bam_index_load_local(const char *_fn) -{ - FILE *fp; - char *fnidx, *fn; - - if (strstr(_fn, "ftp://") == _fn || strstr(_fn, "http://") == _fn) { - const char *p; - int l = strlen(_fn); - for (p = _fn + l - 1; p >= _fn; --p) - if (*p == '/') break; - fn = strdup(p + 1); - } else fn = strdup(_fn); - fnidx = (char*)calloc(strlen(fn) + 5, 1); - strcpy(fnidx, fn); strcat(fnidx, ".bai"); - fp = fopen(fnidx, "rb"); - if (fp == 0) { // try "{base}.bai" - char *s = strstr(fn, "bam"); - if (s == fn + strlen(fn) - 3) { - strcpy(fnidx, fn); - fnidx[strlen(fn)-1] = 'i'; - fp = fopen(fnidx, "rb"); - } - } - free(fnidx); free(fn); - if (fp) { - bam_index_t *idx = bam_index_load_core(fp); - fclose(fp); - return idx; - } else return 0; -} - -#ifdef _USE_KNETFILE -static void download_from_remote(const char *url) -{ - const int buf_size = 1 * 1024 * 1024; - char *fn; - FILE *fp; - uint8_t *buf; - knetFile *fp_remote; - int l; - if (strstr(url, "ftp://") != url && strstr(url, "http://") != url) return; - l = strlen(url); - for (fn = (char*)url + l - 1; fn >= url; --fn) - if (*fn == '/') break; - ++fn; // fn now points to the file name - fp_remote = knet_open(url, "r"); - if (fp_remote == 0) { - fprintf(stderr, "[download_from_remote] fail to open remote file.\n"); - return; - } - if ((fp = fopen(fn, "wb")) == 0) { - fprintf(stderr, "[download_from_remote] fail to create file in the working directory.\n"); - knet_close(fp_remote); - return; - } - buf = (uint8_t*)calloc(buf_size, 1); - while ((l = knet_read(fp_remote, buf, buf_size)) != 0) - fwrite(buf, 1, l, fp); - free(buf); - fclose(fp); - knet_close(fp_remote); -} -#else -static void download_from_remote(const char *url) -{ - return; -} -#endif - -bam_index_t *bam_index_load(const char *fn) -{ - bam_index_t *idx; - idx = bam_index_load_local(fn); - if (idx == 0 && (strstr(fn, "ftp://") == fn || strstr(fn, "http://") == fn)) { - char *fnidx = calloc(strlen(fn) + 5, 1); - strcat(strcpy(fnidx, fn), ".bai"); - fprintf(stderr, "[bam_index_load] attempting to download the remote index file.\n"); - download_from_remote(fnidx); - idx = bam_index_load_local(fn); - } - if (idx == 0) fprintf(stderr, "[bam_index_load] fail to load BAM index.\n"); - return idx; -} - -int bam_index_build2(const char *fn, const char *_fnidx) -{ - char *fnidx; - FILE *fpidx; - bamFile fp; - bam_index_t *idx; - if ((fp = bam_open(fn, "r")) == 0) { - fprintf(stderr, "[bam_index_build2] fail to open the BAM file.\n"); - return -1; - } - idx = bam_index_core(fp); - bam_close(fp); - if(idx == 0) { - fprintf(stderr, "[bam_index_build2] fail to index the BAM file.\n"); - return -1; - } - if (_fnidx == 0) { - fnidx = (char*)calloc(strlen(fn) + 5, 1); - strcpy(fnidx, fn); strcat(fnidx, ".bai"); - } else fnidx = strdup(_fnidx); - fpidx = fopen(fnidx, "wb"); - if (fpidx == 0) { - fprintf(stderr, "[bam_index_build2] fail to create the index file.\n"); - free(fnidx); - return -1; - } - bam_index_save(idx, fpidx); - bam_index_destroy(idx); - fclose(fpidx); - free(fnidx); - return 0; -} - -int bam_index_build(const char *fn) -{ - return bam_index_build2(fn, 0); -} - -int bam_index(int argc, char *argv[]) -{ - if (argc < 2) { - fprintf(stderr, "Usage: samtools index [out.index]\n"); - return 1; - } - if (argc >= 3) bam_index_build2(argv[1], argv[2]); - else bam_index_build(argv[1]); - return 0; -} - -int bam_idxstats(int argc, char *argv[]) -{ - bam_index_t *idx; - bam_header_t *header; - bamFile fp; - int i; - if (argc < 2) { - fprintf(stderr, "Usage: samtools idxstats \n"); - return 1; - } - fp = bam_open(argv[1], "r"); - if (fp == 0) { fprintf(stderr, "[%s] fail to open BAM.\n", __func__); return 1; } - header = bam_header_read(fp); - bam_close(fp); - idx = bam_index_load(argv[1]); - if (idx == 0) { fprintf(stderr, "[%s] fail to load the index.\n", __func__); return 1; } - for (i = 0; i < idx->n; ++i) { - khint_t k; - khash_t(i) *h = idx->index[i]; - printf("%s\t%d", header->target_name[i], header->target_len[i]); - k = kh_get(i, h, BAM_MAX_BIN); - if (k != kh_end(h)) - printf("\t%llu\t%llu", (long long)kh_val(h, k).list[1].u, (long long)kh_val(h, k).list[1].v); - else printf("\t0\t0"); - putchar('\n'); - } - printf("*\t0\t0\t%llu\n", (long long)idx->n_no_coor); - bam_header_destroy(header); - bam_index_destroy(idx); - return 0; -} - -static inline int reg2bins(uint32_t beg, uint32_t end, uint16_t list[BAM_MAX_BIN]) -{ - int i = 0, k; - if (beg >= end) return 0; - if (end >= 1u<<29) end = 1u<<29; - --end; - list[i++] = 0; - for (k = 1 + (beg>>26); k <= 1 + (end>>26); ++k) list[i++] = k; - for (k = 9 + (beg>>23); k <= 9 + (end>>23); ++k) list[i++] = k; - for (k = 73 + (beg>>20); k <= 73 + (end>>20); ++k) list[i++] = k; - for (k = 585 + (beg>>17); k <= 585 + (end>>17); ++k) list[i++] = k; - for (k = 4681 + (beg>>14); k <= 4681 + (end>>14); ++k) list[i++] = k; - return i; -} - -static inline int is_overlap(uint32_t beg, uint32_t end, const bam1_t *b) -{ - uint32_t rbeg = b->core.pos; - uint32_t rend = b->core.n_cigar? bam_calend(&b->core, bam1_cigar(b)) : b->core.pos + 1; - return (rend > beg && rbeg < end); -} - -struct __bam_iter_t { - int from_first; // read from the first record; no random access - int tid, beg, end, n_off, i, finished; - uint64_t curr_off; - pair64_t *off; -}; - -// bam_fetch helper function retrieves -bam_iter_t bam_iter_query(const bam_index_t *idx, int tid, int beg, int end) -{ - uint16_t *bins; - int i, n_bins, n_off; - pair64_t *off; - khint_t k; - khash_t(i) *index; - uint64_t min_off; - bam_iter_t iter = 0; - - if (beg < 0) beg = 0; - if (end < beg) return 0; - // initialize iter - iter = calloc(1, sizeof(struct __bam_iter_t)); - iter->tid = tid, iter->beg = beg, iter->end = end; iter->i = -1; - // - bins = (uint16_t*)calloc(BAM_MAX_BIN, 2); - n_bins = reg2bins(beg, end, bins); - index = idx->index[tid]; - if (idx->index2[tid].n > 0) { - min_off = (beg>>BAM_LIDX_SHIFT >= idx->index2[tid].n)? idx->index2[tid].offset[idx->index2[tid].n-1] - : idx->index2[tid].offset[beg>>BAM_LIDX_SHIFT]; - if (min_off == 0) { // improvement for index files built by tabix prior to 0.1.4 - int n = beg>>BAM_LIDX_SHIFT; - if (n > idx->index2[tid].n) n = idx->index2[tid].n; - for (i = n - 1; i >= 0; --i) - if (idx->index2[tid].offset[i] != 0) break; - if (i >= 0) min_off = idx->index2[tid].offset[i]; - } - } else min_off = 0; // tabix 0.1.2 may produce such index files - for (i = n_off = 0; i < n_bins; ++i) { - if ((k = kh_get(i, index, bins[i])) != kh_end(index)) - n_off += kh_value(index, k).n; - } - if (n_off == 0) { - free(bins); return iter; - } - off = (pair64_t*)calloc(n_off, 16); - for (i = n_off = 0; i < n_bins; ++i) { - if ((k = kh_get(i, index, bins[i])) != kh_end(index)) { - int j; - bam_binlist_t *p = &kh_value(index, k); - for (j = 0; j < p->n; ++j) - if (p->list[j].v > min_off) off[n_off++] = p->list[j]; - } - } - free(bins); - if (n_off == 0) { - free(off); return iter; - } - { - bam1_t *b = (bam1_t*)calloc(1, sizeof(bam1_t)); - int l; - ks_introsort(off, n_off, off); - // resolve completely contained adjacent blocks - for (i = 1, l = 0; i < n_off; ++i) - if (off[l].v < off[i].v) - off[++l] = off[i]; - n_off = l + 1; - // resolve overlaps between adjacent blocks; this may happen due to the merge in indexing - for (i = 1; i < n_off; ++i) - if (off[i-1].v >= off[i].u) off[i-1].v = off[i].u; - { // merge adjacent blocks -#if defined(BAM_TRUE_OFFSET) || defined(BAM_VIRTUAL_OFFSET16) - for (i = 1, l = 0; i < n_off; ++i) { -#ifdef BAM_TRUE_OFFSET - if (off[l].v + BAM_MIN_CHUNK_GAP > off[i].u) off[l].v = off[i].v; -#else - if (off[l].v>>16 == off[i].u>>16) off[l].v = off[i].v; -#endif - else off[++l] = off[i]; - } - n_off = l + 1; -#endif - } - bam_destroy1(b); - } - iter->n_off = n_off; iter->off = off; - return iter; -} - -pair64_t *get_chunk_coordinates(const bam_index_t *idx, int tid, int beg, int end, int *cnt_off) -{ // for pysam compatibility - bam_iter_t iter; - pair64_t *off; - iter = bam_iter_query(idx, tid, beg, end); - off = iter->off; *cnt_off = iter->n_off; - free(iter); - return off; -} - -void bam_iter_destroy(bam_iter_t iter) -{ - if (iter) { free(iter->off); free(iter); } -} - -int bam_iter_read(bamFile fp, bam_iter_t iter, bam1_t *b) -{ - int ret; - if (iter && iter->finished) return -1; - if (iter == 0 || iter->from_first) { - ret = bam_read1(fp, b); - if (ret < 0 && iter) iter->finished = 1; - return ret; - } - if (iter->off == 0) return -1; - for (;;) { - if (iter->curr_off == 0 || iter->curr_off >= iter->off[iter->i].v) { // then jump to the next chunk - if (iter->i == iter->n_off - 1) { ret = -1; break; } // no more chunks - if (iter->i >= 0) assert(iter->curr_off == iter->off[iter->i].v); // otherwise bug - if (iter->i < 0 || iter->off[iter->i].v != iter->off[iter->i+1].u) { // not adjacent chunks; then seek - bam_seek(fp, iter->off[iter->i+1].u, SEEK_SET); - iter->curr_off = bam_tell(fp); - } - ++iter->i; - } - if ((ret = bam_read1(fp, b)) >= 0) { - iter->curr_off = bam_tell(fp); - if (b->core.tid != iter->tid || b->core.pos >= iter->end) { // no need to proceed - ret = bam_validate1(NULL, b)? -1 : -5; // determine whether end of region or error - break; - } - else if (is_overlap(iter->beg, iter->end, b)) return ret; - } else break; // end of file or error - } - iter->finished = 1; - return ret; -} - -int bam_fetch(bamFile fp, const bam_index_t *idx, int tid, int beg, int end, void *data, bam_fetch_f func) -{ - int ret; - bam_iter_t iter; - bam1_t *b; - b = bam_init1(); - iter = bam_iter_query(idx, tid, beg, end); - while ((ret = bam_iter_read(fp, iter, b)) >= 0) func(b, data); - bam_iter_destroy(iter); - bam_destroy1(b); - return (ret == -1)? 0 : ret; -} diff --git a/clipper/samtools/bam_lpileup.c b/clipper/samtools/bam_lpileup.c deleted file mode 100644 index d4dd63b..0000000 --- a/clipper/samtools/bam_lpileup.c +++ /dev/null @@ -1,198 +0,0 @@ -#include -#include -#include -#include "bam.h" -#include "ksort.h" - -#define TV_GAP 2 - -typedef struct __freenode_t { - uint32_t level:28, cnt:4; - struct __freenode_t *next; -} freenode_t, *freenode_p; - -#define freenode_lt(a,b) ((a)->cnt < (b)->cnt || ((a)->cnt == (b)->cnt && (a)->level < (b)->level)) -KSORT_INIT(node, freenode_p, freenode_lt) - -/* Memory pool, similar to the one in bam_pileup.c */ -typedef struct { - int cnt, n, max; - freenode_t **buf; -} mempool_t; - -static mempool_t *mp_init() -{ - return (mempool_t*)calloc(1, sizeof(mempool_t)); -} -static void mp_destroy(mempool_t *mp) -{ - int k; - for (k = 0; k < mp->n; ++k) free(mp->buf[k]); - free(mp->buf); free(mp); -} -static inline freenode_t *mp_alloc(mempool_t *mp) -{ - ++mp->cnt; - if (mp->n == 0) return (freenode_t*)calloc(1, sizeof(freenode_t)); - else return mp->buf[--mp->n]; -} -static inline void mp_free(mempool_t *mp, freenode_t *p) -{ - --mp->cnt; p->next = 0; p->cnt = TV_GAP; - if (mp->n == mp->max) { - mp->max = mp->max? mp->max<<1 : 256; - mp->buf = (freenode_t**)realloc(mp->buf, sizeof(freenode_t*) * mp->max); - } - mp->buf[mp->n++] = p; -} - -/* core part */ -struct __bam_lplbuf_t { - int max, n_cur, n_pre; - int max_level, *cur_level, *pre_level; - mempool_t *mp; - freenode_t **aux, *head, *tail; - int n_nodes, m_aux; - bam_pileup_f func; - void *user_data; - bam_plbuf_t *plbuf; -}; - -void bam_lplbuf_reset(bam_lplbuf_t *buf) -{ - freenode_t *p, *q; - bam_plbuf_reset(buf->plbuf); - for (p = buf->head; p->next;) { - q = p->next; - mp_free(buf->mp, p); - p = q; - } - buf->head = buf->tail; - buf->max_level = 0; - buf->n_cur = buf->n_pre = 0; - buf->n_nodes = 0; -} - -static int tview_func(uint32_t tid, uint32_t pos, int n, const bam_pileup1_t *pl, void *data) -{ - bam_lplbuf_t *tv = (bam_lplbuf_t*)data; - freenode_t *p; - int i, l, max_level; - // allocate memory if necessary - if (tv->max < n) { // enlarge - tv->max = n; - kroundup32(tv->max); - tv->cur_level = (int*)realloc(tv->cur_level, sizeof(int) * tv->max); - tv->pre_level = (int*)realloc(tv->pre_level, sizeof(int) * tv->max); - } - tv->n_cur = n; - // update cnt - for (p = tv->head; p->next; p = p->next) - if (p->cnt > 0) --p->cnt; - // calculate cur_level[] - max_level = 0; - for (i = l = 0; i < n; ++i) { - const bam_pileup1_t *p = pl + i; - if (p->is_head) { - if (tv->head->next && tv->head->cnt == 0) { // then take a free slot - freenode_t *p = tv->head->next; - tv->cur_level[i] = tv->head->level; - mp_free(tv->mp, tv->head); - tv->head = p; - --tv->n_nodes; - } else tv->cur_level[i] = ++tv->max_level; - } else { - tv->cur_level[i] = tv->pre_level[l++]; - if (p->is_tail) { // then return a free slot - tv->tail->level = tv->cur_level[i]; - tv->tail->next = mp_alloc(tv->mp); - tv->tail = tv->tail->next; - ++tv->n_nodes; - } - } - if (tv->cur_level[i] > max_level) max_level = tv->cur_level[i]; - ((bam_pileup1_t*)p)->level = tv->cur_level[i]; - } - assert(l == tv->n_pre); - tv->func(tid, pos, n, pl, tv->user_data); - // sort the linked list - if (tv->n_nodes) { - freenode_t *q; - if (tv->n_nodes + 1 > tv->m_aux) { // enlarge - tv->m_aux = tv->n_nodes + 1; - kroundup32(tv->m_aux); - tv->aux = (freenode_t**)realloc(tv->aux, sizeof(void*) * tv->m_aux); - } - for (p = tv->head, i = l = 0; p->next;) { - if (p->level > max_level) { // then discard this entry - q = p->next; - mp_free(tv->mp, p); - p = q; - } else { - tv->aux[i++] = p; - p = p->next; - } - } - tv->aux[i] = tv->tail; // add a proper tail for the loop below - tv->n_nodes = i; - if (tv->n_nodes) { - ks_introsort(node, tv->n_nodes, tv->aux); - for (i = 0; i < tv->n_nodes; ++i) tv->aux[i]->next = tv->aux[i+1]; - tv->head = tv->aux[0]; - } else tv->head = tv->tail; - } - // clean up - tv->max_level = max_level; - memcpy(tv->pre_level, tv->cur_level, tv->n_cur * 4); - // squeeze out terminated levels - for (i = l = 0; i < n; ++i) { - const bam_pileup1_t *p = pl + i; - if (!p->is_tail) - tv->pre_level[l++] = tv->pre_level[i]; - } - tv->n_pre = l; -/* - fprintf(stderr, "%d\t", pos+1); - for (i = 0; i < n; ++i) { - const bam_pileup1_t *p = pl + i; - if (p->is_head) fprintf(stderr, "^"); - if (p->is_tail) fprintf(stderr, "$"); - fprintf(stderr, "%d,", p->level); - } - fprintf(stderr, "\n"); -*/ - return 0; -} - -bam_lplbuf_t *bam_lplbuf_init(bam_pileup_f func, void *data) -{ - bam_lplbuf_t *tv; - tv = (bam_lplbuf_t*)calloc(1, sizeof(bam_lplbuf_t)); - tv->mp = mp_init(); - tv->head = tv->tail = mp_alloc(tv->mp); - tv->func = func; - tv->user_data = data; - tv->plbuf = bam_plbuf_init(tview_func, tv); - return (bam_lplbuf_t*)tv; -} - -void bam_lplbuf_destroy(bam_lplbuf_t *tv) -{ - freenode_t *p, *q; - free(tv->cur_level); free(tv->pre_level); - bam_plbuf_destroy(tv->plbuf); - free(tv->aux); - for (p = tv->head; p->next;) { - q = p->next; - mp_free(tv->mp, p); p = q; - } - mp_free(tv->mp, p); - assert(tv->mp->cnt == 0); - mp_destroy(tv->mp); - free(tv); -} - -int bam_lplbuf_push(const bam1_t *b, bam_lplbuf_t *tv) -{ - return bam_plbuf_push(b, tv->plbuf); -} diff --git a/clipper/samtools/bam_md.c b/clipper/samtools/bam_md.c deleted file mode 100644 index ce40a12..0000000 --- a/clipper/samtools/bam_md.c +++ /dev/null @@ -1,389 +0,0 @@ -#include -#include -#include -#include -#include -#include "faidx.h" -#include "sam.h" -#include "kstring.h" -#include "kaln.h" -#include "kprobaln.h" - -#define USE_EQUAL 1 -#define DROP_TAG 2 -#define BIN_QUAL 4 -#define UPDATE_NM 8 -#define UPDATE_MD 16 -#define HASH_QNM 32 - -char bam_nt16_nt4_table[] = { 4, 0, 1, 4, 2, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4 }; - -int bam_aux_drop_other(bam1_t *b, uint8_t *s); - -void bam_fillmd1_core(bam1_t *b, char *ref, int flag, int max_nm) -{ - uint8_t *seq = bam1_seq(b); - uint32_t *cigar = bam1_cigar(b); - bam1_core_t *c = &b->core; - int i, x, y, u = 0; - kstring_t *str; - int32_t old_nm_i = -1, nm = 0; - - str = (kstring_t*)calloc(1, sizeof(kstring_t)); - for (i = y = 0, x = c->pos; i < c->n_cigar; ++i) { - int j, l = cigar[i]>>4, op = cigar[i]&0xf; - if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { - for (j = 0; j < l; ++j) { - int z = y + j; - int c1 = bam1_seqi(seq, z), c2 = bam_nt16_table[(int)ref[x+j]]; - if (ref[x+j] == 0) break; // out of boundary - if ((c1 == c2 && c1 != 15 && c2 != 15) || c1 == 0) { // a match - if (flag&USE_EQUAL) seq[z/2] &= (z&1)? 0xf0 : 0x0f; - ++u; - } else { - kputw(u, str); kputc(ref[x+j], str); - u = 0; ++nm; - } - } - if (j < l) break; - x += l; y += l; - } else if (op == BAM_CDEL) { - kputw(u, str); kputc('^', str); - for (j = 0; j < l; ++j) { - if (ref[x+j] == 0) break; - kputc(ref[x+j], str); - } - u = 0; - if (j < l) break; - x += l; nm += l; - } else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) { - y += l; - if (op == BAM_CINS) nm += l; - } else if (op == BAM_CREF_SKIP) { - x += l; - } - } - kputw(u, str); - // apply max_nm - if (max_nm > 0 && nm >= max_nm) { - for (i = y = 0, x = c->pos; i < c->n_cigar; ++i) { - int j, l = cigar[i]>>4, op = cigar[i]&0xf; - if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { - for (j = 0; j < l; ++j) { - int z = y + j; - int c1 = bam1_seqi(seq, z), c2 = bam_nt16_table[(int)ref[x+j]]; - if (ref[x+j] == 0) break; // out of boundary - if ((c1 == c2 && c1 != 15 && c2 != 15) || c1 == 0) { // a match - seq[z/2] |= (z&1)? 0x0f : 0xf0; - bam1_qual(b)[z] = 0; - } - } - if (j < l) break; - x += l; y += l; - } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) x += l; - else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) y += l; - } - } - // update NM - if (flag & UPDATE_NM) { - uint8_t *old_nm = bam_aux_get(b, "NM"); - if (c->flag & BAM_FUNMAP) return; - if (old_nm) old_nm_i = bam_aux2i(old_nm); - if (!old_nm) bam_aux_append(b, "NM", 'i', 4, (uint8_t*)&nm); - else if (nm != old_nm_i) { - fprintf(stderr, "[bam_fillmd1] different NM for read '%s': %d -> %d\n", bam1_qname(b), old_nm_i, nm); - bam_aux_del(b, old_nm); - bam_aux_append(b, "NM", 'i', 4, (uint8_t*)&nm); - } - } - // update MD - if (flag & UPDATE_MD) { - uint8_t *old_md = bam_aux_get(b, "MD"); - if (c->flag & BAM_FUNMAP) return; - if (!old_md) bam_aux_append(b, "MD", 'Z', str->l + 1, (uint8_t*)str->s); - else { - int is_diff = 0; - if (strlen((char*)old_md+1) == str->l) { - for (i = 0; i < str->l; ++i) - if (toupper(old_md[i+1]) != toupper(str->s[i])) - break; - if (i < str->l) is_diff = 1; - } else is_diff = 1; - if (is_diff) { - fprintf(stderr, "[bam_fillmd1] different MD for read '%s': '%s' -> '%s'\n", bam1_qname(b), old_md+1, str->s); - bam_aux_del(b, old_md); - bam_aux_append(b, "MD", 'Z', str->l + 1, (uint8_t*)str->s); - } - } - } - // drop all tags but RG - if (flag&DROP_TAG) { - uint8_t *q = bam_aux_get(b, "RG"); - bam_aux_drop_other(b, q); - } - // reduce the resolution of base quality - if (flag&BIN_QUAL) { - uint8_t *qual = bam1_qual(b); - for (i = 0; i < b->core.l_qseq; ++i) - if (qual[i] >= 3) qual[i] = qual[i]/10*10 + 7; - } - free(str->s); free(str); -} - -void bam_fillmd1(bam1_t *b, char *ref, int flag) -{ - bam_fillmd1_core(b, ref, flag, 0); -} - -int bam_cap_mapQ(bam1_t *b, char *ref, int thres) -{ - uint8_t *seq = bam1_seq(b), *qual = bam1_qual(b); - uint32_t *cigar = bam1_cigar(b); - bam1_core_t *c = &b->core; - int i, x, y, mm, q, len, clip_l, clip_q; - double t; - if (thres < 0) thres = 40; // set the default - mm = q = len = clip_l = clip_q = 0; - for (i = y = 0, x = c->pos; i < c->n_cigar; ++i) { - int j, l = cigar[i]>>4, op = cigar[i]&0xf; - if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { - for (j = 0; j < l; ++j) { - int z = y + j; - int c1 = bam1_seqi(seq, z), c2 = bam_nt16_table[(int)ref[x+j]]; - if (ref[x+j] == 0) break; // out of boundary - if (c2 != 15 && c1 != 15 && qual[z] >= 13) { // not ambiguous - ++len; - if (c1 && c1 != c2 && qual[z] >= 13) { // mismatch - ++mm; - q += qual[z] > 33? 33 : qual[z]; - } - } - } - if (j < l) break; - x += l; y += l; len += l; - } else if (op == BAM_CDEL) { - for (j = 0; j < l; ++j) - if (ref[x+j] == 0) break; - if (j < l) break; - x += l; - } else if (op == BAM_CSOFT_CLIP) { - for (j = 0; j < l; ++j) clip_q += qual[y+j]; - clip_l += l; - y += l; - } else if (op == BAM_CHARD_CLIP) { - clip_q += 13 * l; - clip_l += l; - } else if (op == BAM_CINS) y += l; - else if (op == BAM_CREF_SKIP) x += l; - } - for (i = 0, t = 1; i < mm; ++i) - t *= (double)len / (i+1); - t = q - 4.343 * log(t) + clip_q / 5.; - if (t > thres) return -1; - if (t < 0) t = 0; - t = sqrt((thres - t) / thres) * thres; -// fprintf(stderr, "%s %lf %d\n", bam1_qname(b), t, q); - return (int)(t + .499); -} - -int bam_prob_realn_core(bam1_t *b, const char *ref, int flag) -{ - int k, i, bw, x, y, yb, ye, xb, xe, apply_baq = flag&1, extend_baq = flag>>1&1, redo_baq = flag&4; - uint32_t *cigar = bam1_cigar(b); - bam1_core_t *c = &b->core; - kpa_par_t conf = kpa_par_def; - uint8_t *bq = 0, *zq = 0, *qual = bam1_qual(b); - if ((c->flag & BAM_FUNMAP) || b->core.l_qseq == 0) return -1; // do nothing - // test if BQ or ZQ is present - if ((bq = bam_aux_get(b, "BQ")) != 0) ++bq; - if ((zq = bam_aux_get(b, "ZQ")) != 0 && *zq == 'Z') ++zq; - if (bq && redo_baq) - { - bam_aux_del(b, bq-1); - bq = 0; - } - if (bq && zq) { // remove the ZQ tag - bam_aux_del(b, zq-1); - zq = 0; - } - if (bq || zq) { - if ((apply_baq && zq) || (!apply_baq && bq)) return -3; // in both cases, do nothing - if (bq && apply_baq) { // then convert BQ to ZQ - for (i = 0; i < c->l_qseq; ++i) - qual[i] = qual[i] + 64 < bq[i]? 0 : qual[i] - ((int)bq[i] - 64); - *(bq - 3) = 'Z'; - } else if (zq && !apply_baq) { // then convert ZQ to BQ - for (i = 0; i < c->l_qseq; ++i) - qual[i] += (int)zq[i] - 64; - *(zq - 3) = 'B'; - } - return 0; - } - // find the start and end of the alignment - x = c->pos, y = 0, yb = ye = xb = xe = -1; - for (k = 0; k < c->n_cigar; ++k) { - int op, l; - op = cigar[k]&0xf; l = cigar[k]>>4; - if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { - if (yb < 0) yb = y; - if (xb < 0) xb = x; - ye = y + l; xe = x + l; - x += l; y += l; - } else if (op == BAM_CSOFT_CLIP || op == BAM_CINS) y += l; - else if (op == BAM_CDEL) x += l; - else if (op == BAM_CREF_SKIP) return -1; // do nothing if there is a reference skip - } - // set bandwidth and the start and the end - bw = 7; - if (abs((xe - xb) - (ye - yb)) > bw) - bw = abs((xe - xb) - (ye - yb)) + 3; - conf.bw = bw; - xb -= yb + bw/2; if (xb < 0) xb = 0; - xe += c->l_qseq - ye + bw/2; - if (xe - xb - c->l_qseq > bw) - xb += (xe - xb - c->l_qseq - bw) / 2, xe -= (xe - xb - c->l_qseq - bw) / 2; - { // glocal - uint8_t *s, *r, *q, *seq = bam1_seq(b), *bq; - int *state; - bq = calloc(c->l_qseq + 1, 1); - memcpy(bq, qual, c->l_qseq); - s = calloc(c->l_qseq, 1); - for (i = 0; i < c->l_qseq; ++i) s[i] = bam_nt16_nt4_table[bam1_seqi(seq, i)]; - r = calloc(xe - xb, 1); - for (i = xb; i < xe; ++i) { - if (ref[i] == 0) { xe = i; break; } - r[i-xb] = bam_nt16_nt4_table[bam_nt16_table[(int)ref[i]]]; - } - state = calloc(c->l_qseq, sizeof(int)); - q = calloc(c->l_qseq, 1); - kpa_glocal(r, xe-xb, s, c->l_qseq, qual, &conf, state, q); - if (!extend_baq) { // in this block, bq[] is capped by base quality qual[] - for (k = 0, x = c->pos, y = 0; k < c->n_cigar; ++k) { - int op = cigar[k]&0xf, l = cigar[k]>>4; - if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { - for (i = y; i < y + l; ++i) { - if ((state[i]&3) != 0 || state[i]>>2 != x - xb + (i - y)) bq[i] = 0; - else bq[i] = bq[i] < q[i]? bq[i] : q[i]; - } - x += l; y += l; - } else if (op == BAM_CSOFT_CLIP || op == BAM_CINS) y += l; - else if (op == BAM_CDEL) x += l; - } - for (i = 0; i < c->l_qseq; ++i) bq[i] = qual[i] - bq[i] + 64; // finalize BQ - } else { // in this block, bq[] is BAQ that can be larger than qual[] (different from the above!) - uint8_t *left, *rght; - left = calloc(c->l_qseq, 1); rght = calloc(c->l_qseq, 1); - for (k = 0, x = c->pos, y = 0; k < c->n_cigar; ++k) { - int op = cigar[k]&0xf, l = cigar[k]>>4; - if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { - for (i = y; i < y + l; ++i) - bq[i] = ((state[i]&3) != 0 || state[i]>>2 != x - xb + (i - y))? 0 : q[i]; - for (left[y] = bq[y], i = y + 1; i < y + l; ++i) - left[i] = bq[i] > left[i-1]? bq[i] : left[i-1]; - for (rght[y+l-1] = bq[y+l-1], i = y + l - 2; i >= y; --i) - rght[i] = bq[i] > rght[i+1]? bq[i] : rght[i+1]; - for (i = y; i < y + l; ++i) - bq[i] = left[i] < rght[i]? left[i] : rght[i]; - x += l; y += l; - } else if (op == BAM_CSOFT_CLIP || op == BAM_CINS) y += l; - else if (op == BAM_CDEL) x += l; - } - for (i = 0; i < c->l_qseq; ++i) bq[i] = 64 + (qual[i] <= bq[i]? 0 : qual[i] - bq[i]); // finalize BQ - free(left); free(rght); - } - if (apply_baq) { - for (i = 0; i < c->l_qseq; ++i) qual[i] -= bq[i] - 64; // modify qual - bam_aux_append(b, "ZQ", 'Z', c->l_qseq + 1, bq); - } else bam_aux_append(b, "BQ", 'Z', c->l_qseq + 1, bq); - free(bq); free(s); free(r); free(q); free(state); - } - return 0; -} - -int bam_prob_realn(bam1_t *b, const char *ref) -{ - return bam_prob_realn_core(b, ref, 1); -} - -int bam_fillmd(int argc, char *argv[]) -{ - int c, flt_flag, tid = -2, ret, len, is_bam_out, is_sam_in, is_uncompressed, max_nm, is_realn, capQ, baq_flag; - samfile_t *fp, *fpout = 0; - faidx_t *fai; - char *ref = 0, mode_w[8], mode_r[8]; - bam1_t *b; - - flt_flag = UPDATE_NM | UPDATE_MD; - is_bam_out = is_sam_in = is_uncompressed = is_realn = max_nm = capQ = baq_flag = 0; - mode_w[0] = mode_r[0] = 0; - strcpy(mode_r, "r"); strcpy(mode_w, "w"); - while ((c = getopt(argc, argv, "EqreuNhbSC:n:Ad")) >= 0) { - switch (c) { - case 'r': is_realn = 1; break; - case 'e': flt_flag |= USE_EQUAL; break; - case 'd': flt_flag |= DROP_TAG; break; - case 'q': flt_flag |= BIN_QUAL; break; - case 'h': flt_flag |= HASH_QNM; break; - case 'N': flt_flag &= ~(UPDATE_MD|UPDATE_NM); break; - case 'b': is_bam_out = 1; break; - case 'u': is_uncompressed = is_bam_out = 1; break; - case 'S': is_sam_in = 1; break; - case 'n': max_nm = atoi(optarg); break; - case 'C': capQ = atoi(optarg); break; - case 'A': baq_flag |= 1; break; - case 'E': baq_flag |= 2; break; - default: fprintf(stderr, "[bam_fillmd] unrecognized option '-%c'\n", c); return 1; - } - } - if (!is_sam_in) strcat(mode_r, "b"); - if (is_bam_out) strcat(mode_w, "b"); - else strcat(mode_w, "h"); - if (is_uncompressed) strcat(mode_w, "u"); - if (optind + 1 >= argc) { - fprintf(stderr, "\n"); - fprintf(stderr, "Usage: samtools fillmd [-eubrS] \n\n"); - fprintf(stderr, "Options: -e change identical bases to '='\n"); - fprintf(stderr, " -u uncompressed BAM output (for piping)\n"); - fprintf(stderr, " -b compressed BAM output\n"); - fprintf(stderr, " -S the input is SAM with header\n"); - fprintf(stderr, " -A modify the quality string\n"); - fprintf(stderr, " -r compute the BQ tag (without -A) or cap baseQ by BAQ (with -A)\n"); - fprintf(stderr, " -E extended BAQ for better sensitivity but lower specificity\n\n"); - return 1; - } - fp = samopen(argv[optind], mode_r, 0); - if (fp == 0) return 1; - if (is_sam_in && (fp->header == 0 || fp->header->n_targets == 0)) { - fprintf(stderr, "[bam_fillmd] input SAM does not have header. Abort!\n"); - return 1; - } - fpout = samopen("-", mode_w, fp->header); - fai = fai_load(argv[optind+1]); - - b = bam_init1(); - while ((ret = samread(fp, b)) >= 0) { - if (b->core.tid >= 0) { - if (tid != b->core.tid) { - free(ref); - ref = fai_fetch(fai, fp->header->target_name[b->core.tid], &len); - tid = b->core.tid; - if (ref == 0) - fprintf(stderr, "[bam_fillmd] fail to find sequence '%s' in the reference.\n", - fp->header->target_name[tid]); - } - if (is_realn) bam_prob_realn_core(b, ref, baq_flag); - if (capQ > 10) { - int q = bam_cap_mapQ(b, ref, capQ); - if (b->core.qual > q) b->core.qual = q; - } - if (ref) bam_fillmd1_core(b, ref, flt_flag, max_nm); - } - samwrite(fpout, b); - } - bam_destroy1(b); - - free(ref); - fai_destroy(fai); - samclose(fp); samclose(fpout); - return 0; -} diff --git a/clipper/samtools/bam_pileup.c b/clipper/samtools/bam_pileup.c deleted file mode 100644 index 57434e0..0000000 --- a/clipper/samtools/bam_pileup.c +++ /dev/null @@ -1,437 +0,0 @@ -#include -#include -#include -#include -#include "sam.h" - -typedef struct { - int k, x, y, end; -} cstate_t; - -static cstate_t g_cstate_null = { -1, 0, 0, 0 }; - -typedef struct __linkbuf_t { - bam1_t b; - uint32_t beg, end; - cstate_t s; - struct __linkbuf_t *next; -} lbnode_t; - -/* --- BEGIN: Memory pool */ - -typedef struct { - int cnt, n, max; - lbnode_t **buf; -} mempool_t; - -static mempool_t *mp_init() -{ - mempool_t *mp; - mp = (mempool_t*)calloc(1, sizeof(mempool_t)); - return mp; -} -static void mp_destroy(mempool_t *mp) -{ - int k; - for (k = 0; k < mp->n; ++k) { - free(mp->buf[k]->b.data); - free(mp->buf[k]); - } - free(mp->buf); - free(mp); -} -static inline lbnode_t *mp_alloc(mempool_t *mp) -{ - ++mp->cnt; - if (mp->n == 0) return (lbnode_t*)calloc(1, sizeof(lbnode_t)); - else return mp->buf[--mp->n]; -} -static inline void mp_free(mempool_t *mp, lbnode_t *p) -{ - --mp->cnt; p->next = 0; // clear lbnode_t::next here - if (mp->n == mp->max) { - mp->max = mp->max? mp->max<<1 : 256; - mp->buf = (lbnode_t**)realloc(mp->buf, sizeof(lbnode_t*) * mp->max); - } - mp->buf[mp->n++] = p; -} - -/* --- END: Memory pool */ - -/* --- BEGIN: Auxiliary functions */ - -/* s->k: the index of the CIGAR operator that has just been processed. - s->x: the reference coordinate of the start of s->k - s->y: the query coordiante of the start of s->k - */ -static inline int resolve_cigar2(bam_pileup1_t *p, uint32_t pos, cstate_t *s) -{ -#define _cop(c) ((c)&BAM_CIGAR_MASK) -#define _cln(c) ((c)>>BAM_CIGAR_SHIFT) - - bam1_t *b = p->b; - bam1_core_t *c = &b->core; - uint32_t *cigar = bam1_cigar(b); - int k, is_head = 0; - // determine the current CIGAR operation -// fprintf(stderr, "%s\tpos=%d\tend=%d\t(%d,%d,%d)\n", bam1_qname(b), pos, s->end, s->k, s->x, s->y); - if (s->k == -1) { // never processed - is_head = 1; - if (c->n_cigar == 1) { // just one operation, save a loop - if (_cop(cigar[0]) == BAM_CMATCH || _cop(cigar[0]) == BAM_CEQUAL || _cop(cigar[0]) == BAM_CDIFF) s->k = 0, s->x = c->pos, s->y = 0; - } else { // find the first match or deletion - for (k = 0, s->x = c->pos, s->y = 0; k < c->n_cigar; ++k) { - int op = _cop(cigar[k]); - int l = _cln(cigar[k]); - if (op == BAM_CMATCH || op == BAM_CDEL || op == BAM_CEQUAL || op == BAM_CDIFF) break; - else if (op == BAM_CREF_SKIP) s->x += l; - else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) s->y += l; - } - assert(k < c->n_cigar); - s->k = k; - } - } else { // the read has been processed before - int op, l = _cln(cigar[s->k]); - if (pos - s->x >= l) { // jump to the next operation - assert(s->k < c->n_cigar); // otherwise a bug: this function should not be called in this case - op = _cop(cigar[s->k+1]); - if (op == BAM_CMATCH || op == BAM_CDEL || op == BAM_CREF_SKIP || op == BAM_CEQUAL || op == BAM_CDIFF) { // jump to the next without a loop - if (_cop(cigar[s->k]) == BAM_CMATCH|| _cop(cigar[s->k]) == BAM_CEQUAL || _cop(cigar[s->k]) == BAM_CDIFF) s->y += l; - s->x += l; - ++s->k; - } else { // find the next M/D/N/=/X - if (_cop(cigar[s->k]) == BAM_CMATCH|| _cop(cigar[s->k]) == BAM_CEQUAL || _cop(cigar[s->k]) == BAM_CDIFF) s->y += l; - s->x += l; - for (k = s->k + 1; k < c->n_cigar; ++k) { - op = _cop(cigar[k]), l = _cln(cigar[k]); - if (op == BAM_CMATCH || op == BAM_CDEL || op == BAM_CREF_SKIP || op == BAM_CEQUAL || op == BAM_CDIFF) break; - else if (op == BAM_CINS || op == BAM_CSOFT_CLIP) s->y += l; - } - s->k = k; - } - assert(s->k < c->n_cigar); // otherwise a bug - } // else, do nothing - } - { // collect pileup information - int op, l; - op = _cop(cigar[s->k]); l = _cln(cigar[s->k]); - p->is_del = p->indel = p->is_refskip = 0; - if (s->x + l - 1 == pos && s->k + 1 < c->n_cigar) { // peek the next operation - int op2 = _cop(cigar[s->k+1]); - int l2 = _cln(cigar[s->k+1]); - if (op2 == BAM_CDEL) p->indel = -(int)l2; - else if (op2 == BAM_CINS) p->indel = l2; - else if (op2 == BAM_CPAD && s->k + 2 < c->n_cigar) { // no working for adjacent padding - int l3 = 0; - for (k = s->k + 2; k < c->n_cigar; ++k) { - op2 = _cop(cigar[k]); l2 = _cln(cigar[k]); - if (op2 == BAM_CINS) l3 += l2; - else if (op2 == BAM_CDEL || op2 == BAM_CMATCH || op2 == BAM_CREF_SKIP || op2 == BAM_CEQUAL || op2 == BAM_CDIFF) break; - } - if (l3 > 0) p->indel = l3; - } - } - if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { - p->qpos = s->y + (pos - s->x); - } else if (op == BAM_CDEL || op == BAM_CREF_SKIP) { - p->is_del = 1; p->qpos = s->y; // FIXME: distinguish D and N!!!!! - p->is_refskip = (op == BAM_CREF_SKIP); - } // cannot be other operations; otherwise a bug - p->is_head = (pos == c->pos); p->is_tail = (pos == s->end); - } - return 1; -} - -/* --- END: Auxiliary functions */ - -/******************* - * pileup iterator * - *******************/ - -struct __bam_plp_t { - mempool_t *mp; - lbnode_t *head, *tail, *dummy; - int32_t tid, pos, max_tid, max_pos; - int is_eof, flag_mask, max_plp, error, maxcnt; - bam_pileup1_t *plp; - // for the "auto" interface only - bam1_t *b; - bam_plp_auto_f func; - void *data; -}; - -bam_plp_t bam_plp_init(bam_plp_auto_f func, void *data) -{ - bam_plp_t iter; - iter = calloc(1, sizeof(struct __bam_plp_t)); - iter->mp = mp_init(); - iter->head = iter->tail = mp_alloc(iter->mp); - iter->dummy = mp_alloc(iter->mp); - iter->max_tid = iter->max_pos = -1; - iter->flag_mask = BAM_DEF_MASK; - iter->maxcnt = 8000; - if (func) { - iter->func = func; - iter->data = data; - iter->b = bam_init1(); - } - return iter; -} - -void bam_plp_destroy(bam_plp_t iter) -{ - mp_free(iter->mp, iter->dummy); - mp_free(iter->mp, iter->head); - if (iter->mp->cnt != 0) - fprintf(stderr, "[bam_plp_destroy] memory leak: %d. Continue anyway.\n", iter->mp->cnt); - mp_destroy(iter->mp); - if (iter->b) bam_destroy1(iter->b); - free(iter->plp); - free(iter); -} - -const bam_pileup1_t *bam_plp_next(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp) -{ - if (iter->error) { *_n_plp = -1; return 0; } - *_n_plp = 0; - if (iter->is_eof && iter->head->next == 0) return 0; - while (iter->is_eof || iter->max_tid > iter->tid || (iter->max_tid == iter->tid && iter->max_pos > iter->pos)) { - int n_plp = 0; - lbnode_t *p, *q; - // write iter->plp at iter->pos - iter->dummy->next = iter->head; - for (p = iter->head, q = iter->dummy; p->next; q = p, p = p->next) { - if (p->b.core.tid < iter->tid || (p->b.core.tid == iter->tid && p->end <= iter->pos)) { // then remove - q->next = p->next; mp_free(iter->mp, p); p = q; - } else if (p->b.core.tid == iter->tid && p->beg <= iter->pos) { // here: p->end > pos; then add to pileup - if (n_plp == iter->max_plp) { // then double the capacity - iter->max_plp = iter->max_plp? iter->max_plp<<1 : 256; - iter->plp = (bam_pileup1_t*)realloc(iter->plp, sizeof(bam_pileup1_t) * iter->max_plp); - } - iter->plp[n_plp].b = &p->b; - if (resolve_cigar2(iter->plp + n_plp, iter->pos, &p->s)) ++n_plp; // actually always true... - } - } - iter->head = iter->dummy->next; // dummy->next may be changed - *_n_plp = n_plp; *_tid = iter->tid; *_pos = iter->pos; - // update iter->tid and iter->pos - if (iter->head->next) { - if (iter->tid > iter->head->b.core.tid) { - fprintf(stderr, "[%s] unsorted input. Pileup aborts.\n", __func__); - iter->error = 1; - *_n_plp = -1; - return 0; - } - } - if (iter->tid < iter->head->b.core.tid) { // come to a new reference sequence - iter->tid = iter->head->b.core.tid; iter->pos = iter->head->beg; // jump to the next reference - } else if (iter->pos < iter->head->beg) { // here: tid == head->b.core.tid - iter->pos = iter->head->beg; // jump to the next position - } else ++iter->pos; // scan contiguously - // return - if (n_plp) return iter->plp; - if (iter->is_eof && iter->head->next == 0) break; - } - return 0; -} - -int bam_plp_push(bam_plp_t iter, const bam1_t *b) -{ - if (iter->error) return -1; - if (b) { - if (b->core.tid < 0) return 0; - if (b->core.flag & iter->flag_mask) return 0; - if (iter->tid == b->core.tid && iter->pos == b->core.pos && iter->mp->cnt > iter->maxcnt) return 0; - bam_copy1(&iter->tail->b, b); - iter->tail->beg = b->core.pos; iter->tail->end = bam_calend(&b->core, bam1_cigar(b)); - iter->tail->s = g_cstate_null; iter->tail->s.end = iter->tail->end - 1; // initialize cstate_t - if (b->core.tid < iter->max_tid) { - fprintf(stderr, "[bam_pileup_core] the input is not sorted (chromosomes out of order)\n"); - iter->error = 1; - return -1; - } - if ((b->core.tid == iter->max_tid) && (iter->tail->beg < iter->max_pos)) { - fprintf(stderr, "[bam_pileup_core] the input is not sorted (reads out of order)\n"); - iter->error = 1; - return -1; - } - iter->max_tid = b->core.tid; iter->max_pos = iter->tail->beg; - if (iter->tail->end > iter->pos || iter->tail->b.core.tid > iter->tid) { - iter->tail->next = mp_alloc(iter->mp); - iter->tail = iter->tail->next; - } - } else iter->is_eof = 1; - return 0; -} - -const bam_pileup1_t *bam_plp_auto(bam_plp_t iter, int *_tid, int *_pos, int *_n_plp) -{ - const bam_pileup1_t *plp; - if (iter->func == 0 || iter->error) { *_n_plp = -1; return 0; } - if ((plp = bam_plp_next(iter, _tid, _pos, _n_plp)) != 0) return plp; - else { // no pileup line can be obtained; read alignments - *_n_plp = 0; - if (iter->is_eof) return 0; - while (iter->func(iter->data, iter->b) >= 0) { - if (bam_plp_push(iter, iter->b) < 0) { - *_n_plp = -1; - return 0; - } - if ((plp = bam_plp_next(iter, _tid, _pos, _n_plp)) != 0) return plp; - // otherwise no pileup line can be returned; read the next alignment. - } - bam_plp_push(iter, 0); - if ((plp = bam_plp_next(iter, _tid, _pos, _n_plp)) != 0) return plp; - return 0; - } -} - -void bam_plp_reset(bam_plp_t iter) -{ - lbnode_t *p, *q; - iter->max_tid = iter->max_pos = -1; - iter->tid = iter->pos = 0; - iter->is_eof = 0; - for (p = iter->head; p->next;) { - q = p->next; - mp_free(iter->mp, p); - p = q; - } - iter->head = iter->tail; -} - -void bam_plp_set_mask(bam_plp_t iter, int mask) -{ - iter->flag_mask = mask < 0? BAM_DEF_MASK : (BAM_FUNMAP | mask); -} - -void bam_plp_set_maxcnt(bam_plp_t iter, int maxcnt) -{ - iter->maxcnt = maxcnt; -} - -/***************** - * callback APIs * - *****************/ - -int bam_pileup_file(bamFile fp, int mask, bam_pileup_f func, void *func_data) -{ - bam_plbuf_t *buf; - int ret; - bam1_t *b; - b = bam_init1(); - buf = bam_plbuf_init(func, func_data); - bam_plbuf_set_mask(buf, mask); - while ((ret = bam_read1(fp, b)) >= 0) - bam_plbuf_push(b, buf); - bam_plbuf_push(0, buf); - bam_plbuf_destroy(buf); - bam_destroy1(b); - return 0; -} - -void bam_plbuf_set_mask(bam_plbuf_t *buf, int mask) -{ - bam_plp_set_mask(buf->iter, mask); -} - -void bam_plbuf_reset(bam_plbuf_t *buf) -{ - bam_plp_reset(buf->iter); -} - -bam_plbuf_t *bam_plbuf_init(bam_pileup_f func, void *data) -{ - bam_plbuf_t *buf; - buf = calloc(1, sizeof(bam_plbuf_t)); - buf->iter = bam_plp_init(0, 0); - buf->func = func; - buf->data = data; - return buf; -} - -void bam_plbuf_destroy(bam_plbuf_t *buf) -{ - bam_plp_destroy(buf->iter); - free(buf); -} - -int bam_plbuf_push(const bam1_t *b, bam_plbuf_t *buf) -{ - int ret, n_plp, tid, pos; - const bam_pileup1_t *plp; - ret = bam_plp_push(buf->iter, b); - if (ret < 0) return ret; - while ((plp = bam_plp_next(buf->iter, &tid, &pos, &n_plp)) != 0) - buf->func(tid, pos, n_plp, plp, buf->data); - return 0; -} - -/*********** - * mpileup * - ***********/ - -struct __bam_mplp_t { - int n; - uint64_t min, *pos; - bam_plp_t *iter; - int *n_plp; - const bam_pileup1_t **plp; -}; - -bam_mplp_t bam_mplp_init(int n, bam_plp_auto_f func, void **data) -{ - int i; - bam_mplp_t iter; - iter = calloc(1, sizeof(struct __bam_mplp_t)); - iter->pos = calloc(n, 8); - iter->n_plp = calloc(n, sizeof(int)); - iter->plp = calloc(n, sizeof(void*)); - iter->iter = calloc(n, sizeof(void*)); - iter->n = n; - iter->min = (uint64_t)-1; - for (i = 0; i < n; ++i) { - iter->iter[i] = bam_plp_init(func, data[i]); - iter->pos[i] = iter->min; - } - return iter; -} - -void bam_mplp_set_maxcnt(bam_mplp_t iter, int maxcnt) -{ - int i; - for (i = 0; i < iter->n; ++i) - iter->iter[i]->maxcnt = maxcnt; -} - -void bam_mplp_destroy(bam_mplp_t iter) -{ - int i; - for (i = 0; i < iter->n; ++i) bam_plp_destroy(iter->iter[i]); - free(iter->iter); free(iter->pos); free(iter->n_plp); free(iter->plp); - free(iter); -} - -int bam_mplp_auto(bam_mplp_t iter, int *_tid, int *_pos, int *n_plp, const bam_pileup1_t **plp) -{ - int i, ret = 0; - uint64_t new_min = (uint64_t)-1; - for (i = 0; i < iter->n; ++i) { - if (iter->pos[i] == iter->min) { - int tid, pos; - iter->plp[i] = bam_plp_auto(iter->iter[i], &tid, &pos, &iter->n_plp[i]); - iter->pos[i] = (uint64_t)tid<<32 | pos; - } - if (iter->plp[i] && iter->pos[i] < new_min) new_min = iter->pos[i]; - } - iter->min = new_min; - if (new_min == (uint64_t)-1) return 0; - *_tid = new_min>>32; *_pos = (uint32_t)new_min; - for (i = 0; i < iter->n; ++i) { - if (iter->pos[i] == iter->min) { // FIXME: valgrind reports "uninitialised value(s) at this line" - n_plp[i] = iter->n_plp[i], plp[i] = iter->plp[i]; - ++ret; - } else n_plp[i] = 0, plp[i] = 0; - } - return ret; -} diff --git a/clipper/samtools/bam_reheader.c b/clipper/samtools/bam_reheader.c deleted file mode 100644 index 6619428..0000000 --- a/clipper/samtools/bam_reheader.c +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include -#include "knetfile.h" -#include "bgzf.h" -#include "bam.h" - -#define BUF_SIZE 0x10000 - -int bam_reheader(BGZF *in, const bam_header_t *h, int fd) -{ - BGZF *fp; - bam_header_t *old; - int len; - uint8_t *buf; - if (in->is_write) return -1; - buf = malloc(BUF_SIZE); - old = bam_header_read(in); - fp = bgzf_fdopen(fd, "w"); - bam_header_write(fp, h); - if (in->block_offset < in->block_length) { - bgzf_write(fp, in->uncompressed_block + in->block_offset, in->block_length - in->block_offset); - bgzf_flush(fp); - } -#ifdef _USE_KNETFILE - while ((len = knet_read(in->fp, buf, BUF_SIZE)) > 0) - fwrite(buf, 1, len, fp->fp); -#else - while (!feof(in->file) && (len = fread(buf, 1, BUF_SIZE, in->file)) > 0) - fwrite(buf, 1, len, fp->file); -#endif - free(buf); - fp->block_offset = in->block_offset = 0; - bgzf_close(fp); - return 0; -} - -int main_reheader(int argc, char *argv[]) -{ - bam_header_t *h; - BGZF *in; - if (argc != 3) { - fprintf(stderr, "Usage: samtools reheader \n"); - return 1; - } - { // read the header - tamFile fph = sam_open(argv[1]); - if (fph == 0) { - fprintf(stderr, "[%s] fail to read the header from %s.\n", __func__, argv[1]); - return 1; - } - h = sam_header_read(fph); - sam_close(fph); - } - in = strcmp(argv[2], "-")? bam_open(argv[2], "r") : bam_dopen(fileno(stdin), "r"); - if (in == 0) { - fprintf(stderr, "[%s] fail to open file %s.\n", __func__, argv[2]); - return 1; - } - bam_reheader(in, h, fileno(stdout)); - bgzf_close(in); - return 0; -} diff --git a/clipper/samtools/bam_sort.c b/clipper/samtools/bam_sort.c deleted file mode 100644 index 7d00cd1..0000000 --- a/clipper/samtools/bam_sort.c +++ /dev/null @@ -1,566 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "bam.h" -#include "ksort.h" - -static int g_is_by_qname = 0; - -static int strnum_cmp(const char *_a, const char *_b) -{ - const unsigned char *a = (const unsigned char*)_a, *b = (const unsigned char*)_b; - const unsigned char *pa = a, *pb = b; - while (*pa && *pb) { - if (isdigit(*pa) && isdigit(*pb)) { - while (*pa == '0') ++pa; - while (*pb == '0') ++pb; - while (isdigit(*pa) && isdigit(*pb) && *pa == *pb) ++pa, ++pb; - if (isdigit(*pa) && isdigit(*pb)) { - int i = 0; - while (isdigit(pa[i]) && isdigit(pb[i])) ++i; - return isdigit(pa[i])? 1 : isdigit(pb[i])? -1 : (int)*pa - (int)*pb; - } else if (isdigit(*pa)) return 1; - else if (isdigit(*pb)) return -1; - else if (pa - a != pb - b) return pa - a < pb - b? 1 : -1; - } else { - if (*pa != *pb) return (int)*pa - (int)*pb; - ++pa; ++pb; - } - } - return *pa? 1 : *pb? -1 : 0; -} - -#define HEAP_EMPTY 0xffffffffffffffffull - -typedef struct { - int i; - uint64_t pos, idx; - bam1_t *b; -} heap1_t; - -#define __pos_cmp(a, b) ((a).pos > (b).pos || ((a).pos == (b).pos && ((a).i > (b).i || ((a).i == (b).i && (a).idx > (b).idx)))) - -static inline int heap_lt(const heap1_t a, const heap1_t b) -{ - if (g_is_by_qname) { - int t; - if (a.b == 0 || b.b == 0) return a.b == 0? 1 : 0; - t = strnum_cmp(bam1_qname(a.b), bam1_qname(b.b)); - return (t > 0 || (t == 0 && (a.b->core.flag&0xc0) > (b.b->core.flag&0xc0))); - } else return __pos_cmp(a, b); -} - -KSORT_INIT(heap, heap1_t, heap_lt) - -static void swap_header_targets(bam_header_t *h1, bam_header_t *h2) -{ - bam_header_t t; - t.n_targets = h1->n_targets, h1->n_targets = h2->n_targets, h2->n_targets = t.n_targets; - t.target_name = h1->target_name, h1->target_name = h2->target_name, h2->target_name = t.target_name; - t.target_len = h1->target_len, h1->target_len = h2->target_len, h2->target_len = t.target_len; -} - -static void swap_header_text(bam_header_t *h1, bam_header_t *h2) -{ - int tempi; - char *temps; - tempi = h1->l_text, h1->l_text = h2->l_text, h2->l_text = tempi; - temps = h1->text, h1->text = h2->text, h2->text = temps; -} - -#define MERGE_RG 1 -#define MERGE_UNCOMP 2 -#define MERGE_LEVEL1 4 -#define MERGE_FORCE 8 - -/*! - @abstract Merge multiple sorted BAM. - @param is_by_qname whether to sort by query name - @param out output BAM file name - @param headers name of SAM file from which to copy '@' header lines, - or NULL to copy them from the first file to be merged - @param n number of files to be merged - @param fn names of files to be merged - - @discussion Padding information may NOT correctly maintained. This - function is NOT thread safe. - */ -int bam_merge_core2(int by_qname, const char *out, const char *headers, int n, char * const *fn, int flag, const char *reg, int n_threads, int level) -{ - bamFile fpout, *fp; - heap1_t *heap; - bam_header_t *hout = 0; - bam_header_t *hheaders = NULL; - int i, j, *RG_len = 0; - uint64_t idx = 0; - char **RG = 0, mode[8]; - bam_iter_t *iter = 0; - - if (headers) { - tamFile fpheaders = sam_open(headers); - if (fpheaders == 0) { - const char *message = strerror(errno); - fprintf(stderr, "[bam_merge_core] cannot open '%s': %s\n", headers, message); - return -1; - } - hheaders = sam_header_read(fpheaders); - sam_close(fpheaders); - } - - g_is_by_qname = by_qname; - fp = (bamFile*)calloc(n, sizeof(bamFile)); - heap = (heap1_t*)calloc(n, sizeof(heap1_t)); - iter = (bam_iter_t*)calloc(n, sizeof(bam_iter_t)); - // prepare RG tag - if (flag & MERGE_RG) { - RG = (char**)calloc(n, sizeof(void*)); - RG_len = (int*)calloc(n, sizeof(int)); - for (i = 0; i != n; ++i) { - int l = strlen(fn[i]); - const char *s = fn[i]; - if (l > 4 && strcmp(s + l - 4, ".bam") == 0) l -= 4; - for (j = l - 1; j >= 0; --j) if (s[j] == '/') break; - ++j; l -= j; - RG[i] = calloc(l + 1, 1); - RG_len[i] = l; - strncpy(RG[i], s + j, l); - } - } - // read the first - for (i = 0; i != n; ++i) { - bam_header_t *hin; - fp[i] = bam_open(fn[i], "r"); - if (fp[i] == 0) { - int j; - fprintf(stderr, "[bam_merge_core] fail to open file %s\n", fn[i]); - for (j = 0; j < i; ++j) bam_close(fp[j]); - free(fp); free(heap); - // FIXME: possible memory leak - return -1; - } - hin = bam_header_read(fp[i]); - if (i == 0) { // the first BAM - hout = hin; - } else { // validate multiple baf - int min_n_targets = hout->n_targets; - if (hin->n_targets < min_n_targets) min_n_targets = hin->n_targets; - - for (j = 0; j < min_n_targets; ++j) - if (strcmp(hout->target_name[j], hin->target_name[j]) != 0) { - fprintf(stderr, "[bam_merge_core] different target sequence name: '%s' != '%s' in file '%s'\n", - hout->target_name[j], hin->target_name[j], fn[i]); - return -1; - } - - // If this input file has additional target reference sequences, - // add them to the headers to be output - if (hin->n_targets > hout->n_targets) { - swap_header_targets(hout, hin); - // FIXME Possibly we should also create @SQ text headers - // for the newly added reference sequences - } - - bam_header_destroy(hin); - } - } - - if (hheaders) { - // If the text headers to be swapped in include any @SQ headers, - // check that they are consistent with the existing binary list - // of reference information. - if (hheaders->n_targets > 0) { - if (hout->n_targets != hheaders->n_targets) { - fprintf(stderr, "[bam_merge_core] number of @SQ headers in '%s' differs from number of target sequences\n", headers); - if (!reg) return -1; - } - for (j = 0; j < hout->n_targets; ++j) - if (strcmp(hout->target_name[j], hheaders->target_name[j]) != 0) { - fprintf(stderr, "[bam_merge_core] @SQ header '%s' in '%s' differs from target sequence\n", hheaders->target_name[j], headers); - if (!reg) return -1; - } - } - - swap_header_text(hout, hheaders); - bam_header_destroy(hheaders); - } - - if (reg) { - int tid, beg, end; - if (bam_parse_region(hout, reg, &tid, &beg, &end) < 0) { - fprintf(stderr, "[%s] Malformated region string or undefined reference name\n", __func__); - return -1; - } - for (i = 0; i < n; ++i) { - bam_index_t *idx; - idx = bam_index_load(fn[i]); - iter[i] = bam_iter_query(idx, tid, beg, end); - bam_index_destroy(idx); - } - } - - for (i = 0; i < n; ++i) { - heap1_t *h = heap + i; - h->i = i; - h->b = (bam1_t*)calloc(1, sizeof(bam1_t)); - if (bam_iter_read(fp[i], iter[i], h->b) >= 0) { - h->pos = ((uint64_t)h->b->core.tid<<32) | (uint32_t)((int32_t)h->b->core.pos+1)<<1 | bam1_strand(h->b); - h->idx = idx++; - } - else h->pos = HEAP_EMPTY; - } - if (flag & MERGE_UNCOMP) level = 0; - else if (flag & MERGE_LEVEL1) level = 1; - strcpy(mode, "w"); - if (level >= 0) sprintf(mode + 1, "%d", level < 9? level : 9); - if ((fpout = strcmp(out, "-")? bam_open(out, "w") : bam_dopen(fileno(stdout), "w")) == 0) { - fprintf(stderr, "[%s] fail to create the output file.\n", __func__); - return -1; - } - bam_header_write(fpout, hout); - bam_header_destroy(hout); - if (!(flag & MERGE_UNCOMP)) bgzf_mt(fpout, n_threads, 256); - - ks_heapmake(heap, n, heap); - while (heap->pos != HEAP_EMPTY) { - bam1_t *b = heap->b; - if (flag & MERGE_RG) { - uint8_t *rg = bam_aux_get(b, "RG"); - if (rg) bam_aux_del(b, rg); - bam_aux_append(b, "RG", 'Z', RG_len[heap->i] + 1, (uint8_t*)RG[heap->i]); - } - bam_write1_core(fpout, &b->core, b->data_len, b->data); - if ((j = bam_iter_read(fp[heap->i], iter[heap->i], b)) >= 0) { - heap->pos = ((uint64_t)b->core.tid<<32) | (uint32_t)((int)b->core.pos+1)<<1 | bam1_strand(b); - heap->idx = idx++; - } else if (j == -1) { - heap->pos = HEAP_EMPTY; - free(heap->b->data); free(heap->b); - heap->b = 0; - } else fprintf(stderr, "[bam_merge_core] '%s' is truncated. Continue anyway.\n", fn[heap->i]); - ks_heapadjust(heap, 0, n, heap); - } - - if (flag & MERGE_RG) { - for (i = 0; i != n; ++i) free(RG[i]); - free(RG); free(RG_len); - } - for (i = 0; i != n; ++i) { - bam_iter_destroy(iter[i]); - bam_close(fp[i]); - } - bam_close(fpout); - free(fp); free(heap); free(iter); - return 0; -} - -int bam_merge_core(int by_qname, const char *out, const char *headers, int n, char * const *fn, int flag, const char *reg) -{ - return bam_merge_core2(by_qname, out, headers, n, fn, flag, reg, 0, -1); -} - -int bam_merge(int argc, char *argv[]) -{ - int c, is_by_qname = 0, flag = 0, ret = 0, n_threads = 0, level = -1; - char *fn_headers = NULL, *reg = 0; - - while ((c = getopt(argc, argv, "h:nru1R:f@:l:")) >= 0) { - switch (c) { - case 'r': flag |= MERGE_RG; break; - case 'f': flag |= MERGE_FORCE; break; - case 'h': fn_headers = strdup(optarg); break; - case 'n': is_by_qname = 1; break; - case '1': flag |= MERGE_LEVEL1; break; - case 'u': flag |= MERGE_UNCOMP; break; - case 'R': reg = strdup(optarg); break; - case 'l': level = atoi(optarg); break; - case '@': n_threads = atoi(optarg); break; - } - } - if (optind + 2 >= argc) { - fprintf(stderr, "\n"); - fprintf(stderr, "Usage: samtools merge [-nr] [-h inh.sam] [...]\n\n"); - fprintf(stderr, "Options: -n sort by read names\n"); - fprintf(stderr, " -r attach RG tag (inferred from file names)\n"); - fprintf(stderr, " -u uncompressed BAM output\n"); - fprintf(stderr, " -f overwrite the output BAM if exist\n"); - fprintf(stderr, " -1 compress level 1\n"); - fprintf(stderr, " -l INT compression level, from 0 to 9 [-1]\n"); - fprintf(stderr, " -@ INT number of BAM compression threads [0]\n"); - fprintf(stderr, " -R STR merge file in the specified region STR [all]\n"); - fprintf(stderr, " -h FILE copy the header in FILE to [in1.bam]\n\n"); - fprintf(stderr, "Note: Samtools' merge does not reconstruct the @RG dictionary in the header. Users\n"); - fprintf(stderr, " must provide the correct header with -h, or uses Picard which properly maintains\n"); - fprintf(stderr, " the header dictionary in merging.\n\n"); - return 1; - } - if (!(flag & MERGE_FORCE) && strcmp(argv[optind], "-")) { - FILE *fp = fopen(argv[optind], "rb"); - if (fp != NULL) { - fclose(fp); - fprintf(stderr, "[%s] File '%s' exists. Please apply '-f' to overwrite. Abort.\n", __func__, argv[optind]); - return 1; - } - } - if (bam_merge_core2(is_by_qname, argv[optind], fn_headers, argc - optind - 1, argv + optind + 1, flag, reg, n_threads, level) < 0) ret = 1; - free(reg); - free(fn_headers); - return ret; -} - -/*************** - * BAM sorting * - ***************/ - -#include - -typedef bam1_t *bam1_p; - -static int change_SO(bam_header_t *h, const char *so) -{ - char *p, *q, *beg = 0, *end = 0, *newtext; - if (h->l_text > 3) { - if (strncmp(h->text, "@HD", 3) == 0) { - if ((p = strchr(h->text, '\n')) == 0) return -1; - *p = '\0'; - if ((q = strstr(h->text, "\tSO:")) != 0) { - *p = '\n'; // change back - if (strncmp(q + 4, so, p - q - 4) != 0) { - beg = q; - for (q += 4; *q != '\n' && *q != '\t'; ++q); - end = q; - } else return 0; // no need to change - } else beg = end = p, *p = '\n'; - } - } - if (beg == 0) { // no @HD - h->l_text += strlen(so) + 15; - newtext = malloc(h->l_text + 1); - sprintf(newtext, "@HD\tVN:1.3\tSO:%s\n", so); - strcat(newtext, h->text); - } else { // has @HD but different or no SO - h->l_text = (beg - h->text) + (4 + strlen(so)) + (h->text + h->l_text - end); - newtext = malloc(h->l_text + 1); - strncpy(newtext, h->text, beg - h->text); - sprintf(newtext + (beg - h->text), "\tSO:%s", so); - strcat(newtext, end); - } - free(h->text); - h->text = newtext; - return 0; -} - -static inline int bam1_lt(const bam1_p a, const bam1_p b) -{ - if (g_is_by_qname) { - int t = strnum_cmp(bam1_qname(a), bam1_qname(b)); - return (t < 0 || (t == 0 && (a->core.flag&0xc0) < (b->core.flag&0xc0))); - } else return (((uint64_t)a->core.tid<<32|(a->core.pos+1)<<1|bam1_strand(a)) < ((uint64_t)b->core.tid<<32|(b->core.pos+1)<<1|bam1_strand(b))); -} -KSORT_INIT(sort, bam1_p, bam1_lt) - -typedef struct { - size_t buf_len; - const char *prefix; - bam1_p *buf; - const bam_header_t *h; - int index; -} worker_t; - -static void write_buffer(const char *fn, const char *mode, size_t l, bam1_p *buf, const bam_header_t *h, int n_threads) -{ - size_t i; - bamFile fp; - fp = strcmp(fn, "-")? bam_open(fn, mode) : bam_dopen(fileno(stdout), mode); - if (fp == 0) return; - bam_header_write(fp, h); - if (n_threads > 1) bgzf_mt(fp, n_threads, 256); - for (i = 0; i < l; ++i) - bam_write1_core(fp, &buf[i]->core, buf[i]->data_len, buf[i]->data); - bam_close(fp); -} - -static void *worker(void *data) -{ - worker_t *w = (worker_t*)data; - char *name; - ks_mergesort(sort, w->buf_len, w->buf, 0); - name = (char*)calloc(strlen(w->prefix) + 20, 1); - sprintf(name, "%s.%.4d.bam", w->prefix, w->index); - write_buffer(name, "w1", w->buf_len, w->buf, w->h, 0); - free(name); - return 0; -} - -static int sort_blocks(int n_files, size_t k, bam1_p *buf, const char *prefix, const bam_header_t *h, int n_threads) -{ - int i; - size_t rest; - bam1_p *b; - pthread_t *tid; - pthread_attr_t attr; - worker_t *w; - - if (n_threads < 1) n_threads = 1; - if (k < n_threads * 64) n_threads = 1; // use a single thread if we only sort a small batch of records - pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); - w = calloc(n_threads, sizeof(worker_t)); - tid = calloc(n_threads, sizeof(pthread_t)); - b = buf; rest = k; - for (i = 0; i < n_threads; ++i) { - w[i].buf_len = rest / (n_threads - i); - w[i].buf = b; - w[i].prefix = prefix; - w[i].h = h; - w[i].index = n_files + i; - b += w[i].buf_len; rest -= w[i].buf_len; - pthread_create(&tid[i], &attr, worker, &w[i]); - } - for (i = 0; i < n_threads; ++i) pthread_join(tid[i], 0); - free(tid); free(w); - return n_files + n_threads; -} - -/*! - @abstract Sort an unsorted BAM file based on the chromosome order - and the leftmost position of an alignment - - @param is_by_qname whether to sort by query name - @param fn name of the file to be sorted - @param prefix prefix of the output and the temporary files; upon - sucessess, prefix.bam will be written. - @param max_mem approxiate maximum memory (very inaccurate) - - @discussion It may create multiple temporary subalignment files - and then merge them by calling bam_merge_core(). This function is - NOT thread safe. - */ -void bam_sort_core_ext(int is_by_qname, const char *fn, const char *prefix, size_t _max_mem, int is_stdout, int n_threads, int level) -{ - int ret, i, n_files = 0; - size_t mem, max_k, k, max_mem; - bam_header_t *header; - bamFile fp; - bam1_t *b, **buf; - char *fnout = 0; - - if (n_threads < 2) n_threads = 1; - g_is_by_qname = is_by_qname; - max_k = k = 0; mem = 0; - max_mem = _max_mem * n_threads; - buf = 0; - fp = strcmp(fn, "-")? bam_open(fn, "r") : bam_dopen(fileno(stdin), "r"); - if (fp == 0) { - fprintf(stderr, "[bam_sort_core] fail to open file %s\n", fn); - return; - } - header = bam_header_read(fp); - if (is_by_qname) change_SO(header, "queryname"); - else change_SO(header, "coordinate"); - // write sub files - for (;;) { - if (k == max_k) { - size_t old_max = max_k; - max_k = max_k? max_k<<1 : 0x10000; - buf = realloc(buf, max_k * sizeof(void*)); - memset(buf + old_max, 0, sizeof(void*) * (max_k - old_max)); - } - if (buf[k] == 0) buf[k] = (bam1_t*)calloc(1, sizeof(bam1_t)); - b = buf[k]; - if ((ret = bam_read1(fp, b)) < 0) break; - if (b->data_len < b->m_data>>2) { // shrink - b->m_data = b->data_len; - kroundup32(b->m_data); - b->data = realloc(b->data, b->m_data); - } - mem += sizeof(bam1_t) + b->m_data + sizeof(void*) + sizeof(void*); // two sizeof(void*) for the data allocated to pointer arrays - ++k; - if (mem >= max_mem) { - n_files = sort_blocks(n_files, k, buf, prefix, header, n_threads); - mem = k = 0; - } - } - if (ret != -1) - fprintf(stderr, "[bam_sort_core] truncated file. Continue anyway.\n"); - // output file name - fnout = calloc(strlen(prefix) + 20, 1); - if (is_stdout) sprintf(fnout, "-"); - else sprintf(fnout, "%s.bam", prefix); - // write the final output - if (n_files == 0) { // a single block - char mode[8]; - strcpy(mode, "w"); - if (level >= 0) sprintf(mode + 1, "%d", level < 9? level : 9); - ks_mergesort(sort, k, buf, 0); - write_buffer(fnout, mode, k, buf, header, n_threads); - } else { // then merge - char **fns; - n_files = sort_blocks(n_files, k, buf, prefix, header, n_threads); - fprintf(stderr, "[bam_sort_core] merging from %d files...\n", n_files); - fns = (char**)calloc(n_files, sizeof(char*)); - for (i = 0; i < n_files; ++i) { - fns[i] = (char*)calloc(strlen(prefix) + 20, 1); - sprintf(fns[i], "%s.%.4d.bam", prefix, i); - } - bam_merge_core2(is_by_qname, fnout, 0, n_files, fns, 0, 0, n_threads, level); - for (i = 0; i < n_files; ++i) { - unlink(fns[i]); - free(fns[i]); - } - free(fns); - } - free(fnout); - // free - for (k = 0; k < max_k; ++k) { - if (!buf[k]) continue; - free(buf[k]->data); - free(buf[k]); - } - free(buf); - bam_header_destroy(header); - bam_close(fp); -} - -void bam_sort_core(int is_by_qname, const char *fn, const char *prefix, size_t max_mem) -{ - bam_sort_core_ext(is_by_qname, fn, prefix, max_mem, 0, 0, -1); -} - -int bam_sort(int argc, char *argv[]) -{ - size_t max_mem = 768<<20; // 512MB - int c, is_by_qname = 0, is_stdout = 0, n_threads = 0, level = -1; - while ((c = getopt(argc, argv, "nom:@:l:")) >= 0) { - switch (c) { - case 'o': is_stdout = 1; break; - case 'n': is_by_qname = 1; break; - case 'm': { - char *q; - max_mem = strtol(optarg, &q, 0); - if (*q == 'k' || *q == 'K') max_mem <<= 10; - else if (*q == 'm' || *q == 'M') max_mem <<= 20; - else if (*q == 'g' || *q == 'G') max_mem <<= 30; - break; - } - case '@': n_threads = atoi(optarg); break; - case 'l': level = atoi(optarg); break; - } - } - if (optind + 2 > argc) { - fprintf(stderr, "\n"); - fprintf(stderr, "Usage: samtools sort [options] \n\n"); - fprintf(stderr, "Options: -n sort by read name\n"); - fprintf(stderr, " -o final output to stdout\n"); - fprintf(stderr, " -l INT compression level, from 0 to 9 [-1]\n"); - fprintf(stderr, " -@ INT number of sorting and compression threads [1]\n"); - fprintf(stderr, " -m INT max memory per thread; suffix K/M/G recognized [768M]\n"); - fprintf(stderr, "\n"); - return 1; - } - bam_sort_core_ext(is_by_qname, argv[optind], argv[optind+1], max_mem, is_stdout, n_threads, level); - return 0; -} diff --git a/clipper/samtools/bedidx.c b/clipper/samtools/bedidx.c deleted file mode 100644 index ec75a10..0000000 --- a/clipper/samtools/bedidx.c +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#define drand48() ((double)rand() / RAND_MAX) -#endif - -#include "ksort.h" -KSORT_INIT_GENERIC(uint64_t) - -#include "kseq.h" -KSTREAM_INIT(gzFile, gzread, 8192) - -typedef struct { - int n, m; - uint64_t *a; - int *idx; -} bed_reglist_t; - -#include "khash.h" -KHASH_MAP_INIT_STR(reg, bed_reglist_t) - -#define LIDX_SHIFT 13 - -typedef kh_reg_t reghash_t; - -int *bed_index_core(int n, uint64_t *a, int *n_idx) -{ - int i, j, m, *idx; - m = *n_idx = 0; idx = 0; - for (i = 0; i < n; ++i) { - int beg, end; - beg = a[i]>>32 >> LIDX_SHIFT; end = ((uint32_t)a[i]) >> LIDX_SHIFT; - if (m < end + 1) { - int oldm = m; - m = end + 1; - kroundup32(m); - idx = realloc(idx, m * sizeof(int)); - for (j = oldm; j < m; ++j) idx[j] = -1; - } - if (beg == end) { - if (idx[beg] < 0) idx[beg] = i; - } else { - for (j = beg; j <= end; ++j) - if (idx[j] < 0) idx[j] = i; - } - *n_idx = end + 1; - } - return idx; -} - -void bed_index(void *_h) -{ - reghash_t *h = (reghash_t*)_h; - khint_t k; - for (k = 0; k < kh_end(h); ++k) { - if (kh_exist(h, k)) { - bed_reglist_t *p = &kh_val(h, k); - if (p->idx) free(p->idx); - ks_introsort(uint64_t, p->n, p->a); - p->idx = bed_index_core(p->n, p->a, &p->m); - } - } -} - -int bed_overlap_core(const bed_reglist_t *p, int beg, int end) -{ - int i, min_off; - if (p->n == 0) return 0; - min_off = (beg>>LIDX_SHIFT >= p->n)? p->idx[p->n-1] : p->idx[beg>>LIDX_SHIFT]; - if (min_off < 0) { // TODO: this block can be improved, but speed should not matter too much here - int n = beg>>LIDX_SHIFT; - if (n > p->n) n = p->n; - for (i = n - 1; i >= 0; --i) - if (p->idx[i] >= 0) break; - min_off = i >= 0? p->idx[i] : 0; - } - for (i = min_off; i < p->n; ++i) { - if ((int)(p->a[i]>>32) >= end) break; // out of range; no need to proceed - if ((int32_t)p->a[i] > beg && (int32_t)(p->a[i]>>32) < end) - return 1; // find the overlap; return - } - return 0; -} - -int bed_overlap(const void *_h, const char *chr, int beg, int end) -{ - const reghash_t *h = (const reghash_t*)_h; - khint_t k; - if (!h) return 0; - k = kh_get(reg, h, chr); - if (k == kh_end(h)) return 0; - return bed_overlap_core(&kh_val(h, k), beg, end); -} - -void *bed_read(const char *fn) -{ - reghash_t *h = kh_init(reg); - gzFile fp; - kstream_t *ks; - int dret; - kstring_t *str; - // read the list - fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); - if (fp == 0) return 0; - str = calloc(1, sizeof(kstring_t)); - ks = ks_init(fp); - while (ks_getuntil(ks, 0, str, &dret) >= 0) { // read the chr name - int beg = -1, end = -1; - bed_reglist_t *p; - khint_t k = kh_get(reg, h, str->s); - if (k == kh_end(h)) { // absent from the hash table - int ret; - char *s = strdup(str->s); - k = kh_put(reg, h, s, &ret); - memset(&kh_val(h, k), 0, sizeof(bed_reglist_t)); - } - p = &kh_val(h, k); - if (dret != '\n') { // if the lines has other characters - if (ks_getuntil(ks, 0, str, &dret) > 0 && isdigit(str->s[0])) { - beg = atoi(str->s); // begin - if (dret != '\n') { - if (ks_getuntil(ks, 0, str, &dret) > 0 && isdigit(str->s[0])) { - end = atoi(str->s); // end - if (end < beg) end = -1; - } - } - } - } - if (dret != '\n') while ((dret = ks_getc(ks)) > 0 && dret != '\n'); // skip the rest of the line - if (end < 0 && beg > 0) end = beg, beg = beg - 1; // if there is only one column - if (beg >= 0 && end > beg) { - if (p->n == p->m) { - p->m = p->m? p->m<<1 : 4; - p->a = realloc(p->a, p->m * 8); - } - p->a[p->n++] = (uint64_t)beg<<32 | end; - } - } - ks_destroy(ks); - gzclose(fp); - free(str->s); free(str); - bed_index(h); - return h; -} - -void bed_destroy(void *_h) -{ - reghash_t *h = (reghash_t*)_h; - khint_t k; - for (k = 0; k < kh_end(h); ++k) { - if (kh_exist(h, k)) { - free(kh_val(h, k).a); - free(kh_val(h, k).idx); - free((char*)kh_key(h, k)); - } - } - kh_destroy(reg, h); -} diff --git a/clipper/samtools/bgzf.c b/clipper/samtools/bgzf.c deleted file mode 100644 index 880d5af..0000000 --- a/clipper/samtools/bgzf.c +++ /dev/null @@ -1,694 +0,0 @@ -/* The MIT License - - Copyright (c) 2008 Broad Institute / Massachusetts Institute of Technology - 2011 Attractive Chaos - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ - -#include -#include -#include -#include -#include -#include -#include -#include "bgzf.h" - -#ifdef _USE_KNETFILE -#include "knetfile.h" -typedef knetFile *_bgzf_file_t; -#define _bgzf_open(fn, mode) knet_open(fn, mode) -#define _bgzf_dopen(fp, mode) knet_dopen(fp, mode) -#define _bgzf_close(fp) knet_close(fp) -#define _bgzf_fileno(fp) ((fp)->fd) -#define _bgzf_tell(fp) knet_tell(fp) -#define _bgzf_seek(fp, offset, whence) knet_seek(fp, offset, whence) -#define _bgzf_read(fp, buf, len) knet_read(fp, buf, len) -#define _bgzf_write(fp, buf, len) knet_write(fp, buf, len) -#else // ~defined(_USE_KNETFILE) -#if defined(_WIN32) || defined(_MSC_VER) -#define ftello(fp) ftell(fp) -#define fseeko(fp, offset, whence) fseek(fp, offset, whence) -#else // ~defined(_WIN32) -extern off_t ftello(FILE *stream); -extern int fseeko(FILE *stream, off_t offset, int whence); -#endif // ~defined(_WIN32) -typedef FILE *_bgzf_file_t; -#define _bgzf_open(fn, mode) fopen(fn, mode) -#define _bgzf_dopen(fp, mode) fdopen(fp, mode) -#define _bgzf_close(fp) fclose(fp) -#define _bgzf_fileno(fp) fileno(fp) -#define _bgzf_tell(fp) ftello(fp) -#define _bgzf_seek(fp, offset, whence) fseeko(fp, offset, whence) -#define _bgzf_read(fp, buf, len) fread(buf, 1, len, fp) -#define _bgzf_write(fp, buf, len) fwrite(buf, 1, len, fp) -#endif // ~define(_USE_KNETFILE) - -#define BLOCK_HEADER_LENGTH 18 -#define BLOCK_FOOTER_LENGTH 8 - - -/* BGZF/GZIP header (speciallized from RFC 1952; little endian): - +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ - | 31|139| 8| 4| 0| 0|255| 6| 66| 67| 2|BLK_LEN| - +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ -*/ -static const uint8_t g_magic[19] = "\037\213\010\4\0\0\0\0\0\377\6\0\102\103\2\0\0\0"; - -#ifdef BGZF_CACHE -typedef struct { - int size; - uint8_t *block; - int64_t end_offset; -} cache_t; -#include "khash.h" -KHASH_MAP_INIT_INT64(cache, cache_t) -#endif - -static inline void packInt16(uint8_t *buffer, uint16_t value) -{ - buffer[0] = value; - buffer[1] = value >> 8; -} - -static inline int unpackInt16(const uint8_t *buffer) -{ - return buffer[0] | buffer[1] << 8; -} - -static inline void packInt32(uint8_t *buffer, uint32_t value) -{ - buffer[0] = value; - buffer[1] = value >> 8; - buffer[2] = value >> 16; - buffer[3] = value >> 24; -} - -static BGZF *bgzf_read_init() -{ - BGZF *fp; - fp = calloc(1, sizeof(BGZF)); - fp->is_write = 0; - fp->uncompressed_block = malloc(BGZF_MAX_BLOCK_SIZE); - fp->compressed_block = malloc(BGZF_MAX_BLOCK_SIZE); -#ifdef BGZF_CACHE - fp->cache = kh_init(cache); -#endif - return fp; -} - -static BGZF *bgzf_write_init(int compress_level) // compress_level==-1 for the default level -{ - BGZF *fp; - fp = calloc(1, sizeof(BGZF)); - fp->is_write = 1; - fp->uncompressed_block = malloc(BGZF_MAX_BLOCK_SIZE); - fp->compressed_block = malloc(BGZF_MAX_BLOCK_SIZE); - fp->compress_level = compress_level < 0? Z_DEFAULT_COMPRESSION : compress_level; // Z_DEFAULT_COMPRESSION==-1 - if (fp->compress_level > 9) fp->compress_level = Z_DEFAULT_COMPRESSION; - return fp; -} -// get the compress level from the mode string -static int mode2level(const char *__restrict mode) -{ - int i, compress_level = -1; - for (i = 0; mode[i]; ++i) - if (mode[i] >= '0' && mode[i] <= '9') break; - if (mode[i]) compress_level = (int)mode[i] - '0'; - if (strchr(mode, 'u')) compress_level = 0; - return compress_level; -} - -BGZF *bgzf_open(const char *path, const char *mode) -{ - BGZF *fp = 0; - assert(compressBound(BGZF_BLOCK_SIZE) < BGZF_MAX_BLOCK_SIZE); - if (strchr(mode, 'r') || strchr(mode, 'R')) { - _bgzf_file_t fpr; - if ((fpr = _bgzf_open(path, "r")) == 0) return 0; - fp = bgzf_read_init(); - fp->fp = fpr; - } else if (strchr(mode, 'w') || strchr(mode, 'W')) { - FILE *fpw; - if ((fpw = fopen(path, "w")) == 0) return 0; - fp = bgzf_write_init(mode2level(mode)); - fp->fp = fpw; - } - return fp; -} - -BGZF *bgzf_dopen(int fd, const char *mode) -{ - BGZF *fp = 0; - assert(compressBound(BGZF_BLOCK_SIZE) < BGZF_MAX_BLOCK_SIZE); - if (strchr(mode, 'r') || strchr(mode, 'R')) { - _bgzf_file_t fpr; - if ((fpr = _bgzf_dopen(fd, "r")) == 0) return 0; - fp = bgzf_read_init(); - fp->fp = fpr; - } else if (strchr(mode, 'w') || strchr(mode, 'W')) { - FILE *fpw; - if ((fpw = fdopen(fd, "w")) == 0) return 0; - fp = bgzf_write_init(mode2level(mode)); - fp->fp = fpw; - } - return fp; -} - -static int bgzf_compress(void *_dst, int *dlen, void *src, int slen, int level) -{ - uint32_t crc; - z_stream zs; - uint8_t *dst = (uint8_t*)_dst; - - // compress the body - zs.zalloc = NULL; zs.zfree = NULL; - zs.next_in = src; - zs.avail_in = slen; - zs.next_out = dst + BLOCK_HEADER_LENGTH; - zs.avail_out = *dlen - BLOCK_HEADER_LENGTH - BLOCK_FOOTER_LENGTH; - if (deflateInit2(&zs, level, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY) != Z_OK) return -1; // -15 to disable zlib header/footer - if (deflate(&zs, Z_FINISH) != Z_STREAM_END) return -1; - if (deflateEnd(&zs) != Z_OK) return -1; - *dlen = zs.total_out + BLOCK_HEADER_LENGTH + BLOCK_FOOTER_LENGTH; - // write the header - memcpy(dst, g_magic, BLOCK_HEADER_LENGTH); // the last two bytes are a place holder for the length of the block - packInt16(&dst[16], *dlen - 1); // write the compressed length; -1 to fit 2 bytes - // write the footer - crc = crc32(crc32(0L, NULL, 0L), src, slen); - packInt32((uint8_t*)&dst[*dlen - 8], crc); - packInt32((uint8_t*)&dst[*dlen - 4], slen); - return 0; -} - -// Deflate the block in fp->uncompressed_block into fp->compressed_block. Also adds an extra field that stores the compressed block length. -static int deflate_block(BGZF *fp, int block_length) -{ - int comp_size = BGZF_MAX_BLOCK_SIZE; - if (bgzf_compress(fp->compressed_block, &comp_size, fp->uncompressed_block, block_length, fp->compress_level) != 0) { - fp->errcode |= BGZF_ERR_ZLIB; - return -1; - } - fp->block_offset = 0; - return comp_size; -} - -// Inflate the block in fp->compressed_block into fp->uncompressed_block -static int inflate_block(BGZF* fp, int block_length) -{ - z_stream zs; - zs.zalloc = NULL; - zs.zfree = NULL; - zs.next_in = fp->compressed_block + 18; - zs.avail_in = block_length - 16; - zs.next_out = fp->uncompressed_block; - zs.avail_out = BGZF_MAX_BLOCK_SIZE; - - if (inflateInit2(&zs, -15) != Z_OK) { - fp->errcode |= BGZF_ERR_ZLIB; - return -1; - } - if (inflate(&zs, Z_FINISH) != Z_STREAM_END) { - inflateEnd(&zs); - fp->errcode |= BGZF_ERR_ZLIB; - return -1; - } - if (inflateEnd(&zs) != Z_OK) { - fp->errcode |= BGZF_ERR_ZLIB; - return -1; - } - return zs.total_out; -} - -static int check_header(const uint8_t *header) -{ - return (header[0] == 31 && header[1] == 139 && header[2] == 8 && (header[3] & 4) != 0 - && unpackInt16((uint8_t*)&header[10]) == 6 - && header[12] == 'B' && header[13] == 'C' - && unpackInt16((uint8_t*)&header[14]) == 2); -} - -#ifdef BGZF_CACHE -static void free_cache(BGZF *fp) -{ - khint_t k; - khash_t(cache) *h = (khash_t(cache)*)fp->cache; - if (fp->is_write) return; - for (k = kh_begin(h); k < kh_end(h); ++k) - if (kh_exist(h, k)) free(kh_val(h, k).block); - kh_destroy(cache, h); -} - -static int load_block_from_cache(BGZF *fp, int64_t block_address) -{ - khint_t k; - cache_t *p; - khash_t(cache) *h = (khash_t(cache)*)fp->cache; - k = kh_get(cache, h, block_address); - if (k == kh_end(h)) return 0; - p = &kh_val(h, k); - if (fp->block_length != 0) fp->block_offset = 0; - fp->block_address = block_address; - fp->block_length = p->size; - memcpy(fp->uncompressed_block, p->block, BGZF_MAX_BLOCK_SIZE); - _bgzf_seek((_bgzf_file_t)fp->fp, p->end_offset, SEEK_SET); - return p->size; -} - -static void cache_block(BGZF *fp, int size) -{ - int ret; - khint_t k; - cache_t *p; - khash_t(cache) *h = (khash_t(cache)*)fp->cache; - if (BGZF_MAX_BLOCK_SIZE >= fp->cache_size) return; - if ((kh_size(h) + 1) * BGZF_MAX_BLOCK_SIZE > fp->cache_size) { - /* A better way would be to remove the oldest block in the - * cache, but here we remove a random one for simplicity. This - * should not have a big impact on performance. */ - for (k = kh_begin(h); k < kh_end(h); ++k) - if (kh_exist(h, k)) break; - if (k < kh_end(h)) { - free(kh_val(h, k).block); - kh_del(cache, h, k); - } - } - k = kh_put(cache, h, fp->block_address, &ret); - if (ret == 0) return; // if this happens, a bug! - p = &kh_val(h, k); - p->size = fp->block_length; - p->end_offset = fp->block_address + size; - p->block = malloc(BGZF_MAX_BLOCK_SIZE); - memcpy(kh_val(h, k).block, fp->uncompressed_block, BGZF_MAX_BLOCK_SIZE); -} -#else -static void free_cache(BGZF *fp) {} -static int load_block_from_cache(BGZF *fp, int64_t block_address) {return 0;} -static void cache_block(BGZF *fp, int size) {} -#endif - -int bgzf_read_block(BGZF *fp) -{ - uint8_t header[BLOCK_HEADER_LENGTH], *compressed_block; - int count, size = 0, block_length, remaining; - int64_t block_address; - block_address = _bgzf_tell((_bgzf_file_t)fp->fp); - if (fp->cache_size && load_block_from_cache(fp, block_address)) return 0; - count = _bgzf_read(fp->fp, header, sizeof(header)); - if (count == 0) { // no data read - fp->block_length = 0; - return 0; - } - if (count != sizeof(header) || !check_header(header)) { - fp->errcode |= BGZF_ERR_HEADER; - return -1; - } - size = count; - block_length = unpackInt16((uint8_t*)&header[16]) + 1; // +1 because when writing this number, we used "-1" - compressed_block = (uint8_t*)fp->compressed_block; - memcpy(compressed_block, header, BLOCK_HEADER_LENGTH); - remaining = block_length - BLOCK_HEADER_LENGTH; - count = _bgzf_read(fp->fp, &compressed_block[BLOCK_HEADER_LENGTH], remaining); - if (count != remaining) { - fp->errcode |= BGZF_ERR_IO; - return -1; - } - size += count; - if ((count = inflate_block(fp, block_length)) < 0) return -1; - if (fp->block_length != 0) fp->block_offset = 0; // Do not reset offset if this read follows a seek. - fp->block_address = block_address; - fp->block_length = count; - cache_block(fp, size); - return 0; -} - -ssize_t bgzf_read(BGZF *fp, void *data, ssize_t length) -{ - ssize_t bytes_read = 0; - uint8_t *output = data; - if (length <= 0) return 0; - assert(fp->is_write == 0); - while (bytes_read < length) { - int copy_length, available = fp->block_length - fp->block_offset; - uint8_t *buffer; - if (available <= 0) { - if (bgzf_read_block(fp) != 0) return -1; - available = fp->block_length - fp->block_offset; - if (available <= 0) break; - } - copy_length = length - bytes_read < available? length - bytes_read : available; - buffer = fp->uncompressed_block; - memcpy(output, buffer + fp->block_offset, copy_length); - fp->block_offset += copy_length; - output += copy_length; - bytes_read += copy_length; - } - if (fp->block_offset == fp->block_length) { - fp->block_address = _bgzf_tell((_bgzf_file_t)fp->fp); - fp->block_offset = fp->block_length = 0; - } - return bytes_read; -} - -/***** BEGIN: multi-threading *****/ - -typedef struct { - BGZF *fp; - struct mtaux_t *mt; - void *buf; - int i, errcode, toproc; -} worker_t; - -typedef struct mtaux_t { - int n_threads, n_blks, curr, done; - volatile int proc_cnt; - void **blk; - int *len; - worker_t *w; - pthread_t *tid; - pthread_mutex_t lock; - pthread_cond_t cv; -} mtaux_t; - -static int worker_aux(worker_t *w) -{ - int i, tmp, stop = 0; - // wait for condition: to process or all done - pthread_mutex_lock(&w->mt->lock); - while (!w->toproc && !w->mt->done) - pthread_cond_wait(&w->mt->cv, &w->mt->lock); - if (w->mt->done) stop = 1; - w->toproc = 0; - pthread_mutex_unlock(&w->mt->lock); - if (stop) return 1; // to quit the thread - w->errcode = 0; - for (i = w->i; i < w->mt->curr; i += w->mt->n_threads) { - int clen = BGZF_MAX_BLOCK_SIZE; - if (bgzf_compress(w->buf, &clen, w->mt->blk[i], w->mt->len[i], w->fp->compress_level) != 0) - w->errcode |= BGZF_ERR_ZLIB; - memcpy(w->mt->blk[i], w->buf, clen); - w->mt->len[i] = clen; - } - tmp = __sync_fetch_and_add(&w->mt->proc_cnt, 1); - return 0; -} - -static void *mt_worker(void *data) -{ - while (worker_aux(data) == 0); - return 0; -} - -int bgzf_mt(BGZF *fp, int n_threads, int n_sub_blks) -{ - int i; - mtaux_t *mt; - pthread_attr_t attr; - if (!fp->is_write || fp->mt || n_threads <= 1) return -1; - mt = calloc(1, sizeof(mtaux_t)); - mt->n_threads = n_threads; - mt->n_blks = n_threads * n_sub_blks; - mt->len = calloc(mt->n_blks, sizeof(int)); - mt->blk = calloc(mt->n_blks, sizeof(void*)); - for (i = 0; i < mt->n_blks; ++i) - mt->blk[i] = malloc(BGZF_MAX_BLOCK_SIZE); - mt->tid = calloc(mt->n_threads, sizeof(pthread_t)); // tid[0] is not used, as the worker 0 is launched by the master - mt->w = calloc(mt->n_threads, sizeof(worker_t)); - for (i = 0; i < mt->n_threads; ++i) { - mt->w[i].i = i; - mt->w[i].mt = mt; - mt->w[i].fp = fp; - mt->w[i].buf = malloc(BGZF_MAX_BLOCK_SIZE); - } - pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); - pthread_mutex_init(&mt->lock, 0); - pthread_cond_init(&mt->cv, 0); - for (i = 1; i < mt->n_threads; ++i) // worker 0 is effectively launched by the master thread - pthread_create(&mt->tid[i], &attr, mt_worker, &mt->w[i]); - fp->mt = mt; - return 0; -} - -static void mt_destroy(mtaux_t *mt) -{ - int i; - // signal all workers to quit - pthread_mutex_lock(&mt->lock); - mt->done = 1; mt->proc_cnt = 0; - pthread_cond_broadcast(&mt->cv); - pthread_mutex_unlock(&mt->lock); - for (i = 1; i < mt->n_threads; ++i) pthread_join(mt->tid[i], 0); // worker 0 is effectively launched by the master thread - // free other data allocated on heap - for (i = 0; i < mt->n_blks; ++i) free(mt->blk[i]); - for (i = 0; i < mt->n_threads; ++i) free(mt->w[i].buf); - free(mt->blk); free(mt->len); free(mt->w); free(mt->tid); - pthread_cond_destroy(&mt->cv); - pthread_mutex_destroy(&mt->lock); - free(mt); -} - -static void mt_queue(BGZF *fp) -{ - mtaux_t *mt = (mtaux_t*)fp->mt; - assert(mt->curr < mt->n_blks); // guaranteed by the caller - memcpy(mt->blk[mt->curr], fp->uncompressed_block, fp->block_offset); - mt->len[mt->curr] = fp->block_offset; - fp->block_offset = 0; - ++mt->curr; -} - -static int mt_flush(BGZF *fp) -{ - int i; - mtaux_t *mt = (mtaux_t*)fp->mt; - if (fp->block_offset) mt_queue(fp); // guaranteed that assertion does not fail - // signal all the workers to compress - pthread_mutex_lock(&mt->lock); - for (i = 0; i < mt->n_threads; ++i) mt->w[i].toproc = 1; - mt->proc_cnt = 0; - pthread_cond_broadcast(&mt->cv); - pthread_mutex_unlock(&mt->lock); - // worker 0 is doing things here - worker_aux(&mt->w[0]); - // wait for all the threads to complete - while (mt->proc_cnt < mt->n_threads); - // dump data to disk - for (i = 0; i < mt->n_threads; ++i) fp->errcode |= mt->w[i].errcode; - for (i = 0; i < mt->curr; ++i) - if (fwrite(mt->blk[i], 1, mt->len[i], fp->fp) != mt->len[i]) - fp->errcode |= BGZF_ERR_IO; - mt->curr = 0; - return 0; -} - -static int mt_lazy_flush(BGZF *fp) -{ - mtaux_t *mt = (mtaux_t*)fp->mt; - if (fp->block_offset) mt_queue(fp); - if (mt->curr == mt->n_blks) - return mt_flush(fp); - return -1; -} - -static ssize_t mt_write(BGZF *fp, const void *data, ssize_t length) -{ - const uint8_t *input = data; - ssize_t rest = length; - while (rest) { - int copy_length = BGZF_BLOCK_SIZE - fp->block_offset < rest? BGZF_BLOCK_SIZE - fp->block_offset : rest; - memcpy(fp->uncompressed_block + fp->block_offset, input, copy_length); - fp->block_offset += copy_length; input += copy_length; rest -= copy_length; - if (fp->block_offset == BGZF_BLOCK_SIZE) mt_lazy_flush(fp); - } - return length - rest; -} - -/***** END: multi-threading *****/ - -int bgzf_flush(BGZF *fp) -{ - if (!fp->is_write) return 0; - if (fp->mt) return mt_flush(fp); - while (fp->block_offset > 0) { - int block_length; - block_length = deflate_block(fp, fp->block_offset); - if (block_length < 0) return -1; - if (fwrite(fp->compressed_block, 1, block_length, fp->fp) != block_length) { - fp->errcode |= BGZF_ERR_IO; // possibly truncated file - return -1; - } - fp->block_address += block_length; - } - return 0; -} - -int bgzf_flush_try(BGZF *fp, ssize_t size) -{ - if (fp->block_offset + size > BGZF_BLOCK_SIZE) { - if (fp->mt) return mt_lazy_flush(fp); - else return bgzf_flush(fp); - } - return -1; -} - -ssize_t bgzf_write(BGZF *fp, const void *data, ssize_t length) -{ - const uint8_t *input = data; - int block_length = BGZF_BLOCK_SIZE, bytes_written = 0; - assert(fp->is_write); - if (fp->mt) return mt_write(fp, data, length); - while (bytes_written < length) { - uint8_t* buffer = fp->uncompressed_block; - int copy_length = block_length - fp->block_offset < length - bytes_written? block_length - fp->block_offset : length - bytes_written; - memcpy(buffer + fp->block_offset, input, copy_length); - fp->block_offset += copy_length; - input += copy_length; - bytes_written += copy_length; - if (fp->block_offset == block_length && bgzf_flush(fp)) break; - } - return bytes_written; -} - -int bgzf_close(BGZF* fp) -{ - int ret, count, block_length; - if (fp == 0) return -1; - if (fp->is_write) { - if (bgzf_flush(fp) != 0) return -1; - fp->compress_level = -1; - block_length = deflate_block(fp, 0); // write an empty block - count = fwrite(fp->compressed_block, 1, block_length, fp->fp); - if (fflush(fp->fp) != 0) { - fp->errcode |= BGZF_ERR_IO; - return -1; - } - if (fp->mt) mt_destroy(fp->mt); - } - ret = fp->is_write? fclose(fp->fp) : _bgzf_close(fp->fp); - if (ret != 0) return -1; - free(fp->uncompressed_block); - free(fp->compressed_block); - free_cache(fp); - free(fp); - return 0; -} - -void bgzf_set_cache_size(BGZF *fp, int cache_size) -{ - if (fp) fp->cache_size = cache_size; -} - -int bgzf_check_EOF(BGZF *fp) -{ - static uint8_t magic[28] = "\037\213\010\4\0\0\0\0\0\377\6\0\102\103\2\0\033\0\3\0\0\0\0\0\0\0\0\0"; - uint8_t buf[28]; - off_t offset; - offset = _bgzf_tell((_bgzf_file_t)fp->fp); - if (_bgzf_seek(fp->fp, -28, SEEK_END) < 0) return 0; - _bgzf_read(fp->fp, buf, 28); - _bgzf_seek(fp->fp, offset, SEEK_SET); - return (memcmp(magic, buf, 28) == 0)? 1 : 0; -} - -int64_t bgzf_seek(BGZF* fp, int64_t pos, int where) -{ - int block_offset; - int64_t block_address; - - if (fp->is_write || where != SEEK_SET) { - fp->errcode |= BGZF_ERR_MISUSE; - return -1; - } - block_offset = pos & 0xFFFF; - block_address = pos >> 16; - if (_bgzf_seek(fp->fp, block_address, SEEK_SET) < 0) { - fp->errcode |= BGZF_ERR_IO; - return -1; - } - fp->block_length = 0; // indicates current block has not been loaded - fp->block_address = block_address; - fp->block_offset = block_offset; - return 0; -} - -int bgzf_is_bgzf(const char *fn) -{ - uint8_t buf[16]; - int n; - _bgzf_file_t fp; - if ((fp = _bgzf_open(fn, "r")) == 0) return 0; - n = _bgzf_read(fp, buf, 16); - _bgzf_close(fp); - if (n != 16) return 0; - return memcmp(g_magic, buf, 16) == 0? 1 : 0; -} - -int bgzf_getc(BGZF *fp) -{ - int c; - if (fp->block_offset >= fp->block_length) { - if (bgzf_read_block(fp) != 0) return -2; /* error */ - if (fp->block_length == 0) return -1; /* end-of-file */ - } - c = ((unsigned char*)fp->uncompressed_block)[fp->block_offset++]; - if (fp->block_offset == fp->block_length) { - fp->block_address = _bgzf_tell((_bgzf_file_t)fp->fp); - fp->block_offset = 0; - fp->block_length = 0; - } - return c; -} - -#ifndef kroundup32 -#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) -#endif - -int bgzf_getline(BGZF *fp, int delim, kstring_t *str) -{ - int l, state = 0; - unsigned char *buf = (unsigned char*)fp->uncompressed_block; - str->l = 0; - do { - if (fp->block_offset >= fp->block_length) { - if (bgzf_read_block(fp) != 0) { state = -2; break; } - if (fp->block_length == 0) { state = -1; break; } - } - for (l = fp->block_offset; l < fp->block_length && buf[l] != delim; ++l); - if (l < fp->block_length) state = 1; - l -= fp->block_offset; - if (str->l + l + 1 >= str->m) { - str->m = str->l + l + 2; - kroundup32(str->m); - str->s = (char*)realloc(str->s, str->m); - } - memcpy(str->s + str->l, buf + fp->block_offset, l); - str->l += l; - fp->block_offset += l + 1; - if (fp->block_offset >= fp->block_length) { - fp->block_address = _bgzf_tell((_bgzf_file_t)fp->fp); - fp->block_offset = 0; - fp->block_length = 0; - } - } while (state == 0); - if (str->l == 0 && state < 0) return state; - str->s[str->l] = 0; - return str->l; -} diff --git a/clipper/samtools/bgzf.h b/clipper/samtools/bgzf.h deleted file mode 100644 index cb67681..0000000 --- a/clipper/samtools/bgzf.h +++ /dev/null @@ -1,207 +0,0 @@ -/* The MIT License - - Copyright (c) 2008 Broad Institute / Massachusetts Institute of Technology - 2011, 2012 Attractive Chaos - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ - -/* The BGZF library was originally written by Bob Handsaker from the Broad - * Institute. It was later improved by the SAMtools developers. */ - -#ifndef __BGZF_H -#define __BGZF_H - -#include -#include -#include -#include - -#define BGZF_BLOCK_SIZE 0xff00 // make sure compressBound(BGZF_BLOCK_SIZE) < BGZF_MAX_BLOCK_SIZE -#define BGZF_MAX_BLOCK_SIZE 0x10000 - -#define BGZF_ERR_ZLIB 1 -#define BGZF_ERR_HEADER 2 -#define BGZF_ERR_IO 4 -#define BGZF_ERR_MISUSE 8 - -typedef struct { - int errcode:16, is_write:2, compress_level:14; - int cache_size; - int block_length, block_offset; - int64_t block_address; - void *uncompressed_block, *compressed_block; - void *cache; // a pointer to a hash table - void *fp; // actual file handler; FILE* on writing; FILE* or knetFile* on reading - void *mt; // only used for multi-threading -} BGZF; - -#ifndef KSTRING_T -#define KSTRING_T kstring_t -typedef struct __kstring_t { - size_t l, m; - char *s; -} kstring_t; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - - /****************** - * Basic routines * - ******************/ - - /** - * Open an existing file descriptor for reading or writing. - * - * @param fd file descriptor - * @param mode mode matching /[rwu0-9]+/: 'r' for reading, 'w' for writing and a digit specifies - * the zlib compression level; if both 'r' and 'w' are present, 'w' is ignored. - * @return BGZF file handler; 0 on error - */ - BGZF* bgzf_dopen(int fd, const char *mode); - - #define bgzf_fdopen(fd, mode) bgzf_dopen((fd), (mode)) // for backward compatibility - - /** - * Open the specified file for reading or writing. - */ - BGZF* bgzf_open(const char* path, const char *mode); - - /** - * Close the BGZF and free all associated resources. - * - * @param fp BGZF file handler - * @return 0 on success and -1 on error - */ - int bgzf_close(BGZF *fp); - - /** - * Read up to _length_ bytes from the file storing into _data_. - * - * @param fp BGZF file handler - * @param data data array to read into - * @param length size of data to read - * @return number of bytes actually read; 0 on end-of-file and -1 on error - */ - ssize_t bgzf_read(BGZF *fp, void *data, ssize_t length); - - /** - * Write _length_ bytes from _data_ to the file. - * - * @param fp BGZF file handler - * @param data data array to write - * @param length size of data to write - * @return number of bytes actually written; -1 on error - */ - ssize_t bgzf_write(BGZF *fp, const void *data, ssize_t length); - - /** - * Write the data in the buffer to the file. - */ - int bgzf_flush(BGZF *fp); - - /** - * Return a virtual file pointer to the current location in the file. - * No interpetation of the value should be made, other than a subsequent - * call to bgzf_seek can be used to position the file at the same point. - * Return value is non-negative on success. - */ - #define bgzf_tell(fp) ((fp->block_address << 16) | (fp->block_offset & 0xFFFF)) - - /** - * Set the file to read from the location specified by _pos_. - * - * @param fp BGZF file handler - * @param pos virtual file offset returned by bgzf_tell() - * @param whence must be SEEK_SET - * @return 0 on success and -1 on error - */ - int64_t bgzf_seek(BGZF *fp, int64_t pos, int whence); - - /** - * Check if the BGZF end-of-file (EOF) marker is present - * - * @param fp BGZF file handler opened for reading - * @return 1 if EOF is present; 0 if not or on I/O error - */ - int bgzf_check_EOF(BGZF *fp); - - /** - * Check if a file is in the BGZF format - * - * @param fn file name - * @return 1 if _fn_ is BGZF; 0 if not or on I/O error - */ - int bgzf_is_bgzf(const char *fn); - - /********************* - * Advanced routines * - *********************/ - - /** - * Set the cache size. Only effective when compiled with -DBGZF_CACHE. - * - * @param fp BGZF file handler - * @param size size of cache in bytes; 0 to disable caching (default) - */ - void bgzf_set_cache_size(BGZF *fp, int size); - - /** - * Flush the file if the remaining buffer size is smaller than _size_ - */ - int bgzf_flush_try(BGZF *fp, ssize_t size); - - /** - * Read one byte from a BGZF file. It is faster than bgzf_read() - * @param fp BGZF file handler - * @return byte read; -1 on end-of-file or error - */ - int bgzf_getc(BGZF *fp); - - /** - * Read one line from a BGZF file. It is faster than bgzf_getc() - * - * @param fp BGZF file handler - * @param delim delimitor - * @param str string to write to; must be initialized - * @return length of the string; 0 on end-of-file; negative on error - */ - int bgzf_getline(BGZF *fp, int delim, kstring_t *str); - - /** - * Read the next BGZF block. - */ - int bgzf_read_block(BGZF *fp); - - /** - * Enable multi-threading (only effective on writing) - * - * @param fp BGZF file handler; must be opened for writing - * @param n_threads #threads used for writing - * @param n_sub_blks #blocks processed by each thread; a value 64-256 is recommended - */ - int bgzf_mt(BGZF *fp, int n_threads, int n_sub_blks); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/clipper/samtools/faidx.c b/clipper/samtools/faidx.c deleted file mode 100644 index 51c82ac..0000000 --- a/clipper/samtools/faidx.c +++ /dev/null @@ -1,437 +0,0 @@ -#include -#include -#include -#include -#include -#include "faidx.h" -#include "khash.h" - -typedef struct { - int32_t line_len, line_blen; - int64_t len; - uint64_t offset; -} faidx1_t; -KHASH_MAP_INIT_STR(s, faidx1_t) - -#ifndef _NO_RAZF -#include "razf.h" -#else -#ifdef _WIN32 -#define ftello(fp) ftell(fp) -#define fseeko(fp, offset, whence) fseek(fp, offset, whence) -#else -extern off_t ftello(FILE *stream); -extern int fseeko(FILE *stream, off_t offset, int whence); -#endif -#define RAZF FILE -#define razf_read(fp, buf, size) fread(buf, 1, size, fp) -#define razf_open(fn, mode) fopen(fn, mode) -#define razf_close(fp) fclose(fp) -#define razf_seek(fp, offset, whence) fseeko(fp, offset, whence) -#define razf_tell(fp) ftello(fp) -#endif -#ifdef _USE_KNETFILE -#include "knetfile.h" -#endif - -struct __faidx_t { - RAZF *rz; - int n, m; - char **name; - khash_t(s) *hash; -}; - -#ifndef kroundup32 -#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) -#endif - -static inline void fai_insert_index(faidx_t *idx, const char *name, int len, int line_len, int line_blen, uint64_t offset) -{ - khint_t k; - int ret; - faidx1_t t; - if (idx->n == idx->m) { - idx->m = idx->m? idx->m<<1 : 16; - idx->name = (char**)realloc(idx->name, sizeof(void*) * idx->m); - } - idx->name[idx->n] = strdup(name); - k = kh_put(s, idx->hash, idx->name[idx->n], &ret); - t.len = len; t.line_len = line_len; t.line_blen = line_blen; t.offset = offset; - kh_value(idx->hash, k) = t; - ++idx->n; -} - -faidx_t *fai_build_core(RAZF *rz) -{ - char c, *name; - int l_name, m_name, ret; - int line_len, line_blen, state; - int l1, l2; - faidx_t *idx; - uint64_t offset; - int64_t len; - - idx = (faidx_t*)calloc(1, sizeof(faidx_t)); - idx->hash = kh_init(s); - name = 0; l_name = m_name = 0; - len = line_len = line_blen = -1; state = 0; l1 = l2 = -1; offset = 0; - while (razf_read(rz, &c, 1)) { - if (c == '\n') { // an empty line - if (state == 1) { - offset = razf_tell(rz); - continue; - } else if ((state == 0 && len < 0) || state == 2) continue; - } - if (c == '>') { // fasta header - if (len >= 0) - fai_insert_index(idx, name, len, line_len, line_blen, offset); - l_name = 0; - while ((ret = razf_read(rz, &c, 1)) != 0 && !isspace(c)) { - if (m_name < l_name + 2) { - m_name = l_name + 2; - kroundup32(m_name); - name = (char*)realloc(name, m_name); - } - name[l_name++] = c; - } - name[l_name] = '\0'; - if (ret == 0) { - fprintf(stderr, "[fai_build_core] the last entry has no sequence\n"); - free(name); fai_destroy(idx); - return 0; - } - if (c != '\n') while (razf_read(rz, &c, 1) && c != '\n'); - state = 1; len = 0; - offset = razf_tell(rz); - } else { - if (state == 3) { - fprintf(stderr, "[fai_build_core] inlined empty line is not allowed in sequence '%s'.\n", name); - free(name); fai_destroy(idx); - return 0; - } - if (state == 2) state = 3; - l1 = l2 = 0; - do { - ++l1; - if (isgraph(c)) ++l2; - } while ((ret = razf_read(rz, &c, 1)) && c != '\n'); - if (state == 3 && l2) { - fprintf(stderr, "[fai_build_core] different line length in sequence '%s'.\n", name); - free(name); fai_destroy(idx); - return 0; - } - ++l1; len += l2; - if (state == 1) line_len = l1, line_blen = l2, state = 0; - else if (state == 0) { - if (l1 != line_len || l2 != line_blen) state = 2; - } - } - } - fai_insert_index(idx, name, len, line_len, line_blen, offset); - free(name); - return idx; -} - -void fai_save(const faidx_t *fai, FILE *fp) -{ - khint_t k; - int i; - for (i = 0; i < fai->n; ++i) { - faidx1_t x; - k = kh_get(s, fai->hash, fai->name[i]); - x = kh_value(fai->hash, k); -#ifdef _WIN32 - fprintf(fp, "%s\t%d\t%ld\t%d\t%d\n", fai->name[i], (int)x.len, (long)x.offset, (int)x.line_blen, (int)x.line_len); -#else - fprintf(fp, "%s\t%d\t%lld\t%d\t%d\n", fai->name[i], (int)x.len, (long long)x.offset, (int)x.line_blen, (int)x.line_len); -#endif - } -} - -faidx_t *fai_read(FILE *fp) -{ - faidx_t *fai; - char *buf, *p; - int len, line_len, line_blen; -#ifdef _WIN32 - long offset; -#else - long long offset; -#endif - fai = (faidx_t*)calloc(1, sizeof(faidx_t)); - fai->hash = kh_init(s); - buf = (char*)calloc(0x10000, 1); - while (!feof(fp) && fgets(buf, 0x10000, fp)) { - for (p = buf; *p && isgraph(*p); ++p); - *p = 0; ++p; -#ifdef _WIN32 - sscanf(p, "%d%ld%d%d", &len, &offset, &line_blen, &line_len); -#else - sscanf(p, "%d%lld%d%d", &len, &offset, &line_blen, &line_len); -#endif - fai_insert_index(fai, buf, len, line_len, line_blen, offset); - } - free(buf); - return fai; -} - -void fai_destroy(faidx_t *fai) -{ - int i; - for (i = 0; i < fai->n; ++i) free(fai->name[i]); - free(fai->name); - kh_destroy(s, fai->hash); - if (fai->rz) razf_close(fai->rz); - free(fai); -} - -int fai_build(const char *fn) -{ - char *str; - RAZF *rz; - FILE *fp; - faidx_t *fai; - str = (char*)calloc(strlen(fn) + 5, 1); - sprintf(str, "%s.fai", fn); - rz = razf_open(fn, "r"); - if (rz == 0) { - fprintf(stderr, "[fai_build] fail to open the FASTA file %s\n",fn); - free(str); - return -1; - } - fai = fai_build_core(rz); - razf_close(rz); - fp = fopen(str, "wb"); - if (fp == 0) { - fprintf(stderr, "[fai_build] fail to write FASTA index %s\n",str); - fai_destroy(fai); free(str); - return -1; - } - fai_save(fai, fp); - fclose(fp); - free(str); - fai_destroy(fai); - return 0; -} - -#ifdef _USE_KNETFILE -FILE *download_and_open(const char *fn) -{ - const int buf_size = 1 * 1024 * 1024; - uint8_t *buf; - FILE *fp; - knetFile *fp_remote; - const char *url = fn; - const char *p; - int l = strlen(fn); - for (p = fn + l - 1; p >= fn; --p) - if (*p == '/') break; - fn = p + 1; - - // First try to open a local copy - fp = fopen(fn, "r"); - if (fp) - return fp; - - // If failed, download from remote and open - fp_remote = knet_open(url, "rb"); - if (fp_remote == 0) { - fprintf(stderr, "[download_from_remote] fail to open remote file %s\n",url); - return NULL; - } - if ((fp = fopen(fn, "wb")) == 0) { - fprintf(stderr, "[download_from_remote] fail to create file in the working directory %s\n",fn); - knet_close(fp_remote); - return NULL; - } - buf = (uint8_t*)calloc(buf_size, 1); - while ((l = knet_read(fp_remote, buf, buf_size)) != 0) - fwrite(buf, 1, l, fp); - free(buf); - fclose(fp); - knet_close(fp_remote); - - return fopen(fn, "r"); -} -#endif - -faidx_t *fai_load(const char *fn) -{ - char *str; - FILE *fp; - faidx_t *fai; - str = (char*)calloc(strlen(fn) + 5, 1); - sprintf(str, "%s.fai", fn); - -#ifdef _USE_KNETFILE - if (strstr(fn, "ftp://") == fn || strstr(fn, "http://") == fn) - { - fp = download_and_open(str); - if ( !fp ) - { - fprintf(stderr, "[fai_load] failed to open remote FASTA index %s\n", str); - free(str); - return 0; - } - } - else -#endif - fp = fopen(str, "rb"); - if (fp == 0) { - fprintf(stderr, "[fai_load] build FASTA index.\n"); - fai_build(fn); - fp = fopen(str, "rb"); - if (fp == 0) { - fprintf(stderr, "[fai_load] fail to open FASTA index.\n"); - free(str); - return 0; - } - } - - fai = fai_read(fp); - fclose(fp); - - fai->rz = razf_open(fn, "rb"); - free(str); - if (fai->rz == 0) { - fprintf(stderr, "[fai_load] fail to open FASTA file.\n"); - return 0; - } - return fai; -} - -char *fai_fetch(const faidx_t *fai, const char *str, int *len) -{ - char *s, c; - int i, l, k, name_end; - khiter_t iter; - faidx1_t val; - khash_t(s) *h; - int beg, end; - - beg = end = -1; - h = fai->hash; - name_end = l = strlen(str); - s = (char*)malloc(l+1); - // remove space - for (i = k = 0; i < l; ++i) - if (!isspace(str[i])) s[k++] = str[i]; - s[k] = 0; l = k; - // determine the sequence name - for (i = l - 1; i >= 0; --i) if (s[i] == ':') break; // look for colon from the end - if (i >= 0) name_end = i; - if (name_end < l) { // check if this is really the end - int n_hyphen = 0; - for (i = name_end + 1; i < l; ++i) { - if (s[i] == '-') ++n_hyphen; - else if (!isdigit(s[i]) && s[i] != ',') break; - } - if (i < l || n_hyphen > 1) name_end = l; // malformated region string; then take str as the name - s[name_end] = 0; - iter = kh_get(s, h, s); - if (iter == kh_end(h)) { // cannot find the sequence name - iter = kh_get(s, h, str); // try str as the name - if (iter == kh_end(h)) { - *len = 0; - free(s); return 0; - } else s[name_end] = ':', name_end = l; - } - } else iter = kh_get(s, h, str); - if(iter == kh_end(h)) { - fprintf(stderr, "[fai_fetch] Warning - Reference %s not found in FASTA file, returning empty sequence\n", str); - free(s); - return 0; - }; - val = kh_value(h, iter); - // parse the interval - if (name_end < l) { - for (i = k = name_end + 1; i < l; ++i) - if (s[i] != ',') s[k++] = s[i]; - s[k] = 0; - beg = atoi(s + name_end + 1); - for (i = name_end + 1; i != k; ++i) if (s[i] == '-') break; - end = i < k? atoi(s + i + 1) : val.len; - if (beg > 0) --beg; - } else beg = 0, end = val.len; - if (beg >= val.len) beg = val.len; - if (end >= val.len) end = val.len; - if (beg > end) beg = end; - free(s); - - // now retrieve the sequence - l = 0; - s = (char*)malloc(end - beg + 2); - razf_seek(fai->rz, val.offset + beg / val.line_blen * val.line_len + beg % val.line_blen, SEEK_SET); - while (razf_read(fai->rz, &c, 1) == 1 && l < end - beg && !fai->rz->z_err) - if (isgraph(c)) s[l++] = c; - s[l] = '\0'; - *len = l; - return s; -} - -int faidx_main(int argc, char *argv[]) -{ - if (argc == 1) { - fprintf(stderr, "Usage: faidx [ [...]]\n"); - return 1; - } else { - if (argc == 2) fai_build(argv[1]); - else { - int i, j, k, l; - char *s; - faidx_t *fai; - fai = fai_load(argv[1]); - if (fai == 0) return 1; - for (i = 2; i != argc; ++i) { - printf(">%s\n", argv[i]); - s = fai_fetch(fai, argv[i], &l); - for (j = 0; j < l; j += 60) { - for (k = 0; k < 60 && k < l - j; ++k) - putchar(s[j + k]); - putchar('\n'); - } - free(s); - } - fai_destroy(fai); - } - } - return 0; -} - -int faidx_fetch_nseq(const faidx_t *fai) -{ - return fai->n; -} - -char *faidx_fetch_seq(const faidx_t *fai, char *c_name, int p_beg_i, int p_end_i, int *len) -{ - int l; - char c; - khiter_t iter; - faidx1_t val; - char *seq=NULL; - - // Adjust position - iter = kh_get(s, fai->hash, c_name); - if(iter == kh_end(fai->hash)) return 0; - val = kh_value(fai->hash, iter); - if(p_end_i < p_beg_i) p_beg_i = p_end_i; - if(p_beg_i < 0) p_beg_i = 0; - else if(val.len <= p_beg_i) p_beg_i = val.len - 1; - if(p_end_i < 0) p_end_i = 0; - else if(val.len <= p_end_i) p_end_i = val.len - 1; - - // Now retrieve the sequence - l = 0; - seq = (char*)malloc(p_end_i - p_beg_i + 2); - razf_seek(fai->rz, val.offset + p_beg_i / val.line_blen * val.line_len + p_beg_i % val.line_blen, SEEK_SET); - while (razf_read(fai->rz, &c, 1) == 1 && l < p_end_i - p_beg_i + 1) - if (isgraph(c)) seq[l++] = c; - seq[l] = '\0'; - *len = l; - return seq; -} - -#ifdef FAIDX_MAIN -int main(int argc, char *argv[]) { return faidx_main(argc, argv); } -#endif diff --git a/clipper/samtools/faidx.h b/clipper/samtools/faidx.h deleted file mode 100644 index 1fb1b1f..0000000 --- a/clipper/samtools/faidx.h +++ /dev/null @@ -1,103 +0,0 @@ -/* The MIT License - - Copyright (c) 2008 Genome Research Ltd (GRL). - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -/* Contact: Heng Li */ - -#ifndef FAIDX_H -#define FAIDX_H - -/*! - @header - - Index FASTA files and extract subsequence. - - @copyright The Wellcome Trust Sanger Institute. - */ - -struct __faidx_t; -typedef struct __faidx_t faidx_t; - -#ifdef __cplusplus -extern "C" { -#endif - - /*! - @abstract Build index for a FASTA or razip compressed FASTA file. - @param fn FASTA file name - @return 0 on success; or -1 on failure - @discussion File "fn.fai" will be generated. - */ - int fai_build(const char *fn); - - /*! - @abstract Distroy a faidx_t struct. - @param fai Pointer to the struct to be destroyed - */ - void fai_destroy(faidx_t *fai); - - /*! - @abstract Load index from "fn.fai". - @param fn File name of the FASTA file - */ - faidx_t *fai_load(const char *fn); - - /*! - @abstract Fetch the sequence in a region. - @param fai Pointer to the faidx_t struct - @param reg Region in the format "chr2:20,000-30,000" - @param len Length of the region - @return Pointer to the sequence; null on failure - - @discussion The returned sequence is allocated by malloc family - and should be destroyed by end users by calling free() on it. - */ - char *fai_fetch(const faidx_t *fai, const char *reg, int *len); - - /*! - @abstract Fetch the number of sequences. - @param fai Pointer to the faidx_t struct - @return The number of sequences - */ - int faidx_fetch_nseq(const faidx_t *fai); - - /*! - @abstract Fetch the sequence in a region. - @param fai Pointer to the faidx_t struct - @param c_name Region name - @param p_beg_i Beginning position number (zero-based) - @param p_end_i End position number (zero-based) - @param len Length of the region - @return Pointer to the sequence; null on failure - - @discussion The returned sequence is allocated by malloc family - and should be destroyed by end users by calling free() on it. - */ - char *faidx_fetch_seq(const faidx_t *fai, char *c_name, int p_beg_i, int p_end_i, int *len); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/clipper/samtools/kaln.c b/clipper/samtools/kaln.c deleted file mode 100644 index 9c0bbaa..0000000 --- a/clipper/samtools/kaln.c +++ /dev/null @@ -1,486 +0,0 @@ -/* The MIT License - - Copyright (c) 2003-2006, 2008, 2009, by Heng Li - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#include -#include -#include -#include -#include -#include "kaln.h" - -#define FROM_M 0 -#define FROM_I 1 -#define FROM_D 2 - -typedef struct { - int i, j; - unsigned char ctype; -} path_t; - -int aln_sm_blosum62[] = { -/* A R N D C Q E G H I L K M F P S T W Y V * X */ - 4,-1,-2,-2, 0,-1,-1, 0,-2,-1,-1,-1,-1,-2,-1, 1, 0,-3,-2, 0,-4, 0, - -1, 5, 0,-2,-3, 1, 0,-2, 0,-3,-2, 2,-1,-3,-2,-1,-1,-3,-2,-3,-4,-1, - -2, 0, 6, 1,-3, 0, 0, 0, 1,-3,-3, 0,-2,-3,-2, 1, 0,-4,-2,-3,-4,-1, - -2,-2, 1, 6,-3, 0, 2,-1,-1,-3,-4,-1,-3,-3,-1, 0,-1,-4,-3,-3,-4,-1, - 0,-3,-3,-3, 9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-4,-2, - -1, 1, 0, 0,-3, 5, 2,-2, 0,-3,-2, 1, 0,-3,-1, 0,-1,-2,-1,-2,-4,-1, - -1, 0, 0, 2,-4, 2, 5,-2, 0,-3,-3, 1,-2,-3,-1, 0,-1,-3,-2,-2,-4,-1, - 0,-2, 0,-1,-3,-2,-2, 6,-2,-4,-4,-2,-3,-3,-2, 0,-2,-2,-3,-3,-4,-1, - -2, 0, 1,-1,-3, 0, 0,-2, 8,-3,-3,-1,-2,-1,-2,-1,-2,-2, 2,-3,-4,-1, - -1,-3,-3,-3,-1,-3,-3,-4,-3, 4, 2,-3, 1, 0,-3,-2,-1,-3,-1, 3,-4,-1, - -1,-2,-3,-4,-1,-2,-3,-4,-3, 2, 4,-2, 2, 0,-3,-2,-1,-2,-1, 1,-4,-1, - -1, 2, 0,-1,-3, 1, 1,-2,-1,-3,-2, 5,-1,-3,-1, 0,-1,-3,-2,-2,-4,-1, - -1,-1,-2,-3,-1, 0,-2,-3,-2, 1, 2,-1, 5, 0,-2,-1,-1,-1,-1, 1,-4,-1, - -2,-3,-3,-3,-2,-3,-3,-3,-1, 0, 0,-3, 0, 6,-4,-2,-2, 1, 3,-1,-4,-1, - -1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4, 7,-1,-1,-4,-3,-2,-4,-2, - 1,-1, 1, 0,-1, 0, 0, 0,-1,-2,-2, 0,-1,-2,-1, 4, 1,-3,-2,-2,-4, 0, - 0,-1, 0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1, 1, 5,-2,-2, 0,-4, 0, - -3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1, 1,-4,-3,-2,11, 2,-3,-4,-2, - -2,-2,-2,-3,-2,-1,-2,-3, 2,-1,-1,-2,-1, 3,-3,-2,-2, 2, 7,-1,-4,-1, - 0,-3,-3,-3,-1,-2,-2,-3,-3, 3, 1,-2, 1,-1,-2,-2, 0,-3,-1, 4,-4,-1, - -4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4, 1,-4, - 0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2, 0, 0,-2,-1,-1,-4,-1 -}; - -int aln_sm_blast[] = { - 1, -3, -3, -3, -2, - -3, 1, -3, -3, -2, - -3, -3, 1, -3, -2, - -3, -3, -3, 1, -2, - -2, -2, -2, -2, -2 -}; - -int aln_sm_qual[] = { - 0, -23, -23, -23, 0, - -23, 0, -23, -23, 0, - -23, -23, 0, -23, 0, - -23, -23, -23, 0, 0, - 0, 0, 0, 0, 0 -}; - -ka_param_t ka_param_blast = { 5, 2, 5, 2, aln_sm_blast, 5, 50 }; -ka_param_t ka_param_aa2aa = { 10, 2, 10, 2, aln_sm_blosum62, 22, 50 }; - -ka_param2_t ka_param2_qual = { 37, 11, 37, 11, 37, 11, 0, 0, aln_sm_qual, 5, 50 }; - -static uint32_t *ka_path2cigar32(const path_t *path, int path_len, int *n_cigar) -{ - int i, n; - uint32_t *cigar; - unsigned char last_type; - - if (path_len == 0 || path == 0) { - *n_cigar = 0; - return 0; - } - - last_type = path->ctype; - for (i = n = 1; i < path_len; ++i) { - if (last_type != path[i].ctype) ++n; - last_type = path[i].ctype; - } - *n_cigar = n; - cigar = (uint32_t*)calloc(*n_cigar, 4); - - cigar[0] = 1u << 4 | path[path_len-1].ctype; - last_type = path[path_len-1].ctype; - for (i = path_len - 2, n = 0; i >= 0; --i) { - if (path[i].ctype == last_type) cigar[n] += 1u << 4; - else { - cigar[++n] = 1u << 4 | path[i].ctype; - last_type = path[i].ctype; - } - } - - return cigar; -} - -/***************************/ -/* START OF common_align.c */ -/***************************/ - -#define SET_INF(s) (s).M = (s).I = (s).D = MINOR_INF; - -#define set_M(MM, cur, p, sc) \ -{ \ - if ((p)->M >= (p)->I) { \ - if ((p)->M >= (p)->D) { \ - (MM) = (p)->M + (sc); (cur)->Mt = FROM_M; \ - } else { \ - (MM) = (p)->D + (sc); (cur)->Mt = FROM_D; \ - } \ - } else { \ - if ((p)->I > (p)->D) { \ - (MM) = (p)->I + (sc); (cur)->Mt = FROM_I; \ - } else { \ - (MM) = (p)->D + (sc); (cur)->Mt = FROM_D; \ - } \ - } \ -} -#define set_I(II, cur, p) \ -{ \ - if ((p)->M - gap_open > (p)->I) { \ - (cur)->It = FROM_M; \ - (II) = (p)->M - gap_open - gap_ext; \ - } else { \ - (cur)->It = FROM_I; \ - (II) = (p)->I - gap_ext; \ - } \ -} -#define set_end_I(II, cur, p) \ -{ \ - if (gap_end_ext >= 0) { \ - if ((p)->M - gap_end_open > (p)->I) { \ - (cur)->It = FROM_M; \ - (II) = (p)->M - gap_end_open - gap_end_ext; \ - } else { \ - (cur)->It = FROM_I; \ - (II) = (p)->I - gap_end_ext; \ - } \ - } else set_I(II, cur, p); \ -} -#define set_D(DD, cur, p) \ -{ \ - if ((p)->M - gap_open > (p)->D) { \ - (cur)->Dt = FROM_M; \ - (DD) = (p)->M - gap_open - gap_ext; \ - } else { \ - (cur)->Dt = FROM_D; \ - (DD) = (p)->D - gap_ext; \ - } \ -} -#define set_end_D(DD, cur, p) \ -{ \ - if (gap_end_ext >= 0) { \ - if ((p)->M - gap_end_open > (p)->D) { \ - (cur)->Dt = FROM_M; \ - (DD) = (p)->M - gap_end_open - gap_end_ext; \ - } else { \ - (cur)->Dt = FROM_D; \ - (DD) = (p)->D - gap_end_ext; \ - } \ - } else set_D(DD, cur, p); \ -} - -typedef struct { - uint8_t Mt:3, It:2, Dt:3; -} dpcell_t; - -typedef struct { - int M, I, D; -} dpscore_t; - -/*************************** - * banded global alignment * - ***************************/ -uint32_t *ka_global_core(uint8_t *seq1, int len1, uint8_t *seq2, int len2, const ka_param_t *ap, int *_score, int *n_cigar) -{ - int i, j; - dpcell_t **dpcell, *q; - dpscore_t *curr, *last, *s; - int b1, b2, tmp_end; - int *mat, end, max = 0; - uint8_t type, ctype; - uint32_t *cigar = 0; - - int gap_open, gap_ext, gap_end_open, gap_end_ext, b; - int *score_matrix, N_MATRIX_ROW; - - /* initialize some align-related parameters. just for compatibility */ - gap_open = ap->gap_open; - gap_ext = ap->gap_ext; - gap_end_open = ap->gap_end_open; - gap_end_ext = ap->gap_end_ext; - b = ap->band_width; - score_matrix = ap->matrix; - N_MATRIX_ROW = ap->row; - - if (n_cigar) *n_cigar = 0; - if (len1 == 0 || len2 == 0) return 0; - - /* calculate b1 and b2 */ - if (len1 > len2) { - b1 = len1 - len2 + b; - b2 = b; - } else { - b1 = b; - b2 = len2 - len1 + b; - } - if (b1 > len1) b1 = len1; - if (b2 > len2) b2 = len2; - --seq1; --seq2; - - /* allocate memory */ - end = (b1 + b2 <= len1)? (b1 + b2 + 1) : (len1 + 1); - dpcell = (dpcell_t**)malloc(sizeof(dpcell_t*) * (len2 + 1)); - for (j = 0; j <= len2; ++j) - dpcell[j] = (dpcell_t*)malloc(sizeof(dpcell_t) * end); - for (j = b2 + 1; j <= len2; ++j) - dpcell[j] -= j - b2; - curr = (dpscore_t*)malloc(sizeof(dpscore_t) * (len1 + 1)); - last = (dpscore_t*)malloc(sizeof(dpscore_t) * (len1 + 1)); - - /* set first row */ - SET_INF(*curr); curr->M = 0; - for (i = 1, s = curr + 1; i < b1; ++i, ++s) { - SET_INF(*s); - set_end_D(s->D, dpcell[0] + i, s - 1); - } - s = curr; curr = last; last = s; - - /* core dynamic programming, part 1 */ - tmp_end = (b2 < len2)? b2 : len2 - 1; - for (j = 1; j <= tmp_end; ++j) { - q = dpcell[j]; s = curr; SET_INF(*s); - set_end_I(s->I, q, last); - end = (j + b1 <= len1 + 1)? (j + b1 - 1) : len1; - mat = score_matrix + seq2[j] * N_MATRIX_ROW; - ++s; ++q; - for (i = 1; i != end; ++i, ++s, ++q) { - set_M(s->M, q, last + i - 1, mat[seq1[i]]); /* this will change s->M ! */ - set_I(s->I, q, last + i); - set_D(s->D, q, s - 1); - } - set_M(s->M, q, last + i - 1, mat[seq1[i]]); - set_D(s->D, q, s - 1); - if (j + b1 - 1 > len1) { /* bug fixed, 040227 */ - set_end_I(s->I, q, last + i); - } else s->I = MINOR_INF; - s = curr; curr = last; last = s; - } - /* last row for part 1, use set_end_D() instead of set_D() */ - if (j == len2 && b2 != len2 - 1) { - q = dpcell[j]; s = curr; SET_INF(*s); - set_end_I(s->I, q, last); - end = (j + b1 <= len1 + 1)? (j + b1 - 1) : len1; - mat = score_matrix + seq2[j] * N_MATRIX_ROW; - ++s; ++q; - for (i = 1; i != end; ++i, ++s, ++q) { - set_M(s->M, q, last + i - 1, mat[seq1[i]]); /* this will change s->M ! */ - set_I(s->I, q, last + i); - set_end_D(s->D, q, s - 1); - } - set_M(s->M, q, last + i - 1, mat[seq1[i]]); - set_end_D(s->D, q, s - 1); - if (j + b1 - 1 > len1) { /* bug fixed, 040227 */ - set_end_I(s->I, q, last + i); - } else s->I = MINOR_INF; - s = curr; curr = last; last = s; - ++j; - } - - /* core dynamic programming, part 2 */ - for (; j <= len2 - b2 + 1; ++j) { - SET_INF(curr[j - b2]); - mat = score_matrix + seq2[j] * N_MATRIX_ROW; - end = j + b1 - 1; - for (i = j - b2 + 1, q = dpcell[j] + i, s = curr + i; i != end; ++i, ++s, ++q) { - set_M(s->M, q, last + i - 1, mat[seq1[i]]); - set_I(s->I, q, last + i); - set_D(s->D, q, s - 1); - } - set_M(s->M, q, last + i - 1, mat[seq1[i]]); - set_D(s->D, q, s - 1); - s->I = MINOR_INF; - s = curr; curr = last; last = s; - } - - /* core dynamic programming, part 3 */ - for (; j < len2; ++j) { - SET_INF(curr[j - b2]); - mat = score_matrix + seq2[j] * N_MATRIX_ROW; - for (i = j - b2 + 1, q = dpcell[j] + i, s = curr + i; i < len1; ++i, ++s, ++q) { - set_M(s->M, q, last + i - 1, mat[seq1[i]]); - set_I(s->I, q, last + i); - set_D(s->D, q, s - 1); - } - set_M(s->M, q, last + len1 - 1, mat[seq1[i]]); - set_end_I(s->I, q, last + i); - set_D(s->D, q, s - 1); - s = curr; curr = last; last = s; - } - /* last row */ - if (j == len2) { - SET_INF(curr[j - b2]); - mat = score_matrix + seq2[j] * N_MATRIX_ROW; - for (i = j - b2 + 1, q = dpcell[j] + i, s = curr + i; i < len1; ++i, ++s, ++q) { - set_M(s->M, q, last + i - 1, mat[seq1[i]]); - set_I(s->I, q, last + i); - set_end_D(s->D, q, s - 1); - } - set_M(s->M, q, last + len1 - 1, mat[seq1[i]]); - set_end_I(s->I, q, last + i); - set_end_D(s->D, q, s - 1); - s = curr; curr = last; last = s; - } - - *_score = last[len1].M; - if (n_cigar) { /* backtrace */ - path_t *p, *path = (path_t*)malloc(sizeof(path_t) * (len1 + len2 + 2)); - i = len1; j = len2; - q = dpcell[j] + i; - s = last + len1; - max = s->M; type = q->Mt; ctype = FROM_M; - if (s->I > max) { max = s->I; type = q->It; ctype = FROM_I; } - if (s->D > max) { max = s->D; type = q->Dt; ctype = FROM_D; } - - p = path; - p->ctype = ctype; p->i = i; p->j = j; /* bug fixed 040408 */ - ++p; - do { - switch (ctype) { - case FROM_M: --i; --j; break; - case FROM_I: --j; break; - case FROM_D: --i; break; - } - q = dpcell[j] + i; - ctype = type; - switch (type) { - case FROM_M: type = q->Mt; break; - case FROM_I: type = q->It; break; - case FROM_D: type = q->Dt; break; - } - p->ctype = ctype; p->i = i; p->j = j; - ++p; - } while (i || j); - cigar = ka_path2cigar32(path, p - path - 1, n_cigar); - free(path); - } - - /* free memory */ - for (j = b2 + 1; j <= len2; ++j) - dpcell[j] += j - b2; - for (j = 0; j <= len2; ++j) - free(dpcell[j]); - free(dpcell); - free(curr); free(last); - - return cigar; -} - -typedef struct { - int M, I, D; -} score_aux_t; - -#define MINUS_INF -0x40000000 - -// matrix: len2 rows and len1 columns -int ka_global_score(const uint8_t *_seq1, int len1, const uint8_t *_seq2, int len2, const ka_param2_t *ap) -{ - -#define __score_aux(_p, _q0, _sc, _io, _ie, _do, _de) { \ - int t1, t2; \ - score_aux_t *_q; \ - _q = _q0; \ - _p->M = _q->M >= _q->I? _q->M : _q->I; \ - _p->M = _p->M >= _q->D? _p->M : _q->D; \ - _p->M += (_sc); \ - ++_q; t1 = _q->M - _io - _ie; t2 = _q->I - _ie; _p->I = t1 >= t2? t1 : t2; \ - _q = _p-1; t1 = _q->M - _do - _de; t2 = _q->D - _de; _p->D = t1 >= t2? t1 : t2; \ - } - - int i, j, bw, scmat_size = ap->row, *scmat = ap->matrix, ret; - const uint8_t *seq1, *seq2; - score_aux_t *curr, *last, *swap; - bw = abs(len1 - len2) + ap->band_width; - i = len1 > len2? len1 : len2; - if (bw > i + 1) bw = i + 1; - seq1 = _seq1 - 1; seq2 = _seq2 - 1; - curr = calloc(len1 + 2, sizeof(score_aux_t)); - last = calloc(len1 + 2, sizeof(score_aux_t)); - { // the zero-th row - int x, end = len1; - score_aux_t *p; - j = 0; - x = j + bw; end = len1 < x? len1 : x; // band end - p = curr; - p->M = 0; p->I = p->D = MINUS_INF; - for (i = 1, p = &curr[1]; i <= end; ++i, ++p) - p->M = p->I = MINUS_INF, p->D = -(ap->edo + ap->ede * i); - p->M = p->I = p->D = MINUS_INF; - swap = curr; curr = last; last = swap; - } - for (j = 1; j < len2; ++j) { - int x, beg = 0, end = len1, *scrow, col_end; - score_aux_t *p; - x = j - bw; beg = 0 > x? 0 : x; // band start - x = j + bw; end = len1 < x? len1 : x; // band end - if (beg == 0) { // from zero-th column - p = curr; - p->M = p->D = MINUS_INF; p->I = -(ap->eio + ap->eie * j); - ++beg; // then beg = 1 - } - scrow = scmat + seq2[j] * scmat_size; - if (end == len1) col_end = 1, --end; - else col_end = 0; - for (i = beg, p = &curr[beg]; i <= end; ++i, ++p) - __score_aux(p, &last[i-1], scrow[(int)seq1[i]], ap->iio, ap->iie, ap->ido, ap->ide); - if (col_end) { - __score_aux(p, &last[i-1], scrow[(int)seq1[i]], ap->eio, ap->eie, ap->ido, ap->ide); - ++p; - } - p->M = p->I = p->D = MINUS_INF; -// for (i = 0; i <= len1; ++i) printf("(%d,%d,%d) ", curr[i].M, curr[i].I, curr[i].D); putchar('\n'); - swap = curr; curr = last; last = swap; - } - { // the last row - int x, beg = 0, *scrow; - score_aux_t *p; - j = len2; - x = j - bw; beg = 0 > x? 0 : x; // band start - if (beg == 0) { // from zero-th column - p = curr; - p->M = p->D = MINUS_INF; p->I = -(ap->eio + ap->eie * j); - ++beg; // then beg = 1 - } - scrow = scmat + seq2[j] * scmat_size; - for (i = beg, p = &curr[beg]; i < len1; ++i, ++p) - __score_aux(p, &last[i-1], scrow[(int)seq1[i]], ap->iio, ap->iie, ap->edo, ap->ede); - __score_aux(p, &last[i-1], scrow[(int)seq1[i]], ap->eio, ap->eie, ap->edo, ap->ede); -// for (i = 0; i <= len1; ++i) printf("(%d,%d,%d) ", curr[i].M, curr[i].I, curr[i].D); putchar('\n'); - } - ret = curr[len1].M >= curr[len1].I? curr[len1].M : curr[len1].I; - ret = ret >= curr[len1].D? ret : curr[len1].D; - free(curr); free(last); - return ret; -} - -#ifdef _MAIN -int main(int argc, char *argv[]) -{ -// int len1 = 35, len2 = 35; -// uint8_t *seq1 = (uint8_t*)"\0\0\3\3\2\0\0\0\1\0\2\1\2\1\3\2\3\3\3\0\2\3\2\1\1\3\3\3\2\3\3\1\0\0\1"; -// uint8_t *seq2 = (uint8_t*)"\0\0\3\3\2\0\0\0\1\0\2\1\2\1\3\2\3\3\3\0\2\3\2\1\1\3\3\3\2\3\3\1\0\1\0"; - int len1 = 4, len2 = 4; - uint8_t *seq1 = (uint8_t*)"\1\0\0\1"; - uint8_t *seq2 = (uint8_t*)"\1\0\1\0"; - int sc; -// ka_global_core(seq1, 2, seq2, 1, &ka_param_qual, &sc, 0); - sc = ka_global_score(seq1, len1, seq2, len2, &ka_param2_qual); - printf("%d\n", sc); - return 0; -} -#endif diff --git a/clipper/samtools/kaln.h b/clipper/samtools/kaln.h deleted file mode 100644 index 1ece132..0000000 --- a/clipper/samtools/kaln.h +++ /dev/null @@ -1,67 +0,0 @@ -/* The MIT License - - Copyright (c) 2003-2006, 2008, 2009 by Heng Li - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#ifndef LH3_KALN_H_ -#define LH3_KALN_H_ - -#include - -#define MINOR_INF -1073741823 - -typedef struct { - int gap_open; - int gap_ext; - int gap_end_open; - int gap_end_ext; - - int *matrix; - int row; - int band_width; -} ka_param_t; - -typedef struct { - int iio, iie, ido, ide; - int eio, eie, edo, ede; - int *matrix; - int row; - int band_width; -} ka_param2_t; - -#ifdef __cplusplus -extern "C" { -#endif - - uint32_t *ka_global_core(uint8_t *seq1, int len1, uint8_t *seq2, int len2, const ka_param_t *ap, - int *_score, int *n_cigar); - int ka_global_score(const uint8_t *_seq1, int len1, const uint8_t *_seq2, int len2, const ka_param2_t *ap); -#ifdef __cplusplus -} -#endif - -extern ka_param_t ka_param_blast; /* = { 5, 2, 5, 2, aln_sm_blast, 5, 50 }; */ -extern ka_param_t ka_param_qual; // only use this for global alignment!!! -extern ka_param2_t ka_param2_qual; // only use this for global alignment!!! - -#endif diff --git a/clipper/samtools/khash.h b/clipper/samtools/khash.h deleted file mode 100644 index a7e8056..0000000 --- a/clipper/samtools/khash.h +++ /dev/null @@ -1,528 +0,0 @@ -/* The MIT License - - Copyright (c) 2008, 2009, 2011 by Attractive Chaos - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -/* - An example: - -#include "khash.h" -KHASH_MAP_INIT_INT(32, char) -int main() { - int ret, is_missing; - khiter_t k; - khash_t(32) *h = kh_init(32); - k = kh_put(32, h, 5, &ret); - if (!ret) kh_del(32, h, k); - kh_value(h, k) = 10; - k = kh_get(32, h, 10); - is_missing = (k == kh_end(h)); - k = kh_get(32, h, 5); - kh_del(32, h, k); - for (k = kh_begin(h); k != kh_end(h); ++k) - if (kh_exist(h, k)) kh_value(h, k) = 1; - kh_destroy(32, h); - return 0; -} -*/ - -/* - 2011-02-14 (0.2.5): - - * Allow to declare global functions. - - 2009-09-26 (0.2.4): - - * Improve portability - - 2008-09-19 (0.2.3): - - * Corrected the example - * Improved interfaces - - 2008-09-11 (0.2.2): - - * Improved speed a little in kh_put() - - 2008-09-10 (0.2.1): - - * Added kh_clear() - * Fixed a compiling error - - 2008-09-02 (0.2.0): - - * Changed to token concatenation which increases flexibility. - - 2008-08-31 (0.1.2): - - * Fixed a bug in kh_get(), which has not been tested previously. - - 2008-08-31 (0.1.1): - - * Added destructor -*/ - - -#ifndef __AC_KHASH_H -#define __AC_KHASH_H - -/*! - @header - - Generic hash table library. - - @copyright Heng Li - */ - -#define AC_VERSION_KHASH_H "0.2.5" - -#include -#include -#include - -/* compipler specific configuration */ - -#if UINT_MAX == 0xffffffffu -typedef unsigned int khint32_t; -#elif ULONG_MAX == 0xffffffffu -typedef unsigned long khint32_t; -#endif - -#if ULONG_MAX == ULLONG_MAX -typedef unsigned long khint64_t; -#else -typedef unsigned long long khint64_t; -#endif - -#ifdef _MSC_VER -#define inline __inline -#endif - -typedef khint32_t khint_t; -typedef khint_t khiter_t; - -#define __ac_HASH_PRIME_SIZE 32 -static const khint32_t __ac_prime_list[__ac_HASH_PRIME_SIZE] = -{ - 0ul, 3ul, 11ul, 23ul, 53ul, - 97ul, 193ul, 389ul, 769ul, 1543ul, - 3079ul, 6151ul, 12289ul, 24593ul, 49157ul, - 98317ul, 196613ul, 393241ul, 786433ul, 1572869ul, - 3145739ul, 6291469ul, 12582917ul, 25165843ul, 50331653ul, - 100663319ul, 201326611ul, 402653189ul, 805306457ul, 1610612741ul, - 3221225473ul, 4294967291ul -}; - -#define __ac_isempty(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&2) -#define __ac_isdel(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&1) -#define __ac_iseither(flag, i) ((flag[i>>4]>>((i&0xfU)<<1))&3) -#define __ac_set_isdel_false(flag, i) (flag[i>>4]&=~(1ul<<((i&0xfU)<<1))) -#define __ac_set_isempty_false(flag, i) (flag[i>>4]&=~(2ul<<((i&0xfU)<<1))) -#define __ac_set_isboth_false(flag, i) (flag[i>>4]&=~(3ul<<((i&0xfU)<<1))) -#define __ac_set_isdel_true(flag, i) (flag[i>>4]|=1ul<<((i&0xfU)<<1)) - -static const double __ac_HASH_UPPER = 0.77; - -#define KHASH_DECLARE(name, khkey_t, khval_t) \ - typedef struct { \ - khint_t n_buckets, size, n_occupied, upper_bound; \ - khint32_t *flags; \ - khkey_t *keys; \ - khval_t *vals; \ - } kh_##name##_t; \ - extern kh_##name##_t *kh_init_##name(); \ - extern void kh_destroy_##name(kh_##name##_t *h); \ - extern void kh_clear_##name(kh_##name##_t *h); \ - extern khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key); \ - extern void kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \ - extern khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret); \ - extern void kh_del_##name(kh_##name##_t *h, khint_t x); - -#define KHASH_INIT2(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ - typedef struct { \ - khint_t n_buckets, size, n_occupied, upper_bound; \ - khint32_t *flags; \ - khkey_t *keys; \ - khval_t *vals; \ - } kh_##name##_t; \ - SCOPE kh_##name##_t *kh_init_##name() { \ - return (kh_##name##_t*)calloc(1, sizeof(kh_##name##_t)); \ - } \ - SCOPE void kh_destroy_##name(kh_##name##_t *h) \ - { \ - if (h) { \ - free(h->keys); free(h->flags); \ - free(h->vals); \ - free(h); \ - } \ - } \ - SCOPE void kh_clear_##name(kh_##name##_t *h) \ - { \ - if (h && h->flags) { \ - memset(h->flags, 0xaa, ((h->n_buckets>>4) + 1) * sizeof(khint32_t)); \ - h->size = h->n_occupied = 0; \ - } \ - } \ - SCOPE khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key) \ - { \ - if (h->n_buckets) { \ - khint_t inc, k, i, last; \ - k = __hash_func(key); i = k % h->n_buckets; \ - inc = 1 + k % (h->n_buckets - 1); last = i; \ - while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \ - if (i + inc >= h->n_buckets) i = i + inc - h->n_buckets; \ - else i += inc; \ - if (i == last) return h->n_buckets; \ - } \ - return __ac_iseither(h->flags, i)? h->n_buckets : i; \ - } else return 0; \ - } \ - SCOPE void kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets) \ - { \ - khint32_t *new_flags = 0; \ - khint_t j = 1; \ - { \ - khint_t t = __ac_HASH_PRIME_SIZE - 1; \ - while (__ac_prime_list[t] > new_n_buckets) --t; \ - new_n_buckets = __ac_prime_list[t+1]; \ - if (h->size >= (khint_t)(new_n_buckets * __ac_HASH_UPPER + 0.5)) j = 0; \ - else { \ - new_flags = (khint32_t*)malloc(((new_n_buckets>>4) + 1) * sizeof(khint32_t)); \ - memset(new_flags, 0xaa, ((new_n_buckets>>4) + 1) * sizeof(khint32_t)); \ - if (h->n_buckets < new_n_buckets) { \ - h->keys = (khkey_t*)realloc(h->keys, new_n_buckets * sizeof(khkey_t)); \ - if (kh_is_map) \ - h->vals = (khval_t*)realloc(h->vals, new_n_buckets * sizeof(khval_t)); \ - } \ - } \ - } \ - if (j) { \ - for (j = 0; j != h->n_buckets; ++j) { \ - if (__ac_iseither(h->flags, j) == 0) { \ - khkey_t key = h->keys[j]; \ - khval_t val; \ - if (kh_is_map) val = h->vals[j]; \ - __ac_set_isdel_true(h->flags, j); \ - while (1) { \ - khint_t inc, k, i; \ - k = __hash_func(key); \ - i = k % new_n_buckets; \ - inc = 1 + k % (new_n_buckets - 1); \ - while (!__ac_isempty(new_flags, i)) { \ - if (i + inc >= new_n_buckets) i = i + inc - new_n_buckets; \ - else i += inc; \ - } \ - __ac_set_isempty_false(new_flags, i); \ - if (i < h->n_buckets && __ac_iseither(h->flags, i) == 0) { \ - { khkey_t tmp = h->keys[i]; h->keys[i] = key; key = tmp; } \ - if (kh_is_map) { khval_t tmp = h->vals[i]; h->vals[i] = val; val = tmp; } \ - __ac_set_isdel_true(h->flags, i); \ - } else { \ - h->keys[i] = key; \ - if (kh_is_map) h->vals[i] = val; \ - break; \ - } \ - } \ - } \ - } \ - if (h->n_buckets > new_n_buckets) { \ - h->keys = (khkey_t*)realloc(h->keys, new_n_buckets * sizeof(khkey_t)); \ - if (kh_is_map) \ - h->vals = (khval_t*)realloc(h->vals, new_n_buckets * sizeof(khval_t)); \ - } \ - free(h->flags); \ - h->flags = new_flags; \ - h->n_buckets = new_n_buckets; \ - h->n_occupied = h->size; \ - h->upper_bound = (khint_t)(h->n_buckets * __ac_HASH_UPPER + 0.5); \ - } \ - } \ - SCOPE khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret) \ - { \ - khint_t x; \ - if (h->n_occupied >= h->upper_bound) { \ - if (h->n_buckets > (h->size<<1)) kh_resize_##name(h, h->n_buckets - 1); \ - else kh_resize_##name(h, h->n_buckets + 1); \ - } \ - { \ - khint_t inc, k, i, site, last; \ - x = site = h->n_buckets; k = __hash_func(key); i = k % h->n_buckets; \ - if (__ac_isempty(h->flags, i)) x = i; \ - else { \ - inc = 1 + k % (h->n_buckets - 1); last = i; \ - while (!__ac_isempty(h->flags, i) && (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \ - if (__ac_isdel(h->flags, i)) site = i; \ - if (i + inc >= h->n_buckets) i = i + inc - h->n_buckets; \ - else i += inc; \ - if (i == last) { x = site; break; } \ - } \ - if (x == h->n_buckets) { \ - if (__ac_isempty(h->flags, i) && site != h->n_buckets) x = site; \ - else x = i; \ - } \ - } \ - } \ - if (__ac_isempty(h->flags, x)) { \ - h->keys[x] = key; \ - __ac_set_isboth_false(h->flags, x); \ - ++h->size; ++h->n_occupied; \ - *ret = 1; \ - } else if (__ac_isdel(h->flags, x)) { \ - h->keys[x] = key; \ - __ac_set_isboth_false(h->flags, x); \ - ++h->size; \ - *ret = 2; \ - } else *ret = 0; \ - return x; \ - } \ - SCOPE void kh_del_##name(kh_##name##_t *h, khint_t x) \ - { \ - if (x != h->n_buckets && !__ac_iseither(h->flags, x)) { \ - __ac_set_isdel_true(h->flags, x); \ - --h->size; \ - } \ - } - -#define KHASH_INIT(name, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ - KHASH_INIT2(name, static inline, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) - -/* --- BEGIN OF HASH FUNCTIONS --- */ - -/*! @function - @abstract Integer hash function - @param key The integer [khint32_t] - @return The hash value [khint_t] - */ -#define kh_int_hash_func(key) (khint32_t)(key) -/*! @function - @abstract Integer comparison function - */ -#define kh_int_hash_equal(a, b) ((a) == (b)) -/*! @function - @abstract 64-bit integer hash function - @param key The integer [khint64_t] - @return The hash value [khint_t] - */ -#define kh_int64_hash_func(key) (khint32_t)((key)>>33^(key)^(key)<<11) -/*! @function - @abstract 64-bit integer comparison function - */ -#define kh_int64_hash_equal(a, b) ((a) == (b)) -/*! @function - @abstract const char* hash function - @param s Pointer to a null terminated string - @return The hash value - */ -static inline khint_t __ac_X31_hash_string(const char *s) -{ - khint_t h = *s; - if (h) for (++s ; *s; ++s) h = (h << 5) - h + *s; - return h; -} -/*! @function - @abstract Another interface to const char* hash function - @param key Pointer to a null terminated string [const char*] - @return The hash value [khint_t] - */ -#define kh_str_hash_func(key) __ac_X31_hash_string(key) -/*! @function - @abstract Const char* comparison function - */ -#define kh_str_hash_equal(a, b) (strcmp(a, b) == 0) - -/* --- END OF HASH FUNCTIONS --- */ - -/* Other necessary macros... */ - -/*! - @abstract Type of the hash table. - @param name Name of the hash table [symbol] - */ -#define khash_t(name) kh_##name##_t - -/*! @function - @abstract Initiate a hash table. - @param name Name of the hash table [symbol] - @return Pointer to the hash table [khash_t(name)*] - */ -#define kh_init(name) kh_init_##name() - -/*! @function - @abstract Destroy a hash table. - @param name Name of the hash table [symbol] - @param h Pointer to the hash table [khash_t(name)*] - */ -#define kh_destroy(name, h) kh_destroy_##name(h) - -/*! @function - @abstract Reset a hash table without deallocating memory. - @param name Name of the hash table [symbol] - @param h Pointer to the hash table [khash_t(name)*] - */ -#define kh_clear(name, h) kh_clear_##name(h) - -/*! @function - @abstract Resize a hash table. - @param name Name of the hash table [symbol] - @param h Pointer to the hash table [khash_t(name)*] - @param s New size [khint_t] - */ -#define kh_resize(name, h, s) kh_resize_##name(h, s) - -/*! @function - @abstract Insert a key to the hash table. - @param name Name of the hash table [symbol] - @param h Pointer to the hash table [khash_t(name)*] - @param k Key [type of keys] - @param r Extra return code: 0 if the key is present in the hash table; - 1 if the bucket is empty (never used); 2 if the element in - the bucket has been deleted [int*] - @return Iterator to the inserted element [khint_t] - */ -#define kh_put(name, h, k, r) kh_put_##name(h, k, r) - -/*! @function - @abstract Retrieve a key from the hash table. - @param name Name of the hash table [symbol] - @param h Pointer to the hash table [khash_t(name)*] - @param k Key [type of keys] - @return Iterator to the found element, or kh_end(h) is the element is absent [khint_t] - */ -#define kh_get(name, h, k) kh_get_##name(h, k) - -/*! @function - @abstract Remove a key from the hash table. - @param name Name of the hash table [symbol] - @param h Pointer to the hash table [khash_t(name)*] - @param k Iterator to the element to be deleted [khint_t] - */ -#define kh_del(name, h, k) kh_del_##name(h, k) - - -/*! @function - @abstract Test whether a bucket contains data. - @param h Pointer to the hash table [khash_t(name)*] - @param x Iterator to the bucket [khint_t] - @return 1 if containing data; 0 otherwise [int] - */ -#define kh_exist(h, x) (!__ac_iseither((h)->flags, (x))) - -/*! @function - @abstract Get key given an iterator - @param h Pointer to the hash table [khash_t(name)*] - @param x Iterator to the bucket [khint_t] - @return Key [type of keys] - */ -#define kh_key(h, x) ((h)->keys[x]) - -/*! @function - @abstract Get value given an iterator - @param h Pointer to the hash table [khash_t(name)*] - @param x Iterator to the bucket [khint_t] - @return Value [type of values] - @discussion For hash sets, calling this results in segfault. - */ -#define kh_val(h, x) ((h)->vals[x]) - -/*! @function - @abstract Alias of kh_val() - */ -#define kh_value(h, x) ((h)->vals[x]) - -/*! @function - @abstract Get the start iterator - @param h Pointer to the hash table [khash_t(name)*] - @return The start iterator [khint_t] - */ -#define kh_begin(h) (khint_t)(0) - -/*! @function - @abstract Get the end iterator - @param h Pointer to the hash table [khash_t(name)*] - @return The end iterator [khint_t] - */ -#define kh_end(h) ((h)->n_buckets) - -/*! @function - @abstract Get the number of elements in the hash table - @param h Pointer to the hash table [khash_t(name)*] - @return Number of elements in the hash table [khint_t] - */ -#define kh_size(h) ((h)->size) - -/*! @function - @abstract Get the number of buckets in the hash table - @param h Pointer to the hash table [khash_t(name)*] - @return Number of buckets in the hash table [khint_t] - */ -#define kh_n_buckets(h) ((h)->n_buckets) - -/* More conenient interfaces */ - -/*! @function - @abstract Instantiate a hash set containing integer keys - @param name Name of the hash table [symbol] - */ -#define KHASH_SET_INIT_INT(name) \ - KHASH_INIT(name, khint32_t, char, 0, kh_int_hash_func, kh_int_hash_equal) - -/*! @function - @abstract Instantiate a hash map containing integer keys - @param name Name of the hash table [symbol] - @param khval_t Type of values [type] - */ -#define KHASH_MAP_INIT_INT(name, khval_t) \ - KHASH_INIT(name, khint32_t, khval_t, 1, kh_int_hash_func, kh_int_hash_equal) - -/*! @function - @abstract Instantiate a hash map containing 64-bit integer keys - @param name Name of the hash table [symbol] - */ -#define KHASH_SET_INIT_INT64(name) \ - KHASH_INIT(name, khint64_t, char, 0, kh_int64_hash_func, kh_int64_hash_equal) - -/*! @function - @abstract Instantiate a hash map containing 64-bit integer keys - @param name Name of the hash table [symbol] - @param khval_t Type of values [type] - */ -#define KHASH_MAP_INIT_INT64(name, khval_t) \ - KHASH_INIT(name, khint64_t, khval_t, 1, kh_int64_hash_func, kh_int64_hash_equal) - -typedef const char *kh_cstr_t; -/*! @function - @abstract Instantiate a hash map containing const char* keys - @param name Name of the hash table [symbol] - */ -#define KHASH_SET_INIT_STR(name) \ - KHASH_INIT(name, kh_cstr_t, char, 0, kh_str_hash_func, kh_str_hash_equal) - -/*! @function - @abstract Instantiate a hash map containing const char* keys - @param name Name of the hash table [symbol] - @param khval_t Type of values [type] - */ -#define KHASH_MAP_INIT_STR(name, khval_t) \ - KHASH_INIT(name, kh_cstr_t, khval_t, 1, kh_str_hash_func, kh_str_hash_equal) - -#endif /* __AC_KHASH_H */ diff --git a/clipper/samtools/klist.h b/clipper/samtools/klist.h deleted file mode 100644 index 2f17016..0000000 --- a/clipper/samtools/klist.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef _LH3_KLIST_H -#define _LH3_KLIST_H - -#include - -#define KMEMPOOL_INIT(name, kmptype_t, kmpfree_f) \ - typedef struct { \ - size_t cnt, n, max; \ - kmptype_t **buf; \ - } kmp_##name##_t; \ - static inline kmp_##name##_t *kmp_init_##name() { \ - return calloc(1, sizeof(kmp_##name##_t)); \ - } \ - static inline void kmp_destroy_##name(kmp_##name##_t *mp) { \ - size_t k; \ - for (k = 0; k < mp->n; ++k) { \ - kmpfree_f(mp->buf[k]); free(mp->buf[k]); \ - } \ - free(mp->buf); free(mp); \ - } \ - static inline kmptype_t *kmp_alloc_##name(kmp_##name##_t *mp) { \ - ++mp->cnt; \ - if (mp->n == 0) return calloc(1, sizeof(kmptype_t)); \ - return mp->buf[--mp->n]; \ - } \ - static inline void kmp_free_##name(kmp_##name##_t *mp, kmptype_t *p) { \ - --mp->cnt; \ - if (mp->n == mp->max) { \ - mp->max = mp->max? mp->max<<1 : 16; \ - mp->buf = realloc(mp->buf, sizeof(void*) * mp->max); \ - } \ - mp->buf[mp->n++] = p; \ - } - -#define kmempool_t(name) kmp_##name##_t -#define kmp_init(name) kmp_init_##name() -#define kmp_destroy(name, mp) kmp_destroy_##name(mp) -#define kmp_alloc(name, mp) kmp_alloc_##name(mp) -#define kmp_free(name, mp, p) kmp_free_##name(mp, p) - -#define KLIST_INIT(name, kltype_t, kmpfree_t) \ - struct __kl1_##name { \ - kltype_t data; \ - struct __kl1_##name *next; \ - }; \ - typedef struct __kl1_##name kl1_##name; \ - KMEMPOOL_INIT(name, kl1_##name, kmpfree_t) \ - typedef struct { \ - kl1_##name *head, *tail; \ - kmp_##name##_t *mp; \ - size_t size; \ - } kl_##name##_t; \ - static inline kl_##name##_t *kl_init_##name() { \ - kl_##name##_t *kl = calloc(1, sizeof(kl_##name##_t)); \ - kl->mp = kmp_init(name); \ - kl->head = kl->tail = kmp_alloc(name, kl->mp); \ - kl->head->next = 0; \ - return kl; \ - } \ - static inline void kl_destroy_##name(kl_##name##_t *kl) { \ - kl1_##name *p; \ - for (p = kl->head; p != kl->tail; p = p->next) \ - kmp_free(name, kl->mp, p); \ - kmp_free(name, kl->mp, p); \ - kmp_destroy(name, kl->mp); \ - free(kl); \ - } \ - static inline kltype_t *kl_pushp_##name(kl_##name##_t *kl) { \ - kl1_##name *q, *p = kmp_alloc(name, kl->mp); \ - q = kl->tail; p->next = 0; kl->tail->next = p; kl->tail = p; \ - ++kl->size; \ - return &q->data; \ - } \ - static inline int kl_shift_##name(kl_##name##_t *kl, kltype_t *d) { \ - kl1_##name *p; \ - if (kl->head->next == 0) return -1; \ - --kl->size; \ - p = kl->head; kl->head = kl->head->next; \ - if (d) *d = p->data; \ - kmp_free(name, kl->mp, p); \ - return 0; \ - } - -#define kliter_t(name) kl1_##name -#define klist_t(name) kl_##name##_t -#define kl_val(iter) ((iter)->data) -#define kl_next(iter) ((iter)->next) -#define kl_begin(kl) ((kl)->head) -#define kl_end(kl) ((kl)->tail) - -#define kl_init(name) kl_init_##name() -#define kl_destroy(name, kl) kl_destroy_##name(kl) -#define kl_pushp(name, kl) kl_pushp_##name(kl) -#define kl_shift(name, kl, d) kl_shift_##name(kl, d) - -#endif diff --git a/clipper/samtools/knetfile.c b/clipper/samtools/knetfile.c deleted file mode 100644 index af09146..0000000 --- a/clipper/samtools/knetfile.c +++ /dev/null @@ -1,632 +0,0 @@ -/* The MIT License - - Copyright (c) 2008 by Genome Research Ltd (GRL). - 2010 by Attractive Chaos - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -/* Probably I will not do socket programming in the next few years and - therefore I decide to heavily annotate this file, for Linux and - Windows as well. -ac */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifndef _WIN32 -#include -#include -#include -#endif - -#include "knetfile.h" - -/* In winsock.h, the type of a socket is SOCKET, which is: "typedef - * u_int SOCKET". An invalid SOCKET is: "(SOCKET)(~0)", or signed - * integer -1. In knetfile.c, I use "int" for socket type - * throughout. This should be improved to avoid confusion. - * - * In Linux/Mac, recv() and read() do almost the same thing. You can see - * in the header file that netread() is simply an alias of read(). In - * Windows, however, they are different and using recv() is mandatory. - */ - -/* This function tests if the file handler is ready for reading (or - * writing if is_read==0). */ -static int socket_wait(int fd, int is_read) -{ - fd_set fds, *fdr = 0, *fdw = 0; - struct timeval tv; - int ret; - tv.tv_sec = 5; tv.tv_usec = 0; // 5 seconds time out - FD_ZERO(&fds); - FD_SET(fd, &fds); - if (is_read) fdr = &fds; - else fdw = &fds; - ret = select(fd+1, fdr, fdw, 0, &tv); -#ifndef _WIN32 - if (ret == -1) perror("select"); -#else - if (ret == 0) - fprintf(stderr, "select time-out\n"); - else if (ret == SOCKET_ERROR) - fprintf(stderr, "select: %d\n", WSAGetLastError()); -#endif - return ret; -} - -#ifndef _WIN32 -/* This function does not work with Windows due to the lack of - * getaddrinfo() in winsock. It is addapted from an example in "Beej's - * Guide to Network Programming" (http://beej.us/guide/bgnet/). */ -static int socket_connect(const char *host, const char *port) -{ -#define __err_connect(func) do { perror(func); freeaddrinfo(res); return -1; } while (0) - - int on = 1, fd; - struct linger lng = { 0, 0 }; - struct addrinfo hints, *res = 0; - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - /* In Unix/Mac, getaddrinfo() is the most convenient way to get - * server information. */ - if (getaddrinfo(host, port, &hints, &res) != 0) __err_connect("getaddrinfo"); - if ((fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1) __err_connect("socket"); - /* The following two setsockopt() are used by ftplib - * (http://nbpfaus.net/~pfau/ftplib/). I am not sure if they - * necessary. */ - if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) __err_connect("setsockopt"); - if (setsockopt(fd, SOL_SOCKET, SO_LINGER, &lng, sizeof(lng)) == -1) __err_connect("setsockopt"); - if (connect(fd, res->ai_addr, res->ai_addrlen) != 0) __err_connect("connect"); - freeaddrinfo(res); - return fd; -} -#else -/* MinGW's printf has problem with "%lld" */ -char *int64tostr(char *buf, int64_t x) -{ - int cnt; - int i = 0; - do { - buf[i++] = '0' + x % 10; - x /= 10; - } while (x); - buf[i] = 0; - for (cnt = i, i = 0; i < cnt/2; ++i) { - int c = buf[i]; buf[i] = buf[cnt-i-1]; buf[cnt-i-1] = c; - } - return buf; -} - -int64_t strtoint64(const char *buf) -{ - int64_t x; - for (x = 0; *buf != '\0'; ++buf) - x = x * 10 + ((int64_t) *buf - 48); - return x; -} -/* In windows, the first thing is to establish the TCP connection. */ -int knet_win32_init() -{ - WSADATA wsaData; - return WSAStartup(MAKEWORD(2, 2), &wsaData); -} -void knet_win32_destroy() -{ - WSACleanup(); -} -/* A slightly modfied version of the following function also works on - * Mac (and presummably Linux). However, this function is not stable on - * my Mac. It sometimes works fine but sometimes does not. Therefore for - * non-Windows OS, I do not use this one. */ -static SOCKET socket_connect(const char *host, const char *port) -{ -#define __err_connect(func) \ - do { \ - fprintf(stderr, "%s: %d\n", func, WSAGetLastError()); \ - return -1; \ - } while (0) - - int on = 1; - SOCKET fd; - struct linger lng = { 0, 0 }; - struct sockaddr_in server; - struct hostent *hp = 0; - // open socket - if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) __err_connect("socket"); - if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on)) == -1) __err_connect("setsockopt"); - if (setsockopt(fd, SOL_SOCKET, SO_LINGER, (char*)&lng, sizeof(lng)) == -1) __err_connect("setsockopt"); - // get host info - if (isalpha(host[0])) hp = gethostbyname(host); - else { - struct in_addr addr; - addr.s_addr = inet_addr(host); - hp = gethostbyaddr((char*)&addr, 4, AF_INET); - } - if (hp == 0) __err_connect("gethost"); - // connect - server.sin_addr.s_addr = *((unsigned long*)hp->h_addr); - server.sin_family= AF_INET; - server.sin_port = htons(atoi(port)); - if (connect(fd, (struct sockaddr*)&server, sizeof(server)) != 0) __err_connect("connect"); - // freehostent(hp); // strangely in MSDN, hp is NOT freed (memory leak?!) - return fd; -} -#endif - -static off_t my_netread(int fd, void *buf, off_t len) -{ - off_t rest = len, curr, l = 0; - /* recv() and read() may not read the required length of data with - * one call. They have to be called repeatedly. */ - while (rest) { - if (socket_wait(fd, 1) <= 0) break; // socket is not ready for reading - curr = netread(fd, buf + l, rest); - /* According to the glibc manual, section 13.2, a zero returned - * value indicates end-of-file (EOF), which should mean that - * read() will not return zero if EOF has not been met but data - * are not immediately available. */ - if (curr == 0) break; - l += curr; rest -= curr; - } - return l; -} - -/************************* - * FTP specific routines * - *************************/ - -static int kftp_get_response(knetFile *ftp) -{ -#ifndef _WIN32 - unsigned char c; -#else - char c; -#endif - int n = 0; - char *p; - if (socket_wait(ftp->ctrl_fd, 1) <= 0) return 0; - while (netread(ftp->ctrl_fd, &c, 1)) { // FIXME: this is *VERY BAD* for unbuffered I/O - //fputc(c, stderr); - if (n >= ftp->max_response) { - ftp->max_response = ftp->max_response? ftp->max_response<<1 : 256; - ftp->response = realloc(ftp->response, ftp->max_response); - } - ftp->response[n++] = c; - if (c == '\n') { - if (n >= 4 && isdigit(ftp->response[0]) && isdigit(ftp->response[1]) && isdigit(ftp->response[2]) - && ftp->response[3] != '-') break; - n = 0; - continue; - } - } - if (n < 2) return -1; - ftp->response[n-2] = 0; - return strtol(ftp->response, &p, 0); -} - -static int kftp_send_cmd(knetFile *ftp, const char *cmd, int is_get) -{ - if (socket_wait(ftp->ctrl_fd, 0) <= 0) return -1; // socket is not ready for writing - netwrite(ftp->ctrl_fd, cmd, strlen(cmd)); - return is_get? kftp_get_response(ftp) : 0; -} - -static int kftp_pasv_prep(knetFile *ftp) -{ - char *p; - int v[6]; - kftp_send_cmd(ftp, "PASV\r\n", 1); - for (p = ftp->response; *p && *p != '('; ++p); - if (*p != '(') return -1; - ++p; - sscanf(p, "%d,%d,%d,%d,%d,%d", &v[0], &v[1], &v[2], &v[3], &v[4], &v[5]); - memcpy(ftp->pasv_ip, v, 4 * sizeof(int)); - ftp->pasv_port = (v[4]<<8&0xff00) + v[5]; - return 0; -} - - -static int kftp_pasv_connect(knetFile *ftp) -{ - char host[80], port[10]; - if (ftp->pasv_port == 0) { - fprintf(stderr, "[kftp_pasv_connect] kftp_pasv_prep() is not called before hand.\n"); - return -1; - } - sprintf(host, "%d.%d.%d.%d", ftp->pasv_ip[0], ftp->pasv_ip[1], ftp->pasv_ip[2], ftp->pasv_ip[3]); - sprintf(port, "%d", ftp->pasv_port); - ftp->fd = socket_connect(host, port); - if (ftp->fd == -1) return -1; - return 0; -} - -int kftp_connect(knetFile *ftp) -{ - ftp->ctrl_fd = socket_connect(ftp->host, ftp->port); - if (ftp->ctrl_fd == -1) return -1; - kftp_get_response(ftp); - kftp_send_cmd(ftp, "USER anonymous\r\n", 1); - kftp_send_cmd(ftp, "PASS kftp@\r\n", 1); - kftp_send_cmd(ftp, "TYPE I\r\n", 1); - return 0; -} - -int kftp_reconnect(knetFile *ftp) -{ - if (ftp->ctrl_fd != -1) { - netclose(ftp->ctrl_fd); - ftp->ctrl_fd = -1; - } - netclose(ftp->fd); - ftp->fd = -1; - return kftp_connect(ftp); -} - -// initialize ->type, ->host, ->retr and ->size -knetFile *kftp_parse_url(const char *fn, const char *mode) -{ - knetFile *fp; - char *p; - int l; - if (strstr(fn, "ftp://") != fn) return 0; - for (p = (char*)fn + 6; *p && *p != '/'; ++p); - if (*p != '/') return 0; - l = p - fn - 6; - fp = calloc(1, sizeof(knetFile)); - fp->type = KNF_TYPE_FTP; - fp->fd = -1; - /* the Linux/Mac version of socket_connect() also recognizes a port - * like "ftp", but the Windows version does not. */ - fp->port = strdup("21"); - fp->host = calloc(l + 1, 1); - if (strchr(mode, 'c')) fp->no_reconnect = 1; - strncpy(fp->host, fn + 6, l); - fp->retr = calloc(strlen(p) + 8, 1); - sprintf(fp->retr, "RETR %s\r\n", p); - fp->size_cmd = calloc(strlen(p) + 8, 1); - sprintf(fp->size_cmd, "SIZE %s\r\n", p); - fp->seek_offset = 0; - return fp; -} -// place ->fd at offset off -int kftp_connect_file(knetFile *fp) -{ - int ret; - long long file_size; - if (fp->fd != -1) { - netclose(fp->fd); - if (fp->no_reconnect) kftp_get_response(fp); - } - kftp_pasv_prep(fp); - kftp_send_cmd(fp, fp->size_cmd, 1); -#ifndef _WIN32 - if ( sscanf(fp->response,"%*d %lld", &file_size) != 1 ) - { - fprintf(stderr,"[kftp_connect_file] %s\n", fp->response); - return -1; - } -#else - const char *p = fp->response; - while (*p != ' ') ++p; - while (*p < '0' || *p > '9') ++p; - file_size = strtoint64(p); -#endif - fp->file_size = file_size; - if (fp->offset>=0) { - char tmp[32]; -#ifndef _WIN32 - sprintf(tmp, "REST %lld\r\n", (long long)fp->offset); -#else - strcpy(tmp, "REST "); - int64tostr(tmp + 5, fp->offset); - strcat(tmp, "\r\n"); -#endif - kftp_send_cmd(fp, tmp, 1); - } - kftp_send_cmd(fp, fp->retr, 0); - kftp_pasv_connect(fp); - ret = kftp_get_response(fp); - if (ret != 150) { - fprintf(stderr, "[kftp_connect_file] %s\n", fp->response); - netclose(fp->fd); - fp->fd = -1; - return -1; - } - fp->is_ready = 1; - return 0; -} - - -/************************** - * HTTP specific routines * - **************************/ - -knetFile *khttp_parse_url(const char *fn, const char *mode) -{ - knetFile *fp; - char *p, *proxy, *q; - int l; - if (strstr(fn, "http://") != fn) return 0; - // set ->http_host - for (p = (char*)fn + 7; *p && *p != '/'; ++p); - l = p - fn - 7; - fp = calloc(1, sizeof(knetFile)); - fp->http_host = calloc(l + 1, 1); - strncpy(fp->http_host, fn + 7, l); - fp->http_host[l] = 0; - for (q = fp->http_host; *q && *q != ':'; ++q); - if (*q == ':') *q++ = 0; - // get http_proxy - proxy = getenv("http_proxy"); - // set ->host, ->port and ->path - if (proxy == 0) { - fp->host = strdup(fp->http_host); // when there is no proxy, server name is identical to http_host name. - fp->port = strdup(*q? q : "80"); - fp->path = strdup(*p? p : "/"); - } else { - fp->host = (strstr(proxy, "http://") == proxy)? strdup(proxy + 7) : strdup(proxy); - for (q = fp->host; *q && *q != ':'; ++q); - if (*q == ':') *q++ = 0; - fp->port = strdup(*q? q : "80"); - fp->path = strdup(fn); - } - fp->type = KNF_TYPE_HTTP; - fp->ctrl_fd = fp->fd = -1; - fp->seek_offset = 0; - return fp; -} - -int khttp_connect_file(knetFile *fp) -{ - int ret, l = 0; - char *buf, *p; - if (fp->fd != -1) netclose(fp->fd); - fp->fd = socket_connect(fp->host, fp->port); - buf = calloc(0x10000, 1); // FIXME: I am lazy... But in principle, 64KB should be large enough. - l += sprintf(buf + l, "GET %s HTTP/1.0\r\nHost: %s\r\n", fp->path, fp->http_host); - l += sprintf(buf + l, "Range: bytes=%lld-\r\n", (long long)fp->offset); - l += sprintf(buf + l, "\r\n"); - netwrite(fp->fd, buf, l); - l = 0; - while (netread(fp->fd, buf + l, 1)) { // read HTTP header; FIXME: bad efficiency - if (buf[l] == '\n' && l >= 3) - if (strncmp(buf + l - 3, "\r\n\r\n", 4) == 0) break; - ++l; - } - buf[l] = 0; - if (l < 14) { // prematured header - netclose(fp->fd); - fp->fd = -1; - return -1; - } - ret = strtol(buf + 8, &p, 0); // HTTP return code - if (ret == 200 && fp->offset>0) { // 200 (complete result); then skip beginning of the file - off_t rest = fp->offset; - while (rest) { - off_t l = rest < 0x10000? rest : 0x10000; - rest -= my_netread(fp->fd, buf, l); - } - } else if (ret != 206 && ret != 200) { - free(buf); - fprintf(stderr, "[khttp_connect_file] fail to open file (HTTP code: %d).\n", ret); - netclose(fp->fd); - fp->fd = -1; - return -1; - } - free(buf); - fp->is_ready = 1; - return 0; -} - -/******************** - * Generic routines * - ********************/ - -knetFile *knet_open(const char *fn, const char *mode) -{ - knetFile *fp = 0; - if (mode[0] != 'r') { - fprintf(stderr, "[kftp_open] only mode \"r\" is supported.\n"); - return 0; - } - if (strstr(fn, "ftp://") == fn) { - fp = kftp_parse_url(fn, mode); - if (fp == 0) return 0; - if (kftp_connect(fp) == -1) { - knet_close(fp); - return 0; - } - kftp_connect_file(fp); - } else if (strstr(fn, "http://") == fn) { - fp = khttp_parse_url(fn, mode); - if (fp == 0) return 0; - khttp_connect_file(fp); - } else { // local file -#ifdef _WIN32 - /* In windows, O_BINARY is necessary. In Linux/Mac, O_BINARY may - * be undefined on some systems, although it is defined on my - * Mac and the Linux I have tested on. */ - int fd = open(fn, O_RDONLY | O_BINARY); -#else - int fd = open(fn, O_RDONLY); -#endif - if (fd == -1) { - perror("open"); - return 0; - } - fp = (knetFile*)calloc(1, sizeof(knetFile)); - fp->type = KNF_TYPE_LOCAL; - fp->fd = fd; - fp->ctrl_fd = -1; - } - if (fp && fp->fd == -1) { - knet_close(fp); - return 0; - } - return fp; -} - -knetFile *knet_dopen(int fd, const char *mode) -{ - knetFile *fp = (knetFile*)calloc(1, sizeof(knetFile)); - fp->type = KNF_TYPE_LOCAL; - fp->fd = fd; - return fp; -} - -off_t knet_read(knetFile *fp, void *buf, off_t len) -{ - off_t l = 0; - if (fp->fd == -1) return 0; - if (fp->type == KNF_TYPE_FTP) { - if (fp->is_ready == 0) { - if (!fp->no_reconnect) kftp_reconnect(fp); - kftp_connect_file(fp); - } - } else if (fp->type == KNF_TYPE_HTTP) { - if (fp->is_ready == 0) - khttp_connect_file(fp); - } - if (fp->type == KNF_TYPE_LOCAL) { // on Windows, the following block is necessary; not on UNIX - off_t rest = len, curr; - while (rest) { - do { - curr = read(fp->fd, buf + l, rest); - } while (curr < 0 && EINTR == errno); - if (curr < 0) return -1; - if (curr == 0) break; - l += curr; rest -= curr; - } - } else l = my_netread(fp->fd, buf, len); - fp->offset += l; - return l; -} - -off_t knet_seek(knetFile *fp, int64_t off, int whence) -{ - if (whence == SEEK_SET && off == fp->offset) return 0; - if (fp->type == KNF_TYPE_LOCAL) { - /* Be aware that lseek() returns the offset after seeking, - * while fseek() returns zero on success. */ - off_t offset = lseek(fp->fd, off, whence); - if (offset == -1) { - // Be silent, it is OK for knet_seek to fail when the file is streamed - // fprintf(stderr,"[knet_seek] %s\n", strerror(errno)); - return -1; - } - fp->offset = offset; - return 0; - } - else if (fp->type == KNF_TYPE_FTP) - { - if (whence==SEEK_CUR) - fp->offset += off; - else if (whence==SEEK_SET) - fp->offset = off; - else if ( whence==SEEK_END) - fp->offset = fp->file_size+off; - fp->is_ready = 0; - return 0; - } - else if (fp->type == KNF_TYPE_HTTP) - { - if (whence == SEEK_END) { // FIXME: can we allow SEEK_END in future? - fprintf(stderr, "[knet_seek] SEEK_END is not supported for HTTP. Offset is unchanged.\n"); - errno = ESPIPE; - return -1; - } - if (whence==SEEK_CUR) - fp->offset += off; - else if (whence==SEEK_SET) - fp->offset = off; - fp->is_ready = 0; - return 0; - } - errno = EINVAL; - fprintf(stderr,"[knet_seek] %s\n", strerror(errno)); - return -1; -} - -int knet_close(knetFile *fp) -{ - if (fp == 0) return 0; - if (fp->ctrl_fd != -1) netclose(fp->ctrl_fd); // FTP specific - if (fp->fd != -1) { - /* On Linux/Mac, netclose() is an alias of close(), but on - * Windows, it is an alias of closesocket(). */ - if (fp->type == KNF_TYPE_LOCAL) close(fp->fd); - else netclose(fp->fd); - } - free(fp->host); free(fp->port); - free(fp->response); free(fp->retr); // FTP specific - free(fp->path); free(fp->http_host); // HTTP specific - free(fp); - return 0; -} - -#ifdef KNETFILE_MAIN -int main(void) -{ - char *buf; - knetFile *fp; - int type = 4, l; -#ifdef _WIN32 - knet_win32_init(); -#endif - buf = calloc(0x100000, 1); - if (type == 0) { - fp = knet_open("knetfile.c", "r"); - knet_seek(fp, 1000, SEEK_SET); - } else if (type == 1) { // NCBI FTP, large file - fp = knet_open("ftp://ftp.ncbi.nih.gov/1000genomes/ftp/data/NA12878/alignment/NA12878.chrom6.SLX.SRP000032.2009_06.bam", "r"); - knet_seek(fp, 2500000000ll, SEEK_SET); - l = knet_read(fp, buf, 255); - } else if (type == 2) { - fp = knet_open("ftp://ftp.sanger.ac.uk/pub4/treefam/tmp/index.shtml", "r"); - knet_seek(fp, 1000, SEEK_SET); - } else if (type == 3) { - fp = knet_open("http://www.sanger.ac.uk/Users/lh3/index.shtml", "r"); - knet_seek(fp, 1000, SEEK_SET); - } else if (type == 4) { - fp = knet_open("http://www.sanger.ac.uk/Users/lh3/ex1.bam", "r"); - knet_read(fp, buf, 10000); - knet_seek(fp, 20000, SEEK_SET); - knet_seek(fp, 10000, SEEK_SET); - l = knet_read(fp, buf+10000, 10000000) + 10000; - } - if (type != 4 && type != 1) { - knet_read(fp, buf, 255); - buf[255] = 0; - printf("%s\n", buf); - } else write(fileno(stdout), buf, l); - knet_close(fp); - free(buf); - return 0; -} -#endif diff --git a/clipper/samtools/knetfile.h b/clipper/samtools/knetfile.h deleted file mode 100644 index 0a0e66f..0000000 --- a/clipper/samtools/knetfile.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef KNETFILE_H -#define KNETFILE_H - -#include -#include - -#ifndef _WIN32 -#define netread(fd, ptr, len) read(fd, ptr, len) -#define netwrite(fd, ptr, len) write(fd, ptr, len) -#define netclose(fd) close(fd) -#else -#include -#define netread(fd, ptr, len) recv(fd, ptr, len, 0) -#define netwrite(fd, ptr, len) send(fd, ptr, len, 0) -#define netclose(fd) closesocket(fd) -#endif - -// FIXME: currently I/O is unbuffered - -#define KNF_TYPE_LOCAL 1 -#define KNF_TYPE_FTP 2 -#define KNF_TYPE_HTTP 3 - -typedef struct knetFile_s { - int type, fd; - int64_t offset; - char *host, *port; - - // the following are for FTP only - int ctrl_fd, pasv_ip[4], pasv_port, max_response, no_reconnect, is_ready; - char *response, *retr, *size_cmd; - int64_t seek_offset; // for lazy seek - int64_t file_size; - - // the following are for HTTP only - char *path, *http_host; -} knetFile; - -#define knet_tell(fp) ((fp)->offset) -#define knet_fileno(fp) ((fp)->fd) - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef _WIN32 - int knet_win32_init(); - void knet_win32_destroy(); -#endif - - knetFile *knet_open(const char *fn, const char *mode); - - /* - This only works with local files. - */ - knetFile *knet_dopen(int fd, const char *mode); - - /* - If ->is_ready==0, this routine updates ->fd; otherwise, it simply - reads from ->fd. - */ - off_t knet_read(knetFile *fp, void *buf, off_t len); - - /* - This routine only sets ->offset and ->is_ready=0. It does not - communicate with the FTP server. - */ - off_t knet_seek(knetFile *fp, int64_t off, int whence); - int knet_close(knetFile *fp); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/clipper/samtools/kprobaln.c b/clipper/samtools/kprobaln.c deleted file mode 100644 index 04e526a..0000000 --- a/clipper/samtools/kprobaln.c +++ /dev/null @@ -1,280 +0,0 @@ -/* The MIT License - - Copyright (c) 2003-2006, 2008-2010, by Heng Li - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#include -#include -#include -#include -#include -#include "kprobaln.h" - -/***************************************** - * Probabilistic banded glocal alignment * - *****************************************/ - -#define EI .25 -#define EM .33333333333 - -static float g_qual2prob[256]; - -#define set_u(u, b, i, k) { int x=(i)-(b); x=x>0?x:0; (u)=((k)-x+1)*3; } - -kpa_par_t kpa_par_def = { 0.001, 0.1, 10 }; -kpa_par_t kpa_par_alt = { 0.0001, 0.01, 10 }; - -/* - The topology of the profile HMM: - - /\ /\ /\ /\ - I[1] I[k-1] I[k] I[L] - ^ \ \ ^ \ ^ \ \ ^ - | \ \ | \ | \ \ | - M[0] M[1] -> ... -> M[k-1] -> M[k] -> ... -> M[L] M[L+1] - \ \/ \/ \/ / - \ /\ /\ /\ / - -> D[k-1] -> D[k] -> - - M[0] points to every {M,I}[k] and every {M,I}[k] points M[L+1]. - - On input, _ref is the reference sequence and _query is the query - sequence. Both are sequences of 0/1/2/3/4 where 4 stands for an - ambiguous residue. iqual is the base quality. c sets the gap open - probability, gap extension probability and band width. - - On output, state and q are arrays of length l_query. The higher 30 - bits give the reference position the query base is matched to and the - lower two bits can be 0 (an alignment match) or 1 (an - insertion). q[i] gives the phred scaled posterior probability of - state[i] being wrong. - */ -int kpa_glocal(const uint8_t *_ref, int l_ref, const uint8_t *_query, int l_query, const uint8_t *iqual, - const kpa_par_t *c, int *state, uint8_t *q) -{ - double **f, **b = 0, *s, m[9], sI, sM, bI, bM, pb; - float *qual, *_qual; - const uint8_t *ref, *query; - int bw, bw2, i, k, is_diff = 0, is_backward = 1, Pr; - - if ( l_ref<=0 || l_query<=0 ) return 0; // FIXME: this may not be an ideal fix, just prevents sefgault - - /*** initialization ***/ - is_backward = state && q? 1 : 0; - ref = _ref - 1; query = _query - 1; // change to 1-based coordinate - bw = l_ref > l_query? l_ref : l_query; - if (bw > c->bw) bw = c->bw; - if (bw < abs(l_ref - l_query)) bw = abs(l_ref - l_query); - bw2 = bw * 2 + 1; - // allocate the forward and backward matrices f[][] and b[][] and the scaling array s[] - f = calloc(l_query+1, sizeof(void*)); - if (is_backward) b = calloc(l_query+1, sizeof(void*)); - for (i = 0; i <= l_query; ++i) { // FIXME: this will lead in segfault for l_query==0 - f[i] = calloc(bw2 * 3 + 6, sizeof(double)); // FIXME: this is over-allocated for very short seqs - if (is_backward) b[i] = calloc(bw2 * 3 + 6, sizeof(double)); - } - s = calloc(l_query+2, sizeof(double)); // s[] is the scaling factor to avoid underflow - // initialize qual - _qual = calloc(l_query, sizeof(float)); - if (g_qual2prob[0] == 0) - for (i = 0; i < 256; ++i) - g_qual2prob[i] = pow(10, -i/10.); - for (i = 0; i < l_query; ++i) _qual[i] = g_qual2prob[iqual? iqual[i] : 30]; - qual = _qual - 1; - // initialize transition probability - sM = sI = 1. / (2 * l_query + 2); // the value here seems not to affect results; FIXME: need proof - m[0*3+0] = (1 - c->d - c->d) * (1 - sM); m[0*3+1] = m[0*3+2] = c->d * (1 - sM); - m[1*3+0] = (1 - c->e) * (1 - sI); m[1*3+1] = c->e * (1 - sI); m[1*3+2] = 0.; - m[2*3+0] = 1 - c->e; m[2*3+1] = 0.; m[2*3+2] = c->e; - bM = (1 - c->d) / l_ref; bI = c->d / l_ref; // (bM+bI)*l_ref==1 - /*** forward ***/ - // f[0] - set_u(k, bw, 0, 0); - f[0][k] = s[0] = 1.; - { // f[1] - double *fi = f[1], sum; - int beg = 1, end = l_ref < bw + 1? l_ref : bw + 1, _beg, _end; - for (k = beg, sum = 0.; k <= end; ++k) { - int u; - double e = (ref[k] > 3 || query[1] > 3)? 1. : ref[k] == query[1]? 1. - qual[1] : qual[1] * EM; - set_u(u, bw, 1, k); - fi[u+0] = e * bM; fi[u+1] = EI * bI; - sum += fi[u] + fi[u+1]; - } - // rescale - s[1] = sum; - set_u(_beg, bw, 1, beg); set_u(_end, bw, 1, end); _end += 2; - for (k = _beg; k <= _end; ++k) fi[k] /= sum; - } - // f[2..l_query] - for (i = 2; i <= l_query; ++i) { - double *fi = f[i], *fi1 = f[i-1], sum, qli = qual[i]; - int beg = 1, end = l_ref, x, _beg, _end; - uint8_t qyi = query[i]; - x = i - bw; beg = beg > x? beg : x; // band start - x = i + bw; end = end < x? end : x; // band end - for (k = beg, sum = 0.; k <= end; ++k) { - int u, v11, v01, v10; - double e; - e = (ref[k] > 3 || qyi > 3)? 1. : ref[k] == qyi? 1. - qli : qli * EM; - set_u(u, bw, i, k); set_u(v11, bw, i-1, k-1); set_u(v10, bw, i-1, k); set_u(v01, bw, i, k-1); - fi[u+0] = e * (m[0] * fi1[v11+0] + m[3] * fi1[v11+1] + m[6] * fi1[v11+2]); - fi[u+1] = EI * (m[1] * fi1[v10+0] + m[4] * fi1[v10+1]); - fi[u+2] = m[2] * fi[v01+0] + m[8] * fi[v01+2]; - sum += fi[u] + fi[u+1] + fi[u+2]; -// fprintf(stderr, "F (%d,%d;%d): %lg,%lg,%lg\n", i, k, u, fi[u], fi[u+1], fi[u+2]); // DEBUG - } - // rescale - s[i] = sum; - set_u(_beg, bw, i, beg); set_u(_end, bw, i, end); _end += 2; - for (k = _beg, sum = 1./sum; k <= _end; ++k) fi[k] *= sum; - } - { // f[l_query+1] - double sum; - for (k = 1, sum = 0.; k <= l_ref; ++k) { - int u; - set_u(u, bw, l_query, k); - if (u < 3 || u >= bw2*3+3) continue; - sum += f[l_query][u+0] * sM + f[l_query][u+1] * sI; - } - s[l_query+1] = sum; // the last scaling factor - } - { // compute likelihood - double p = 1., Pr1 = 0.; - for (i = 0; i <= l_query + 1; ++i) { - p *= s[i]; - if (p < 1e-100) Pr1 += -4.343 * log(p), p = 1.; - } - Pr1 += -4.343 * log(p * l_ref * l_query); - Pr = (int)(Pr1 + .499); - if (!is_backward) { // skip backward and MAP - for (i = 0; i <= l_query; ++i) free(f[i]); - free(f); free(s); free(_qual); - return Pr; - } - } - /*** backward ***/ - // b[l_query] (b[l_query+1][0]=1 and thus \tilde{b}[][]=1/s[l_query+1]; this is where s[l_query+1] comes from) - for (k = 1; k <= l_ref; ++k) { - int u; - double *bi = b[l_query]; - set_u(u, bw, l_query, k); - if (u < 3 || u >= bw2*3+3) continue; - bi[u+0] = sM / s[l_query] / s[l_query+1]; bi[u+1] = sI / s[l_query] / s[l_query+1]; - } - // b[l_query-1..1] - for (i = l_query - 1; i >= 1; --i) { - int beg = 1, end = l_ref, x, _beg, _end; - double *bi = b[i], *bi1 = b[i+1], y = (i > 1), qli1 = qual[i+1]; - uint8_t qyi1 = query[i+1]; - x = i - bw; beg = beg > x? beg : x; - x = i + bw; end = end < x? end : x; - for (k = end; k >= beg; --k) { - int u, v11, v01, v10; - double e; - set_u(u, bw, i, k); set_u(v11, bw, i+1, k+1); set_u(v10, bw, i+1, k); set_u(v01, bw, i, k+1); - e = (k >= l_ref? 0 : (ref[k+1] > 3 || qyi1 > 3)? 1. : ref[k+1] == qyi1? 1. - qli1 : qli1 * EM) * bi1[v11]; - bi[u+0] = e * m[0] + EI * m[1] * bi1[v10+1] + m[2] * bi[v01+2]; // bi1[v11] has been foled into e. - bi[u+1] = e * m[3] + EI * m[4] * bi1[v10+1]; - bi[u+2] = (e * m[6] + m[8] * bi[v01+2]) * y; -// fprintf(stderr, "B (%d,%d;%d): %lg,%lg,%lg\n", i, k, u, bi[u], bi[u+1], bi[u+2]); // DEBUG - } - // rescale - set_u(_beg, bw, i, beg); set_u(_end, bw, i, end); _end += 2; - for (k = _beg, y = 1./s[i]; k <= _end; ++k) bi[k] *= y; - } - { // b[0] - int beg = 1, end = l_ref < bw + 1? l_ref : bw + 1; - double sum = 0.; - for (k = end; k >= beg; --k) { - int u; - double e = (ref[k] > 3 || query[1] > 3)? 1. : ref[k] == query[1]? 1. - qual[1] : qual[1] * EM; - set_u(u, bw, 1, k); - if (u < 3 || u >= bw2*3+3) continue; - sum += e * b[1][u+0] * bM + EI * b[1][u+1] * bI; - } - set_u(k, bw, 0, 0); - pb = b[0][k] = sum / s[0]; // if everything works as is expected, pb == 1.0 - } - is_diff = fabs(pb - 1.) > 1e-7? 1 : 0; - /*** MAP ***/ - for (i = 1; i <= l_query; ++i) { - double sum = 0., *fi = f[i], *bi = b[i], max = 0.; - int beg = 1, end = l_ref, x, max_k = -1; - x = i - bw; beg = beg > x? beg : x; - x = i + bw; end = end < x? end : x; - for (k = beg; k <= end; ++k) { - int u; - double z; - set_u(u, bw, i, k); - z = fi[u+0] * bi[u+0]; if (z > max) max = z, max_k = (k-1)<<2 | 0; sum += z; - z = fi[u+1] * bi[u+1]; if (z > max) max = z, max_k = (k-1)<<2 | 1; sum += z; - } - max /= sum; sum *= s[i]; // if everything works as is expected, sum == 1.0 - if (state) state[i-1] = max_k; - if (q) k = (int)(-4.343 * log(1. - max) + .499), q[i-1] = k > 100? 99 : k; -#ifdef _MAIN - fprintf(stderr, "(%.10lg,%.10lg) (%d,%d:%c,%c:%d) %lg\n", pb, sum, i-1, max_k>>2, - "ACGT"[query[i]], "ACGT"[ref[(max_k>>2)+1]], max_k&3, max); // DEBUG -#endif - } - /*** free ***/ - for (i = 0; i <= l_query; ++i) { - free(f[i]); free(b[i]); - } - free(f); free(b); free(s); free(_qual); - return Pr; -} - -#ifdef _MAIN -#include -int main(int argc, char *argv[]) -{ - uint8_t conv[256], *iqual, *ref, *query; - int c, l_ref, l_query, i, q = 30, b = 10, P; - while ((c = getopt(argc, argv, "b:q:")) >= 0) { - switch (c) { - case 'b': b = atoi(optarg); break; - case 'q': q = atoi(optarg); break; - } - } - if (optind + 2 > argc) { - fprintf(stderr, "Usage: %s [-q %d] [-b %d] \n", argv[0], q, b); // example: acttc attc - return 1; - } - memset(conv, 4, 256); - conv['a'] = conv['A'] = 0; conv['c'] = conv['C'] = 1; - conv['g'] = conv['G'] = 2; conv['t'] = conv['T'] = 3; - ref = (uint8_t*)argv[optind]; query = (uint8_t*)argv[optind+1]; - l_ref = strlen((char*)ref); l_query = strlen((char*)query); - for (i = 0; i < l_ref; ++i) ref[i] = conv[ref[i]]; - for (i = 0; i < l_query; ++i) query[i] = conv[query[i]]; - iqual = malloc(l_query); - memset(iqual, q, l_query); - kpa_par_def.bw = b; - P = kpa_glocal(ref, l_ref, query, l_query, iqual, &kpa_par_alt, 0, 0); - fprintf(stderr, "%d\n", P); - free(iqual); - return 0; -} -#endif diff --git a/clipper/samtools/kprobaln.h b/clipper/samtools/kprobaln.h deleted file mode 100644 index 0357dcc..0000000 --- a/clipper/samtools/kprobaln.h +++ /dev/null @@ -1,49 +0,0 @@ -/* The MIT License - - Copyright (c) 2003-2006, 2008, 2009 by Heng Li - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#ifndef LH3_KPROBALN_H_ -#define LH3_KPROBALN_H_ - -#include - -typedef struct { - float d, e; - int bw; -} kpa_par_t; - -#ifdef __cplusplus -extern "C" { -#endif - - int kpa_glocal(const uint8_t *_ref, int l_ref, const uint8_t *_query, int l_query, const uint8_t *iqual, - const kpa_par_t *c, int *state, uint8_t *q); - -#ifdef __cplusplus -} -#endif - -extern kpa_par_t kpa_par_def, kpa_par_alt; - -#endif diff --git a/clipper/samtools/kseq.h b/clipper/samtools/kseq.h deleted file mode 100644 index a5cec7c..0000000 --- a/clipper/samtools/kseq.h +++ /dev/null @@ -1,235 +0,0 @@ -/* The MIT License - - Copyright (c) 2008, 2009, 2011 Attractive Chaos - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -/* Last Modified: 05MAR2012 */ - -#ifndef AC_KSEQ_H -#define AC_KSEQ_H - -#include -#include -#include - -#define KS_SEP_SPACE 0 // isspace(): \t, \n, \v, \f, \r -#define KS_SEP_TAB 1 // isspace() && !' ' -#define KS_SEP_LINE 2 // line separator: "\n" (Unix) or "\r\n" (Windows) -#define KS_SEP_MAX 2 - -#define __KS_TYPE(type_t) \ - typedef struct __kstream_t { \ - unsigned char *buf; \ - int begin, end, is_eof; \ - type_t f; \ - } kstream_t; - -#define ks_eof(ks) ((ks)->is_eof && (ks)->begin >= (ks)->end) -#define ks_rewind(ks) ((ks)->is_eof = (ks)->begin = (ks)->end = 0) - -#define __KS_BASIC(type_t, __bufsize) \ - static inline kstream_t *ks_init(type_t f) \ - { \ - kstream_t *ks = (kstream_t*)calloc(1, sizeof(kstream_t)); \ - ks->f = f; \ - ks->buf = (unsigned char*)malloc(__bufsize); \ - return ks; \ - } \ - static inline void ks_destroy(kstream_t *ks) \ - { \ - if (ks) { \ - free(ks->buf); \ - free(ks); \ - } \ - } - -#define __KS_GETC(__read, __bufsize) \ - static inline int ks_getc(kstream_t *ks) \ - { \ - if (ks->is_eof && ks->begin >= ks->end) return -1; \ - if (ks->begin >= ks->end) { \ - ks->begin = 0; \ - ks->end = __read(ks->f, ks->buf, __bufsize); \ - if (ks->end < __bufsize) ks->is_eof = 1; \ - if (ks->end == 0) return -1; \ - } \ - return (int)ks->buf[ks->begin++]; \ - } - -#ifndef KSTRING_T -#define KSTRING_T kstring_t -typedef struct __kstring_t { - size_t l, m; - char *s; -} kstring_t; -#endif - -#ifndef kroundup32 -#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) -#endif - -#define __KS_GETUNTIL(__read, __bufsize) \ - static int ks_getuntil2(kstream_t *ks, int delimiter, kstring_t *str, int *dret, int append) \ - { \ - if (dret) *dret = 0; \ - str->l = append? str->l : 0; \ - if (ks->begin >= ks->end && ks->is_eof) return -1; \ - for (;;) { \ - int i; \ - if (ks->begin >= ks->end) { \ - if (!ks->is_eof) { \ - ks->begin = 0; \ - ks->end = __read(ks->f, ks->buf, __bufsize); \ - if (ks->end < __bufsize) ks->is_eof = 1; \ - if (ks->end == 0) break; \ - } else break; \ - } \ - if (delimiter == KS_SEP_LINE) { \ - for (i = ks->begin; i < ks->end; ++i) \ - if (ks->buf[i] == '\n') break; \ - } else if (delimiter > KS_SEP_MAX) { \ - for (i = ks->begin; i < ks->end; ++i) \ - if (ks->buf[i] == delimiter) break; \ - } else if (delimiter == KS_SEP_SPACE) { \ - for (i = ks->begin; i < ks->end; ++i) \ - if (isspace(ks->buf[i])) break; \ - } else if (delimiter == KS_SEP_TAB) { \ - for (i = ks->begin; i < ks->end; ++i) \ - if (isspace(ks->buf[i]) && ks->buf[i] != ' ') break; \ - } else i = 0; /* never come to here! */ \ - if (str->m - str->l < (size_t)(i - ks->begin + 1)) { \ - str->m = str->l + (i - ks->begin) + 1; \ - kroundup32(str->m); \ - str->s = (char*)realloc(str->s, str->m); \ - } \ - memcpy(str->s + str->l, ks->buf + ks->begin, i - ks->begin); \ - str->l = str->l + (i - ks->begin); \ - ks->begin = i + 1; \ - if (i < ks->end) { \ - if (dret) *dret = ks->buf[i]; \ - break; \ - } \ - } \ - if (str->s == 0) { \ - str->m = 1; \ - str->s = (char*)calloc(1, 1); \ - } else if (delimiter == KS_SEP_LINE && str->l > 1 && str->s[str->l-1] == '\r') --str->l; \ - str->s[str->l] = '\0'; \ - return str->l; \ - } \ - static inline int ks_getuntil(kstream_t *ks, int delimiter, kstring_t *str, int *dret) \ - { return ks_getuntil2(ks, delimiter, str, dret, 0); } - -#define KSTREAM_INIT(type_t, __read, __bufsize) \ - __KS_TYPE(type_t) \ - __KS_BASIC(type_t, __bufsize) \ - __KS_GETC(__read, __bufsize) \ - __KS_GETUNTIL(__read, __bufsize) - -#define kseq_rewind(ks) ((ks)->last_char = (ks)->f->is_eof = (ks)->f->begin = (ks)->f->end = 0) - -#define __KSEQ_BASIC(SCOPE, type_t) \ - SCOPE kseq_t *kseq_init(type_t fd) \ - { \ - kseq_t *s = (kseq_t*)calloc(1, sizeof(kseq_t)); \ - s->f = ks_init(fd); \ - return s; \ - } \ - SCOPE void kseq_destroy(kseq_t *ks) \ - { \ - if (!ks) return; \ - free(ks->name.s); free(ks->comment.s); free(ks->seq.s); free(ks->qual.s); \ - ks_destroy(ks->f); \ - free(ks); \ - } - -/* Return value: - >=0 length of the sequence (normal) - -1 end-of-file - -2 truncated quality string - */ -#define __KSEQ_READ(SCOPE) \ - SCOPE int kseq_read(kseq_t *seq) \ - { \ - int c; \ - kstream_t *ks = seq->f; \ - if (seq->last_char == 0) { /* then jump to the next header line */ \ - while ((c = ks_getc(ks)) != -1 && c != '>' && c != '@'); \ - if (c == -1) return -1; /* end of file */ \ - seq->last_char = c; \ - } /* else: the first header char has been read in the previous call */ \ - seq->comment.l = seq->seq.l = seq->qual.l = 0; /* reset all members */ \ - if (ks_getuntil(ks, 0, &seq->name, &c) < 0) return -1; /* normal exit: EOF */ \ - if (c != '\n') ks_getuntil(ks, KS_SEP_LINE, &seq->comment, 0); /* read FASTA/Q comment */ \ - if (seq->seq.s == 0) { /* we can do this in the loop below, but that is slower */ \ - seq->seq.m = 256; \ - seq->seq.s = (char*)malloc(seq->seq.m); \ - } \ - while ((c = ks_getc(ks)) != -1 && c != '>' && c != '+' && c != '@') { \ - if (c == '\n') continue; /* skip empty lines */ \ - seq->seq.s[seq->seq.l++] = c; /* this is safe: we always have enough space for 1 char */ \ - ks_getuntil2(ks, KS_SEP_LINE, &seq->seq, 0, 1); /* read the rest of the line */ \ - } \ - if (c == '>' || c == '@') seq->last_char = c; /* the first header char has been read */ \ - if (seq->seq.l + 1 >= seq->seq.m) { /* seq->seq.s[seq->seq.l] below may be out of boundary */ \ - seq->seq.m = seq->seq.l + 2; \ - kroundup32(seq->seq.m); /* rounded to the next closest 2^k */ \ - seq->seq.s = (char*)realloc(seq->seq.s, seq->seq.m); \ - } \ - seq->seq.s[seq->seq.l] = 0; /* null terminated string */ \ - if (c != '+') return seq->seq.l; /* FASTA */ \ - if (seq->qual.m < seq->seq.m) { /* allocate memory for qual in case insufficient */ \ - seq->qual.m = seq->seq.m; \ - seq->qual.s = (char*)realloc(seq->qual.s, seq->qual.m); \ - } \ - while ((c = ks_getc(ks)) != -1 && c != '\n'); /* skip the rest of '+' line */ \ - if (c == -1) return -2; /* error: no quality string */ \ - while (ks_getuntil2(ks, KS_SEP_LINE, &seq->qual, 0, 1) >= 0 && seq->qual.l < seq->seq.l); \ - seq->last_char = 0; /* we have not come to the next header line */ \ - if (seq->seq.l != seq->qual.l) return -2; /* error: qual string is of a different length */ \ - return seq->seq.l; \ - } - -#define __KSEQ_TYPE(type_t) \ - typedef struct { \ - kstring_t name, comment, seq, qual; \ - int last_char; \ - kstream_t *f; \ - } kseq_t; - -#define KSEQ_INIT2(SCOPE, type_t, __read) \ - KSTREAM_INIT(type_t, __read, 16384) \ - __KSEQ_TYPE(type_t) \ - __KSEQ_BASIC(SCOPE, type_t) \ - __KSEQ_READ(SCOPE) - -#define KSEQ_INIT(type_t, __read) KSEQ_INIT2(static, type_t, __read) - -#define KSEQ_DECLARE(type_t) \ - __KS_TYPE(type_t) \ - __KSEQ_TYPE(type_t) \ - extern kseq_t *kseq_init(type_t fd); \ - void kseq_destroy(kseq_t *ks); \ - int kseq_read(kseq_t *seq); - -#endif diff --git a/clipper/samtools/ksort.h b/clipper/samtools/ksort.h deleted file mode 100644 index fa850ab..0000000 --- a/clipper/samtools/ksort.h +++ /dev/null @@ -1,281 +0,0 @@ -/* The MIT License - - Copyright (c) 2008 Genome Research Ltd (GRL). - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -/* Contact: Heng Li */ - -/* - 2008-11-16 (0.1.4): - - * Fixed a bug in introsort() that happens in rare cases. - - 2008-11-05 (0.1.3): - - * Fixed a bug in introsort() for complex comparisons. - - * Fixed a bug in mergesort(). The previous version is not stable. - - 2008-09-15 (0.1.2): - - * Accelerated introsort. On my Mac (not on another Linux machine), - my implementation is as fast as std::sort on random input. - - * Added combsort and in introsort, switch to combsort if the - recursion is too deep. - - 2008-09-13 (0.1.1): - - * Added k-small algorithm - - 2008-09-05 (0.1.0): - - * Initial version - -*/ - -#ifndef AC_KSORT_H -#define AC_KSORT_H - -#include -#include - -typedef struct { - void *left, *right; - int depth; -} ks_isort_stack_t; - -#define KSORT_SWAP(type_t, a, b) { register type_t t=(a); (a)=(b); (b)=t; } - -#define KSORT_INIT(name, type_t, __sort_lt) \ - void ks_mergesort_##name(size_t n, type_t array[], type_t temp[]) \ - { \ - type_t *a2[2], *a, *b; \ - int curr, shift; \ - \ - a2[0] = array; \ - a2[1] = temp? temp : (type_t*)malloc(sizeof(type_t) * n); \ - for (curr = 0, shift = 0; (1ul<> 1) - 1; i != (size_t)(-1); --i) \ - ks_heapadjust_##name(i, lsize, l); \ - } \ - void ks_heapsort_##name(size_t lsize, type_t l[]) \ - { \ - size_t i; \ - for (i = lsize - 1; i > 0; --i) { \ - type_t tmp; \ - tmp = *l; *l = l[i]; l[i] = tmp; ks_heapadjust_##name(0, i, l); \ - } \ - } \ - inline void __ks_insertsort_##name(type_t *s, type_t *t) \ - { \ - type_t *i, *j, swap_tmp; \ - for (i = s + 1; i < t; ++i) \ - for (j = i; j > s && __sort_lt(*j, *(j-1)); --j) { \ - swap_tmp = *j; *j = *(j-1); *(j-1) = swap_tmp; \ - } \ - } \ - void ks_combsort_##name(size_t n, type_t a[]) \ - { \ - const double shrink_factor = 1.2473309501039786540366528676643; \ - int do_swap; \ - size_t gap = n; \ - type_t tmp, *i, *j; \ - do { \ - if (gap > 2) { \ - gap = (size_t)(gap / shrink_factor); \ - if (gap == 9 || gap == 10) gap = 11; \ - } \ - do_swap = 0; \ - for (i = a; i < a + n - gap; ++i) { \ - j = i + gap; \ - if (__sort_lt(*j, *i)) { \ - tmp = *i; *i = *j; *j = tmp; \ - do_swap = 1; \ - } \ - } \ - } while (do_swap || gap > 2); \ - if (gap != 1) __ks_insertsort_##name(a, a + n); \ - } \ - void ks_introsort_##name(size_t n, type_t a[]) \ - { \ - int d; \ - ks_isort_stack_t *top, *stack; \ - type_t rp, swap_tmp; \ - type_t *s, *t, *i, *j, *k; \ - \ - if (n < 1) return; \ - else if (n == 2) { \ - if (__sort_lt(a[1], a[0])) { swap_tmp = a[0]; a[0] = a[1]; a[1] = swap_tmp; } \ - return; \ - } \ - for (d = 2; 1ul<>1) + 1; \ - if (__sort_lt(*k, *i)) { \ - if (__sort_lt(*k, *j)) k = j; \ - } else k = __sort_lt(*j, *i)? i : j; \ - rp = *k; \ - if (k != t) { swap_tmp = *k; *k = *t; *t = swap_tmp; } \ - for (;;) { \ - do ++i; while (__sort_lt(*i, rp)); \ - do --j; while (i <= j && __sort_lt(rp, *j)); \ - if (j <= i) break; \ - swap_tmp = *i; *i = *j; *j = swap_tmp; \ - } \ - swap_tmp = *i; *i = *t; *t = swap_tmp; \ - if (i-s > t-i) { \ - if (i-s > 16) { top->left = s; top->right = i-1; top->depth = d; ++top; } \ - s = t-i > 16? i+1 : t; \ - } else { \ - if (t-i > 16) { top->left = i+1; top->right = t; top->depth = d; ++top; } \ - t = i-s > 16? i-1 : s; \ - } \ - } else { \ - if (top == stack) { \ - free(stack); \ - __ks_insertsort_##name(a, a+n); \ - return; \ - } else { --top; s = (type_t*)top->left; t = (type_t*)top->right; d = top->depth; } \ - } \ - } \ - } \ - /* This function is adapted from: http://ndevilla.free.fr/median/ */ \ - /* 0 <= kk < n */ \ - type_t ks_ksmall_##name(size_t n, type_t arr[], size_t kk) \ - { \ - type_t *low, *high, *k, *ll, *hh, *mid; \ - low = arr; high = arr + n - 1; k = arr + kk; \ - for (;;) { \ - if (high <= low) return *k; \ - if (high == low + 1) { \ - if (__sort_lt(*high, *low)) KSORT_SWAP(type_t, *low, *high); \ - return *k; \ - } \ - mid = low + (high - low) / 2; \ - if (__sort_lt(*high, *mid)) KSORT_SWAP(type_t, *mid, *high); \ - if (__sort_lt(*high, *low)) KSORT_SWAP(type_t, *low, *high); \ - if (__sort_lt(*low, *mid)) KSORT_SWAP(type_t, *mid, *low); \ - KSORT_SWAP(type_t, *mid, *(low+1)); \ - ll = low + 1; hh = high; \ - for (;;) { \ - do ++ll; while (__sort_lt(*ll, *low)); \ - do --hh; while (__sort_lt(*low, *hh)); \ - if (hh < ll) break; \ - KSORT_SWAP(type_t, *ll, *hh); \ - } \ - KSORT_SWAP(type_t, *low, *hh); \ - if (hh <= k) low = ll; \ - if (hh >= k) high = hh - 1; \ - } \ - } \ - void ks_shuffle_##name(size_t n, type_t a[]) \ - { \ - int i, j; \ - for (i = n; i > 1; --i) { \ - type_t tmp; \ - j = (int)(drand48() * i); \ - tmp = a[j]; a[j] = a[i-1]; a[i-1] = tmp; \ - } \ - } - -#define ks_mergesort(name, n, a, t) ks_mergesort_##name(n, a, t) -#define ks_introsort(name, n, a) ks_introsort_##name(n, a) -#define ks_combsort(name, n, a) ks_combsort_##name(n, a) -#define ks_heapsort(name, n, a) ks_heapsort_##name(n, a) -#define ks_heapmake(name, n, a) ks_heapmake_##name(n, a) -#define ks_heapadjust(name, i, n, a) ks_heapadjust_##name(i, n, a) -#define ks_ksmall(name, n, a, k) ks_ksmall_##name(n, a, k) -#define ks_shuffle(name, n, a) ks_shuffle_##name(n, a) - -#define ks_lt_generic(a, b) ((a) < (b)) -#define ks_lt_str(a, b) (strcmp((a), (b)) < 0) - -typedef const char *ksstr_t; - -#define KSORT_INIT_GENERIC(type_t) KSORT_INIT(type_t, type_t, ks_lt_generic) -#define KSORT_INIT_STR KSORT_INIT(str, ksstr_t, ks_lt_str) - -#endif diff --git a/clipper/samtools/kstring.c b/clipper/samtools/kstring.c deleted file mode 100644 index b8ff45c..0000000 --- a/clipper/samtools/kstring.c +++ /dev/null @@ -1,212 +0,0 @@ -#include -#include -#include -#include -#include -#include "kstring.h" - -int ksprintf(kstring_t *s, const char *fmt, ...) -{ - va_list ap; - int l; - va_start(ap, fmt); - l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap); // This line does not work with glibc 2.0. See `man snprintf'. - va_end(ap); - if (l + 1 > s->m - s->l) { - s->m = s->l + l + 2; - kroundup32(s->m); - s->s = (char*)realloc(s->s, s->m); - va_start(ap, fmt); - l = vsnprintf(s->s + s->l, s->m - s->l, fmt, ap); - } - va_end(ap); - s->l += l; - return l; -} - -char *kstrtok(const char *str, const char *sep, ks_tokaux_t *aux) -{ - const char *p, *start; - if (sep) { // set up the table - if (str == 0 && (aux->tab[0]&1)) return 0; // no need to set up if we have finished - aux->finished = 0; - if (sep[1]) { - aux->sep = -1; - aux->tab[0] = aux->tab[1] = aux->tab[2] = aux->tab[3] = 0; - for (p = sep; *p; ++p) aux->tab[*p>>6] |= 1ull<<(*p&0x3f); - } else aux->sep = sep[0]; - } - if (aux->finished) return 0; - else if (str) aux->p = str - 1, aux->finished = 0; - if (aux->sep < 0) { - for (p = start = aux->p + 1; *p; ++p) - if (aux->tab[*p>>6]>>(*p&0x3f)&1) break; - } else { - for (p = start = aux->p + 1; *p; ++p) - if (*p == aux->sep) break; - } - aux->p = p; // end of token - if (*p == 0) aux->finished = 1; // no more tokens - return (char*)start; -} - -// s MUST BE a null terminated string; l = strlen(s) -int ksplit_core(char *s, int delimiter, int *_max, int **_offsets) -{ - int i, n, max, last_char, last_start, *offsets, l; - n = 0; max = *_max; offsets = *_offsets; - l = strlen(s); - -#define __ksplit_aux do { \ - if (_offsets) { \ - s[i] = 0; \ - if (n == max) { \ - max = max? max<<1 : 2; \ - offsets = (int*)realloc(offsets, sizeof(int) * max); \ - } \ - offsets[n++] = last_start; \ - } else ++n; \ - } while (0) - - for (i = 0, last_char = last_start = 0; i <= l; ++i) { - if (delimiter == 0) { - if (isspace(s[i]) || s[i] == 0) { - if (isgraph(last_char)) __ksplit_aux; // the end of a field - } else { - if (isspace(last_char) || last_char == 0) last_start = i; - } - } else { - if (s[i] == delimiter || s[i] == 0) { - if (last_char != 0 && last_char != delimiter) __ksplit_aux; // the end of a field - } else { - if (last_char == delimiter || last_char == 0) last_start = i; - } - } - last_char = s[i]; - } - *_max = max; *_offsets = offsets; - return n; -} - -/********************** - * Boyer-Moore search * - **********************/ - -typedef unsigned char ubyte_t; - -// reference: http://www-igm.univ-mlv.fr/~lecroq/string/node14.html -static int *ksBM_prep(const ubyte_t *pat, int m) -{ - int i, *suff, *prep, *bmGs, *bmBc; - prep = (int*)calloc(m + 256, sizeof(int)); - bmGs = prep; bmBc = prep + m; - { // preBmBc() - for (i = 0; i < 256; ++i) bmBc[i] = m; - for (i = 0; i < m - 1; ++i) bmBc[pat[i]] = m - i - 1; - } - suff = (int*)calloc(m, sizeof(int)); - { // suffixes() - int f = 0, g; - suff[m - 1] = m; - g = m - 1; - for (i = m - 2; i >= 0; --i) { - if (i > g && suff[i + m - 1 - f] < i - g) - suff[i] = suff[i + m - 1 - f]; - else { - if (i < g) g = i; - f = i; - while (g >= 0 && pat[g] == pat[g + m - 1 - f]) --g; - suff[i] = f - g; - } - } - } - { // preBmGs() - int j = 0; - for (i = 0; i < m; ++i) bmGs[i] = m; - for (i = m - 1; i >= 0; --i) - if (suff[i] == i + 1) - for (; j < m - 1 - i; ++j) - if (bmGs[j] == m) - bmGs[j] = m - 1 - i; - for (i = 0; i <= m - 2; ++i) - bmGs[m - 1 - suff[i]] = m - 1 - i; - } - free(suff); - return prep; -} - -void *kmemmem(const void *_str, int n, const void *_pat, int m, int **_prep) -{ - int i, j, *prep = 0, *bmGs, *bmBc; - const ubyte_t *str, *pat; - str = (const ubyte_t*)_str; pat = (const ubyte_t*)_pat; - prep = (_prep == 0 || *_prep == 0)? ksBM_prep(pat, m) : *_prep; - if (_prep && *_prep == 0) *_prep = prep; - bmGs = prep; bmBc = prep + m; - j = 0; - while (j <= n - m) { - for (i = m - 1; i >= 0 && pat[i] == str[i+j]; --i); - if (i >= 0) { - int max = bmBc[str[i+j]] - m + 1 + i; - if (max < bmGs[i]) max = bmGs[i]; - j += max; - } else return (void*)(str + j); - } - if (_prep == 0) free(prep); - return 0; -} - -char *kstrstr(const char *str, const char *pat, int **_prep) -{ - return (char*)kmemmem(str, strlen(str), pat, strlen(pat), _prep); -} - -char *kstrnstr(const char *str, const char *pat, int n, int **_prep) -{ - return (char*)kmemmem(str, n, pat, strlen(pat), _prep); -} - -/*********************** - * The main() function * - ***********************/ - -#ifdef KSTRING_MAIN -#include -int main() -{ - kstring_t *s; - int *fields, n, i; - ks_tokaux_t aux; - char *p; - s = (kstring_t*)calloc(1, sizeof(kstring_t)); - // test ksprintf() - ksprintf(s, " abcdefg: %d ", 100); - printf("'%s'\n", s->s); - // test ksplit() - fields = ksplit(s, 0, &n); - for (i = 0; i < n; ++i) - printf("field[%d] = '%s'\n", i, s->s + fields[i]); - // test kstrtok() - s->l = 0; - for (p = kstrtok("ab:cde:fg/hij::k", ":/", &aux); p; p = kstrtok(0, 0, &aux)) { - kputsn(p, aux.p - p, s); - kputc('\n', s); - } - printf("%s", s->s); - // free - free(s->s); free(s); free(fields); - - { - static char *str = "abcdefgcdgcagtcakcdcd"; - static char *pat = "cd"; - char *ret, *s = str; - int *prep = 0; - while ((ret = kstrstr(s, pat, &prep)) != 0) { - printf("match: %s\n", ret); - s = ret + prep[0]; - } - free(prep); - } - return 0; -} -#endif diff --git a/clipper/samtools/kstring.h b/clipper/samtools/kstring.h deleted file mode 100644 index abd8236..0000000 --- a/clipper/samtools/kstring.h +++ /dev/null @@ -1,169 +0,0 @@ -/* The MIT License - - Copyright (c) by Attractive Chaos - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#ifndef KSTRING_H -#define KSTRING_H - -#include -#include -#include - -#ifndef kroundup32 -#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x)) -#endif - -#ifndef KSTRING_T -#define KSTRING_T kstring_t -typedef struct __kstring_t { - size_t l, m; - char *s; -} kstring_t; -#endif - -typedef struct { - uint64_t tab[4]; - int sep, finished; - const char *p; // end of the current token -} ks_tokaux_t; - -#ifdef __cplusplus -extern "C" { -#endif - - int ksprintf(kstring_t *s, const char *fmt, ...); - int ksplit_core(char *s, int delimiter, int *_max, int **_offsets); - char *kstrstr(const char *str, const char *pat, int **_prep); - char *kstrnstr(const char *str, const char *pat, int n, int **_prep); - void *kmemmem(const void *_str, int n, const void *_pat, int m, int **_prep); - - /* kstrtok() is similar to strtok_r() except that str is not - * modified and both str and sep can be NULL. For efficiency, it is - * actually recommended to set both to NULL in the subsequent calls - * if sep is not changed. */ - char *kstrtok(const char *str, const char *sep, ks_tokaux_t *aux); - -#ifdef __cplusplus -} -#endif - -static inline void ks_resize(kstring_t *s, size_t size) -{ - if (s->m < size) { - s->m = size; - kroundup32(s->m); - s->s = (char*)realloc(s->s, s->m); - } -} - -static inline int kputsn(const char *p, int l, kstring_t *s) -{ - if (s->l + l + 1 >= s->m) { - s->m = s->l + l + 2; - kroundup32(s->m); - s->s = (char*)realloc(s->s, s->m); - } - memcpy(s->s + s->l, p, l); - s->l += l; - s->s[s->l] = 0; - return l; -} - -static inline int kputs(const char *p, kstring_t *s) -{ - return kputsn(p, strlen(p), s); -} - -static inline int kputc(int c, kstring_t *s) -{ - if (s->l + 1 >= s->m) { - s->m = s->l + 2; - kroundup32(s->m); - s->s = (char*)realloc(s->s, s->m); - } - s->s[s->l++] = c; - s->s[s->l] = 0; - return c; -} - -static inline int kputw(int c, kstring_t *s) -{ - char buf[16]; - int l, x; - if (c == 0) return kputc('0', s); - if(c < 0) for (l = 0, x = c; x < 0; x /= 10) buf[l++] = '0' - (x%10); - else for (l = 0, x = c; x > 0; x /= 10) buf[l++] = x%10 + '0'; - if (c < 0) buf[l++] = '-'; - if (s->l + l + 1 >= s->m) { - s->m = s->l + l + 2; - kroundup32(s->m); - s->s = (char*)realloc(s->s, s->m); - } - for (x = l - 1; x >= 0; --x) s->s[s->l++] = buf[x]; - s->s[s->l] = 0; - return 0; -} - -static inline int kputuw(unsigned c, kstring_t *s) -{ - char buf[16]; - int l, i; - unsigned x; - if (c == 0) return kputc('0', s); - for (l = 0, x = c; x > 0; x /= 10) buf[l++] = x%10 + '0'; - if (s->l + l + 1 >= s->m) { - s->m = s->l + l + 2; - kroundup32(s->m); - s->s = (char*)realloc(s->s, s->m); - } - for (i = l - 1; i >= 0; --i) s->s[s->l++] = buf[i]; - s->s[s->l] = 0; - return 0; -} - -static inline int kputl(long c, kstring_t *s) -{ - char buf[32]; - long l, x; - if (c == 0) return kputc('0', s); - for (l = 0, x = c < 0? -c : c; x > 0; x /= 10) buf[l++] = x%10 + '0'; - if (c < 0) buf[l++] = '-'; - if (s->l + l + 1 >= s->m) { - s->m = s->l + l + 2; - kroundup32(s->m); - s->s = (char*)realloc(s->s, s->m); - } - for (x = l - 1; x >= 0; --x) s->s[s->l++] = buf[x]; - s->s[s->l] = 0; - return 0; -} - -static inline int *ksplit(kstring_t *s, int delimiter, int *n) -{ - int max = 0, *offsets = 0; - *n = ksplit_core(s->s, delimiter, &max, &offsets); - return offsets; -} - -#endif diff --git a/clipper/samtools/padding.c b/clipper/samtools/padding.c deleted file mode 100644 index a8da562..0000000 --- a/clipper/samtools/padding.c +++ /dev/null @@ -1,479 +0,0 @@ -#include -#include -#include -#include "kstring.h" -#include "sam_header.h" -#include "sam.h" -#include "bam.h" -#include "faidx.h" - -bam_header_t *bam_header_dup(const bam_header_t *h0); /*in sam.c*/ - -static void replace_cigar(bam1_t *b, int n, uint32_t *cigar) -{ - if (n != b->core.n_cigar) { - int o = b->core.l_qname + b->core.n_cigar * 4; - if (b->data_len + (n - b->core.n_cigar) * 4 > b->m_data) { - b->m_data = b->data_len + (n - b->core.n_cigar) * 4; - kroundup32(b->m_data); - b->data = (uint8_t*)realloc(b->data, b->m_data); - } - memmove(b->data + b->core.l_qname + n * 4, b->data + o, b->data_len - o); - memcpy(b->data + b->core.l_qname, cigar, n * 4); - b->data_len += (n - b->core.n_cigar) * 4; - b->core.n_cigar = n; - } else memcpy(b->data + b->core.l_qname, cigar, n * 4); -} - -#define write_cigar(_c, _n, _m, _v) do { \ - if (_n == _m) { \ - _m = _m? _m<<1 : 4; \ - _c = (uint32_t*)realloc(_c, _m * 4); \ - } \ - _c[_n++] = (_v); \ - } while (0) - -static void unpad_seq(bam1_t *b, kstring_t *s) -{ - int k, j, i; - int length; - uint32_t *cigar = bam1_cigar(b); - uint8_t *seq = bam1_seq(b); - // b->core.l_qseq gives length of the SEQ entry (including soft clips, S) - // We need the padded length after alignment from the CIGAR (excluding - // soft clips S, but including pads from CIGAR D operations) - length = 0; - for (k = 0; k < b->core.n_cigar; ++k) { - int op, ol; - op= bam_cigar_op(cigar[k]); - ol = bam_cigar_oplen(cigar[k]); - if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF || op == BAM_CDEL) - length += ol; - } - ks_resize(s, length); - for (k = 0, s->l = 0, j = 0; k < b->core.n_cigar; ++k) { - int op, ol; - op = bam_cigar_op(cigar[k]); - ol = bam_cigar_oplen(cigar[k]); - if (op == BAM_CMATCH || op == BAM_CEQUAL || op == BAM_CDIFF) { - for (i = 0; i < ol; ++i, ++j) s->s[s->l++] = bam1_seqi(seq, j); - } else if (op == BAM_CSOFT_CLIP) { - j += ol; - } else if (op == BAM_CHARD_CLIP) { - /* do nothing */ - } else if (op == BAM_CDEL) { - for (i = 0; i < ol; ++i) s->s[s->l++] = 0; - } else { - fprintf(stderr, "[depad] ERROR: Didn't expect CIGAR op %c in read %s\n", BAM_CIGAR_STR[op], bam1_qname(b)); - assert(-1); - } - } - assert(length == s->l); -} - -int load_unpadded_ref(faidx_t *fai, char *ref_name, int ref_len, kstring_t *seq) -{ - char base; - char *fai_ref = 0; - int fai_ref_len = 0, k; - - fai_ref = fai_fetch(fai, ref_name, &fai_ref_len); - if (fai_ref_len != ref_len) { - fprintf(stderr, "[depad] ERROR: FASTA sequence %s length %i, expected %i\n", ref_name, fai_ref_len, ref_len); - free(fai_ref); - return -1; - } - ks_resize(seq, ref_len); - seq->l = 0; - for (k = 0; k < ref_len; ++k) { - base = fai_ref[k]; - if (base == '-' || base == '*') { - // Map gaps to null to match unpad_seq function - seq->s[seq->l++] = 0; - } else { - int i = bam_nt16_table[(int)base]; - if (i == 0 || i==16) { // Equals maps to 0, anything unexpected to 16 - fprintf(stderr, "[depad] ERROR: Invalid character %c (ASCII %i) in FASTA sequence %s\n", base, (int)base, ref_name); - free(fai_ref); - return -1; - } - seq->s[seq->l++] = i; - } - } - assert(ref_len == seq->l); - free(fai_ref); - return 0; -} - -int get_unpadded_len(faidx_t *fai, char *ref_name, int padded_len) -{ - char base; - char *fai_ref = 0; - int fai_ref_len = 0, k; - int bases=0, gaps=0; - - fai_ref = fai_fetch(fai, ref_name, &fai_ref_len); - if (fai_ref_len != padded_len) { - fprintf(stderr, "[depad] ERROR: FASTA sequence '%s' length %i, expected %i\n", ref_name, fai_ref_len, padded_len); - free(fai_ref); - return -1; - } - for (k = 0; k < padded_len; ++k) { - //fprintf(stderr, "[depad] checking base %i of %i or %i\n", k+1, ref_len, strlen(fai_ref)); - base = fai_ref[k]; - if (base == '-' || base == '*') { - gaps += 1; - } else { - int i = bam_nt16_table[(int)base]; - if (i == 0 || i==16) { // Equals maps to 0, anything unexpected to 16 - fprintf(stderr, "[depad] ERROR: Invalid character %c (ASCII %i) in FASTA sequence '%s'\n", base, (int)base, ref_name); - free(fai_ref); - return -1; - } - bases += 1; - } - } - free(fai_ref); - assert (padded_len == bases + gaps); - return bases; -} - -inline int * update_posmap(int *posmap, kstring_t ref) -{ - int i, k; - posmap = realloc(posmap, ref.m * sizeof(int)); - for (i = k = 0; i < ref.l; ++i) { - posmap[i] = k; - if (ref.s[i]) ++k; - } - return posmap; -} - -int bam_pad2unpad(samfile_t *in, samfile_t *out, faidx_t *fai) -{ - bam_header_t *h = 0; - bam1_t *b = 0; - kstring_t r, q; - int r_tid = -1; - uint32_t *cigar2 = 0; - int ret = 0, n2 = 0, m2 = 0, *posmap = 0; - - b = bam_init1(); - r.l = r.m = q.l = q.m = 0; r.s = q.s = 0; - int read_ret; - h = in->header; - while ((read_ret = samread(in, b)) >= 0) { // read one alignment from `in' - uint32_t *cigar = bam1_cigar(b); - n2 = 0; - if (b->core.pos == 0 && b->core.tid >= 0 && strcmp(bam1_qname(b), h->target_name[b->core.tid]) == 0) { - // fprintf(stderr, "[depad] Found embedded reference '%s'\n", bam1_qname(b)); - r_tid = b->core.tid; - unpad_seq(b, &r); - if (h->target_len[r_tid] != r.l) { - fprintf(stderr, "[depad] ERROR: (Padded) length of '%s' is %d in BAM header, but %ld in embedded reference\n", bam1_qname(b), h->target_len[r_tid], r.l); - return -1; - } - if (fai) { - // Check the embedded reference matches the FASTA file - if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &q)) { - fprintf(stderr, "[depad] ERROR: Failed to load embedded reference '%s' from FASTA\n", h->target_name[b->core.tid]); - return -1; - } - assert(r.l == q.l); - int i; - for (i = 0; i < r.l; ++i) { - if (r.s[i] != q.s[i]) { - // Show gaps as ASCII 45 - fprintf(stderr, "[depad] ERROR: Embedded sequence and reference FASTA don't match for %s base %i, '%c' vs '%c'\n", - h->target_name[b->core.tid], i+1, - r.s[i] ? bam_nt16_rev_table[(int)r.s[i]] : 45, - q.s[i] ? bam_nt16_rev_table[(int)q.s[i]] : 45); - return -1; - } - } - } - write_cigar(cigar2, n2, m2, bam_cigar_gen(b->core.l_qseq, BAM_CMATCH)); - replace_cigar(b, n2, cigar2); - posmap = update_posmap(posmap, r); - } else if (b->core.n_cigar > 0) { - int i, k, op; - if (b->core.tid < 0) { - fprintf(stderr, "[depad] ERROR: Read '%s' has CIGAR but no RNAME\n", bam1_qname(b)); - return -1; - } else if (b->core.tid == r_tid) { - ; // good case, reference available - //fprintf(stderr, "[depad] Have ref '%s' for read '%s'\n", h->target_name[b->core.tid], bam1_qname(b)); - } else if (fai) { - if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) { - fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]); - return -1; - } - posmap = update_posmap(posmap, r); - r_tid = b->core.tid; - // fprintf(stderr, "[depad] Loaded %s from FASTA file\n", h->target_name[b->core.tid]); - } else { - fprintf(stderr, "[depad] ERROR: Missing %s embedded reference sequence (and no FASTA file)\n", h->target_name[b->core.tid]); - return -1; - } - unpad_seq(b, &q); - if (bam_cigar_op(cigar[0]) == BAM_CSOFT_CLIP) { - write_cigar(cigar2, n2, m2, cigar[0]); - } else if (bam_cigar_op(cigar[0]) == BAM_CHARD_CLIP) { - write_cigar(cigar2, n2, m2, cigar[0]); - if (b->core.n_cigar > 2 && bam_cigar_op(cigar[1]) == BAM_CSOFT_CLIP) { - write_cigar(cigar2, n2, m2, cigar[1]); - } - } - /* Determine CIGAR operator for each base in the aligned read */ - for (i = 0, k = b->core.pos; i < q.l; ++i, ++k) - q.s[i] = q.s[i]? (r.s[k]? BAM_CMATCH : BAM_CINS) : (r.s[k]? BAM_CDEL : BAM_CPAD); - /* Include any pads if starts with an insert */ - if (q.s[0] == BAM_CINS) { - for (k = 0; k+1 < b->core.pos && !r.s[b->core.pos - k - 1]; ++k); - if (k) write_cigar(cigar2, n2, m2, bam_cigar_gen(k, BAM_CPAD)); - } - /* Count consecutive CIGAR operators to turn into a CIGAR string */ - for (i = k = 1, op = q.s[0]; i < q.l; ++i) { - if (op != q.s[i]) { - write_cigar(cigar2, n2, m2, bam_cigar_gen(k, op)); - op = q.s[i]; k = 1; - } else ++k; - } - write_cigar(cigar2, n2, m2, bam_cigar_gen(k, op)); - if (bam_cigar_op(cigar[b->core.n_cigar-1]) == BAM_CSOFT_CLIP) { - write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-1]); - } else if (bam_cigar_op(cigar[b->core.n_cigar-1]) == BAM_CHARD_CLIP) { - if (b->core.n_cigar > 2 && bam_cigar_op(cigar[b->core.n_cigar-2]) == BAM_CSOFT_CLIP) { - write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-2]); - } - write_cigar(cigar2, n2, m2, cigar[b->core.n_cigar-1]); - } - /* Remove redundant P operators between M/X/=/D operators, e.g. 5M2P10M -> 15M */ - int pre_op, post_op; - for (i = 2; i < n2; ++i) - if (bam_cigar_op(cigar2[i-1]) == BAM_CPAD) { - pre_op = bam_cigar_op(cigar2[i-2]); - post_op = bam_cigar_op(cigar2[i]); - /* Note don't need to check for X/= as code above will use M only */ - if ((pre_op == BAM_CMATCH || pre_op == BAM_CDEL) && (post_op == BAM_CMATCH || post_op == BAM_CDEL)) { - /* This is a redundant P operator */ - cigar2[i-1] = 0; // i.e. 0M - /* If had same operator either side, combine them in post_op */ - if (pre_op == post_op) { - /* If CIGAR M, could treat as simple integers since BAM_CMATCH is zero*/ - cigar2[i] = bam_cigar_gen(bam_cigar_oplen(cigar2[i-2]) + bam_cigar_oplen(cigar2[i]), post_op); - cigar2[i-2] = 0; // i.e. 0M - } - } - } - /* Remove the zero'd operators (0M) */ - for (i = k = 0; i < n2; ++i) - if (cigar2[i]) cigar2[k++] = cigar2[i]; - n2 = k; - replace_cigar(b, n2, cigar2); - b->core.pos = posmap[b->core.pos]; - if (b->core.mtid < 0 || b->core.mpos < 0) { - /* Nice case, no mate to worry about*/ - // fprintf(stderr, "[depad] Read '%s' mate not mapped\n", bam1_qname(b)); - /* TODO - Warning if FLAG says mate should be mapped? */ - /* Clean up funny input where mate position is given but mate reference is missing: */ - b->core.mtid = -1; - b->core.mpos = -1; - } else if (b->core.mtid == b->core.tid) { - /* Nice case, same reference */ - // fprintf(stderr, "[depad] Read '%s' mate mapped to same ref\n", bam1_qname(b)); - b->core.mpos = posmap[b->core.mpos]; - } else { - /* Nasty case, Must load alternative posmap */ - // fprintf(stderr, "[depad] Loading reference '%s' temporarily\n", h->target_name[b->core.mtid]); - if (!fai) { - fprintf(stderr, "[depad] ERROR: Needed reference %s sequence for mate (and no FASTA file)\n", h->target_name[b->core.mtid]); - return -1; - } - /* Temporarily load the other reference sequence */ - if (load_unpadded_ref(fai, h->target_name[b->core.mtid], h->target_len[b->core.mtid], &r)) { - fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.mtid]); - return -1; - } - posmap = update_posmap(posmap, r); - b->core.mpos = posmap[b->core.mpos]; - /* Restore the reference and posmap*/ - if (load_unpadded_ref(fai, h->target_name[b->core.tid], h->target_len[b->core.tid], &r)) { - fprintf(stderr, "[depad] ERROR: Failed to load '%s' from reference FASTA\n", h->target_name[b->core.tid]); - return -1; - } - posmap = update_posmap(posmap, r); - } - } - samwrite(out, b); - } - if (read_ret < -1) { - fprintf(stderr, "[depad] truncated file.\n"); - ret = 1; - } - free(r.s); free(q.s); free(posmap); - bam_destroy1(b); - return ret; -} - -bam_header_t * fix_header(bam_header_t *old, faidx_t *fai) -{ - int i = 0, unpadded_len = 0; - bam_header_t *header = 0 ; - - header = bam_header_dup(old); - for (i = 0; i < old->n_targets; ++i) { - unpadded_len = get_unpadded_len(fai, old->target_name[i], old->target_len[i]); - if (unpadded_len < 0) { - fprintf(stderr, "[depad] ERROR getting unpadded length of '%s', padded length %i\n", old->target_name[i], old->target_len[i]); - } else { - header->target_len[i] = unpadded_len; - //fprintf(stderr, "[depad] Recalculating '%s' length %i -> %i\n", old->target_name[i], old->target_len[i], header->target_len[i]); - } - } - /* Duplicating the header allocated new buffer for header string */ - /* After modifying the @SQ lines it will only get smaller, since */ - /* the LN entries will be the same or shorter, and we'll remove */ - /* any MD entries (MD5 checksums). */ - assert(strlen(old->text) == strlen(header->text)); - assert (0==strcmp(old->text, header->text)); - const char *text; - text = old->text; - header->text[0] = '\0'; /* Resuse the allocated buffer */ - char * newtext = header->text; - char * end=NULL; - while (text[0]=='@') { - end = strchr(text, '\n'); - assert(end != 0); - if (text[1]=='S' && text[2]=='Q' && text[3]=='\t') { - /* TODO - edit the @SQ line here to remove MD and fix LN. */ - /* For now just remove the @SQ line, and samtools will */ - /* automatically generate a minimal replacement with LN. */ - /* However, that discards any other tags like AS, SP, UR. */ - //fprintf(stderr, "[depad] Removing @SQ line\n"); - } else { - /* Copy this line to the new header */ - strncat(newtext, text, end - text + 1); - } - text = end + 1; - } - assert (text[0]=='\0'); - /* Check we didn't overflow the buffer */ - assert (strlen(header->text) <= strlen(old->text)); - if (strlen(header->text) < header->l_text) { - //fprintf(stderr, "[depad] Reallocating header buffer\n"); - assert (newtext == header->text); - newtext = malloc(strlen(header->text) + 1); - strcpy(newtext, header->text); - free(header->text); - header->text = newtext; - header->l_text = strlen(newtext); - } - //fprintf(stderr, "[depad] Here is the new header (pending @SQ lines),\n\n%s\n(end)\n", header->text); - return header; -} - -static int usage(int is_long_help); - -int main_pad2unpad(int argc, char *argv[]) -{ - samfile_t *in = 0, *out = 0; - bam_header_t *h = 0; - faidx_t *fai = 0; - int c, is_bamin = 1, compress_level = -1, is_bamout = 1, is_long_help = 0; - char in_mode[5], out_mode[5], *fn_out = 0, *fn_list = 0, *fn_ref = 0; - int ret=0; - - /* parse command-line options */ - strcpy(in_mode, "r"); strcpy(out_mode, "w"); - while ((c = getopt(argc, argv, "Sso:u1T:?")) >= 0) { - switch (c) { - case 'S': is_bamin = 0; break; - case 's': assert(compress_level == -1); is_bamout = 0; break; - case 'o': fn_out = strdup(optarg); break; - case 'u': assert(is_bamout == 1); compress_level = 0; break; - case '1': assert(is_bamout == 1); compress_level = 1; break; - case 'T': fn_ref = strdup(optarg); break; - case '?': is_long_help = 1; break; - default: return usage(is_long_help); - } - } - if (argc == optind) return usage(is_long_help); - - if (is_bamin) strcat(in_mode, "b"); - if (is_bamout) strcat(out_mode, "b"); - strcat(out_mode, "h"); - if (compress_level >= 0) { - char tmp[2]; - tmp[0] = compress_level + '0'; tmp[1] = '\0'; - strcat(out_mode, tmp); - } - - // Load FASTA reference (also needed for SAM -> BAM if missing header) - if (fn_ref) { - fn_list = samfaipath(fn_ref); - fai = fai_load(fn_ref); - } - // open file handlers - if ((in = samopen(argv[optind], in_mode, fn_list)) == 0) { - fprintf(stderr, "[depad] failed to open \"%s\" for reading.\n", argv[optind]); - ret = 1; - goto depad_end; - } - if (in->header == 0) { - fprintf(stderr, "[depad] failed to read the header from \"%s\".\n", argv[optind]); - ret = 1; - goto depad_end; - } - if (in->header->text == 0 || in->header->l_text == 0) { - fprintf(stderr, "[depad] Warning - failed to read any header text from \"%s\".\n", argv[optind]); - assert (0 == in->header->l_text); - assert (0 == in->header->text); - } - if (fn_ref) { - h = fix_header(in->header, fai); - } else { - fprintf(stderr, "[depad] Warning - reference lengths will not be corrected without FASTA reference\n"); - h = in->header; - } - if ((out = samopen(fn_out? fn_out : "-", out_mode, h)) == 0) { - fprintf(stderr, "[depad] failed to open \"%s\" for writing.\n", fn_out? fn_out : "standard output"); - ret = 1; - goto depad_end; - } - - // Do the depad - ret = bam_pad2unpad(in, out, fai); - -depad_end: - // close files, free and return - if (fai) fai_destroy(fai); - if (h != in->header) bam_header_destroy(h); - samclose(in); - samclose(out); - free(fn_list); free(fn_out); - return ret; -} - -static int usage(int is_long_help) -{ - fprintf(stderr, "\n"); - fprintf(stderr, "Usage: samtools depad \n\n"); - fprintf(stderr, "Options: -s output is SAM (default is BAM)\n"); - fprintf(stderr, " -S input is SAM (default is BAM)\n"); - fprintf(stderr, " -u uncompressed BAM output (can't use with -s)\n"); - fprintf(stderr, " -1 fast compression BAM output (can't use with -s)\n"); - fprintf(stderr, " -T FILE reference sequence file [null]\n"); - fprintf(stderr, " -o FILE output file name [stdout]\n"); - fprintf(stderr, " -? longer help\n"); - fprintf(stderr, "\n"); - if (is_long_help) - fprintf(stderr, "Notes:\n\ -\n\ - 1. Requires embedded reference sequences (before the reads for that reference),\n\ - with the future aim to also support a FASTA padded reference sequence file.\n\ -\n\ - 2. The input padded alignment read's CIGAR strings must not use P or I operators.\n\ -\n"); - return 1; -} diff --git a/clipper/samtools/phase.c b/clipper/samtools/phase.c deleted file mode 100644 index ef4eff9..0000000 --- a/clipper/samtools/phase.c +++ /dev/null @@ -1,687 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "bam.h" -#include "errmod.h" - -#include "kseq.h" -KSTREAM_INIT(gzFile, gzread, 16384) - -#define MAX_VARS 256 -#define FLIP_PENALTY 2 -#define FLIP_THRES 4 -#define MASK_THRES 3 - -#define FLAG_FIX_CHIMERA 0x1 -#define FLAG_LIST_EXCL 0x4 -#define FLAG_DROP_AMBI 0x8 - -typedef struct { - // configurations, initialized in the main function - int flag, k, min_baseQ, min_varLOD, max_depth; - // other global variables - int vpos_shift; - bamFile fp; - char *pre; - bamFile out[3]; - // alignment queue - int n, m; - bam1_t **b; -} phaseg_t; - -typedef struct { - int8_t seq[MAX_VARS]; // TODO: change to dynamic memory allocation! - int vpos, beg, end; - uint32_t vlen:16, single:1, flip:1, phase:1, phased:1, ambig:1; - uint32_t in:16, out:16; // in-phase and out-phase -} frag_t, *frag_p; - -#define rseq_lt(a,b) ((a)->vpos < (b)->vpos) - -#include "khash.h" -KHASH_SET_INIT_INT64(set64) -KHASH_MAP_INIT_INT64(64, frag_t) - -typedef khash_t(64) nseq_t; - -#include "ksort.h" -KSORT_INIT(rseq, frag_p, rseq_lt) - -static char nt16_nt4_table[] = { 4, 0, 1, 4, 2, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4 }; - -static inline uint64_t X31_hash_string(const char *s) -{ - uint64_t h = *s; - if (h) for (++s ; *s; ++s) h = (h << 5) - h + *s; - return h; -} - -static void count1(int l, const uint8_t *seq, int *cnt) -{ - int i, j, n_ambi; - uint32_t z, x; - if (seq[l-1] == 0) return; // do nothing is the last base is ambiguous - for (i = n_ambi = 0; i < l; ++i) // collect ambiguous bases - if (seq[i] == 0) ++n_ambi; - if (l - n_ambi <= 1) return; // only one SNP - for (x = 0; x < 1u<>j&1; - ++j; - } - z = z<<1 | c; - } - ++cnt[z]; - } -} - -static int **count_all(int l, int vpos, nseq_t *hash) -{ - khint_t k; - int i, j, **cnt; - uint8_t *seq; - seq = calloc(l, 1); - cnt = calloc(vpos, sizeof(void*)); - for (i = 0; i < vpos; ++i) cnt[i] = calloc(1<vpos >= vpos || f->single) continue; // out of region; or singleton - if (f->vlen == 1) { // such reads should be flagged as deleted previously if everything is right - f->single = 1; - continue; - } - for (j = 1; j < f->vlen; ++j) { - for (i = 0; i < l; ++i) - seq[i] = j < l - 1 - i? 0 : f->seq[j - (l - 1 - i)]; - count1(l, seq, cnt[f->vpos + j]); - } - } - } - free(seq); - return cnt; -} - -// phasing -static int8_t *dynaprog(int l, int vpos, int **w) -{ - int *f[2], *curr, *prev, max, i; - int8_t **b, *h = 0; - uint32_t x, z = 1u<<(l-1), mask = (1u<>1; y1 = xc>>1; - c0 = prev[y0] + wi[x] + wi[xc]; - c1 = prev[y1] + wi[x] + wi[xc]; - if (c0 > c1) bi[x] = 0, curr[x] = c0; - else bi[x] = 1, curr[x] = c1; - } - tmp = prev; prev = curr; curr = tmp; // swap - } - { // backtrack - uint32_t max_x = 0; - int which = 0; - h = calloc(vpos, 1); - for (x = 0, max = 0, max_x = 0; x < z; ++x) - if (prev[x] > max) max = prev[x], max_x = x; - for (i = vpos - 1, x = max_x; i >= 0; --i) { - h[i] = which? (~x&1) : (x&1); - which = b[i][x]? !which : which; - x = b[i][x]? (~x&mask)>>1 : x>>1; - } - } - // free - for (i = 0; i < vpos; ++i) free(b[i]); - free(f[0]); free(f[1]); free(b); - return h; -} - -// phase each fragment -static uint64_t *fragphase(int vpos, const int8_t *path, nseq_t *hash, int flip) -{ - khint_t k; - uint64_t *pcnt; - uint32_t *left, *rght, max; - left = rght = 0; max = 0; - pcnt = calloc(vpos, 8); - for (k = 0; k < kh_end(hash); ++k) { - if (kh_exist(hash, k)) { - int i, c[2]; - frag_t *f = &kh_val(hash, k); - if (f->vpos >= vpos) continue; - // get the phase - c[0] = c[1] = 0; - for (i = 0; i < f->vlen; ++i) { - if (f->seq[i] == 0) continue; - ++c[f->seq[i] == path[f->vpos + i] + 1? 0 : 1]; - } - f->phase = c[0] > c[1]? 0 : 1; - f->in = c[f->phase]; f->out = c[1 - f->phase]; - f->phased = f->in == f->out? 0 : 1; - f->ambig = (f->in && f->out && f->out < 3 && f->in <= f->out + 1)? 1 : 0; - // fix chimera - f->flip = 0; - if (flip && c[0] >= 3 && c[1] >= 3) { - int sum[2], m, mi, md; - if (f->vlen > max) { // enlarge the array - max = f->vlen; - kroundup32(max); - left = realloc(left, max * 4); - rght = realloc(rght, max * 4); - } - for (i = 0, sum[0] = sum[1] = 0; i < f->vlen; ++i) { // get left counts - if (f->seq[i]) { - int c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; - ++sum[c == path[f->vpos + i]? 0 : 1]; - } - left[i] = sum[1]<<16 | sum[0]; - } - for (i = f->vlen - 1, sum[0] = sum[1] = 0; i >= 0; --i) { // get right counts - if (f->seq[i]) { - int c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; - ++sum[c == path[f->vpos + i]? 0 : 1]; - } - rght[i] = sum[1]<<16 | sum[0]; - } - // find the best flip point - for (i = m = 0, mi = -1, md = -1; i < f->vlen - 1; ++i) { - int a[2]; - a[0] = (left[i]&0xffff) + (rght[i+1]>>16&0xffff) - (rght[i+1]&0xffff) * FLIP_PENALTY; - a[1] = (left[i]>>16&0xffff) + (rght[i+1]&0xffff) - (rght[i+1]>>16&0xffff) * FLIP_PENALTY; - if (a[0] > a[1]) { - if (a[0] > m) m = a[0], md = 0, mi = i; - } else { - if (a[1] > m) m = a[1], md = 1, mi = i; - } - } - if (m - c[0] >= FLIP_THRES && m - c[1] >= FLIP_THRES) { // then flip - f->flip = 1; - if (md == 0) { // flip the tail - for (i = mi + 1; i < f->vlen; ++i) - if (f->seq[i] == 1) f->seq[i] = 2; - else if (f->seq[i] == 2) f->seq[i] = 1; - } else { // flip the head - for (i = 0; i <= mi; ++i) - if (f->seq[i] == 1) f->seq[i] = 2; - else if (f->seq[i] == 2) f->seq[i] = 1; - } - } - } - // update pcnt[] - if (!f->single) { - for (i = 0; i < f->vlen; ++i) { - int c; - if (f->seq[i] == 0) continue; - c = f->phase? 2 - f->seq[i] : f->seq[i] - 1; - if (c == path[f->vpos + i]) { - if (f->phase == 0) ++pcnt[f->vpos + i]; - else pcnt[f->vpos + i] += 1ull<<32; - } else { - if (f->phase == 0) pcnt[f->vpos + i] += 1<<16; - else pcnt[f->vpos + i] += 1ull<<48; - } - } - } - } - } - free(left); free(rght); - return pcnt; -} - -static uint64_t *genmask(int vpos, const uint64_t *pcnt, int *_n) -{ - int i, max = 0, max_i = -1, m = 0, n = 0, beg = 0, score = 0; - uint64_t *list = 0; - for (i = 0; i < vpos; ++i) { - uint64_t x = pcnt[i]; - int c[4], pre = score, s; - c[0] = x&0xffff; c[1] = x>>16&0xffff; c[2] = x>>32&0xffff; c[3] = x>>48&0xffff; - s = (c[1] + c[3] == 0)? -(c[0] + c[2]) : (c[1] + c[3] - 1); - if (c[3] > c[2]) s += c[3] - c[2]; - if (c[1] > c[0]) s += c[1] - c[0]; - score += s; - if (score < 0) score = 0; - if (pre == 0 && score > 0) beg = i; // change from zero to non-zero - if ((i == vpos - 1 || score == 0) && max >= MASK_THRES) { - if (n == m) { - m = m? m<<1 : 4; - list = realloc(list, m * 8); - } - list[n++] = (uint64_t)beg<<32 | max_i; - i = max_i; // reset i to max_i - score = 0; - } else if (score > max) max = score, max_i = i; - if (score == 0) max = 0; - } - *_n = n; - return list; -} - -// trim heading and tailing ambiguous bases; mark deleted and remove sequence -static int clean_seqs(int vpos, nseq_t *hash) -{ - khint_t k; - int ret = 0; - for (k = 0; k < kh_end(hash); ++k) { - if (kh_exist(hash, k)) { - frag_t *f = &kh_val(hash, k); - int beg, end, i; - if (f->vpos >= vpos) { - ret = 1; - continue; - } - for (i = 0; i < f->vlen; ++i) - if (f->seq[i] != 0) break; - beg = i; - for (i = f->vlen - 1; i >= 0; --i) - if (f->seq[i] != 0) break; - end = i + 1; - if (end - beg <= 0) kh_del(64, hash, k); - else { - if (beg != 0) memmove(f->seq, f->seq + beg, end - beg); - f->vpos += beg; f->vlen = end - beg; - f->single = f->vlen == 1? 1 : 0; - } - } - } - return ret; -} - -static void dump_aln(phaseg_t *g, int min_pos, const nseq_t *hash) -{ - int i, is_flip, drop_ambi; - drop_ambi = g->flag & FLAG_DROP_AMBI; - is_flip = (drand48() < 0.5); - for (i = 0; i < g->n; ++i) { - int end, which; - uint64_t key; - khint_t k; - bam1_t *b = g->b[i]; - key = X31_hash_string(bam1_qname(b)); - end = bam_calend(&b->core, bam1_cigar(b)); - if (end > min_pos) break; - k = kh_get(64, hash, key); - if (k == kh_end(hash)) which = 3; - else { - frag_t *f = &kh_val(hash, k); - if (f->ambig) which = drop_ambi? 2 : 3; - else if (f->phased && f->flip) which = 2; - else if (f->phased == 0) which = 3; - else { // phased and not flipped - char c = 'Y'; - which = f->phase; - bam_aux_append(b, "ZP", 'A', 1, (uint8_t*)&c); - } - if (which < 2 && is_flip) which = 1 - which; // increase the randomness - } - if (which == 3) which = (drand48() < 0.5); - bam_write1(g->out[which], b); - bam_destroy1(b); - g->b[i] = 0; - } - memmove(g->b, g->b + i, (g->n - i) * sizeof(void*)); - g->n -= i; -} - -static int phase(phaseg_t *g, const char *chr, int vpos, uint64_t *cns, nseq_t *hash) -{ - int i, j, n_seqs = kh_size(hash), n_masked = 0, min_pos; - khint_t k; - frag_t **seqs; - int8_t *path, *sitemask; - uint64_t *pcnt, *regmask; - - if (vpos == 0) return 0; - i = clean_seqs(vpos, hash); // i is true if hash has an element with its vpos >= vpos - min_pos = i? cns[vpos]>>32 : 0x7fffffff; - if (vpos == 1) { - printf("PS\t%s\t%d\t%d\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[0]>>32) + 1); - printf("M0\t%s\t%d\t%d\t%c\t%c\t%d\t0\t0\t0\t0\n//\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[0]>>32) + 1, - "ACGTX"[cns[0]&3], "ACGTX"[cns[0]>>16&3], g->vpos_shift + 1); - for (k = 0; k < kh_end(hash); ++k) { - if (kh_exist(hash, k)) { - frag_t *f = &kh_val(hash, k); - if (f->vpos) continue; - f->flip = 0; - if (f->seq[0] == 0) f->phased = 0; - else f->phased = 1, f->phase = f->seq[0] - 1; - } - } - dump_aln(g, min_pos, hash); - ++g->vpos_shift; - return 1; - } - { // phase - int **cnt; - uint64_t *mask; - printf("PS\t%s\t%d\t%d\n", chr, (int)(cns[0]>>32) + 1, (int)(cns[vpos-1]>>32) + 1); - sitemask = calloc(vpos, 1); - cnt = count_all(g->k, vpos, hash); - path = dynaprog(g->k, vpos, cnt); - for (i = 0; i < vpos; ++i) free(cnt[i]); - free(cnt); - pcnt = fragphase(vpos, path, hash, 0); // do not fix chimeras when masking - mask = genmask(vpos, pcnt, &n_masked); - regmask = calloc(n_masked, 8); - for (i = 0; i < n_masked; ++i) { - regmask[i] = cns[mask[i]>>32]>>32<<32 | cns[(uint32_t)mask[i]]>>32; - for (j = mask[i]>>32; j <= (int32_t)mask[i]; ++j) - sitemask[j] = 1; - } - free(mask); - if (g->flag & FLAG_FIX_CHIMERA) { - free(pcnt); - pcnt = fragphase(vpos, path, hash, 1); - } - } - for (i = 0; i < n_masked; ++i) - printf("FL\t%s\t%d\t%d\n", chr, (int)(regmask[i]>>32) + 1, (int)regmask[i] + 1); - for (i = 0; i < vpos; ++i) { - uint64_t x = pcnt[i]; - int8_t c[2]; - c[0] = (cns[i]&0xffff)>>2 == 0? 4 : (cns[i]&3); - c[1] = (cns[i]>>16&0xffff)>>2 == 0? 4 : (cns[i]>>16&3); - printf("M%d\t%s\t%d\t%d\t%c\t%c\t%d\t%d\t%d\t%d\t%d\n", sitemask[i]+1, chr, (int)(cns[0]>>32) + 1, (int)(cns[i]>>32) + 1, "ACGTX"[c[path[i]]], "ACGTX"[c[1-path[i]]], - i + g->vpos_shift + 1, (int)(x&0xffff), (int)(x>>16&0xffff), (int)(x>>32&0xffff), (int)(x>>48&0xffff)); - } - free(path); free(pcnt); free(regmask); free(sitemask); - seqs = calloc(n_seqs, sizeof(void*)); - for (k = 0, i = 0; k < kh_end(hash); ++k) - if (kh_exist(hash, k) && kh_val(hash, k).vpos < vpos && !kh_val(hash, k).single) - seqs[i++] = &kh_val(hash, k); - n_seqs = i; - ks_introsort_rseq(n_seqs, seqs); - for (i = 0; i < n_seqs; ++i) { - frag_t *f = seqs[i]; - printf("EV\t0\t%s\t%d\t40\t%dM\t*\t0\t0\t", chr, f->vpos + 1 + g->vpos_shift, f->vlen); - for (j = 0; j < f->vlen; ++j) { - uint32_t c = cns[f->vpos + j]; - if (f->seq[j] == 0) putchar('N'); - else putchar("ACGT"[f->seq[j] == 1? (c&3) : (c>>16&3)]); - } - printf("\t*\tYP:i:%d\tYF:i:%d\tYI:i:%d\tYO:i:%d\tYS:i:%d\n", f->phase, f->flip, f->in, f->out, f->beg+1); - } - free(seqs); - printf("//\n"); - fflush(stdout); - g->vpos_shift += vpos; - dump_aln(g, min_pos, hash); - return vpos; -} - -static void update_vpos(int vpos, nseq_t *hash) -{ - khint_t k; - for (k = 0; k < kh_end(hash); ++k) { - if (kh_exist(hash, k)) { - frag_t *f = &kh_val(hash, k); - if (f->vpos < vpos) kh_del(64, hash, k); // TODO: if frag_t::seq is allocated dynamically, free it - else f->vpos -= vpos; - } - } -} - -static nseq_t *shrink_hash(nseq_t *hash) // TODO: to implement -{ - return hash; -} - -static int readaln(void *data, bam1_t *b) -{ - phaseg_t *g = (phaseg_t*)data; - int ret; - ret = bam_read1(g->fp, b); - if (ret < 0) return ret; - if (!(b->core.flag & (BAM_FUNMAP|BAM_FSECONDARY|BAM_FQCFAIL|BAM_FDUP)) && g->pre) { - if (g->n == g->m) { - g->m = g->m? g->m<<1 : 16; - g->b = realloc(g->b, g->m * sizeof(void*)); - } - g->b[g->n++] = bam_dup1(b); - } - return ret; -} - -static khash_t(set64) *loadpos(const char *fn, bam_header_t *h) -{ - gzFile fp; - kstream_t *ks; - int ret, dret; - kstring_t *str; - khash_t(set64) *hash; - - hash = kh_init(set64); - str = calloc(1, sizeof(kstring_t)); - fp = strcmp(fn, "-")? gzopen(fn, "r") : gzdopen(fileno(stdin), "r"); - ks = ks_init(fp); - while (ks_getuntil(ks, 0, str, &dret) >= 0) { - int tid = bam_get_tid(h, str->s); - if (tid >= 0 && dret != '\n') { - if (ks_getuntil(ks, 0, str, &dret) >= 0) { - uint64_t x = (uint64_t)tid<<32 | (atoi(str->s) - 1); - kh_put(set64, hash, x, &ret); - } else break; - } - if (dret != '\n') while ((dret = ks_getc(ks)) > 0 && dret != '\n'); - if (dret < 0) break; - } - ks_destroy(ks); - gzclose(fp); - free(str->s); free(str); - return hash; -} - -static int gl2cns(float q[16]) -{ - int i, j, min_ij; - float min, min2; - min = min2 = 1e30; min_ij = -1; - for (i = 0; i < 4; ++i) { - for (j = i; j < 4; ++j) { - if (q[i<<2|j] < min) min_ij = i<<2|j, min2 = min, min = q[i<<2|j]; - else if (q[i<<2|j] < min2) min2 = q[i<<2|j]; - } - } - return (min_ij>>2&3) == (min_ij&3)? 0 : 1<<18 | (min_ij>>2&3)<<16 | (min_ij&3) | (int)(min2 - min + .499) << 2; -} - -int main_phase(int argc, char *argv[]) -{ - extern void bam_init_header_hash(bam_header_t *header); - int c, tid, pos, vpos = 0, n, lasttid = -1, max_vpos = 0; - const bam_pileup1_t *plp; - bam_plp_t iter; - bam_header_t *h; - nseq_t *seqs; - uint64_t *cns = 0; - phaseg_t g; - char *fn_list = 0; - khash_t(set64) *set = 0; - errmod_t *em; - uint16_t *bases; - - memset(&g, 0, sizeof(phaseg_t)); - g.flag = FLAG_FIX_CHIMERA; - g.min_varLOD = 37; g.k = 13; g.min_baseQ = 13; g.max_depth = 256; - while ((c = getopt(argc, argv, "Q:eFq:k:b:l:D:A:")) >= 0) { - switch (c) { - case 'D': g.max_depth = atoi(optarg); break; - case 'q': g.min_varLOD = atoi(optarg); break; - case 'Q': g.min_baseQ = atoi(optarg); break; - case 'k': g.k = atoi(optarg); break; - case 'F': g.flag &= ~FLAG_FIX_CHIMERA; break; - case 'e': g.flag |= FLAG_LIST_EXCL; break; - case 'A': g.flag |= FLAG_DROP_AMBI; break; - case 'b': g.pre = strdup(optarg); break; - case 'l': fn_list = strdup(optarg); break; - } - } - if (argc == optind) { - fprintf(stderr, "\n"); - fprintf(stderr, "Usage: samtools phase [options] \n\n"); - fprintf(stderr, "Options: -k INT block length [%d]\n", g.k); - fprintf(stderr, " -b STR prefix of BAMs to output [null]\n"); - fprintf(stderr, " -q INT min het phred-LOD [%d]\n", g.min_varLOD); - fprintf(stderr, " -Q INT min base quality in het calling [%d]\n", g.min_baseQ); - fprintf(stderr, " -D INT max read depth [%d]\n", g.max_depth); -// fprintf(stderr, " -l FILE list of sites to phase [null]\n"); - fprintf(stderr, " -F do not attempt to fix chimeras\n"); - fprintf(stderr, " -A drop reads with ambiguous phase\n"); -// fprintf(stderr, " -e do not discover SNPs (effective with -l)\n"); - fprintf(stderr, "\n"); - return 1; - } - g.fp = strcmp(argv[optind], "-")? bam_open(argv[optind], "r") : bam_dopen(fileno(stdin), "r"); - h = bam_header_read(g.fp); - if (fn_list) { // read the list of sites to phase - bam_init_header_hash(h); - set = loadpos(fn_list, h); - free(fn_list); - } else g.flag &= ~FLAG_LIST_EXCL; - if (g.pre) { // open BAMs to write - char *s = malloc(strlen(g.pre) + 20); - strcpy(s, g.pre); strcat(s, ".0.bam"); g.out[0] = bam_open(s, "w"); - strcpy(s, g.pre); strcat(s, ".1.bam"); g.out[1] = bam_open(s, "w"); - strcpy(s, g.pre); strcat(s, ".chimera.bam"); g.out[2] = bam_open(s, "w"); - for (c = 0; c <= 2; ++c) bam_header_write(g.out[c], h); - free(s); - } - - iter = bam_plp_init(readaln, &g); - g.vpos_shift = 0; - seqs = kh_init(64); - em = errmod_init(1. - 0.83); - bases = calloc(g.max_depth, 2); - printf("CC\n"); - printf("CC\tDescriptions:\nCC\n"); - printf("CC\t CC comments\n"); - printf("CC\t PS start of a phase set\n"); - printf("CC\t FL filtered region\n"); - printf("CC\t M[012] markers; 0 for singletons, 1 for phased and 2 for filtered\n"); - printf("CC\t EV supporting reads; SAM format\n"); - printf("CC\t // end of a phase set\nCC\n"); - printf("CC\tFormats of PS, FL and M[012] lines (1-based coordinates):\nCC\n"); - printf("CC\t PS chr phaseSetStart phaseSetEnd\n"); - printf("CC\t FL chr filterStart filterEnd\n"); - printf("CC\t M? chr PS pos allele0 allele1 hetIndex #supports0 #errors0 #supp1 #err1\n"); - printf("CC\nCC\n"); - fflush(stdout); - while ((plp = bam_plp_auto(iter, &tid, &pos, &n)) != 0) { - int i, k, c, tmp, dophase = 1, in_set = 0; - float q[16]; - if (tid < 0) break; - if (tid != lasttid) { // change of chromosome - g.vpos_shift = 0; - if (lasttid >= 0) { - seqs = shrink_hash(seqs); - phase(&g, h->target_name[lasttid], vpos, cns, seqs); - update_vpos(0x7fffffff, seqs); - } - lasttid = tid; - vpos = 0; - } - if (set && kh_get(set64, set, (uint64_t)tid<<32 | pos) != kh_end(set)) in_set = 1; - if (n > g.max_depth) continue; // do not proceed if the depth is too high - // fill the bases array and check if there is a variant - for (i = k = 0; i < n; ++i) { - const bam_pileup1_t *p = plp + i; - uint8_t *seq; - int q, baseQ, b; - if (p->is_del || p->is_refskip) continue; - baseQ = bam1_qual(p->b)[p->qpos]; - if (baseQ < g.min_baseQ) continue; - seq = bam1_seq(p->b); - b = bam_nt16_nt4_table[bam1_seqi(seq, p->qpos)]; - if (b > 3) continue; - q = baseQ < p->b->core.qual? baseQ : p->b->core.qual; - if (q < 4) q = 4; - if (q > 63) q = 63; - bases[k++] = q<<5 | (int)bam1_strand(p->b)<<4 | b; - } - if (k == 0) continue; - errmod_cal(em, k, 4, bases, q); // compute genotype likelihood - c = gl2cns(q); // get the consensus - // tell if to proceed - if (set && (g.flag&FLAG_LIST_EXCL) && !in_set) continue; // not in the list - if (!in_set && (c&0xffff)>>2 < g.min_varLOD) continue; // not a variant - // add the variant - if (vpos == max_vpos) { - max_vpos = max_vpos? max_vpos<<1 : 128; - cns = realloc(cns, max_vpos * 8); - } - cns[vpos] = (uint64_t)pos<<32 | c; - for (i = 0; i < n; ++i) { - const bam_pileup1_t *p = plp + i; - uint64_t key; - khint_t k; - uint8_t *seq = bam1_seq(p->b); - frag_t *f; - if (p->is_del || p->is_refskip) continue; - if (p->b->core.qual == 0) continue; - // get the base code - c = nt16_nt4_table[(int)bam1_seqi(seq, p->qpos)]; - if (c == (cns[vpos]&3)) c = 1; - else if (c == (cns[vpos]>>16&3)) c = 2; - else c = 0; - // write to seqs - key = X31_hash_string(bam1_qname(p->b)); - k = kh_put(64, seqs, key, &tmp); - f = &kh_val(seqs, k); - if (tmp == 0) { // present in the hash table - if (vpos - f->vpos + 1 < MAX_VARS) { - f->vlen = vpos - f->vpos + 1; - f->seq[f->vlen-1] = c; - f->end = bam_calend(&p->b->core, bam1_cigar(p->b)); - } - dophase = 0; - } else { // absent - memset(f->seq, 0, MAX_VARS); - f->beg = p->b->core.pos; - f->end = bam_calend(&p->b->core, bam1_cigar(p->b)); - f->vpos = vpos, f->vlen = 1, f->seq[0] = c, f->single = f->phased = f->flip = f->ambig = 0; - } - } - if (dophase) { - seqs = shrink_hash(seqs); - phase(&g, h->target_name[tid], vpos, cns, seqs); - update_vpos(vpos, seqs); - cns[0] = cns[vpos]; - vpos = 0; - } - ++vpos; - } - if (tid >= 0) phase(&g, h->target_name[tid], vpos, cns, seqs); - bam_header_destroy(h); - bam_plp_destroy(iter); - bam_close(g.fp); - kh_destroy(64, seqs); - kh_destroy(set64, set); - free(cns); - errmod_destroy(em); - free(bases); - if (g.pre) { - for (c = 0; c <= 2; ++c) bam_close(g.out[c]); - free(g.pre); free(g.b); - } - return 0; -} diff --git a/clipper/samtools/razf.c b/clipper/samtools/razf.c deleted file mode 100644 index e7499f9..0000000 --- a/clipper/samtools/razf.c +++ /dev/null @@ -1,853 +0,0 @@ -/* - * RAZF : Random Access compressed(Z) File - * Version: 1.0 - * Release Date: 2008-10-27 - * - * Copyright 2008, Jue Ruan , Heng Li - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef _NO_RAZF - -#include -#include -#include -#include -#include -#include "razf.h" - - -#if ZLIB_VERNUM < 0x1221 -struct _gz_header_s { - int text; - uLong time; - int xflags; - int os; - Bytef *extra; - uInt extra_len; - uInt extra_max; - Bytef *name; - uInt name_max; - Bytef *comment; - uInt comm_max; - int hcrc; - int done; -}; -#warning "zlib < 1.2.2.1; RAZF writing is disabled." -#endif - -#define DEF_MEM_LEVEL 8 - -static inline uint32_t byte_swap_4(uint32_t v){ - v = ((v & 0x0000FFFFU) << 16) | (v >> 16); - return ((v & 0x00FF00FFU) << 8) | ((v & 0xFF00FF00U) >> 8); -} - -static inline uint64_t byte_swap_8(uint64_t v){ - v = ((v & 0x00000000FFFFFFFFLLU) << 32) | (v >> 32); - v = ((v & 0x0000FFFF0000FFFFLLU) << 16) | ((v & 0xFFFF0000FFFF0000LLU) >> 16); - return ((v & 0x00FF00FF00FF00FFLLU) << 8) | ((v & 0xFF00FF00FF00FF00LLU) >> 8); -} - -static inline int is_big_endian(){ - int x = 0x01; - char *c = (char*)&x; - return (c[0] != 0x01); -} - -#ifndef _RZ_READONLY -static void add_zindex(RAZF *rz, int64_t in, int64_t out){ - if(rz->index->size == rz->index->cap){ - rz->index->cap = rz->index->cap * 1.5 + 2; - rz->index->cell_offsets = realloc(rz->index->cell_offsets, sizeof(int) * rz->index->cap); - rz->index->bin_offsets = realloc(rz->index->bin_offsets, sizeof(int64_t) * (rz->index->cap/RZ_BIN_SIZE + 1)); - } - if(rz->index->size % RZ_BIN_SIZE == 0) rz->index->bin_offsets[rz->index->size / RZ_BIN_SIZE] = out; - rz->index->cell_offsets[rz->index->size] = out - rz->index->bin_offsets[rz->index->size / RZ_BIN_SIZE]; - rz->index->size ++; -} - -static void save_zindex(RAZF *rz, int fd){ - int32_t i, v32; - int is_be; - is_be = is_big_endian(); - if(is_be) write(fd, &rz->index->size, sizeof(int)); - else { - v32 = byte_swap_4((uint32_t)rz->index->size); - write(fd, &v32, sizeof(uint32_t)); - } - v32 = rz->index->size / RZ_BIN_SIZE + 1; - if(!is_be){ - for(i=0;iindex->bin_offsets[i] = byte_swap_8((uint64_t)rz->index->bin_offsets[i]); - for(i=0;iindex->size;i++) rz->index->cell_offsets[i] = byte_swap_4((uint32_t)rz->index->cell_offsets[i]); - } - write(fd, rz->index->bin_offsets, sizeof(int64_t) * v32); - write(fd, rz->index->cell_offsets, sizeof(int32_t) * rz->index->size); -} -#endif - -#ifdef _USE_KNETFILE -static void load_zindex(RAZF *rz, knetFile *fp){ -#else -static void load_zindex(RAZF *rz, int fd){ -#endif - int32_t i, v32; - int is_be; - if(!rz->load_index) return; - if(rz->index == NULL) rz->index = malloc(sizeof(ZBlockIndex)); - is_be = is_big_endian(); -#ifdef _USE_KNETFILE - knet_read(fp, &rz->index->size, sizeof(int)); -#else - read(fd, &rz->index->size, sizeof(int)); -#endif - if(!is_be) rz->index->size = byte_swap_4((uint32_t)rz->index->size); - rz->index->cap = rz->index->size; - v32 = rz->index->size / RZ_BIN_SIZE + 1; - rz->index->bin_offsets = malloc(sizeof(int64_t) * v32); -#ifdef _USE_KNETFILE - knet_read(fp, rz->index->bin_offsets, sizeof(int64_t) * v32); -#else - read(fd, rz->index->bin_offsets, sizeof(int64_t) * v32); -#endif - rz->index->cell_offsets = malloc(sizeof(int) * rz->index->size); -#ifdef _USE_KNETFILE - knet_read(fp, rz->index->cell_offsets, sizeof(int) * rz->index->size); -#else - read(fd, rz->index->cell_offsets, sizeof(int) * rz->index->size); -#endif - if(!is_be){ - for(i=0;iindex->bin_offsets[i] = byte_swap_8((uint64_t)rz->index->bin_offsets[i]); - for(i=0;iindex->size;i++) rz->index->cell_offsets[i] = byte_swap_4((uint32_t)rz->index->cell_offsets[i]); - } -} - -#ifdef _RZ_READONLY -static RAZF* razf_open_w(int fd) -{ - fprintf(stderr, "[razf_open_w] Writing is not available with zlib ver < 1.2.2.1\n"); - return 0; -} -#else -static RAZF* razf_open_w(int fd){ - RAZF *rz; -#ifdef _WIN32 - setmode(fd, O_BINARY); -#endif - rz = calloc(1, sizeof(RAZF)); - rz->mode = 'w'; -#ifdef _USE_KNETFILE - rz->x.fpw = fd; -#else - rz->filedes = fd; -#endif - rz->stream = calloc(sizeof(z_stream), 1); - rz->inbuf = malloc(RZ_BUFFER_SIZE); - rz->outbuf = malloc(RZ_BUFFER_SIZE); - rz->index = calloc(sizeof(ZBlockIndex), 1); - deflateInit2(rz->stream, RZ_COMPRESS_LEVEL, Z_DEFLATED, WINDOW_BITS + 16, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); - rz->stream->avail_out = RZ_BUFFER_SIZE; - rz->stream->next_out = rz->outbuf; - rz->header = calloc(sizeof(gz_header), 1); - rz->header->os = 0x03; //Unix - rz->header->text = 0; - rz->header->time = 0; - rz->header->extra = malloc(7); - strncpy((char*)rz->header->extra, "RAZF", 4); - rz->header->extra[4] = 1; // obsolete field - // block size = RZ_BLOCK_SIZE, Big-Endian - rz->header->extra[5] = RZ_BLOCK_SIZE >> 8; - rz->header->extra[6] = RZ_BLOCK_SIZE & 0xFF; - rz->header->extra_len = 7; - rz->header->name = rz->header->comment = 0; - rz->header->hcrc = 0; - deflateSetHeader(rz->stream, rz->header); - rz->block_pos = rz->block_off = 0; - return rz; -} - -static void _razf_write(RAZF* rz, const void *data, int size){ - int tout; - rz->stream->avail_in = size; - rz->stream->next_in = (void*)data; - while(1){ - tout = rz->stream->avail_out; - deflate(rz->stream, Z_NO_FLUSH); - rz->out += tout - rz->stream->avail_out; - if(rz->stream->avail_out) break; -#ifdef _USE_KNETFILE - write(rz->x.fpw, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); -#else - write(rz->filedes, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); -#endif - rz->stream->avail_out = RZ_BUFFER_SIZE; - rz->stream->next_out = rz->outbuf; - if(rz->stream->avail_in == 0) break; - }; - rz->in += size - rz->stream->avail_in; - rz->block_off += size - rz->stream->avail_in; -} - -static void razf_flush(RAZF *rz){ - uint32_t tout; - if(rz->buf_len){ - _razf_write(rz, rz->inbuf, rz->buf_len); - rz->buf_off = rz->buf_len = 0; - } - if(rz->stream->avail_out){ -#ifdef _USE_KNETFILE - write(rz->x.fpw, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); -#else - write(rz->filedes, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); -#endif - rz->stream->avail_out = RZ_BUFFER_SIZE; - rz->stream->next_out = rz->outbuf; - } - while(1){ - tout = rz->stream->avail_out; - deflate(rz->stream, Z_FULL_FLUSH); - rz->out += tout - rz->stream->avail_out; - if(rz->stream->avail_out == 0){ -#ifdef _USE_KNETFILE - write(rz->x.fpw, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); -#else - write(rz->filedes, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); -#endif - rz->stream->avail_out = RZ_BUFFER_SIZE; - rz->stream->next_out = rz->outbuf; - } else break; - } - rz->block_pos = rz->out; - rz->block_off = 0; -} - -static void razf_end_flush(RAZF *rz){ - uint32_t tout; - if(rz->buf_len){ - _razf_write(rz, rz->inbuf, rz->buf_len); - rz->buf_off = rz->buf_len = 0; - } - while(1){ - tout = rz->stream->avail_out; - deflate(rz->stream, Z_FINISH); - rz->out += tout - rz->stream->avail_out; - if(rz->stream->avail_out < RZ_BUFFER_SIZE){ -#ifdef _USE_KNETFILE - write(rz->x.fpw, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); -#else - write(rz->filedes, rz->outbuf, RZ_BUFFER_SIZE - rz->stream->avail_out); -#endif - rz->stream->avail_out = RZ_BUFFER_SIZE; - rz->stream->next_out = rz->outbuf; - } else break; - } -} - -static void _razf_buffered_write(RAZF *rz, const void *data, int size){ - int i, n; - while(1){ - if(rz->buf_len == RZ_BUFFER_SIZE){ - _razf_write(rz, rz->inbuf, rz->buf_len); - rz->buf_len = 0; - } - if(size + rz->buf_len < RZ_BUFFER_SIZE){ - for(i=0;iinbuf + rz->buf_len)[i] = ((char*)data)[i]; - rz->buf_len += size; - return; - } else { - n = RZ_BUFFER_SIZE - rz->buf_len; - for(i=0;iinbuf + rz->buf_len)[i] = ((char*)data)[i]; - size -= n; - data += n; - rz->buf_len += n; - } - } -} - -int razf_write(RAZF* rz, const void *data, int size){ - int ori_size, n; - int64_t next_block; - ori_size = size; - next_block = ((rz->in / RZ_BLOCK_SIZE) + 1) * RZ_BLOCK_SIZE; - while(rz->in + rz->buf_len + size >= next_block){ - n = next_block - rz->in - rz->buf_len; - _razf_buffered_write(rz, data, n); - data += n; - size -= n; - razf_flush(rz); - add_zindex(rz, rz->in, rz->out); - next_block = ((rz->in / RZ_BLOCK_SIZE) + 1) * RZ_BLOCK_SIZE; - } - _razf_buffered_write(rz, data, size); - return ori_size; -} -#endif - -/* gzip flag byte */ -#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ -#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ -#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ -#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ -#define COMMENT 0x10 /* bit 4 set: file comment present */ -#define RESERVED 0xE0 /* bits 5..7: reserved */ - -static int _read_gz_header(unsigned char *data, int size, int *extra_off, int *extra_len){ - int method, flags, n, len; - if(size < 2) return 0; - if(data[0] != 0x1f || data[1] != 0x8b) return 0; - if(size < 4) return 0; - method = data[2]; - flags = data[3]; - if(method != Z_DEFLATED || (flags & RESERVED)) return 0; - n = 4 + 6; // Skip 6 bytes - *extra_off = n + 2; - *extra_len = 0; - if(flags & EXTRA_FIELD){ - if(size < n + 2) return 0; - len = ((int)data[n + 1] << 8) | data[n]; - n += 2; - *extra_off = n; - while(len){ - if(n >= size) return 0; - n ++; - len --; - } - *extra_len = n - (*extra_off); - } - if(flags & ORIG_NAME) while(n < size && data[n++]); - if(flags & COMMENT) while(n < size && data[n++]); - if(flags & HEAD_CRC){ - if(n + 2 > size) return 0; - n += 2; - } - return n; -} - -#ifdef _USE_KNETFILE -static RAZF* razf_open_r(knetFile *fp, int _load_index){ -#else -static RAZF* razf_open_r(int fd, int _load_index){ -#endif - RAZF *rz; - int ext_off, ext_len; - int n, is_be, ret; - int64_t end; - unsigned char c[] = "RAZF"; - rz = calloc(1, sizeof(RAZF)); - rz->mode = 'r'; -#ifdef _USE_KNETFILE - rz->x.fpr = fp; -#else -#ifdef _WIN32 - setmode(fd, O_BINARY); -#endif - rz->filedes = fd; -#endif - rz->stream = calloc(sizeof(z_stream), 1); - rz->inbuf = malloc(RZ_BUFFER_SIZE); - rz->outbuf = malloc(RZ_BUFFER_SIZE); - rz->end = rz->src_end = 0x7FFFFFFFFFFFFFFFLL; -#ifdef _USE_KNETFILE - n = knet_read(rz->x.fpr, rz->inbuf, RZ_BUFFER_SIZE); -#else - n = read(rz->filedes, rz->inbuf, RZ_BUFFER_SIZE); -#endif - ret = _read_gz_header(rz->inbuf, n, &ext_off, &ext_len); - if(ret == 0){ - PLAIN_FILE: - rz->in = n; - rz->file_type = FILE_TYPE_PLAIN; - memcpy(rz->outbuf, rz->inbuf, n); - rz->buf_len = n; - free(rz->stream); - rz->stream = NULL; - return rz; - } - rz->header_size = ret; - ret = inflateInit2(rz->stream, -WINDOW_BITS); - if(ret != Z_OK){ inflateEnd(rz->stream); goto PLAIN_FILE;} - rz->stream->avail_in = n - rz->header_size; - rz->stream->next_in = rz->inbuf + rz->header_size; - rz->stream->avail_out = RZ_BUFFER_SIZE; - rz->stream->next_out = rz->outbuf; - rz->file_type = FILE_TYPE_GZ; - rz->in = rz->header_size; - rz->block_pos = rz->header_size; - rz->next_block_pos = rz->header_size; - rz->block_off = 0; - if(ext_len < 7 || memcmp(rz->inbuf + ext_off, c, 4) != 0) return rz; - if(((((unsigned char*)rz->inbuf)[ext_off + 5] << 8) | ((unsigned char*)rz->inbuf)[ext_off + 6]) != RZ_BLOCK_SIZE){ - fprintf(stderr, " -- WARNING: RZ_BLOCK_SIZE is not %d, treat source as gz file. in %s -- %s:%d --\n", RZ_BLOCK_SIZE, __FUNCTION__, __FILE__, __LINE__); - return rz; - } - rz->load_index = _load_index; - rz->file_type = FILE_TYPE_RZ; -#ifdef _USE_KNETFILE - if(knet_seek(fp, -16, SEEK_END) == -1){ -#else - if(lseek(fd, -16, SEEK_END) == -1){ -#endif - UNSEEKABLE: - rz->seekable = 0; - rz->index = NULL; - rz->src_end = rz->end = 0x7FFFFFFFFFFFFFFFLL; - } else { - is_be = is_big_endian(); - rz->seekable = 1; -#ifdef _USE_KNETFILE - knet_read(fp, &end, sizeof(int64_t)); -#else - read(fd, &end, sizeof(int64_t)); -#endif - if(!is_be) rz->src_end = (int64_t)byte_swap_8((uint64_t)end); - else rz->src_end = end; - -#ifdef _USE_KNETFILE - knet_read(fp, &end, sizeof(int64_t)); -#else - read(fd, &end, sizeof(int64_t)); -#endif - if(!is_be) rz->end = (int64_t)byte_swap_8((uint64_t)end); - else rz->end = end; - if(n > rz->end){ - rz->stream->avail_in -= n - rz->end; - n = rz->end; - } - if(rz->end > rz->src_end){ -#ifdef _USE_KNETFILE - knet_seek(fp, rz->in, SEEK_SET); -#else - lseek(fd, rz->in, SEEK_SET); -#endif - goto UNSEEKABLE; - } -#ifdef _USE_KNETFILE - knet_seek(fp, rz->end, SEEK_SET); - if(knet_tell(fp) != rz->end){ - knet_seek(fp, rz->in, SEEK_SET); -#else - if(lseek(fd, rz->end, SEEK_SET) != rz->end){ - lseek(fd, rz->in, SEEK_SET); -#endif - goto UNSEEKABLE; - } -#ifdef _USE_KNETFILE - load_zindex(rz, fp); - knet_seek(fp, n, SEEK_SET); -#else - load_zindex(rz, fd); - lseek(fd, n, SEEK_SET); -#endif - } - return rz; -} - -#ifdef _USE_KNETFILE -RAZF* razf_dopen(int fd, const char *mode){ - if (strstr(mode, "r")) fprintf(stderr,"[razf_dopen] implement me\n"); - else if(strstr(mode, "w")) return razf_open_w(fd); - return NULL; -} - -RAZF* razf_dopen2(int fd, const char *mode) -{ - fprintf(stderr,"[razf_dopen2] implement me\n"); - return NULL; -} -#else -RAZF* razf_dopen(int fd, const char *mode){ - if(strstr(mode, "r")) return razf_open_r(fd, 1); - else if(strstr(mode, "w")) return razf_open_w(fd); - else return NULL; -} - -RAZF* razf_dopen2(int fd, const char *mode) -{ - if(strstr(mode, "r")) return razf_open_r(fd, 0); - else if(strstr(mode, "w")) return razf_open_w(fd); - else return NULL; -} -#endif - -static inline RAZF* _razf_open(const char *filename, const char *mode, int _load_index){ - int fd; - RAZF *rz; - if(strstr(mode, "r")){ -#ifdef _USE_KNETFILE - knetFile *fd = knet_open(filename, "r"); - if (fd == 0) { - fprintf(stderr, "[_razf_open] fail to open %s\n", filename); - return NULL; - } -#else -#ifdef _WIN32 - fd = open(filename, O_RDONLY | O_BINARY); -#else - fd = open(filename, O_RDONLY); -#endif -#endif - if(fd < 0) return NULL; - rz = razf_open_r(fd, _load_index); - } else if(strstr(mode, "w")){ -#ifdef _WIN32 - fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0666); -#else - fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666); -#endif - if(fd < 0) return NULL; - rz = razf_open_w(fd); - } else return NULL; - return rz; -} - -RAZF* razf_open(const char *filename, const char *mode){ - return _razf_open(filename, mode, 1); -} - -RAZF* razf_open2(const char *filename, const char *mode){ - return _razf_open(filename, mode, 0); -} - -int razf_get_data_size(RAZF *rz, int64_t *u_size, int64_t *c_size){ - int64_t n; - if(rz->mode != 'r' && rz->mode != 'R') return 0; - switch(rz->file_type){ - case FILE_TYPE_PLAIN: - if(rz->end == 0x7fffffffffffffffLL){ -#ifdef _USE_KNETFILE - if(knet_seek(rz->x.fpr, 0, SEEK_CUR) == -1) return 0; - n = knet_tell(rz->x.fpr); - knet_seek(rz->x.fpr, 0, SEEK_END); - rz->end = knet_tell(rz->x.fpr); - knet_seek(rz->x.fpr, n, SEEK_SET); -#else - if((n = lseek(rz->filedes, 0, SEEK_CUR)) == -1) return 0; - rz->end = lseek(rz->filedes, 0, SEEK_END); - lseek(rz->filedes, n, SEEK_SET); -#endif - } - *u_size = *c_size = rz->end; - return 1; - case FILE_TYPE_GZ: - return 0; - case FILE_TYPE_RZ: - if(rz->src_end == rz->end) return 0; - *u_size = rz->src_end; - *c_size = rz->end; - return 1; - default: - return 0; - } -} - -static int _razf_read(RAZF* rz, void *data, int size){ - int ret, tin; - if(rz->z_eof || rz->z_err) return 0; - if (rz->file_type == FILE_TYPE_PLAIN) { -#ifdef _USE_KNETFILE - ret = knet_read(rz->x.fpr, data, size); -#else - ret = read(rz->filedes, data, size); -#endif - if (ret == 0) rz->z_eof = 1; - return ret; - } - rz->stream->avail_out = size; - rz->stream->next_out = data; - while(rz->stream->avail_out){ - if(rz->stream->avail_in == 0){ - if(rz->in >= rz->end){ rz->z_eof = 1; break; } - if(rz->end - rz->in < RZ_BUFFER_SIZE){ -#ifdef _USE_KNETFILE - rz->stream->avail_in = knet_read(rz->x.fpr, rz->inbuf, rz->end -rz->in); -#else - rz->stream->avail_in = read(rz->filedes, rz->inbuf, rz->end -rz->in); -#endif - } else { -#ifdef _USE_KNETFILE - rz->stream->avail_in = knet_read(rz->x.fpr, rz->inbuf, RZ_BUFFER_SIZE); -#else - rz->stream->avail_in = read(rz->filedes, rz->inbuf, RZ_BUFFER_SIZE); -#endif - } - if(rz->stream->avail_in == 0){ - rz->z_eof = 1; - break; - } - rz->stream->next_in = rz->inbuf; - } - tin = rz->stream->avail_in; - ret = inflate(rz->stream, Z_BLOCK); - rz->in += tin - rz->stream->avail_in; - if(ret == Z_NEED_DICT || ret == Z_MEM_ERROR || ret == Z_DATA_ERROR){ - fprintf(stderr, "[_razf_read] inflate error: %d %s (at %s:%d)\n", ret, rz->stream->msg ? rz->stream->msg : "", __FILE__, __LINE__); - rz->z_err = 1; - break; - } - if(ret == Z_STREAM_END){ - rz->z_eof = 1; - break; - } - if ((rz->stream->data_type&128) && !(rz->stream->data_type&64)){ - rz->buf_flush = 1; - rz->next_block_pos = rz->in; - break; - } - } - return size - rz->stream->avail_out; -} - -int razf_read(RAZF *rz, void *data, int size){ - int ori_size, i; - ori_size = size; - while(size > 0){ - if(rz->buf_len){ - if(size < rz->buf_len){ - for(i=0;ioutbuf + rz->buf_off)[i]; - rz->buf_off += size; - rz->buf_len -= size; - data += size; - rz->block_off += size; - size = 0; - break; - } else { - for(i=0;ibuf_len;i++) ((char*)data)[i] = ((char*)rz->outbuf + rz->buf_off)[i]; - data += rz->buf_len; - size -= rz->buf_len; - rz->block_off += rz->buf_len; - rz->buf_off = 0; - rz->buf_len = 0; - if(rz->buf_flush){ - rz->block_pos = rz->next_block_pos; - rz->block_off = 0; - rz->buf_flush = 0; - } - } - } else if(rz->buf_flush){ - rz->block_pos = rz->next_block_pos; - rz->block_off = 0; - rz->buf_flush = 0; - } - if(rz->buf_flush) continue; - rz->buf_len = _razf_read(rz, rz->outbuf, RZ_BUFFER_SIZE); - if(rz->z_eof && rz->buf_len == 0) break; - } - rz->out += ori_size - size; - return ori_size - size; -} - -int razf_skip(RAZF* rz, int size){ - int ori_size; - ori_size = size; - while(size > 0){ - if(rz->buf_len){ - if(size < rz->buf_len){ - rz->buf_off += size; - rz->buf_len -= size; - rz->block_off += size; - size = 0; - break; - } else { - size -= rz->buf_len; - rz->buf_off = 0; - rz->buf_len = 0; - rz->block_off += rz->buf_len; - if(rz->buf_flush){ - rz->block_pos = rz->next_block_pos; - rz->block_off = 0; - rz->buf_flush = 0; - } - } - } else if(rz->buf_flush){ - rz->block_pos = rz->next_block_pos; - rz->block_off = 0; - rz->buf_flush = 0; - } - if(rz->buf_flush) continue; - rz->buf_len = _razf_read(rz, rz->outbuf, RZ_BUFFER_SIZE); - if(rz->z_eof || rz->z_err) break; - } - rz->out += ori_size - size; - return ori_size - size; -} - -static void _razf_reset_read(RAZF *rz, int64_t in, int64_t out){ -#ifdef _USE_KNETFILE - knet_seek(rz->x.fpr, in, SEEK_SET); -#else - lseek(rz->filedes, in, SEEK_SET); -#endif - rz->in = in; - rz->out = out; - rz->block_pos = in; - rz->next_block_pos = in; - rz->block_off = 0; - rz->buf_flush = 0; - rz->z_eof = rz->z_err = 0; - inflateReset(rz->stream); - rz->stream->avail_in = 0; - rz->buf_off = rz->buf_len = 0; -} - -int64_t razf_jump(RAZF *rz, int64_t block_start, int block_offset){ - int64_t pos; - rz->z_eof = 0; - if(rz->file_type == FILE_TYPE_PLAIN){ - rz->buf_off = rz->buf_len = 0; - pos = block_start + block_offset; -#ifdef _USE_KNETFILE - knet_seek(rz->x.fpr, pos, SEEK_SET); - pos = knet_tell(rz->x.fpr); -#else - pos = lseek(rz->filedes, pos, SEEK_SET); -#endif - rz->out = rz->in = pos; - return pos; - } - if(block_start == rz->block_pos && block_offset >= rz->block_off) { - block_offset -= rz->block_off; - goto SKIP; // Needn't reset inflate - } - if(block_start == 0) block_start = rz->header_size; // Automaticly revist wrong block_start - _razf_reset_read(rz, block_start, 0); - SKIP: - if(block_offset) razf_skip(rz, block_offset); - return rz->block_off; -} - -int64_t razf_seek(RAZF* rz, int64_t pos, int where){ - int64_t idx; - int64_t seek_pos, new_out; - rz->z_eof = 0; - if (where == SEEK_CUR) pos += rz->out; - else if (where == SEEK_END) pos += rz->src_end; - if(rz->file_type == FILE_TYPE_PLAIN){ -#ifdef _USE_KNETFILE - knet_seek(rz->x.fpr, pos, SEEK_SET); - seek_pos = knet_tell(rz->x.fpr); -#else - seek_pos = lseek(rz->filedes, pos, SEEK_SET); -#endif - rz->buf_off = rz->buf_len = 0; - rz->out = rz->in = seek_pos; - return seek_pos; - } else if(rz->file_type == FILE_TYPE_GZ){ - if(pos >= rz->out) goto SKIP; - return rz->out; - } - if(pos == rz->out) return pos; - if(pos > rz->src_end) return rz->out; - if(!rz->seekable || !rz->load_index){ - if(pos >= rz->out) goto SKIP; - } - idx = pos / RZ_BLOCK_SIZE - 1; - seek_pos = (idx < 0)? rz->header_size:(rz->index->cell_offsets[idx] + rz->index->bin_offsets[idx / RZ_BIN_SIZE]); - new_out = (idx + 1) * RZ_BLOCK_SIZE; - if(pos > rz->out && new_out <= rz->out) goto SKIP; - _razf_reset_read(rz, seek_pos, new_out); - SKIP: - razf_skip(rz, (int)(pos - rz->out)); - return rz->out; -} - -uint64_t razf_tell2(RAZF *rz) -{ - /* - if (rz->load_index) { - int64_t idx, seek_pos; - idx = rz->out / RZ_BLOCK_SIZE - 1; - seek_pos = (idx < 0)? rz->header_size:(rz->index->cell_offsets[idx] + rz->index->bin_offsets[idx / RZ_BIN_SIZE]); - if (seek_pos != rz->block_pos || rz->out%RZ_BLOCK_SIZE != rz->block_off) - fprintf(stderr, "[razf_tell2] inconsistent block offset: (%lld, %lld) != (%lld, %lld)\n", - (long long)seek_pos, (long long)rz->out%RZ_BLOCK_SIZE, (long long)rz->block_pos, (long long) rz->block_off); - } - */ - return (uint64_t)rz->block_pos<<16 | (rz->block_off&0xffff); -} - -int64_t razf_seek2(RAZF *rz, uint64_t voffset, int where) -{ - if (where != SEEK_SET) return -1; - return razf_jump(rz, voffset>>16, voffset&0xffff); -} - -void razf_close(RAZF *rz){ - if(rz->mode == 'w'){ -#ifndef _RZ_READONLY - razf_end_flush(rz); - deflateEnd(rz->stream); -#ifdef _USE_KNETFILE - save_zindex(rz, rz->x.fpw); - if(is_big_endian()){ - write(rz->x.fpw, &rz->in, sizeof(int64_t)); - write(rz->x.fpw, &rz->out, sizeof(int64_t)); - } else { - uint64_t v64 = byte_swap_8((uint64_t)rz->in); - write(rz->x.fpw, &v64, sizeof(int64_t)); - v64 = byte_swap_8((uint64_t)rz->out); - write(rz->x.fpw, &v64, sizeof(int64_t)); - } -#else - save_zindex(rz, rz->filedes); - if(is_big_endian()){ - write(rz->filedes, &rz->in, sizeof(int64_t)); - write(rz->filedes, &rz->out, sizeof(int64_t)); - } else { - uint64_t v64 = byte_swap_8((uint64_t)rz->in); - write(rz->filedes, &v64, sizeof(int64_t)); - v64 = byte_swap_8((uint64_t)rz->out); - write(rz->filedes, &v64, sizeof(int64_t)); - } -#endif -#endif - } else if(rz->mode == 'r'){ - if(rz->stream) inflateEnd(rz->stream); - } - if(rz->inbuf) free(rz->inbuf); - if(rz->outbuf) free(rz->outbuf); - if(rz->header){ - free(rz->header->extra); - free(rz->header->name); - free(rz->header->comment); - free(rz->header); - } - if(rz->index){ - free(rz->index->bin_offsets); - free(rz->index->cell_offsets); - free(rz->index); - } - free(rz->stream); -#ifdef _USE_KNETFILE - if (rz->mode == 'r') - knet_close(rz->x.fpr); - if (rz->mode == 'w') - close(rz->x.fpw); -#else - close(rz->filedes); -#endif - free(rz); -} - -#endif diff --git a/clipper/samtools/razf.h b/clipper/samtools/razf.h deleted file mode 100644 index 60a0c96..0000000 --- a/clipper/samtools/razf.h +++ /dev/null @@ -1,134 +0,0 @@ - /*- - * RAZF : Random Access compressed(Z) File - * Version: 1.0 - * Release Date: 2008-10-27 - * - * Copyright 2008, Jue Ruan , Heng Li - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - - -#ifndef __RAZF_RJ_H -#define __RAZF_RJ_H - -#include -#include -#include "zlib.h" - -#ifdef _USE_KNETFILE -#include "knetfile.h" -#endif - -#if ZLIB_VERNUM < 0x1221 -#define _RZ_READONLY -struct _gz_header_s; -typedef struct _gz_header_s _gz_header; -#define gz_header _gz_header -#endif - -#define WINDOW_BITS 15 - -#ifndef RZ_BLOCK_SIZE -#define RZ_BLOCK_SIZE (1<mode from HEAD to TYPE after call inflateReset */ - int buf_off, buf_len; - int z_err, z_eof; - int seekable; - /* Indice where the source is seekable */ - int load_index; - /* set has_index to 0 in mode 'w', then index will be discarded */ -} RAZF; - -#ifdef __cplusplus -extern "C" { -#endif - - RAZF* razf_dopen(int data_fd, const char *mode); - RAZF *razf_open(const char *fn, const char *mode); - int razf_write(RAZF* rz, const void *data, int size); - int razf_read(RAZF* rz, void *data, int size); - int64_t razf_seek(RAZF* rz, int64_t pos, int where); - void razf_close(RAZF* rz); - -#define razf_tell(rz) ((rz)->out) - - RAZF* razf_open2(const char *filename, const char *mode); - RAZF* razf_dopen2(int fd, const char *mode); - uint64_t razf_tell2(RAZF *rz); - int64_t razf_seek2(RAZF *rz, uint64_t voffset, int where); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/clipper/samtools/razip.c b/clipper/samtools/razip.c deleted file mode 100644 index 825e732..0000000 --- a/clipper/samtools/razip.c +++ /dev/null @@ -1,141 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "razf.h" - -#define WINDOW_SIZE 4096 - -static int razf_main_usage() -{ - printf("\n"); - printf("Usage: razip [options] [file] ...\n\n"); - printf("Options: -c write on standard output, keep original files unchanged\n"); - printf(" -d decompress\n"); - printf(" -l list compressed file contents\n"); - printf(" -b INT decompress at INT position in the uncompressed file\n"); - printf(" -s INT decompress INT bytes in the uncompressed file\n"); - printf(" -h give this help\n"); - printf("\n"); - return 0; -} - -static int write_open(const char *fn, int is_forced) -{ - int fd = -1; - char c; - if (!is_forced) { - if ((fd = open(fn, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0666)) < 0 && errno == EEXIST) { - printf("razip: %s already exists; do you wish to overwrite (y or n)? ", fn); - scanf("%c", &c); - if (c != 'Y' && c != 'y') { - printf("razip: not overwritten\n"); - exit(1); - } - } - } - if (fd < 0) { - if ((fd = open(fn, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0) { - fprintf(stderr, "razip: %s: Fail to write\n", fn); - exit(1); - } - } - return fd; -} - -int main(int argc, char **argv) -{ - int c, compress, pstdout, is_forced; - RAZF *rz; - void *buffer; - long start, end, size; - - compress = 1; pstdout = 0; start = 0; size = -1; end = -1; is_forced = 0; - while((c = getopt(argc, argv, "cdlhfb:s:")) >= 0){ - switch(c){ - case 'h': return razf_main_usage(); - case 'd': compress = 0; break; - case 'c': pstdout = 1; break; - case 'l': compress = 2; break; - case 'b': start = atol(optarg); break; - case 's': size = atol(optarg); break; - case 'f': is_forced = 1; break; - } - } - if (size >= 0) end = start + size; - if(end >= 0 && end < start){ - fprintf(stderr, " -- Illegal region: [%ld, %ld] --\n", start, end); - return 1; - } - if(compress == 1){ - int f_src, f_dst = -1; - if(argc > optind){ - if((f_src = open(argv[optind], O_RDONLY)) < 0){ - fprintf(stderr, " -- Cannot open file: %s --\n", argv[optind]); - return 1; - } - if(pstdout){ - f_dst = fileno(stdout); - } else { - char *name = malloc(sizeof(strlen(argv[optind]) + 5)); - strcpy(name, argv[optind]); - strcat(name, ".rz"); - f_dst = write_open(name, is_forced); - if (f_dst < 0) return 1; - free(name); - } - } else if(pstdout){ - f_src = fileno(stdin); - f_dst = fileno(stdout); - } else return razf_main_usage(); - rz = razf_dopen(f_dst, "w"); - buffer = malloc(WINDOW_SIZE); - while((c = read(f_src, buffer, WINDOW_SIZE)) > 0) razf_write(rz, buffer, c); - razf_close(rz); // f_dst will be closed here - if (argc > optind && !pstdout) unlink(argv[optind]); - free(buffer); - close(f_src); - return 0; - } else { - if(argc <= optind) return razf_main_usage(); - if(compress == 2){ - rz = razf_open(argv[optind], "r"); - if(rz->file_type == FILE_TYPE_RZ) { - printf("%20s%20s%7s %s\n", "compressed", "uncompressed", "ratio", "name"); - printf("%20lld%20lld%6.1f%% %s\n", (long long)rz->end, (long long)rz->src_end, rz->end * 100.0f / rz->src_end, - argv[optind]); - } else fprintf(stdout, "%s is not a regular rz file\n", argv[optind]); - } else { - int f_dst; - if (argc > optind && !pstdout) { - char *name; - if (strstr(argv[optind], ".rz") - argv[optind] != strlen(argv[optind]) - 3) { - printf("razip: %s: unknown suffix -- ignored\n", argv[optind]); - return 1; - } - name = strdup(argv[optind]); - name[strlen(name) - 3] = '\0'; - f_dst = write_open(name, is_forced); - free(name); - } else f_dst = fileno(stdout); - rz = razf_open(argv[optind], "r"); - buffer = malloc(WINDOW_SIZE); - razf_seek(rz, start, SEEK_SET); - while(1){ - if(end < 0) c = razf_read(rz, buffer, WINDOW_SIZE); - else c = razf_read(rz, buffer, (end - start > WINDOW_SIZE)? WINDOW_SIZE:(end - start)); - if(c <= 0) break; - start += c; - write(f_dst, buffer, c); - if(end >= 0 && start >= end) break; - } - free(buffer); - if (!pstdout) unlink(argv[optind]); - } - razf_close(rz); - return 0; - } -} - diff --git a/clipper/samtools/sam.c b/clipper/samtools/sam.c deleted file mode 100644 index fa11df6..0000000 --- a/clipper/samtools/sam.c +++ /dev/null @@ -1,186 +0,0 @@ -#include -#include -#include "faidx.h" -#include "sam.h" - -#define TYPE_BAM 1 -#define TYPE_READ 2 - -bam_header_t *bam_header_dup(const bam_header_t *h0) -{ - bam_header_t *h; - int i; - h = bam_header_init(); - *h = *h0; - h->hash = h->dict = h->rg2lib = 0; - h->text = (char*)calloc(h->l_text + 1, 1); - memcpy(h->text, h0->text, h->l_text); - h->target_len = (uint32_t*)calloc(h->n_targets, 4); - h->target_name = (char**)calloc(h->n_targets, sizeof(void*)); - for (i = 0; i < h->n_targets; ++i) { - h->target_len[i] = h0->target_len[i]; - h->target_name[i] = strdup(h0->target_name[i]); - } - return h; -} -static void append_header_text(bam_header_t *header, char* text, int len) -{ - int x = header->l_text + 1; - int y = header->l_text + len + 1; // 1 byte null - if (text == 0) return; - kroundup32(x); - kroundup32(y); - if (x < y) header->text = (char*)realloc(header->text, y); - strncpy(header->text + header->l_text, text, len); // we cannot use strcpy() here. - header->l_text += len; - header->text[header->l_text] = 0; -} - -int samthreads(samfile_t *fp, int n_threads, int n_sub_blks) -{ - if (!(fp->type&1) || (fp->type&2)) return -1; - bgzf_mt(fp->x.bam, n_threads, n_sub_blks); - return 0; -} - -samfile_t *samopen(const char *fn, const char *mode, const void *aux) -{ - samfile_t *fp; - fp = (samfile_t*)calloc(1, sizeof(samfile_t)); - if (strchr(mode, 'r')) { // read - fp->type |= TYPE_READ; - if (strchr(mode, 'b')) { // binary - fp->type |= TYPE_BAM; - fp->x.bam = strcmp(fn, "-")? bam_open(fn, "r") : bam_dopen(fileno(stdin), "r"); - if (fp->x.bam == 0) goto open_err_ret; - fp->header = bam_header_read(fp->x.bam); - } else { // text - fp->x.tamr = sam_open(fn); - if (fp->x.tamr == 0) goto open_err_ret; - fp->header = sam_header_read(fp->x.tamr); - if (fp->header->n_targets == 0) { // no @SQ fields - if (aux) { // check if aux is present - bam_header_t *textheader = fp->header; - fp->header = sam_header_read2((const char*)aux); - if (fp->header == 0) goto open_err_ret; - append_header_text(fp->header, textheader->text, textheader->l_text); - bam_header_destroy(textheader); - } - if (fp->header->n_targets == 0 && bam_verbose >= 1) - fprintf(stderr, "[samopen] no @SQ lines in the header.\n"); - } else if (bam_verbose >= 2) fprintf(stderr, "[samopen] SAM header is present: %d sequences.\n", fp->header->n_targets); - } - } else if (strchr(mode, 'w')) { // write - fp->header = bam_header_dup((const bam_header_t*)aux); - if (strchr(mode, 'b')) { // binary - char bmode[3]; - int i, compress_level = -1; - for (i = 0; mode[i]; ++i) if (mode[i] >= '0' && mode[i] <= '9') break; - if (mode[i]) compress_level = mode[i] - '0'; - if (strchr(mode, 'u')) compress_level = 0; - bmode[0] = 'w'; bmode[1] = compress_level < 0? 0 : compress_level + '0'; bmode[2] = 0; - fp->type |= TYPE_BAM; - fp->x.bam = strcmp(fn, "-")? bam_open(fn, bmode) : bam_dopen(fileno(stdout), bmode); - if (fp->x.bam == 0) goto open_err_ret; - bam_header_write(fp->x.bam, fp->header); - } else { // text - // open file - fp->x.tamw = strcmp(fn, "-")? fopen(fn, "w") : stdout; - if (fp->x.tamw == 0) goto open_err_ret; - if (strchr(mode, 'X')) fp->type |= BAM_OFSTR<<2; - else if (strchr(mode, 'x')) fp->type |= BAM_OFHEX<<2; - else fp->type |= BAM_OFDEC<<2; - // write header - if (strchr(mode, 'h')) { - int i; - bam_header_t *alt; - // parse the header text - alt = bam_header_init(); - alt->l_text = fp->header->l_text; alt->text = fp->header->text; - sam_header_parse(alt); - alt->l_text = 0; alt->text = 0; - // check if there are @SQ lines in the header - fwrite(fp->header->text, 1, fp->header->l_text, fp->x.tamw); // FIXME: better to skip the trailing NULL - if (alt->n_targets) { // then write the header text without dumping ->target_{name,len} - if (alt->n_targets != fp->header->n_targets && bam_verbose >= 1) - fprintf(stderr, "[samopen] inconsistent number of target sequences. Output the text header.\n"); - } else { // then dump ->target_{name,len} - for (i = 0; i < fp->header->n_targets; ++i) - fprintf(fp->x.tamw, "@SQ\tSN:%s\tLN:%d\n", fp->header->target_name[i], fp->header->target_len[i]); - } - bam_header_destroy(alt); - } - } - } - return fp; - -open_err_ret: - free(fp); - return 0; -} - -void samclose(samfile_t *fp) -{ - if (fp == 0) return; - if (fp->header) bam_header_destroy(fp->header); - if (fp->type & TYPE_BAM) bam_close(fp->x.bam); - else if (fp->type & TYPE_READ) sam_close(fp->x.tamr); - else fclose(fp->x.tamw); - free(fp); -} - -int samread(samfile_t *fp, bam1_t *b) -{ - if (fp == 0 || !(fp->type & TYPE_READ)) return -1; // not open for reading - if (fp->type & TYPE_BAM) return bam_read1(fp->x.bam, b); - else return sam_read1(fp->x.tamr, fp->header, b); -} - -int samwrite(samfile_t *fp, const bam1_t *b) -{ - if (fp == 0 || (fp->type & TYPE_READ)) return -1; // not open for writing - if (fp->type & TYPE_BAM) return bam_write1(fp->x.bam, b); - else { - char *s = bam_format1_core(fp->header, b, fp->type>>2&3); - int l = strlen(s); - fputs(s, fp->x.tamw); fputc('\n', fp->x.tamw); - free(s); - return l + 1; - } -} - -int sampileup(samfile_t *fp, int mask, bam_pileup_f func, void *func_data) -{ - bam_plbuf_t *buf; - int ret; - bam1_t *b; - b = bam_init1(); - buf = bam_plbuf_init(func, func_data); - bam_plbuf_set_mask(buf, mask); - while ((ret = samread(fp, b)) >= 0) - bam_plbuf_push(b, buf); - bam_plbuf_push(0, buf); - bam_plbuf_destroy(buf); - bam_destroy1(b); - return 0; -} - -char *samfaipath(const char *fn_ref) -{ - char *fn_list = 0; - if (fn_ref == 0) return 0; - fn_list = calloc(strlen(fn_ref) + 5, 1); - strcat(strcpy(fn_list, fn_ref), ".fai"); - if (access(fn_list, R_OK) == -1) { // fn_list is unreadable - if (access(fn_ref, R_OK) == -1) { - fprintf(stderr, "[samfaipath] fail to read file %s.\n", fn_ref); - } else { - if (bam_verbose >= 3) fprintf(stderr, "[samfaipath] build FASTA index...\n"); - if (fai_build(fn_ref) == -1) { - fprintf(stderr, "[samfaipath] fail to build FASTA index.\n"); - free(fn_list); fn_list = 0; - } - } - } - return fn_list; -} diff --git a/clipper/samtools/sam.h b/clipper/samtools/sam.h deleted file mode 100644 index 0495501..0000000 --- a/clipper/samtools/sam.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef BAM_SAM_H -#define BAM_SAM_H - -#include "bam.h" - -/*! - @header - - This file provides higher level of I/O routines and unifies the APIs - for SAM and BAM formats. These APIs are more convenient and - recommended. - - @copyright Genome Research Ltd. - */ - -/*! @typedef - @abstract SAM/BAM file handler - @field type type of the handler; bit 1 for BAM, 2 for reading and bit 3-4 for flag format - @field bam BAM file handler; valid if (type&1) == 1 - @field tamr SAM file handler for reading; valid if type == 2 - @field tamw SAM file handler for writing; valid if type == 0 - @field header header struct - */ -typedef struct { - int type; - union { - tamFile tamr; - bamFile bam; - FILE *tamw; - } x; - bam_header_t *header; -} samfile_t; - -#ifdef __cplusplus -extern "C" { -#endif - - /*! - @abstract Open a SAM/BAM file - - @param fn SAM/BAM file name; "-" is recognized as stdin (for - reading) or stdout (for writing). - - @param mode open mode /[rw](b?)(u?)(h?)([xX]?)/: 'r' for reading, - 'w' for writing, 'b' for BAM I/O, 'u' for uncompressed BAM output, - 'h' for outputing header in SAM, 'x' for HEX flag and 'X' for - string flag. If 'b' present, it must immediately follow 'r' or - 'w'. Valid modes are "r", "w", "wh", "wx", "whx", "wX", "whX", - "rb", "wb" and "wbu" exclusively. - - @param aux auxiliary data; if mode[0]=='w', aux points to - bam_header_t; if strcmp(mode, "rb")!=0 and @SQ header lines in SAM - are absent, aux points the file name of the list of the reference; - aux is not used otherwise. If @SQ header lines are present in SAM, - aux is not used, either. - - @return SAM/BAM file handler - */ - samfile_t *samopen(const char *fn, const char *mode, const void *aux); - - /*! - @abstract Close a SAM/BAM handler - @param fp file handler to be closed - */ - void samclose(samfile_t *fp); - - /*! - @abstract Read one alignment - @param fp file handler - @param b alignment - @return bytes read - */ - int samread(samfile_t *fp, bam1_t *b); - - /*! - @abstract Write one alignment - @param fp file handler - @param b alignment - @return bytes written - */ - int samwrite(samfile_t *fp, const bam1_t *b); - - /*! - @abstract Get the pileup for a whole alignment file - @param fp file handler - @param mask mask transferred to bam_plbuf_set_mask() - @param func user defined function called in the pileup process - #param data user provided data for func() - */ - int sampileup(samfile_t *fp, int mask, bam_pileup_f func, void *data); - - char *samfaipath(const char *fn_ref); - int samthreads(samfile_t *fp, int n_threads, int n_sub_blks); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/clipper/samtools/sam_header.c b/clipper/samtools/sam_header.c deleted file mode 100644 index a1b5181..0000000 --- a/clipper/samtools/sam_header.c +++ /dev/null @@ -1,772 +0,0 @@ -#include "sam_header.h" -#include -#include -#include -#include -#include - -#include "khash.h" -KHASH_MAP_INIT_STR(str, const char *) - -struct _HeaderList -{ - struct _HeaderList *last; // Hack: Used and maintained only by list_append_to_end. Maintained in the root node only. - struct _HeaderList *next; - void *data; -}; -typedef struct _HeaderList list_t; -typedef list_t HeaderDict; - -typedef struct -{ - char key[2]; - char *value; -} -HeaderTag; - -typedef struct -{ - char type[2]; - list_t *tags; -} -HeaderLine; - -const char *o_hd_tags[] = {"SO","GO",NULL}; -const char *r_hd_tags[] = {"VN",NULL}; - -const char *o_sq_tags[] = {"AS","M5","UR","SP",NULL}; -const char *r_sq_tags[] = {"SN","LN",NULL}; -const char *u_sq_tags[] = {"SN",NULL}; - -const char *o_rg_tags[] = {"CN","DS","DT","FO","KS","LB","PG","PI","PL","PU","SM",NULL}; -const char *r_rg_tags[] = {"ID",NULL}; -const char *u_rg_tags[] = {"ID",NULL}; - -const char *o_pg_tags[] = {"VN","CL",NULL}; -const char *r_pg_tags[] = {"ID",NULL}; - -const char *types[] = {"HD","SQ","RG","PG","CO",NULL}; -const char **optional_tags[] = {o_hd_tags,o_sq_tags,o_rg_tags,o_pg_tags,NULL,NULL}; -const char **required_tags[] = {r_hd_tags,r_sq_tags,r_rg_tags,r_pg_tags,NULL,NULL}; -const char **unique_tags[] = {NULL, u_sq_tags,u_rg_tags,NULL,NULL,NULL}; - - -static void debug(const char *format, ...) -{ - va_list ap; - va_start(ap, format); - vfprintf(stderr, format, ap); - va_end(ap); -} - -#if 0 -// Replaced by list_append_to_end -static list_t *list_prepend(list_t *root, void *data) -{ - list_t *l = malloc(sizeof(list_t)); - l->next = root; - l->data = data; - return l; -} -#endif - -// Relies on the root->last being correct. Do not use with the other list_* -// routines unless they are fixed to modify root->last as well. -static list_t *list_append_to_end(list_t *root, void *data) -{ - list_t *l = malloc(sizeof(list_t)); - l->last = l; - l->next = NULL; - l->data = data; - - if ( !root ) - return l; - - root->last->next = l; - root->last = l; - return root; -} - -static list_t *list_append(list_t *root, void *data) -{ - list_t *l = root; - while (l && l->next) - l = l->next; - if ( l ) - { - l->next = malloc(sizeof(list_t)); - l = l->next; - } - else - { - l = malloc(sizeof(list_t)); - root = l; - } - l->data = data; - l->next = NULL; - return root; -} - -static void list_free(list_t *root) -{ - list_t *l = root; - while (root) - { - l = root; - root = root->next; - free(l); - } -} - - - -// Look for a tag "XY" in a predefined const char *[] array. -static int tag_exists(const char *tag, const char **tags) -{ - int itag=0; - if ( !tags ) return -1; - while ( tags[itag] ) - { - if ( tags[itag][0]==tag[0] && tags[itag][1]==tag[1] ) return itag; - itag++; - } - return -1; -} - - - -// Mimics the behaviour of getline, except it returns pointer to the next chunk of the text -// or NULL if everything has been read. The lineptr should be freed by the caller. The -// newline character is stripped. -static const char *nextline(char **lineptr, size_t *n, const char *text) -{ - int len; - const char *to = text; - - if ( !*to ) return NULL; - - while ( *to && *to!='\n' && *to!='\r' ) to++; - len = to - text + 1; - - if ( *to ) - { - // Advance the pointer for the next call - if ( *to=='\n' ) to++; - else if ( *to=='\r' && *(to+1)=='\n' ) to+=2; - } - if ( !len ) - return to; - - if ( !*lineptr ) - { - *lineptr = malloc(len); - *n = len; - } - else if ( *nkey[0] = name[0]; - tag->key[1] = name[1]; - tag->value = malloc(len+1); - memcpy(tag->value,value_from,len+1); - tag->value[len] = 0; - return tag; -} - -static HeaderTag *header_line_has_tag(HeaderLine *hline, const char *key) -{ - list_t *tags = hline->tags; - while (tags) - { - HeaderTag *tag = tags->data; - if ( tag->key[0]==key[0] && tag->key[1]==key[1] ) return tag; - tags = tags->next; - } - return NULL; -} - - -// Return codes: -// 0 .. different types or unique tags differ or conflicting tags, cannot be merged -// 1 .. all tags identical -> no need to merge, drop one -// 2 .. the unique tags match and there are some conflicting tags (same tag, different value) -> error, cannot be merged nor duplicated -// 3 .. there are some missing complementary tags and no unique conflict -> can be merged into a single line -static int sam_header_compare_lines(HeaderLine *hline1, HeaderLine *hline2) -{ - HeaderTag *t1, *t2; - - if ( hline1->type[0]!=hline2->type[0] || hline1->type[1]!=hline2->type[1] ) - return 0; - - int itype = tag_exists(hline1->type,types); - if ( itype==-1 ) { - debug("[sam_header_compare_lines] Unknown type [%c%c]\n", hline1->type[0],hline1->type[1]); - return -1; // FIXME (lh3): error; I do not know how this will be handled in Petr's code - } - - if ( unique_tags[itype] ) - { - t1 = header_line_has_tag(hline1,unique_tags[itype][0]); - t2 = header_line_has_tag(hline2,unique_tags[itype][0]); - if ( !t1 || !t2 ) // this should never happen, the unique tags are required - return 2; - - if ( strcmp(t1->value,t2->value) ) - return 0; // the unique tags differ, cannot be merged - } - if ( !required_tags[itype] && !optional_tags[itype] ) - { - t1 = hline1->tags->data; - t2 = hline2->tags->data; - if ( !strcmp(t1->value,t2->value) ) return 1; // identical comments - return 0; - } - - int missing=0, itag=0; - while ( required_tags[itype] && required_tags[itype][itag] ) - { - t1 = header_line_has_tag(hline1,required_tags[itype][itag]); - t2 = header_line_has_tag(hline2,required_tags[itype][itag]); - if ( !t1 && !t2 ) - return 2; // this should never happen - else if ( !t1 || !t2 ) - missing = 1; // there is some tag missing in one of the hlines - else if ( strcmp(t1->value,t2->value) ) - { - if ( unique_tags[itype] ) - return 2; // the lines have a matching unique tag but have a conflicting tag - - return 0; // the lines contain conflicting tags, cannot be merged - } - itag++; - } - itag = 0; - while ( optional_tags[itype] && optional_tags[itype][itag] ) - { - t1 = header_line_has_tag(hline1,optional_tags[itype][itag]); - t2 = header_line_has_tag(hline2,optional_tags[itype][itag]); - if ( !t1 && !t2 ) - { - itag++; - continue; - } - if ( !t1 || !t2 ) - missing = 1; // there is some tag missing in one of the hlines - else if ( strcmp(t1->value,t2->value) ) - { - if ( unique_tags[itype] ) - return 2; // the lines have a matching unique tag but have a conflicting tag - - return 0; // the lines contain conflicting tags, cannot be merged - } - itag++; - } - if ( missing ) return 3; // there are some missing complementary tags with no conflicts, can be merged - return 1; -} - - -static HeaderLine *sam_header_line_clone(const HeaderLine *hline) -{ - list_t *tags; - HeaderLine *out = malloc(sizeof(HeaderLine)); - out->type[0] = hline->type[0]; - out->type[1] = hline->type[1]; - out->tags = NULL; - - tags = hline->tags; - while (tags) - { - HeaderTag *old = tags->data; - - HeaderTag *new = malloc(sizeof(HeaderTag)); - new->key[0] = old->key[0]; - new->key[1] = old->key[1]; - new->value = strdup(old->value); - out->tags = list_append(out->tags, new); - - tags = tags->next; - } - return out; -} - -static int sam_header_line_merge_with(HeaderLine *out_hline, const HeaderLine *tmpl_hline) -{ - list_t *tmpl_tags; - - if ( out_hline->type[0]!=tmpl_hline->type[0] || out_hline->type[1]!=tmpl_hline->type[1] ) - return 0; - - tmpl_tags = tmpl_hline->tags; - while (tmpl_tags) - { - HeaderTag *tmpl_tag = tmpl_tags->data; - HeaderTag *out_tag = header_line_has_tag(out_hline, tmpl_tag->key); - if ( !out_tag ) - { - HeaderTag *tag = malloc(sizeof(HeaderTag)); - tag->key[0] = tmpl_tag->key[0]; - tag->key[1] = tmpl_tag->key[1]; - tag->value = strdup(tmpl_tag->value); - out_hline->tags = list_append(out_hline->tags,tag); - } - tmpl_tags = tmpl_tags->next; - } - return 1; -} - - -static HeaderLine *sam_header_line_parse(const char *headerLine) -{ - HeaderLine *hline; - HeaderTag *tag; - const char *from, *to; - from = headerLine; - - if ( *from != '@' ) { - debug("[sam_header_line_parse] expected '@', got [%s]\n", headerLine); - return 0; - } - to = ++from; - - while (*to && *to!='\t') to++; - if ( to-from != 2 ) { - debug("[sam_header_line_parse] expected '@XY', got [%s]\nHint: The header tags must be tab-separated.\n", headerLine); - return 0; - } - - hline = malloc(sizeof(HeaderLine)); - hline->type[0] = from[0]; - hline->type[1] = from[1]; - hline->tags = NULL; - - int itype = tag_exists(hline->type, types); - - from = to; - while (*to && *to=='\t') to++; - if ( to-from != 1 ) { - debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from)); - return 0; - } - from = to; - while (*from) - { - while (*to && *to!='\t') to++; - - if ( !required_tags[itype] && !optional_tags[itype] ) - { - // CO is a special case, it can contain anything, including tabs - if ( *to ) { to++; continue; } - tag = new_tag(" ",from,to-1); - } - else - tag = new_tag(from,from+3,to-1); - - if ( header_line_has_tag(hline,tag->key) ) - debug("The tag '%c%c' present (at least) twice on line [%s]\n", tag->key[0],tag->key[1], headerLine); - hline->tags = list_append(hline->tags, tag); - - from = to; - while (*to && *to=='\t') to++; - if ( *to && to-from != 1 ) { - debug("[sam_header_line_parse] multiple tabs on line [%s] (%d)\n", headerLine,(int)(to-from)); - return 0; - } - - from = to; - } - return hline; -} - - -// Must be of an existing type, all tags must be recognised and all required tags must be present -static int sam_header_line_validate(HeaderLine *hline) -{ - list_t *tags; - HeaderTag *tag; - int itype, itag; - - // Is the type correct? - itype = tag_exists(hline->type, types); - if ( itype==-1 ) - { - debug("The type [%c%c] not recognised.\n", hline->type[0],hline->type[1]); - return 0; - } - - // Has all required tags? - itag = 0; - while ( required_tags[itype] && required_tags[itype][itag] ) - { - if ( !header_line_has_tag(hline,required_tags[itype][itag]) ) - { - debug("The tag [%c%c] required for [%c%c] not present.\n", required_tags[itype][itag][0],required_tags[itype][itag][1], - hline->type[0],hline->type[1]); - return 0; - } - itag++; - } - - // Are all tags recognised? - tags = hline->tags; - while ( tags ) - { - tag = tags->data; - if ( !tag_exists(tag->key,required_tags[itype]) && !tag_exists(tag->key,optional_tags[itype]) ) - { - // Lower case tags are user-defined values. - if( !(islower(tag->key[0]) || islower(tag->key[1])) ) - { - // Neither is lower case, but tag was not recognized. - debug("Unknown tag [%c%c] for [%c%c].\n", tag->key[0],tag->key[1], hline->type[0],hline->type[1]); - // return 0; // Even unknown tags are allowed - for forward compatibility with new attributes - } - // else - allow user defined tag - } - tags = tags->next; - } - - return 1; -} - - -static void print_header_line(FILE *fp, HeaderLine *hline) -{ - list_t *tags = hline->tags; - HeaderTag *tag; - - fprintf(fp, "@%c%c", hline->type[0],hline->type[1]); - while (tags) - { - tag = tags->data; - - fprintf(fp, "\t"); - if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) - fprintf(fp, "%c%c:", tag->key[0],tag->key[1]); - fprintf(fp, "%s", tag->value); - - tags = tags->next; - } - fprintf(fp,"\n"); -} - - -static void sam_header_line_free(HeaderLine *hline) -{ - list_t *tags = hline->tags; - while (tags) - { - HeaderTag *tag = tags->data; - free(tag->value); - free(tag); - tags = tags->next; - } - list_free(hline->tags); - free(hline); -} - -void sam_header_free(void *_header) -{ - HeaderDict *header = (HeaderDict*)_header; - list_t *hlines = header; - while (hlines) - { - sam_header_line_free(hlines->data); - hlines = hlines->next; - } - list_free(header); -} - -HeaderDict *sam_header_clone(const HeaderDict *dict) -{ - HeaderDict *out = NULL; - while (dict) - { - HeaderLine *hline = dict->data; - out = list_append(out, sam_header_line_clone(hline)); - dict = dict->next; - } - return out; -} - -// Returns a newly allocated string -char *sam_header_write(const void *_header) -{ - const HeaderDict *header = (const HeaderDict*)_header; - char *out = NULL; - int len=0, nout=0; - const list_t *hlines; - - // Calculate the length of the string to allocate - hlines = header; - while (hlines) - { - len += 4; // @XY and \n - - HeaderLine *hline = hlines->data; - list_t *tags = hline->tags; - while (tags) - { - HeaderTag *tag = tags->data; - len += strlen(tag->value) + 1; // \t - if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) - len += strlen(tag->value) + 3; // XY: - tags = tags->next; - } - hlines = hlines->next; - } - - nout = 0; - out = malloc(len+1); - hlines = header; - while (hlines) - { - HeaderLine *hline = hlines->data; - - nout += sprintf(out+nout,"@%c%c",hline->type[0],hline->type[1]); - - list_t *tags = hline->tags; - while (tags) - { - HeaderTag *tag = tags->data; - nout += sprintf(out+nout,"\t"); - if ( tag->key[0]!=' ' || tag->key[1]!=' ' ) - nout += sprintf(out+nout,"%c%c:", tag->key[0],tag->key[1]); - nout += sprintf(out+nout,"%s", tag->value); - tags = tags->next; - } - hlines = hlines->next; - nout += sprintf(out+nout,"\n"); - } - out[len] = 0; - return out; -} - -void *sam_header_parse2(const char *headerText) -{ - list_t *hlines = NULL; - HeaderLine *hline; - const char *text; - char *buf=NULL; - size_t nbuf = 0; - int tovalidate = 0; - - if ( !headerText ) - return 0; - - text = headerText; - while ( (text=nextline(&buf, &nbuf, text)) ) - { - hline = sam_header_line_parse(buf); - if ( hline && (!tovalidate || sam_header_line_validate(hline)) ) - // With too many (~250,000) reference sequences the header parsing was too slow with list_append. - hlines = list_append_to_end(hlines, hline); - else - { - if (hline) sam_header_line_free(hline); - sam_header_free(hlines); - if ( buf ) free(buf); - return NULL; - } - } - if ( buf ) free(buf); - - return hlines; -} - -void *sam_header2tbl(const void *_dict, char type[2], char key_tag[2], char value_tag[2]) -{ - const HeaderDict *dict = (const HeaderDict*)_dict; - const list_t *l = dict; - khash_t(str) *tbl = kh_init(str); - khiter_t k; - int ret; - - if (_dict == 0) return tbl; // return an empty (not null) hash table - while (l) - { - HeaderLine *hline = l->data; - if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) - { - l = l->next; - continue; - } - - HeaderTag *key, *value; - key = header_line_has_tag(hline,key_tag); - value = header_line_has_tag(hline,value_tag); - if ( !key || !value ) - { - l = l->next; - continue; - } - - k = kh_get(str, tbl, key->value); - if ( k != kh_end(tbl) ) - debug("[sam_header_lookup_table] They key %s not unique.\n", key->value); - k = kh_put(str, tbl, key->value, &ret); - kh_value(tbl, k) = value->value; - - l = l->next; - } - return tbl; -} - -char **sam_header2list(const void *_dict, char type[2], char key_tag[2], int *_n) -{ - const HeaderDict *dict = (const HeaderDict*)_dict; - const list_t *l = dict; - int max, n; - char **ret; - - ret = 0; *_n = max = n = 0; - while (l) - { - HeaderLine *hline = l->data; - if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) - { - l = l->next; - continue; - } - - HeaderTag *key; - key = header_line_has_tag(hline,key_tag); - if ( !key ) - { - l = l->next; - continue; - } - - if (n == max) { - max = max? max<<1 : 4; - ret = realloc(ret, max * sizeof(void*)); - } - ret[n++] = key->value; - - l = l->next; - } - *_n = n; - return ret; -} - -void *sam_header2key_val(void *iter, const char type[2], const char key_tag[2], const char value_tag[2], const char **_key, const char **_value) -{ - list_t *l = iter; - if ( !l ) return NULL; - - while (l) - { - HeaderLine *hline = l->data; - if ( hline->type[0]!=type[0] || hline->type[1]!=type[1] ) - { - l = l->next; - continue; - } - - HeaderTag *key, *value; - key = header_line_has_tag(hline,key_tag); - value = header_line_has_tag(hline,value_tag); - if ( !key && !value ) - { - l = l->next; - continue; - } - - *_key = key->value; - *_value = value->value; - return l->next; - } - return l; -} - -const char *sam_tbl_get(void *h, const char *key) -{ - khash_t(str) *tbl = (khash_t(str)*)h; - khint_t k; - k = kh_get(str, tbl, key); - return k == kh_end(tbl)? 0 : kh_val(tbl, k); -} - -int sam_tbl_size(void *h) -{ - khash_t(str) *tbl = (khash_t(str)*)h; - return h? kh_size(tbl) : 0; -} - -void sam_tbl_destroy(void *h) -{ - khash_t(str) *tbl = (khash_t(str)*)h; - kh_destroy(str, tbl); -} - -void *sam_header_merge(int n, const void **_dicts) -{ - const HeaderDict **dicts = (const HeaderDict**)_dicts; - HeaderDict *out_dict; - int idict, status; - - if ( n<2 ) return NULL; - - out_dict = sam_header_clone(dicts[0]); - - for (idict=1; idictdata, out_hlines->data); - if ( status==0 ) - { - out_hlines = out_hlines->next; - continue; - } - - if ( status==2 ) - { - print_header_line(stderr,tmpl_hlines->data); - print_header_line(stderr,out_hlines->data); - debug("Conflicting lines, cannot merge the headers.\n"); - return 0; - } - if ( status==3 ) - sam_header_line_merge_with(out_hlines->data, tmpl_hlines->data); - - inserted = 1; - break; - } - if ( !inserted ) - out_dict = list_append(out_dict, sam_header_line_clone(tmpl_hlines->data)); - - tmpl_hlines = tmpl_hlines->next; - } - } - - return out_dict; -} - - diff --git a/clipper/samtools/sam_header.h b/clipper/samtools/sam_header.h deleted file mode 100644 index ebea12f..0000000 --- a/clipper/samtools/sam_header.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef __SAM_HEADER_H__ -#define __SAM_HEADER_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - void *sam_header_parse2(const char *headerText); - void *sam_header_merge(int n, const void **dicts); - void sam_header_free(void *header); - char *sam_header_write(const void *headerDict); // returns a newly allocated string - - /* - // Usage example - const char *key, *val; - void *iter = sam_header_parse2(bam->header->text); - while ( iter = sam_header_key_val(iter, "RG","ID","SM" &key,&val) ) printf("%s\t%s\n", key,val); - */ - void *sam_header2key_val(void *iter, const char type[2], const char key_tag[2], const char value_tag[2], const char **key, const char **value); - char **sam_header2list(const void *_dict, char type[2], char key_tag[2], int *_n); - - void *sam_header2tbl(const void *dict, char type[2], char key_tag[2], char value_tag[2]); - const char *sam_tbl_get(void *h, const char *key); - int sam_tbl_size(void *h); - void sam_tbl_destroy(void *h); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/clipper/seqsig.cpp b/clipper/seqsig.cpp deleted file mode 100644 index ffd4877..0000000 --- a/clipper/seqsig.cpp +++ /dev/null @@ -1,587 +0,0 @@ - -#include -#include -#include "fastq-lib.h" - -#include - -#include -#include - -#include -#include -#include - -#define meminit(l) (memset(&l,0,sizeof(l))) -#define VERSION "0.5" - -FILE *zopenordie(const char *path, const char *mode); -FILE *openordie(const char *path, const char *mode); -FILE *popenordie(const char *path, const char *mode); -std::string string_format(const std::string &fmt, ...); - -using namespace std; -void seq2char(uint32_t s, int k, char *p); -// true if different -void compare_files(const char *f1, const char *f2); -template double quantile(const vtype &vec, double p); - -#define AS_UINT(x) ((int *)(void *)(x)) - -// main - -unsigned long long basemap[256]; -unsigned long long basemaprc[256]; -bool lowcomplex(char *s, int n, int max); -void usage(FILE *f); - -// coefficients used to produce the blended similarity score (range 0 to 1, where 1 is identical) - -double scoef=.75; -double qcoef=350; -int main(int argc, char **argv) { - int i; - clock_t clock1; - - clock1=clock(); - - meminit(basemap); - for (i=0;i<4;++i) { - basemap[("acgt")[i]]=i; - basemap[("ACGT")[i]]=i; - basemaprc[("tgca")[i]]=i; - basemaprc[("TGCA")[i]]=i; - } - - // max 16... lower values result in better sensitivity, lower specificity expecially with blended/mixed samples - - int k=12; - int x=200; - int sampsize=500000; - float lowcom_pct=0.40; - double ftop=.99; - double fdel=.015; - double fmin=.50; - - // run comparison on args? - bool docompare=0; - - - char c; - char *endp; - char **inf; - int inc=0; - - char *contampath=NULL; - - while ( (c = getopt_long(argc, argv, "chk:x:n:l:t:d:m:r:S:Q:",NULL,NULL)) != -1) { - switch (c) { - case 'h': usage(stdout); return 0; - case 'c': docompare=1; break; - case 'x': x=atoi(optarg); break; - case 'k': k=atoi(optarg); if(k>16) fail("Max k is 16\n"); break; - case 'n': sampsize=atoi(optarg); break; - case 'l': lowcom_pct=strtod(optarg,&endp); break; - case 't': ftop=strtod(optarg,&endp); break; - case 'S': scoef=strtod(optarg,&endp); break; - case 'Q': qcoef=strtod(optarg,&endp); break; - case 'r': contampath=optarg; break; - case 'd': fdel=strtod(optarg,&endp); break; - case 'm': fmin=strtod(optarg,&endp); break; - case '\1': inf[++inc]=optarg; break; - case '?': - if (!optopt) { - usage(stdout); return 0; - } else if (optopt && strchr("kxnltdmrSQ", optopt)) - fprintf (stderr, "Option -%c requires an argument.\n", optopt); - else if (isprint(optopt)) - fprintf (stderr, "Unknown option `-%c'.\n", optopt); - else - fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); - usage(stderr); - return 1; - } - } - - inf=&(argv[optind]); - inc=argc-optind; - - if (!inc) { - usage(stderr); - return 1; - } - - if (!x || !k || !sampsize || ftop<.8 || ftop > 1 || fdel > ftop || fmin > ftop || inc < 1) { - fail("Bad params, quitting\n"); - } - - if (docompare) { - compare_files(inf[0],inf[1]); - exit(0); - } - - char*in=inf[0]; - - FILE *fin; - if (contampath) { - if (!strcmp(fext(in),".dz")||!strcmp(fext(in),".dsrc")) { - fin=popenordie(string_format("dsrc d -s %s | bowtie -p 3 -S %s -q - | samtools view -S -f 4 - 2> /dev/null", in, contampath).c_str(), "r"); - } else { - fin=popenordie(string_format("bowtie -p 3 -S %s -q %s | samtools view -S -f 4 - 2> /dev/null", contampath, in).c_str(), "r"); - } - } else { - fin=zopenordie(in,"r"); - } - - struct fq fq; - - meminit(fq); - int n=0; - - google::sparse_hash_map kh; - - std::string mer, scnt; - mer.resize(k); - int *pdat; - int kcnt=0; - unsigned long long lm; //, lmrc; - unsigned long long kmask=~(((unsigned long long) ~0) << (k*2)); -// printf("kmask:%llx\n",kmask); - - -// minimum # of low-complexity positions in 32 bases to be called "low complexity" - int lowcom_count = 32 * lowcom_pct; - int skiplow=0; - while (contampath?read_fq_sam(fin,n,&fq):read_fq(fin, n, &fq)) { - - if (fq.seq.n > 32) // only first 32 bases considered - fq.seq.n = 32; - - // sequence as 64-bit value - lm=0; -// lmrc=0; - - if (lowcomplex(fq.seq.s, fq.seq.n, lowcom_count)) { - ++skiplow; - continue; - } - -// printf("s:%s\n", fq.seq.s); - -// skip too short - if (fq.seq.n < k) { - ++skiplow; - continue; - } - - ++n; - - for(i=0;i>2; // remove first base - - // reverse - -// char t[33]; -// seq2char(v, k, t); - -// printf("orig: %s, lm: %llx, asv: %hx, mapped: %s\n", string(fq.seq.s+i,k).c_str(), lm, v, t); - } - if (n>=sampsize) break; - } - if (n==0) { - fail("Insufficient sequence content\n"); - } - -// printf("entries: %d\n", kcnt); - - - struct {uint32_t s; int v;} topx[x]; meminit(topx); - - google::sparse_hash_map::iterator it = kh.begin(); - vector dist; - while(it!=kh.end()) { - // *not* making the distinction between 2 singleton mappings and 1 paired here - int val = it->second; - dist.push_back(val); - if (val > topx[x-1].v) { - for (i=0;i topx[i].v) { - break; - } - } - int found=i; - // shift remaining down (max 8 shifts) - for (i=x-1;i>found;--i) { - topx[i]=topx[i-1]; - } - topx[found].v=val; - topx[found].s=it->first; - } - ++it; - } - sort(dist.begin(),dist.end()); - - double qtop=quantile(dist,ftop); - - - printf("k\t%d\n", k); - printf("top-x\t%d\n", x); - printf("q-start\t%.3f\n", ftop); - printf("q-delta\t%.3f\n", fdel); - printf("q-min\t%.3f\n", fmin); - printf("reads-used\t%d\n", n); - printf("lowcom-pct\t%.3f\n", lowcom_pct*100); - printf("quantile-top\t%f\n", qtop); - printf("skip-low\t%d\n", skiplow); - printf("run-time\t%f\n", (clock()-clock1)/(double)CLOCKS_PER_SEC); - - printf("--------\n"); - - int j; - char buf[k+1]; - for (i=0;idsig; - for (f=ftop-fdel;f>=fmin;f-=fdel) { - double r=quantile(dist, f)/qtop; - dsig.push_back(r); - printf("%.6f\n",r); - } - -} - -FILE *zopenordie(const char *path, const char *mode) { - bool isgz; - FILE *f=gzopen(path, mode, &isgz); - if (!f) { - warn("Can't open-%s '%s': %s\n", mode, path, strerror(errno)); - exit(1); - } - return f; -} - -FILE *openordie(const char *path, const char *mode) { - bool isgz; - FILE *f=fopen(path, mode); - if (!f) { - warn("Can't open-%s '%s': %s\n", mode, path, strerror(errno)); - exit(1); - } - return f; -} - -FILE *popenordie(const char *cmd, const char *mode) { - FILE *f=popen(cmd, mode); - if (!f) { - warn("Can't open-%s '%s': %s\n", mode, cmd, strerror(errno)); - exit(1); - } - return f; -} - - - -void seq2char(uint32_t s, int k, char *p) { - int i; - for(i=0;i>(i<<1))&0x3]; - } - *p='\0'; -} - -bool lowcomplex(char *s, int n, int lowcom_thresh) { - int lc=0; - int i; - - for (i=1; i= 3 && (s[i] == s[i-2] && s[i-1] == s[i-3])) { - lc+=1; - } else if (i >= 5 && (s[i] == s[i-3] && s[i-1] == s[i-4] && s[i-2] == s[i-5])) { - lc+=1; - } else if (i >= 7 && (s[i] == s[i-4] && s[i-1] == s[i-5] && s[i-2] == s[i-6] && s[i-3] == s[i-7])) { - lc+=1; - } - } - -// enough lc to pass? - return lc > lowcom_thresh; -} - -uint32_t char2seq(char *p, int k) { - int i; - uint32_t r=0; - for(i=0;i1) { - if(p=strchr(s,'\t')) { - *p++='\0'; - v=strtod(p, &e); - } else { - break; - } - - if(p=strchr(s,':')) // colon ignored - *p='\0'; - - if (!strcmp(s, "k")) { - k=v; - } else if (!strcmp(s, "top-x")) { - svx=v; - } else if (!strcmp(s, "q-start")) { - ftop=v; - } else if (!strcmp(s, "q-delta")) { - fdel=v; - } else if (!strcmp(s, "q-min")) { - fmin=v; - } else if (!strcmp(s, "lowcom-pct")) { - lowcom_pct=v/100; - } else if (!strcmp(s, "reads-used")) { - n=v; - } - } - - if (!k || !svx || ftop==0 || fdel==0 || fmin == 0 || n ==0) { - fail("File '%s': Invalid header.\n", file); - } - - svec = (sig::ent *)malloc(sizeof(*svec)*svx); - int i = 0; - while(i 1 )) { - s[k]='\0'; - svec[i].seq=char2seq(s,k); - svec[i].rcseq=char2seqrc(s,k); - svec[i].lev=atoi(s+k+1); - ++i; - } - - // number of quantile vector entries - qvx = (ftop-fmin-fdel)/fdel; - - // discard separator - l=getline(&s, &a, f); - - qvec = (double *)malloc(sizeof(*qvec)*qvx); - i = 0; - while(i 1 )) { - qvec[i]=strtod(s,&e); - ++i; - } - if (isop) fclose(f); -} - -sig::comp sig::compare(sig &o) { - if (svx!=o.svx || k!=o.k || fmin != o.fmin || fdel != o.fdel || ftop != o.ftop || lowcom_pct != o.lowcom_pct) { - fail("Can't compare sigs with different parameters\n"); - } - // influences certainty - - double diff=(double)abs(n-o.n)/(double(n+o.n)/2); - - // top x sequence vector comparison - int i, j; - int matches=0; - double sdistance=0; - for (i=0;i -double quantile(const vtype &vec, double p) { - int l = vec.size(); - if (!l) return 0; - double t = ((double)l-1)*p; - int it = (int) t; - int v=vec[it]; - if (t > (double)it) { - return (v + (t-it) * (vec[it+1] - v)); - } else { - return v; - } -} - - -void usage(FILE *f) { - fprintf(f, - -"Usage: seqsig [options] file1\n" -" or: seqsig -c file1 file2\n" -"Version: %s\n" -"\n" -"Generate qsig files for fastqs, or compare them\n" -"\n" -"Sig generation options:\n" -" -k INT kmer size (12)\n" -" -x INT number of top kmers to output (200)\n" -" -n INT number of reads to use (500000)\n" -" -l REAL low complexity filter (0.40), where 1 is no filter\n" -" -t REAL top quantile to use (0.90)\n" -" -d REAL quantile delta to iterate (0.15)\n" -" -m REAL minimum quantile to output/test (0.50)\n" -" -r FASTA bowtie indexed file of contamination/spike-ins to ignore\n" -"\n" -"Comparison options:\n" -" -Q REAL quantile coefficient for score output (350)\n" -" -S REAL sequence coefficient for score output (0.75)\n" -"\n" -"Misc options:\n" -" -h this help\n" -"\n" - ,VERSION); -} - -std::string string_format(const std::string &fmt, ...) { - int n, size=100; - std::string str; - va_list ap; - while (1) { - str.resize(size); - va_start(ap, fmt); - int n = vsnprintf((char *)str.c_str(), size, fmt.c_str(), ap); - va_end(ap); - if (n > -1 && n < size) - return str; - if (n > -1) - size=n+1; - else - size*=2; - } -} - - diff --git a/clipper/sparsehash-2.0.3/AUTHORS b/clipper/sparsehash-2.0.3/AUTHORS deleted file mode 100644 index d8c24c6..0000000 --- a/clipper/sparsehash-2.0.3/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -google-sparsehash@googlegroups.com - diff --git a/clipper/sparsehash-2.0.3/COPYING b/clipper/sparsehash-2.0.3/COPYING deleted file mode 100644 index e4956cf..0000000 --- a/clipper/sparsehash-2.0.3/COPYING +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2005, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/clipper/sparsehash-2.0.3/ChangeLog b/clipper/sparsehash-2.0.3/ChangeLog deleted file mode 100644 index fd53c6f..0000000 --- a/clipper/sparsehash-2.0.3/ChangeLog +++ /dev/null @@ -1,279 +0,0 @@ -Mon Oct 12 21:00:00 2015 Google Inc. - - * sparsehash: version 2.0.3 - * Fix compilation on modern compilers and operating systems - -Thu Feb 23 23:47:18 2012 Google Inc. - - * sparsehash: version 2.0.2 - * BUGFIX: Fix backwards compatibility for include folders - -Wed Feb 01 02:57:48 2012 Google Inc. - - * sparsehash: version 2.0.1 - * BUGFIX: Fix path to malloc_extension.h in time_hash_map.cc - -Tue Jan 31 11:33:04 2012 Google Inc. - - * sparsehash: version 2.0 - * Renamed include directory from google/ to sparsehash/ (csilvers) - * Changed the 'official' sparsehash email in setup.py/etc - * Renamed google-sparsehash.sln to sparsehash.sln - * Changed copyright text to reflect Google's relinquished ownership - -Tue Dec 20 21:04:04 2011 Google Inc. - - * sparsehash: version 1.12 release - * Add support for serializing/unserializing dense_hash_map/set to disk - * New simpler and more flexible serialization API - * Be more consistent about clearing on unserialize() even if it fails - * Quiet some compiler warnings about unused variables - * Add a timing test for iterating (suggested by google code issue 77) - * Add offset_to_pos, the opposite of pos_to_offset, to sparsetable - * PORTING: Add some missing #includes, needed on some systems - * Die at configure-time when g++ isn't installed - * Successfully make rpm's even when dpkg is missing - * Improve deleted key test in util/gtl/{dense,sparse}hashtable - * Update automake to 1.10.1, and autoconf to 2.62 - -Thu Jun 23 21:12:58 2011 Google Inc. - - * sparsehash: version 1.11 release - * Improve performance on pointer keys by ignoring always-0 low bits - * Fix missing $(top_srcdir) in Makefile.am, which broke some compiles - * BUGFIX: Fix a crashing typo-bug in swap() - * PORTING: Remove support for old compilers that do not use 'std' - * Add some new benchmarks to test for a place dense_hash_* does badly - * Some cosmetic changes due to a switch to a new releasing tool - -Thu Jan 20 16:07:39 2011 Google Inc. - - * sparsehash: version 1.10 release - * Follow ExtractKey return type, allowing it to return a reference - * PORTING: fix MSVC 10 warnings (constifying result_type, placement-new) - * Update from autoconf 2.61 to autoconf 2.65 - -Fri Sep 24 11:37:50 2010 Google Inc. - - * sparsehash: version 1.9 release - * Add is_enum; make all enums PODs by default (romanp) - * Make find_or_insert() usable directly (dawidk) - * Use zero-memory trick for allocators to reduce space use (guilin) - * Fix some compiler warnings (chandlerc, eraman) - * BUGFIX: int -> size_type in one function we missed (csilvers) - * Added sparsehash.pc, for pkg-config (csilvers) - -Thu Jul 29 15:01:29 2010 Google Inc. - - * sparsehash: version 1.8.1 release - * Remove -Werror from Makefile: gcc 4.3 gives spurious warnings - -Thu Jul 29 09:53:26 2010 Google Inc. - - * sparsehash: version 1.8 release - * More support for Allocator, including allocator ctor arg (csilvers) - * Repack hasthable vars to reduce container size *more* (giao) - * Speed up clear() (csilvers) - * Change HT_{OCCUPANCY,SHRINK}_FLT from float to int (csilvers) - * Revamp test suite for more complete code & timing coverage (csilvers) - * BUGFIX: Enforce max_size for dense/sparse_hashtable (giao, csilvers) - * BUGFIX: Raise exception instead of crashing on overflow (csilvers) - * BUGFIX: Allow extraneous const in key type (csilvers) - * BUGFIX: Allow same functor for both hasher and key_equals (giao) - * PORTING: remove is_convertible, which gives AIX cc fits (csilvers) - * PORTING: Renamed README.windows to README_windows.txt (csilvers) - * Created non-empty NEWS file (csilvers) - -Wed Mar 31 12:32:03 2010 Google Inc. - - * sparsehash: version 1.7 release - * Add support for Allocator (guilin) - * Add libc_allocator_with_realloc as the new default allocator (guilin) - * Repack {sparse,dense}hashtable vars to reduce container size (giao) - * BUGFIX: operator== no longer requires same table ordering (csilvers) - * BUGFIX: fix dense_hash_*(it,it) by requiring empty-key too (csilvers) - * PORTING: fix language bugs that gcc allowed (csilvers, chandlerc) - * Update from autoconf 2.61 to autoconf 2.64 - -Fri Jan 8 14:47:55 2010 Google Inc. - - * sparsehash: version 1.6 release - * New accessor methods for deleted_key, empty_key (sjackman) - * Use explicit hash functions in sparsehash tests (csilvers) - * BUGFIX: Cast resize to fix SUNWspro bug (csilvers) - * Check for sz overflow in min_size (csilvers) - * Speed up clear() for dense and sparse hashtables (jeff) - * Avoid shrinking in all cases when min-load is 0 (shaunj, csilvers) - * Improve densehashtable code for the deleted key (gpike) - * BUGFIX: Fix operator= when the 2 empty-keys differ (andreidam) - * BUGFIX: Fix ht copying when empty-key isn't set (andreidam) - * PORTING: Use TmpFile() instead of /tmp on MinGW (csilvers) - * PORTING: Use filenames that work with Stratus VOS. - -Tue May 12 14:16:38 2009 Google Inc. - - * sparsehash: version 1.5.2 release - * Fix compile error: not initializing set_key in all constructors - -Fri May 8 15:23:44 2009 Google Inc. - - * sparsehash: version 1.5.1 release - * Fix broken equal_range() for all the hash-classes (csilvers) - -Wed May 6 11:28:49 2009 Google Inc. - - * sparsehash: version 1.5 release - * Support the tr1 unordered_map (and unordered_set) API (csilvers) - * Store only key for delkey; reduces need for 0-arg c-tor (csilvers) - * Prefer unordered_map to hash_map for the timing test (csilvers) - * PORTING: update the resource use for 64-bit machines (csilvers) - * PORTING: fix MIN/MAX collisions by un-#including windows.h (csilvers) - * Updated autoconf version to 2.61 and libtool version to 1.5.26 - -Wed Jan 28 17:11:31 2009 Google Inc. - - * sparsehash: version 1.4 release - * Allow hashtables to be <32 buckets (csilvers) - * Fix initial-sizing bug: was sizing tables too small (csilvers) - * Add asserts that clients don't abuse deleted/empty key (csilvers) - * Improve determination of 32/64 bit for C code (csilvers) - * Small fix for doc files in rpm (csilvers) - -Thu Nov 6 15:06:09 2008 Google Inc. - - * sparsehash: version 1.3 release - * Add an interface to change the parameters for resizing (myl) - * Document another potentially good hash function (csilvers) - -Thu Sep 18 13:53:20 2008 Google Inc. - - * sparsehash: version 1.2 release - * Augment documentation to better describe namespace issues (csilvers) - * BUG FIX: replace hash<> with SPARSEHASH_HASH, for windows (csilvers) - * Add timing test to unittest to test repeated add+delete (csilvers) - * Do better picking a new size when resizing (csilvers) - * Use ::google instead of google as a namespace (csilvers) - * Improve threading test at config time (csilvers) - -Mon Feb 11 16:30:11 2008 Google Inc. - - * sparsehash: version 1.1 release - * Fix brown-paper-bag bug in some constructors (rafferty) - * Fix problem with variables shadowing member vars, add -Wshadow - -Thu Nov 29 11:44:38 2007 Google Inc. - - * sparsehash: version 1.0.2 release - * Fix a final reference to hash<> to use SPARSEHASH_HASH<> instead. - -Wed Nov 14 08:47:48 2007 Google Inc. - - * sparsehash: version 1.0.1 release :-( - * Remove an unnecessary (harmful) "#define hash" in windows' config.h - -Tue Nov 13 15:15:46 2007 Google Inc. - - * sparsehash: version 1.0 release! We are now out of beta. - * Clean up Makefile awk script to be more readable (csilvers) - * Namespace fixes: use fewer #defines, move typedefs into namespace - -Fri Oct 12 12:35:24 2007 Google Inc. - - * sparsehash: version 0.9.1 release - * Fix Makefile awk script to work on more architectures (csilvers) - * Add test to test code in more 'real life' situations (csilvers) - -Tue Oct 9 14:15:21 2007 Google Inc. - - * sparsehash: version 0.9 release - * More type-hygiene improvements, especially for 64-bit (csilvers) - * Some configure improvements to improve portability, utility (austern) - * Small bugfix for operator== for dense_hash_map (jeff) - -Tue Jul 3 12:55:04 2007 Google Inc. - - * sparsehash: version 0.8 release - * Minor type-hygiene improvements: size_t for int, etc. (csilvers) - * Porting improvements: tests pass on OS X, FreeBSD, Solaris (csilvers) - * Full windows port! VS solution provided for all unittests (csilvers) - -Mon Jun 11 11:33:41 2007 Google Inc. - - * sparsehash: version 0.7 release - * Syntax fixes to better support gcc 4.3 and VC++ 7 (mec, csilvers) - * Improved windows/VC++ support (see README.windows) (csilvers) - * Config improvements: better tcmalloc support and config.h (csilvers) - * More robust with missing hash_map + nix 'trampoline' .h's (csilvers) - * Support for STLport's hash_map/hash_fun locations (csilvers) - * Add .m4 files to distribution; now all source is there (csilvers) - * Tiny modification of shrink-threshhold to allow never-shrinking (amc) - * Protect timing tests against aggressive optimizers (csilvers) - * Extend time_hash_map to test bigger objects (csilvers) - * Extend type-trait support to work with const objects (csilvers) - * USER VISIBLE: speed up all code by replacing memmove with memcpy - (csilvers) - -Tue Mar 20 17:29:34 2007 Google Inc. - - * sparsehash: version 0.6 release - * Some improvement to type-traits (jyasskin) - * Better timing results when google-perftools is installed (sanjay) - * Updates and fixes to html documentation and README (csilvers) - * A bit more careful about #includes (csilvers) - * Fix for typo that broken compilation on some systems (csilvers) - * USER VISIBLE: New clear_no_resize() method added to dense_hash_map - (uszkoreit) - -Sat Oct 21 13:47:47 2006 Google Inc. - - * sparsehash: version 0.5 release - * Support uint16_t (SunOS) in addition to u_int16_t (BSD) (csilvers) - * Get rid of UNDERSTANDS_ITERATOR_TAGS; everyone understands (csilvers) - * Test that empty-key and deleted-key differ (rbayardo) - * Fix example docs: strcmp needs to test for NULL (csilvers) - -Sun Apr 23 22:42:35 2006 Google Inc. - - * sparsehash: version 0.4 release - * Remove POD requirement for keys and values! (austern) - * Add tr1-compatible type-traits system to speed up POD ops. (austern) - * Fixed const-iterator bug where postfix ++ didn't compile. (csilvers) - * Fixed iterator comparison bugs where <= was incorrect. (csilvers) - * Clean up config.h to keep its #defines from conflicting. (csilvers) - * Big documentation sweep and cleanup. (csilvers) - * Update documentation to talk more about good hash fns. (csilvers) - * Fixes to compile on MSVC (working around some MSVC bugs). (rennie) - * Avoid resizing hashtable on operator[] lookups (austern) - -Thu Nov 3 20:12:31 2005 Google Inc. - - * sparsehash: version 0.3 release - * Quiet compiler warnings on some compilers. (csilvers) - * Some documentation fixes: example code for dense_hash_map. (csilvers) - * Fix a bug where swap() wasn't swapping delete_key(). (csilvers) - * set_deleted_key() and set_empty_key() now take a key only, - allowing hash-map values to be forward-declared. (csilvers) - * support for std::insert_iterator (and std::inserter). (csilvers) - -Mon May 2 07:04:46 2005 Google Inc. - - * sparsehash: version 0.2 release - * Preliminary support for msvc++ compilation. (csilvers) - * Documentation fixes -- some example code was incomplete! (csilvers) - * Minimize size of config.h to avoid other-package conflicts (csilvers) - * Contribute a C-based version of sparsehash that served as the - inspiration for this code. One day, I hope to clean it up and - support it, but for now it's just in experimental/, for playing - around with. (csilvers) - * Change default namespace from std to google. (csilvers) - -Fri Jan 14 16:53:32 2005 Google Inc. - - * sparsehash: initial release: - The sparsehash package contains several hash-map implementations, - similar in API to SGI's hash_map class, but with different - performance characteristics. sparse_hash_map uses very little - space overhead: 1-2 bits per entry. dense_hash_map is typically - faster than the default SGI STL implementation. This package - also includes hash-set analogues of these classes. - diff --git a/clipper/sparsehash-2.0.3/INSTALL b/clipper/sparsehash-2.0.3/INSTALL deleted file mode 100644 index 7d1c323..0000000 --- a/clipper/sparsehash-2.0.3/INSTALL +++ /dev/null @@ -1,365 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, -2006, 2007, 2008, 2009 Free Software Foundation, Inc. - - Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without warranty of any kind. - -Basic Installation -================== - - Briefly, the shell commands `./configure; make; make install' should -configure, build, and install this package. The following -more-detailed instructions are generic; see the `README' file for -instructions specific to this package. Some packages provide this -`INSTALL' file but do not implement all of the features documented -below. The lack of an optional feature in a given package is not -necessarily a bug. More recommendations for GNU packages can be found -in *note Makefile Conventions: (standards)Makefile Conventions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. Caching is -disabled by default to prevent problems with accidental use of stale -cache files. - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You need `configure.ac' if -you want to change it or regenerate `configure' using a newer version -of `autoconf'. - - The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. - - Running `configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package, generally using the just-built uninstalled binaries. - - 4. Type `make install' to install the programs and any data files and - documentation. When installing into a prefix owned by root, it is - recommended that the package be configured and built as a regular - user, and only the `make install' phase executed with root - privileges. - - 5. Optionally, type `make installcheck' to repeat any self-tests, but - this time using the binaries in their final installed location. - This target does not install anything. Running this target as a - regular user, particularly if the prior `make install' required - root privileges, verifies that the installation completed - correctly. - - 6. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 7. Often, you can also type `make uninstall' to remove the installed - files again. In practice, not all packages have tested that - uninstallation works correctly, even though it is required by the - GNU Coding Standards. - - 8. Some packages, particularly those that use Automake, provide `make - distcheck', which can by used by developers to test that all other - targets like `make install' and `make uninstall' work correctly. - This target is generally not run by end users. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. This -is known as a "VPATH" build. - - With a non-GNU `make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use `make distclean' before -reconfiguring for another architecture. - - On MacOS X 10.5 and later systems, you can create libraries and -executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple `-arch' options to the -compiler but only a single `-arch' option to the preprocessor. Like -this: - - ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CPP="gcc -E" CXXCPP="g++ -E" - - This is not guaranteed to produce working output in all cases, you -may have to build one architecture at a time and combine the results -using the `lipo' tool if you have problems. - -Installation Names -================== - - By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX', where PREFIX must be an -absolute file name. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the -default for these options is expressed in terms of `${prefix}', so that -specifying just `--prefix' will affect all of the other directory -specifications that were not explicitly provided. - - The most portable way to affect installation locations is to pass the -correct locations to `configure'; however, many packages provide one or -both of the following shortcuts of passing variable assignments to the -`make install' command line to change installation locations without -having to reconfigure or recompile. - - The first method involves providing an override variable for each -affected directory. For example, `make install -prefix=/alternate/directory' will choose an alternate location for all -directory configuration variables that were expressed in terms of -`${prefix}'. Any directories that were specified during `configure', -but not in terms of `${prefix}', must each be overridden at install -time for the entire installation to be relocated. The approach of -makefile variable overrides for each directory variable is required by -the GNU Coding Standards, and ideally causes no recompilation. -However, some platforms have known limitations with the semantics of -shared libraries that end up requiring recompilation when using this -method, particularly noticeable in packages that use GNU Libtool. - - The second method involves providing the `DESTDIR' variable. For -example, `make install DESTDIR=/alternate/directory' will prepend -`/alternate/directory' before all installation names. The approach of -`DESTDIR' overrides is not required by the GNU Coding Standards, and -does not work on platforms that have drive letters. On the other hand, -it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of `${prefix}' -at `configure' time. - -Optional Features -================= - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - - Some packages offer the ability to configure how verbose the -execution of `make' will be. For these packages, running `./configure ---enable-silent-rules' sets the default to minimal output, which can be -overridden with `make V=1'; while running `./configure ---disable-silent-rules' sets the default to verbose, which can be -overridden with `make V=0'. - -Particular systems -================== - - On HP-UX, the default C compiler is not ANSI C compatible. If GNU -CC is not installed, it is recommended to use the following options in -order to use an ANSI C compiler: - - ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" - -and if that doesn't work, install pre-built binaries of GCC for HP-UX. - - On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its `' header file. The option `-nodtk' can be used as -a workaround. If GNU CC is not installed, it is therefore recommended -to try - - ./configure CC="cc" - -and if that doesn't work, try - - ./configure CC="cc -nodtk" - - On Solaris, don't put `/usr/ucb' early in your `PATH'. This -directory contains several dysfunctional programs; working variants of -these programs are available in `/usr/bin'. So, if you need `/usr/ucb' -in your `PATH', put it _after_ `/usr/bin'. - - On Haiku, software installed for all users goes in `/boot/common', -not `/usr/local'. It is recommended to use the following options: - - ./configure --prefix=/boot/common - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS - KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). - -Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf bug. Until the bug is fixed you can use this workaround: - - CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of all of the options to `configure', and exit. - -`--help=short' -`--help=recursive' - Print a summary of the options unique to this package's - `configure', and exit. The `short' variant lists options used - only in the top level, while the `recursive' variant lists options - also present in any nested packages. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: - for more details, including other options available for fine-tuning - the installation locations. - -`--no-create' -`-n' - Run the configure checks, but stop before creating any output - files. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. - diff --git a/clipper/sparsehash-2.0.3/Makefile.am b/clipper/sparsehash-2.0.3/Makefile.am deleted file mode 100644 index 0cd4bd8..0000000 --- a/clipper/sparsehash-2.0.3/Makefile.am +++ /dev/null @@ -1,229 +0,0 @@ -## Process this file with automake to produce Makefile.in - -# Make sure that when we re-make ./configure, we get the macros we need -ACLOCAL_AMFLAGS = -I m4 - -# This is so we can #include -AM_CPPFLAGS = -I$(top_srcdir)/src - -# These are good warnings to turn on by default -if GCC -AM_CXXFLAGS = -Wall -W -Wwrite-strings -Woverloaded-virtual -Wshadow -endif - -docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION) -## This is for HTML and other documentation you want to install. -## Add your documentation files (in doc/) in addition to these boilerplate -## Also add a TODO file if you have one -dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL NEWS README README_windows.txt \ - TODO \ - doc/dense_hash_map.html \ - doc/dense_hash_set.html \ - doc/sparse_hash_map.html \ - doc/sparse_hash_set.html \ - doc/sparsetable.html \ - doc/implementation.html \ - doc/performance.html \ - doc/index.html \ - doc/designstyle.css - -## The libraries (.so's) you want to install -lib_LTLIBRARIES = -## The location of the windows project file for each binary we make -WINDOWS_PROJECTS = sparsehash.sln - -## unittests you want to run when people type 'make check'. -## TESTS is for binary unittests, check_SCRIPTS for script-based unittests. -## TESTS_ENVIRONMENT sets environment variables for when you run unittest, -## but it only seems to take effect for *binary* unittests (argh!) -TESTS = -check_SCRIPTS = -TESTS_ENVIRONMENT = - -## This should always include $(TESTS), but may also include other -## binaries that you compile but don't want automatically installed. -noinst_PROGRAMS = $(TESTS) time_hash_map -WINDOWS_PROJECTS += vsprojects/time_hash_map/time_hash_map.vcproj - - -## vvvv RULES TO MAKE THE LIBRARIES, BINARIES, AND UNITTESTS - -# All our .h files need to read the config information in config.h. The -# autoheader config.h has too much info, including PACKAGENAME, that -# might conflict with other config.h's an application might #include. -# Thus, we create a "minimal" config.h, called sparseconfig.h, that -# includes only the #defines we really need, and that are unlikely to -# change from system to system. NOTE: The awk command is equivalent to -# fgrep -B2 -f$(top_builddir)/src/config.h.include $(top_builddir)/src/config.h -# | fgrep -vx -e -- > _sparsehash_config -# For correctness, it depends on the fact config.h.include does not have -# any lines starting with #. -src/sparsehash/internal/sparseconfig.h: $(top_builddir)/src/config.h \ - $(top_srcdir)/src/config.h.include - [ -d $(@D) ] || mkdir -p $(@D) - echo "/*" > $(@D)/_sparsehash_config - echo " * NOTE: This file is for internal use only." >> $(@D)/_sparsehash_config - echo " * Do not use these #defines in your own program!" >> $(@D)/_sparsehash_config - echo " */" >> $(@D)/_sparsehash_config - $(AWK) '{prevline=currline; currline=$$0;} \ - /^#/ {in_second_file = 1;} \ - !in_second_file {if (currline !~ /^ *$$/) {inc[currline]=0}}; \ - in_second_file { for (i in inc) { \ - if (index(currline, i) != 0) { \ - print "\n"prevline"\n"currline; \ - delete inc[i]; \ - } \ - } }' \ - $(top_srcdir)/src/config.h.include $(top_builddir)/src/config.h \ - >> $(@D)/_sparsehash_config - mv -f $(@D)/_sparsehash_config $@ -# This is how we tell automake about auto-generated .h files -BUILT_SOURCES = src/sparsehash/internal/sparseconfig.h -CLEANFILES = src/sparsehash/internal/sparseconfig.h - -sparsehashincludedir = $(includedir)/sparsehash -## The .h files you want to install (that is, .h files that people -## who install this package can include in their own applications.) -sparsehashinclude_HEADERS = \ - src/sparsehash/dense_hash_map \ - src/sparsehash/dense_hash_set \ - src/sparsehash/sparse_hash_map \ - src/sparsehash/sparse_hash_set \ - src/sparsehash/sparsetable \ - src/sparsehash/template_util.h \ - src/sparsehash/type_traits.h - -internalincludedir = $(sparsehashincludedir)/internal -internalinclude_HEADERS = \ - src/sparsehash/internal/densehashtable.h \ - src/sparsehash/internal/sparsehashtable.h \ - src/sparsehash/internal/hashtable-common.h \ - src/sparsehash/internal/libc_allocator_with_realloc.h -nodist_internalinclude_HEADERS = src/sparsehash/internal/sparseconfig.h - -# This is for backwards compatibility only. -googleincludedir = $(includedir)/google -googleinclude_HEADERS = \ - src/google/dense_hash_map \ - src/google/dense_hash_set \ - src/google/sparse_hash_map \ - src/google/sparse_hash_set \ - src/google/sparsetable \ - src/google/template_util.h \ - src/google/type_traits.h - -googleinternalincludedir = $(includedir)/google/sparsehash -googleinternalinclude_HEADERS= \ - src/google/sparsehash/densehashtable.h \ - src/google/sparsehash/sparsehashtable.h \ - src/google/sparsehash/hashtable-common.h \ - src/google/sparsehash/libc_allocator_with_realloc.h - -TESTS += template_util_unittest -# TODO(csilvers): Update windows projects for template_util_unittest. -# WINDOWS_PROJECTS += vsprojects/template_util_unittest/template_util_unittest.vcproj -template_util_unittest_SOURCES = \ - src/template_util_unittest.cc \ - src/sparsehash/template_util.h -nodist_template_util_unittest_SOURCES = $(nodist_internalinclude_HEADERS) - -TESTS += type_traits_unittest -WINDOWS_PROJECTS += vsprojects/type_traits_unittest/type_traits_unittest.vcproj -type_traits_unittest_SOURCES = \ - src/type_traits_unittest.cc \ - $(internalinclude_HEADERS) \ - src/sparsehash/type_traits.h -nodist_type_traits_unittest_SOURCES = $(nodist_internalinclude_HEADERS) - -TESTS += libc_allocator_with_realloc_test -WINDOWS_PROJECTS += vsprojects/libc_allocator_with_realloc_test/libc_allocator_with_realloc_test.vcproj -libc_allocator_with_realloc_test_SOURCES = \ - src/libc_allocator_with_realloc_test.cc \ - $(internalinclude_HEADERS) \ - src/sparsehash/internal/libc_allocator_with_realloc.h - - -TESTS += sparsetable_unittest -WINDOWS_PROJECTS += vsprojects/sparsetable_unittest/sparsetable_unittest.vcproj -sparsetable_unittest_SOURCES = \ - src/sparsetable_unittest.cc \ - $(internalinclude_HEADERS) \ - src/sparsehash/sparsetable -nodist_sparsetable_unittest_SOURCES = $(nodist_internalinclude_HEADERS) - -TESTS += hashtable_test -WINDOWS_PROJECTS += vsprojects/hashtable_test/hashtable_test.vcproj -hashtable_test_SOURCES = \ - src/hashtable_test.cc \ - src/hash_test_interface.h \ - src/testutil.h \ - $(sparsehashinclude_HEADERS) \ - $(internalinclude_HEADERS) -nodist_hashtable_test_SOURCES = $(nodist_internalinclude_HEADERS) - -TESTS += simple_test -WINDOWS_PROJECTS += vsprojects/simple_test/simple_test.vcproj -simple_test_SOURCES = \ - src/simple_test.cc \ - $(internalinclude_HEADERS) -nodist_simple_test_SOURCES = $(nodist_internalinclude_HEADERS) - -TESTS += simple_compat_test -simple_compat_test_SOURCES = \ - src/simple_compat_test.cc \ - $(internalinclude_HEADERS) \ - $(googleinclude_HEADERS) \ - $(googleinternalinclude_HEADERS) -nodist_simple_compat_test_SOURCES = $(nodist_internalinclude_HEADERS) - -time_hash_map_SOURCES = \ - src/time_hash_map.cc \ - $(internalinclude_HEADERS) \ - $(sparsehashinclude_HEADERS) -nodist_time_hash_map_SOURCES = $(nodist_internalinclude_HEADERS) - -# If tcmalloc is installed, use it with time_hash_map; it gives us -# heap-usage statistics for the hash_map routines, which is very nice -time_hash_map_CXXFLAGS = @tcmalloc_flags@ $(AM_CXXFLAGS) -time_hash_map_LDFLAGS = @tcmalloc_flags@ -time_hash_map_LDADD = @tcmalloc_libs@ - -## ^^^^ END OF RULES TO MAKE THE LIBRARIES, BINARIES, AND UNITTESTS - - -rpm: dist-gzip packages/rpm.sh packages/rpm/rpm.spec - @cd packages && ./rpm.sh ${PACKAGE} ${VERSION} - -deb: dist-gzip packages/deb.sh packages/deb/* - @cd packages && ./deb.sh ${PACKAGE} ${VERSION} - -# http://linux.die.net/man/1/pkg-config, http://pkg-config.freedesktop.org/wiki -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = lib${PACKAGE}.pc -CLEANFILES += $(pkgconfig_DATA) - -# I get the description and URL lines from the rpm spec. I use sed to -# try to rewrite exec_prefix, libdir, and includedir in terms of -# prefix, if possible. -lib${PACKAGE}.pc: Makefile packages/rpm/rpm.spec - echo 'prefix=$(prefix)' > "$@".tmp - echo 'exec_prefix='`echo '$(exec_prefix)' | sed 's@^$(prefix)@$${prefix}@'` >> "$@".tmp - echo 'libdir='`echo '$(libdir)' | sed 's@^$(exec_prefix)@$${exec_prefix}@'` >> "$@".tmp - echo 'includedir='`echo '$(includedir)' | sed 's@^$(prefix)@$${prefix}@'` >> "$@".tmp - echo '' >> "$@".tmp - echo 'Name: $(PACKAGE)' >> "$@".tmp - echo 'Version: $(VERSION)' >> "$@".tmp - -grep '^Summary:' $(top_srcdir)/packages/rpm/rpm.spec | sed s/^Summary:/Description:/ | head -n1 >> "$@".tmp - -grep '^URL: ' $(top_srcdir)/packages/rpm/rpm.spec >> "$@".tmp - echo 'Requires:' >> "$@".tmp - echo 'Libs:' >> "$@".tmp - echo 'Cflags: -I$${includedir}' >> "$@".tmp - mv -f "$@".tmp "$@" - -# Windows wants write permission to .vcproj files and maybe even sln files. -dist-hook: - test -e "$(distdir)/vsprojects" \ - && chmod -R u+w $(distdir)/*.sln $(distdir)/vsprojects/ - -EXTRA_DIST = packages/rpm.sh packages/rpm/rpm.spec packages/deb.sh packages/deb \ - src/config.h.include src/windows $(WINDOWS_PROJECTS) experimental diff --git a/clipper/sparsehash-2.0.3/Makefile.in b/clipper/sparsehash-2.0.3/Makefile.in deleted file mode 100644 index 83bca9b..0000000 --- a/clipper/sparsehash-2.0.3/Makefile.in +++ /dev/null @@ -1,1336 +0,0 @@ -# Makefile.in generated by automake 1.11.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -TESTS = template_util_unittest$(EXEEXT) type_traits_unittest$(EXEEXT) \ - libc_allocator_with_realloc_test$(EXEEXT) \ - sparsetable_unittest$(EXEEXT) hashtable_test$(EXEEXT) \ - simple_test$(EXEEXT) simple_compat_test$(EXEEXT) -noinst_PROGRAMS = $(am__EXEEXT_1) time_hash_map$(EXEEXT) -subdir = . -DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \ - $(googleinclude_HEADERS) $(googleinternalinclude_HEADERS) \ - $(internalinclude_HEADERS) $(sparsehashinclude_HEADERS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/configure $(top_srcdir)/src/config.h.in AUTHORS \ - COPYING ChangeLog INSTALL NEWS TODO config.guess config.sub \ - depcomp install-sh missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_pthread.m4 \ - $(top_srcdir)/m4/google_namespace.m4 \ - $(top_srcdir)/m4/namespaces.m4 $(top_srcdir)/m4/stl_hash.m4 \ - $(top_srcdir)/m4/stl_hash_fun.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" \ - "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(googleincludedir)" \ - "$(DESTDIR)$(googleinternalincludedir)" \ - "$(DESTDIR)$(internalincludedir)" \ - "$(DESTDIR)$(internalincludedir)" \ - "$(DESTDIR)$(sparsehashincludedir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -am__EXEEXT_1 = template_util_unittest$(EXEEXT) \ - type_traits_unittest$(EXEEXT) \ - libc_allocator_with_realloc_test$(EXEEXT) \ - sparsetable_unittest$(EXEEXT) hashtable_test$(EXEEXT) \ - simple_test$(EXEEXT) simple_compat_test$(EXEEXT) -PROGRAMS = $(noinst_PROGRAMS) -am__objects_1 = -am_hashtable_test_OBJECTS = hashtable_test.$(OBJEXT) $(am__objects_1) \ - $(am__objects_1) -nodist_hashtable_test_OBJECTS = $(am__objects_1) -hashtable_test_OBJECTS = $(am_hashtable_test_OBJECTS) \ - $(nodist_hashtable_test_OBJECTS) -hashtable_test_LDADD = $(LDADD) -am_libc_allocator_with_realloc_test_OBJECTS = \ - libc_allocator_with_realloc_test.$(OBJEXT) $(am__objects_1) -libc_allocator_with_realloc_test_OBJECTS = \ - $(am_libc_allocator_with_realloc_test_OBJECTS) -libc_allocator_with_realloc_test_LDADD = $(LDADD) -am_simple_compat_test_OBJECTS = simple_compat_test.$(OBJEXT) \ - $(am__objects_1) $(am__objects_1) $(am__objects_1) -nodist_simple_compat_test_OBJECTS = $(am__objects_1) -simple_compat_test_OBJECTS = $(am_simple_compat_test_OBJECTS) \ - $(nodist_simple_compat_test_OBJECTS) -simple_compat_test_LDADD = $(LDADD) -am_simple_test_OBJECTS = simple_test.$(OBJEXT) $(am__objects_1) -nodist_simple_test_OBJECTS = $(am__objects_1) -simple_test_OBJECTS = $(am_simple_test_OBJECTS) \ - $(nodist_simple_test_OBJECTS) -simple_test_LDADD = $(LDADD) -am_sparsetable_unittest_OBJECTS = sparsetable_unittest.$(OBJEXT) \ - $(am__objects_1) -nodist_sparsetable_unittest_OBJECTS = $(am__objects_1) -sparsetable_unittest_OBJECTS = $(am_sparsetable_unittest_OBJECTS) \ - $(nodist_sparsetable_unittest_OBJECTS) -sparsetable_unittest_LDADD = $(LDADD) -am_template_util_unittest_OBJECTS = template_util_unittest.$(OBJEXT) -nodist_template_util_unittest_OBJECTS = $(am__objects_1) -template_util_unittest_OBJECTS = $(am_template_util_unittest_OBJECTS) \ - $(nodist_template_util_unittest_OBJECTS) -template_util_unittest_LDADD = $(LDADD) -am_time_hash_map_OBJECTS = time_hash_map-time_hash_map.$(OBJEXT) \ - $(am__objects_1) $(am__objects_1) -nodist_time_hash_map_OBJECTS = $(am__objects_1) -time_hash_map_OBJECTS = $(am_time_hash_map_OBJECTS) \ - $(nodist_time_hash_map_OBJECTS) -time_hash_map_DEPENDENCIES = -time_hash_map_LINK = $(CXXLD) $(time_hash_map_CXXFLAGS) $(CXXFLAGS) \ - $(time_hash_map_LDFLAGS) $(LDFLAGS) -o $@ -am_type_traits_unittest_OBJECTS = type_traits_unittest.$(OBJEXT) \ - $(am__objects_1) -nodist_type_traits_unittest_OBJECTS = $(am__objects_1) -type_traits_unittest_OBJECTS = $(am_type_traits_unittest_OBJECTS) \ - $(nodist_type_traits_unittest_OBJECTS) -type_traits_unittest_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -am__mv = mv -f -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ - -o $@ -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(hashtable_test_SOURCES) $(nodist_hashtable_test_SOURCES) \ - $(libc_allocator_with_realloc_test_SOURCES) \ - $(simple_compat_test_SOURCES) \ - $(nodist_simple_compat_test_SOURCES) $(simple_test_SOURCES) \ - $(nodist_simple_test_SOURCES) $(sparsetable_unittest_SOURCES) \ - $(nodist_sparsetable_unittest_SOURCES) \ - $(template_util_unittest_SOURCES) \ - $(nodist_template_util_unittest_SOURCES) \ - $(time_hash_map_SOURCES) $(nodist_time_hash_map_SOURCES) \ - $(type_traits_unittest_SOURCES) \ - $(nodist_type_traits_unittest_SOURCES) -DIST_SOURCES = $(hashtable_test_SOURCES) \ - $(libc_allocator_with_realloc_test_SOURCES) \ - $(simple_compat_test_SOURCES) $(simple_test_SOURCES) \ - $(sparsetable_unittest_SOURCES) \ - $(template_util_unittest_SOURCES) $(time_hash_map_SOURCES) \ - $(type_traits_unittest_SOURCES) -DATA = $(dist_doc_DATA) $(pkgconfig_DATA) -HEADERS = $(googleinclude_HEADERS) $(googleinternalinclude_HEADERS) \ - $(internalinclude_HEADERS) $(nodist_internalinclude_HEADERS) \ - $(sparsehashinclude_HEADERS) -ETAGS = etags -CTAGS = ctags -am__tty_colors = \ -red=; grn=; lgn=; blu=; std= -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d "$(distdir)" \ - || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr "$(distdir)"; }; } -DIST_ARCHIVES = $(distdir).tar.gz $(distdir).zip -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PTHREAD_CC = @PTHREAD_CC@ -PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ -PTHREAD_LIBS = @PTHREAD_LIBS@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -acx_pthread_config = @acx_pthread_config@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = $(prefix)/share/doc/$(PACKAGE)-$(VERSION) -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -tcmalloc_flags = @tcmalloc_flags@ -tcmalloc_libs = @tcmalloc_libs@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ - -# Make sure that when we re-make ./configure, we get the macros we need -ACLOCAL_AMFLAGS = -I m4 - -# This is so we can #include -AM_CPPFLAGS = -I$(top_srcdir)/src - -# These are good warnings to turn on by default -@GCC_TRUE@AM_CXXFLAGS = -Wall -W -Wwrite-strings -Woverloaded-virtual -Wshadow -dist_doc_DATA = AUTHORS COPYING ChangeLog INSTALL NEWS README README_windows.txt \ - TODO \ - doc/dense_hash_map.html \ - doc/dense_hash_set.html \ - doc/sparse_hash_map.html \ - doc/sparse_hash_set.html \ - doc/sparsetable.html \ - doc/implementation.html \ - doc/performance.html \ - doc/index.html \ - doc/designstyle.css - -lib_LTLIBRARIES = -WINDOWS_PROJECTS = sparsehash.sln \ - vsprojects/time_hash_map/time_hash_map.vcproj \ - vsprojects/type_traits_unittest/type_traits_unittest.vcproj \ - vsprojects/libc_allocator_with_realloc_test/libc_allocator_with_realloc_test.vcproj \ - vsprojects/sparsetable_unittest/sparsetable_unittest.vcproj \ - vsprojects/hashtable_test/hashtable_test.vcproj \ - vsprojects/simple_test/simple_test.vcproj -check_SCRIPTS = -TESTS_ENVIRONMENT = -# This is how we tell automake about auto-generated .h files -BUILT_SOURCES = src/sparsehash/internal/sparseconfig.h -CLEANFILES = src/sparsehash/internal/sparseconfig.h $(pkgconfig_DATA) -sparsehashincludedir = $(includedir)/sparsehash -sparsehashinclude_HEADERS = \ - src/sparsehash/dense_hash_map \ - src/sparsehash/dense_hash_set \ - src/sparsehash/sparse_hash_map \ - src/sparsehash/sparse_hash_set \ - src/sparsehash/sparsetable \ - src/sparsehash/template_util.h \ - src/sparsehash/type_traits.h - -internalincludedir = $(sparsehashincludedir)/internal -internalinclude_HEADERS = \ - src/sparsehash/internal/densehashtable.h \ - src/sparsehash/internal/sparsehashtable.h \ - src/sparsehash/internal/hashtable-common.h \ - src/sparsehash/internal/libc_allocator_with_realloc.h - -nodist_internalinclude_HEADERS = src/sparsehash/internal/sparseconfig.h - -# This is for backwards compatibility only. -googleincludedir = $(includedir)/google -googleinclude_HEADERS = \ - src/google/dense_hash_map \ - src/google/dense_hash_set \ - src/google/sparse_hash_map \ - src/google/sparse_hash_set \ - src/google/sparsetable \ - src/google/template_util.h \ - src/google/type_traits.h - -googleinternalincludedir = $(includedir)/google/sparsehash -googleinternalinclude_HEADERS = \ - src/google/sparsehash/densehashtable.h \ - src/google/sparsehash/sparsehashtable.h \ - src/google/sparsehash/hashtable-common.h \ - src/google/sparsehash/libc_allocator_with_realloc.h - -# TODO(csilvers): Update windows projects for template_util_unittest. -# WINDOWS_PROJECTS += vsprojects/template_util_unittest/template_util_unittest.vcproj -template_util_unittest_SOURCES = \ - src/template_util_unittest.cc \ - src/sparsehash/template_util.h - -nodist_template_util_unittest_SOURCES = $(nodist_internalinclude_HEADERS) -type_traits_unittest_SOURCES = \ - src/type_traits_unittest.cc \ - $(internalinclude_HEADERS) \ - src/sparsehash/type_traits.h - -nodist_type_traits_unittest_SOURCES = $(nodist_internalinclude_HEADERS) -libc_allocator_with_realloc_test_SOURCES = \ - src/libc_allocator_with_realloc_test.cc \ - $(internalinclude_HEADERS) \ - src/sparsehash/internal/libc_allocator_with_realloc.h - -sparsetable_unittest_SOURCES = \ - src/sparsetable_unittest.cc \ - $(internalinclude_HEADERS) \ - src/sparsehash/sparsetable - -nodist_sparsetable_unittest_SOURCES = $(nodist_internalinclude_HEADERS) -hashtable_test_SOURCES = \ - src/hashtable_test.cc \ - src/hash_test_interface.h \ - src/testutil.h \ - $(sparsehashinclude_HEADERS) \ - $(internalinclude_HEADERS) - -nodist_hashtable_test_SOURCES = $(nodist_internalinclude_HEADERS) -simple_test_SOURCES = \ - src/simple_test.cc \ - $(internalinclude_HEADERS) - -nodist_simple_test_SOURCES = $(nodist_internalinclude_HEADERS) -simple_compat_test_SOURCES = \ - src/simple_compat_test.cc \ - $(internalinclude_HEADERS) \ - $(googleinclude_HEADERS) \ - $(googleinternalinclude_HEADERS) - -nodist_simple_compat_test_SOURCES = $(nodist_internalinclude_HEADERS) -time_hash_map_SOURCES = \ - src/time_hash_map.cc \ - $(internalinclude_HEADERS) \ - $(sparsehashinclude_HEADERS) - -nodist_time_hash_map_SOURCES = $(nodist_internalinclude_HEADERS) - -# If tcmalloc is installed, use it with time_hash_map; it gives us -# heap-usage statistics for the hash_map routines, which is very nice -time_hash_map_CXXFLAGS = @tcmalloc_flags@ $(AM_CXXFLAGS) -time_hash_map_LDFLAGS = @tcmalloc_flags@ -time_hash_map_LDADD = @tcmalloc_libs@ - -# http://linux.die.net/man/1/pkg-config, http://pkg-config.freedesktop.org/wiki -pkgconfigdir = $(libdir)/pkgconfig -pkgconfig_DATA = lib${PACKAGE}.pc -EXTRA_DIST = packages/rpm.sh packages/rpm/rpm.spec packages/deb.sh packages/deb \ - src/config.h.include src/windows $(WINDOWS_PROJECTS) experimental - -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -.SUFFIXES: .cc .o .obj -am--refresh: - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -src/config.h: src/stamp-h1 - @if test ! -f $@; then \ - rm -f src/stamp-h1; \ - $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; \ - else :; fi - -src/stamp-h1: $(top_srcdir)/src/config.h.in $(top_builddir)/config.status - @rm -f src/stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status src/config.h -$(top_srcdir)/src/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f src/stamp-h1 - touch $@ - -distclean-hdr: - -rm -f src/config.h src/stamp-h1 -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(INSTALL) $(INSTALL_STRIP_FLAG) $$list '$(DESTDIR)$(libdir)'"; \ - $(INSTALL) $(INSTALL_STRIP_FLAG) $$list "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done - -clean-noinstPROGRAMS: - -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) -hashtable_test$(EXEEXT): $(hashtable_test_OBJECTS) $(hashtable_test_DEPENDENCIES) - @rm -f hashtable_test$(EXEEXT) - $(CXXLINK) $(hashtable_test_OBJECTS) $(hashtable_test_LDADD) $(LIBS) -libc_allocator_with_realloc_test$(EXEEXT): $(libc_allocator_with_realloc_test_OBJECTS) $(libc_allocator_with_realloc_test_DEPENDENCIES) - @rm -f libc_allocator_with_realloc_test$(EXEEXT) - $(CXXLINK) $(libc_allocator_with_realloc_test_OBJECTS) $(libc_allocator_with_realloc_test_LDADD) $(LIBS) -simple_compat_test$(EXEEXT): $(simple_compat_test_OBJECTS) $(simple_compat_test_DEPENDENCIES) - @rm -f simple_compat_test$(EXEEXT) - $(CXXLINK) $(simple_compat_test_OBJECTS) $(simple_compat_test_LDADD) $(LIBS) -simple_test$(EXEEXT): $(simple_test_OBJECTS) $(simple_test_DEPENDENCIES) - @rm -f simple_test$(EXEEXT) - $(CXXLINK) $(simple_test_OBJECTS) $(simple_test_LDADD) $(LIBS) -sparsetable_unittest$(EXEEXT): $(sparsetable_unittest_OBJECTS) $(sparsetable_unittest_DEPENDENCIES) - @rm -f sparsetable_unittest$(EXEEXT) - $(CXXLINK) $(sparsetable_unittest_OBJECTS) $(sparsetable_unittest_LDADD) $(LIBS) -template_util_unittest$(EXEEXT): $(template_util_unittest_OBJECTS) $(template_util_unittest_DEPENDENCIES) - @rm -f template_util_unittest$(EXEEXT) - $(CXXLINK) $(template_util_unittest_OBJECTS) $(template_util_unittest_LDADD) $(LIBS) -time_hash_map$(EXEEXT): $(time_hash_map_OBJECTS) $(time_hash_map_DEPENDENCIES) - @rm -f time_hash_map$(EXEEXT) - $(time_hash_map_LINK) $(time_hash_map_OBJECTS) $(time_hash_map_LDADD) $(LIBS) -type_traits_unittest$(EXEEXT): $(type_traits_unittest_OBJECTS) $(type_traits_unittest_DEPENDENCIES) - @rm -f type_traits_unittest$(EXEEXT) - $(CXXLINK) $(type_traits_unittest_OBJECTS) $(type_traits_unittest_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hashtable_test.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libc_allocator_with_realloc_test.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple_compat_test.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple_test.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparsetable_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/template_util_unittest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time_hash_map-time_hash_map.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type_traits_unittest.Po@am__quote@ - -.cc.o: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< - -.cc.obj: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -hashtable_test.o: src/hashtable_test.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT hashtable_test.o -MD -MP -MF $(DEPDIR)/hashtable_test.Tpo -c -o hashtable_test.o `test -f 'src/hashtable_test.cc' || echo '$(srcdir)/'`src/hashtable_test.cc -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/hashtable_test.Tpo $(DEPDIR)/hashtable_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/hashtable_test.cc' object='hashtable_test.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o hashtable_test.o `test -f 'src/hashtable_test.cc' || echo '$(srcdir)/'`src/hashtable_test.cc - -hashtable_test.obj: src/hashtable_test.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT hashtable_test.obj -MD -MP -MF $(DEPDIR)/hashtable_test.Tpo -c -o hashtable_test.obj `if test -f 'src/hashtable_test.cc'; then $(CYGPATH_W) 'src/hashtable_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/hashtable_test.cc'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/hashtable_test.Tpo $(DEPDIR)/hashtable_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/hashtable_test.cc' object='hashtable_test.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o hashtable_test.obj `if test -f 'src/hashtable_test.cc'; then $(CYGPATH_W) 'src/hashtable_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/hashtable_test.cc'; fi` - -libc_allocator_with_realloc_test.o: src/libc_allocator_with_realloc_test.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libc_allocator_with_realloc_test.o -MD -MP -MF $(DEPDIR)/libc_allocator_with_realloc_test.Tpo -c -o libc_allocator_with_realloc_test.o `test -f 'src/libc_allocator_with_realloc_test.cc' || echo '$(srcdir)/'`src/libc_allocator_with_realloc_test.cc -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libc_allocator_with_realloc_test.Tpo $(DEPDIR)/libc_allocator_with_realloc_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/libc_allocator_with_realloc_test.cc' object='libc_allocator_with_realloc_test.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libc_allocator_with_realloc_test.o `test -f 'src/libc_allocator_with_realloc_test.cc' || echo '$(srcdir)/'`src/libc_allocator_with_realloc_test.cc - -libc_allocator_with_realloc_test.obj: src/libc_allocator_with_realloc_test.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libc_allocator_with_realloc_test.obj -MD -MP -MF $(DEPDIR)/libc_allocator_with_realloc_test.Tpo -c -o libc_allocator_with_realloc_test.obj `if test -f 'src/libc_allocator_with_realloc_test.cc'; then $(CYGPATH_W) 'src/libc_allocator_with_realloc_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/libc_allocator_with_realloc_test.cc'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libc_allocator_with_realloc_test.Tpo $(DEPDIR)/libc_allocator_with_realloc_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/libc_allocator_with_realloc_test.cc' object='libc_allocator_with_realloc_test.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libc_allocator_with_realloc_test.obj `if test -f 'src/libc_allocator_with_realloc_test.cc'; then $(CYGPATH_W) 'src/libc_allocator_with_realloc_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/libc_allocator_with_realloc_test.cc'; fi` - -simple_compat_test.o: src/simple_compat_test.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT simple_compat_test.o -MD -MP -MF $(DEPDIR)/simple_compat_test.Tpo -c -o simple_compat_test.o `test -f 'src/simple_compat_test.cc' || echo '$(srcdir)/'`src/simple_compat_test.cc -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/simple_compat_test.Tpo $(DEPDIR)/simple_compat_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/simple_compat_test.cc' object='simple_compat_test.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o simple_compat_test.o `test -f 'src/simple_compat_test.cc' || echo '$(srcdir)/'`src/simple_compat_test.cc - -simple_compat_test.obj: src/simple_compat_test.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT simple_compat_test.obj -MD -MP -MF $(DEPDIR)/simple_compat_test.Tpo -c -o simple_compat_test.obj `if test -f 'src/simple_compat_test.cc'; then $(CYGPATH_W) 'src/simple_compat_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/simple_compat_test.cc'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/simple_compat_test.Tpo $(DEPDIR)/simple_compat_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/simple_compat_test.cc' object='simple_compat_test.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o simple_compat_test.obj `if test -f 'src/simple_compat_test.cc'; then $(CYGPATH_W) 'src/simple_compat_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/simple_compat_test.cc'; fi` - -simple_test.o: src/simple_test.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT simple_test.o -MD -MP -MF $(DEPDIR)/simple_test.Tpo -c -o simple_test.o `test -f 'src/simple_test.cc' || echo '$(srcdir)/'`src/simple_test.cc -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/simple_test.Tpo $(DEPDIR)/simple_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/simple_test.cc' object='simple_test.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o simple_test.o `test -f 'src/simple_test.cc' || echo '$(srcdir)/'`src/simple_test.cc - -simple_test.obj: src/simple_test.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT simple_test.obj -MD -MP -MF $(DEPDIR)/simple_test.Tpo -c -o simple_test.obj `if test -f 'src/simple_test.cc'; then $(CYGPATH_W) 'src/simple_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/simple_test.cc'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/simple_test.Tpo $(DEPDIR)/simple_test.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/simple_test.cc' object='simple_test.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o simple_test.obj `if test -f 'src/simple_test.cc'; then $(CYGPATH_W) 'src/simple_test.cc'; else $(CYGPATH_W) '$(srcdir)/src/simple_test.cc'; fi` - -sparsetable_unittest.o: src/sparsetable_unittest.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT sparsetable_unittest.o -MD -MP -MF $(DEPDIR)/sparsetable_unittest.Tpo -c -o sparsetable_unittest.o `test -f 'src/sparsetable_unittest.cc' || echo '$(srcdir)/'`src/sparsetable_unittest.cc -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/sparsetable_unittest.Tpo $(DEPDIR)/sparsetable_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/sparsetable_unittest.cc' object='sparsetable_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o sparsetable_unittest.o `test -f 'src/sparsetable_unittest.cc' || echo '$(srcdir)/'`src/sparsetable_unittest.cc - -sparsetable_unittest.obj: src/sparsetable_unittest.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT sparsetable_unittest.obj -MD -MP -MF $(DEPDIR)/sparsetable_unittest.Tpo -c -o sparsetable_unittest.obj `if test -f 'src/sparsetable_unittest.cc'; then $(CYGPATH_W) 'src/sparsetable_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/sparsetable_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/sparsetable_unittest.Tpo $(DEPDIR)/sparsetable_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/sparsetable_unittest.cc' object='sparsetable_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o sparsetable_unittest.obj `if test -f 'src/sparsetable_unittest.cc'; then $(CYGPATH_W) 'src/sparsetable_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/sparsetable_unittest.cc'; fi` - -template_util_unittest.o: src/template_util_unittest.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT template_util_unittest.o -MD -MP -MF $(DEPDIR)/template_util_unittest.Tpo -c -o template_util_unittest.o `test -f 'src/template_util_unittest.cc' || echo '$(srcdir)/'`src/template_util_unittest.cc -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/template_util_unittest.Tpo $(DEPDIR)/template_util_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/template_util_unittest.cc' object='template_util_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o template_util_unittest.o `test -f 'src/template_util_unittest.cc' || echo '$(srcdir)/'`src/template_util_unittest.cc - -template_util_unittest.obj: src/template_util_unittest.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT template_util_unittest.obj -MD -MP -MF $(DEPDIR)/template_util_unittest.Tpo -c -o template_util_unittest.obj `if test -f 'src/template_util_unittest.cc'; then $(CYGPATH_W) 'src/template_util_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/template_util_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/template_util_unittest.Tpo $(DEPDIR)/template_util_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/template_util_unittest.cc' object='template_util_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o template_util_unittest.obj `if test -f 'src/template_util_unittest.cc'; then $(CYGPATH_W) 'src/template_util_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/template_util_unittest.cc'; fi` - -time_hash_map-time_hash_map.o: src/time_hash_map.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(time_hash_map_CXXFLAGS) $(CXXFLAGS) -MT time_hash_map-time_hash_map.o -MD -MP -MF $(DEPDIR)/time_hash_map-time_hash_map.Tpo -c -o time_hash_map-time_hash_map.o `test -f 'src/time_hash_map.cc' || echo '$(srcdir)/'`src/time_hash_map.cc -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/time_hash_map-time_hash_map.Tpo $(DEPDIR)/time_hash_map-time_hash_map.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/time_hash_map.cc' object='time_hash_map-time_hash_map.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(time_hash_map_CXXFLAGS) $(CXXFLAGS) -c -o time_hash_map-time_hash_map.o `test -f 'src/time_hash_map.cc' || echo '$(srcdir)/'`src/time_hash_map.cc - -time_hash_map-time_hash_map.obj: src/time_hash_map.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(time_hash_map_CXXFLAGS) $(CXXFLAGS) -MT time_hash_map-time_hash_map.obj -MD -MP -MF $(DEPDIR)/time_hash_map-time_hash_map.Tpo -c -o time_hash_map-time_hash_map.obj `if test -f 'src/time_hash_map.cc'; then $(CYGPATH_W) 'src/time_hash_map.cc'; else $(CYGPATH_W) '$(srcdir)/src/time_hash_map.cc'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/time_hash_map-time_hash_map.Tpo $(DEPDIR)/time_hash_map-time_hash_map.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/time_hash_map.cc' object='time_hash_map-time_hash_map.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(time_hash_map_CXXFLAGS) $(CXXFLAGS) -c -o time_hash_map-time_hash_map.obj `if test -f 'src/time_hash_map.cc'; then $(CYGPATH_W) 'src/time_hash_map.cc'; else $(CYGPATH_W) '$(srcdir)/src/time_hash_map.cc'; fi` - -type_traits_unittest.o: src/type_traits_unittest.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT type_traits_unittest.o -MD -MP -MF $(DEPDIR)/type_traits_unittest.Tpo -c -o type_traits_unittest.o `test -f 'src/type_traits_unittest.cc' || echo '$(srcdir)/'`src/type_traits_unittest.cc -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/type_traits_unittest.Tpo $(DEPDIR)/type_traits_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/type_traits_unittest.cc' object='type_traits_unittest.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o type_traits_unittest.o `test -f 'src/type_traits_unittest.cc' || echo '$(srcdir)/'`src/type_traits_unittest.cc - -type_traits_unittest.obj: src/type_traits_unittest.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT type_traits_unittest.obj -MD -MP -MF $(DEPDIR)/type_traits_unittest.Tpo -c -o type_traits_unittest.obj `if test -f 'src/type_traits_unittest.cc'; then $(CYGPATH_W) 'src/type_traits_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/type_traits_unittest.cc'; fi` -@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/type_traits_unittest.Tpo $(DEPDIR)/type_traits_unittest.Po -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/type_traits_unittest.cc' object='type_traits_unittest.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o type_traits_unittest.obj `if test -f 'src/type_traits_unittest.cc'; then $(CYGPATH_W) 'src/type_traits_unittest.cc'; else $(CYGPATH_W) '$(srcdir)/src/type_traits_unittest.cc'; fi` -install-dist_docDATA: $(dist_doc_DATA) - @$(NORMAL_INSTALL) - test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)" - @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ - done - -uninstall-dist_docDATA: - @$(NORMAL_UNINSTALL) - @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(docdir)" && rm -f $$files -install-pkgconfigDATA: $(pkgconfig_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ - done - -uninstall-pkgconfigDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files -install-googleincludeHEADERS: $(googleinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(googleincludedir)" || $(MKDIR_P) "$(DESTDIR)$(googleincludedir)" - @list='$(googleinclude_HEADERS)'; test -n "$(googleincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(googleincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(googleincludedir)" || exit $$?; \ - done - -uninstall-googleincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(googleinclude_HEADERS)'; test -n "$(googleincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(googleincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(googleincludedir)" && rm -f $$files -install-googleinternalincludeHEADERS: $(googleinternalinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(googleinternalincludedir)" || $(MKDIR_P) "$(DESTDIR)$(googleinternalincludedir)" - @list='$(googleinternalinclude_HEADERS)'; test -n "$(googleinternalincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(googleinternalincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(googleinternalincludedir)" || exit $$?; \ - done - -uninstall-googleinternalincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(googleinternalinclude_HEADERS)'; test -n "$(googleinternalincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(googleinternalincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(googleinternalincludedir)" && rm -f $$files -install-internalincludeHEADERS: $(internalinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(internalincludedir)" || $(MKDIR_P) "$(DESTDIR)$(internalincludedir)" - @list='$(internalinclude_HEADERS)'; test -n "$(internalincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(internalincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(internalincludedir)" || exit $$?; \ - done - -uninstall-internalincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(internalinclude_HEADERS)'; test -n "$(internalincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(internalincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(internalincludedir)" && rm -f $$files -install-nodist_internalincludeHEADERS: $(nodist_internalinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(internalincludedir)" || $(MKDIR_P) "$(DESTDIR)$(internalincludedir)" - @list='$(nodist_internalinclude_HEADERS)'; test -n "$(internalincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(internalincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(internalincludedir)" || exit $$?; \ - done - -uninstall-nodist_internalincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(nodist_internalinclude_HEADERS)'; test -n "$(internalincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(internalincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(internalincludedir)" && rm -f $$files -install-sparsehashincludeHEADERS: $(sparsehashinclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(sparsehashincludedir)" || $(MKDIR_P) "$(DESTDIR)$(sparsehashincludedir)" - @list='$(sparsehashinclude_HEADERS)'; test -n "$(sparsehashincludedir)" || list=; \ - for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - echo "$$d$$p"; \ - done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(sparsehashincludedir)'"; \ - $(INSTALL_HEADER) $$files "$(DESTDIR)$(sparsehashincludedir)" || exit $$?; \ - done - -uninstall-sparsehashincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(sparsehashinclude_HEADERS)'; test -n "$(sparsehashincludedir)" || list=; \ - files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$files" || exit 0; \ - echo " ( cd '$(DESTDIR)$(sparsehashincludedir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(sparsehashincludedir)" && rm -f $$files - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list=' $(TESTS) '; \ - $(am__tty_colors); \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - col=$$red; res=XPASS; \ - ;; \ - *) \ - col=$$grn; res=PASS; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *[\ \ ]$$tst[\ \ ]*) \ - xfail=`expr $$xfail + 1`; \ - col=$$lgn; res=XFAIL; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - col=$$red; res=FAIL; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - col=$$blu; res=SKIP; \ - fi; \ - echo "$${col}$$res$${std}: $$tst"; \ - done; \ - if test "$$all" -eq 1; then \ - tests="test"; \ - All=""; \ - else \ - tests="tests"; \ - All="All "; \ - fi; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="$$All$$all $$tests passed"; \ - else \ - if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ - banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all $$tests failed"; \ - else \ - if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ - banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - if test "$$skip" -eq 1; then \ - skipped="($$skip test was not run)"; \ - else \ - skipped="($$skip tests were not run)"; \ - fi; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - if test "$$failed" -eq 0; then \ - echo "$$grn$$dashes"; \ - else \ - echo "$$red$$dashes"; \ - fi; \ - echo "$$banner"; \ - test -z "$$skipped" || echo "$$skipped"; \ - test -z "$$report" || echo "$$report"; \ - echo "$$dashes$$std"; \ - test "$$failed" -eq 0; \ - else :; fi - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-hook - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-lzma: distdir - tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma - $(am__remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lzma*) \ - lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @$(am__cd) '$(distuninstallcheck_dir)' \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) $(check_SCRIPTS) - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(docdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(googleincludedir)" "$(DESTDIR)$(googleinternalincludedir)" "$(DESTDIR)$(internalincludedir)" "$(DESTDIR)$(internalincludedir)" "$(DESTDIR)$(sparsehashincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-noinstPROGRAMS \ - mostlyclean-am - -distclean: distclean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-dist_docDATA install-googleincludeHEADERS \ - install-googleinternalincludeHEADERS \ - install-internalincludeHEADERS \ - install-nodist_internalincludeHEADERS install-pkgconfigDATA \ - install-sparsehashincludeHEADERS - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-dist_docDATA uninstall-googleincludeHEADERS \ - uninstall-googleinternalincludeHEADERS \ - uninstall-internalincludeHEADERS uninstall-libLTLIBRARIES \ - uninstall-nodist_internalincludeHEADERS \ - uninstall-pkgconfigDATA uninstall-sparsehashincludeHEADERS - -.MAKE: all check check-am install install-am install-strip - -.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \ - clean clean-generic clean-libLTLIBRARIES clean-noinstPROGRAMS \ - ctags dist dist-all dist-bzip2 dist-gzip dist-hook dist-lzma \ - dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-dist_docDATA install-dvi \ - install-dvi-am install-exec install-exec-am \ - install-googleincludeHEADERS \ - install-googleinternalincludeHEADERS install-html \ - install-html-am install-info install-info-am \ - install-internalincludeHEADERS install-libLTLIBRARIES \ - install-man install-nodist_internalincludeHEADERS install-pdf \ - install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ - install-sparsehashincludeHEADERS install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-dist_docDATA \ - uninstall-googleincludeHEADERS \ - uninstall-googleinternalincludeHEADERS \ - uninstall-internalincludeHEADERS uninstall-libLTLIBRARIES \ - uninstall-nodist_internalincludeHEADERS \ - uninstall-pkgconfigDATA uninstall-sparsehashincludeHEADERS - - -# All our .h files need to read the config information in config.h. The -# autoheader config.h has too much info, including PACKAGENAME, that -# might conflict with other config.h's an application might #include. -# Thus, we create a "minimal" config.h, called sparseconfig.h, that -# includes only the #defines we really need, and that are unlikely to -# change from system to system. NOTE: The awk command is equivalent to -# fgrep -B2 -f$(top_builddir)/src/config.h.include $(top_builddir)/src/config.h -# | fgrep -vx -e -- > _sparsehash_config -# For correctness, it depends on the fact config.h.include does not have -# any lines starting with #. -src/sparsehash/internal/sparseconfig.h: $(top_builddir)/src/config.h \ - $(top_srcdir)/src/config.h.include - [ -d $(@D) ] || mkdir -p $(@D) - echo "/*" > $(@D)/_sparsehash_config - echo " * NOTE: This file is for internal use only." >> $(@D)/_sparsehash_config - echo " * Do not use these #defines in your own program!" >> $(@D)/_sparsehash_config - echo " */" >> $(@D)/_sparsehash_config - $(AWK) '{prevline=currline; currline=$$0;} \ - /^#/ {in_second_file = 1;} \ - !in_second_file {if (currline !~ /^ *$$/) {inc[currline]=0}}; \ - in_second_file { for (i in inc) { \ - if (index(currline, i) != 0) { \ - print "\n"prevline"\n"currline; \ - delete inc[i]; \ - } \ - } }' \ - $(top_srcdir)/src/config.h.include $(top_builddir)/src/config.h \ - >> $(@D)/_sparsehash_config - mv -f $(@D)/_sparsehash_config $@ - -rpm: dist-gzip packages/rpm.sh packages/rpm/rpm.spec - @cd packages && ./rpm.sh ${PACKAGE} ${VERSION} - -deb: dist-gzip packages/deb.sh packages/deb/* - @cd packages && ./deb.sh ${PACKAGE} ${VERSION} - -# I get the description and URL lines from the rpm spec. I use sed to -# try to rewrite exec_prefix, libdir, and includedir in terms of -# prefix, if possible. -lib${PACKAGE}.pc: Makefile packages/rpm/rpm.spec - echo 'prefix=$(prefix)' > "$@".tmp - echo 'exec_prefix='`echo '$(exec_prefix)' | sed 's@^$(prefix)@$${prefix}@'` >> "$@".tmp - echo 'libdir='`echo '$(libdir)' | sed 's@^$(exec_prefix)@$${exec_prefix}@'` >> "$@".tmp - echo 'includedir='`echo '$(includedir)' | sed 's@^$(prefix)@$${prefix}@'` >> "$@".tmp - echo '' >> "$@".tmp - echo 'Name: $(PACKAGE)' >> "$@".tmp - echo 'Version: $(VERSION)' >> "$@".tmp - -grep '^Summary:' $(top_srcdir)/packages/rpm/rpm.spec | sed s/^Summary:/Description:/ | head -n1 >> "$@".tmp - -grep '^URL: ' $(top_srcdir)/packages/rpm/rpm.spec >> "$@".tmp - echo 'Requires:' >> "$@".tmp - echo 'Libs:' >> "$@".tmp - echo 'Cflags: -I$${includedir}' >> "$@".tmp - mv -f "$@".tmp "$@" - -# Windows wants write permission to .vcproj files and maybe even sln files. -dist-hook: - test -e "$(distdir)/vsprojects" \ - && chmod -R u+w $(distdir)/*.sln $(distdir)/vsprojects/ - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/clipper/sparsehash-2.0.3/NEWS b/clipper/sparsehash-2.0.3/NEWS deleted file mode 100644 index 4af929c..0000000 --- a/clipper/sparsehash-2.0.3/NEWS +++ /dev/null @@ -1,193 +0,0 @@ -== 12 October 2015 == - -Various small fixes to ensure compilation on modern compilers and operating -systems. Tagged as 2.0.3 - -== 23 February 2012 == - -A backwards incompatibility arose from flattening the include headers -structure for the folder. - -This is now fixed in 2.0.2. You only need to upgrade if you had previously -included files from the folder. - -== 1 February 2012 == - -A minor bug related to the namespace switch from google to sparsehash -stopped the build from working when perftools is also installed. - -This is now fixed in 2.0.1. You only need to upgrade if you have perftools -installed. - -== 31 January 2012 == - -I've just released sparsehash 2.0. - -The `google-sparsehash` project has been renamed to `sparsehash`. I -(csilvers) am stepping down as maintainer, to be replaced by the team -of Donovan Hide and Geoff Pike. Welcome to the team, Donovan and -Geoff! Donovan has been an active contributor to sparsehash bug -reports and discussions in the past, and Geoff has been closely -involved with sparsehash inside Google (in addition to writing the -[http://code.google.com/p/cityhash CityHash hash function]). The two -of them together should be a formidable force. For good. - -I bumped the major version number up to 2 to reflect the new community -ownership of the project. All the -[http://sparsehash.googlecode.com/svn/tags/sparsehash-2.0/ChangeLog changes] -are related to the renaming. - -The only functional change from sparsehash 1.12 is that I've renamed -the `google/` include-directory to be `sparsehash/` instead. New code -should `#include `/etc. I've kept the old -names around as forwarding headers to the new, so `#include -` will continue to work. - -Note that the classes and functions remain in the `google` C++ -namespace (I didn't change that to `sparsehash` as well); I think -that's a trickier transition, and can happen in a future release. - - -=== 18 January 2011 === - -The `google-sparsehash` Google Code page has been renamed to -`sparsehash`, in preparation for the project being renamed to -`sparsehash`. In the coming weeks, I'll be stepping down as -maintainer for the sparsehash project, and as part of that Google is -relinquishing ownership of the project; it will now be entirely -community run. The name change reflects that shift. - - -=== 20 December 2011 === - -I've just released sparsehash 1.12. This release features improved -I/O (serialization) support. Support is finally added to serialize -and unserialize `dense_hash_map`/`set`, paralleling the existing code -for `sparse_hash_map`/`set`. In addition, the serialization API has -gotten simpler, with a single `serialize()` method to write to disk, -and an `unserialize()` method to read from disk. Finally, support has -gotten more generic, with built-in support for both C `FILE*`s and C++ -streams, and an extension mechanism to support arbitrary sources and -sinks. - -There are also more minor changes, including minor bugfixes, an -improved deleted-key test, and a minor addition to the `sparsetable` -API. See the [http://google-sparsehash.googlecode.com/svn/tags/sparsehash-1.12/ChangeLog ChangeLog] -for full details. - -=== 23 June 2011 === - -I've just released sparsehash 1.11. The major user-visible change is -that the default behavior is improved -- using the hash_map/set is -faster -- for hashtables where the key is a pointer. We now notice -that case and ignore the low 2-3 bits (which are almost always 0 for -pointers) when hashing. - -Another user-visible change is we've removed the tests for whether the -STL (vector, pair, etc) is defined in the 'std' namespace. gcc 2.95 -is the most recent compiler I know of to put STL types and functions -in the global namespace. If you need to use such an old compiler, do -not update to the latest sparsehash release. - -We've also changed the internal tools we use to integrate -Googler-supplied patches to sparsehash into the opensource release. -These new tools should result in more frequent updates with better -change descriptions. They will also result in future ChangeLog -entries being much more verbose (for better or for worse). - -A full list of changes is described in -[http://google-sparsehash.googlecode.com/svn/tags/sparsehash-1.11/ChangeLog ChangeLog]. - -=== 21 January 2011 === - -I've just released sparsehash 1.10. This fixes a performance -regression in sparsehash 1.8, where sparse_hash_map would copy -hashtable keys by value even when the key was explicitly a reference. -It also fixes compiler warnings from MSVC 10, which uses some c++0x -features that did not interact well with sparsehash. - -There is no reason to upgrade unless you use references for your -hashtable keys, or compile with MSVC 10. A full list of changes is -described in -[http://google-sparsehash.googlecode.com/svn/tags/sparsehash-1.10/ChangeLog ChangeLog]. - - -=== 24 September 2010 === - -I've just released sparsehash 1.9. This fixes a size regression in -sparsehash 1.8, where the new allocator would take up space in -`sparse_hash_map`, doubling the sparse_hash_map overhead (from 1-2 -bits per bucket to 3 or so). All users are encouraged to upgrade. - -This change also marks enums as being Plain Old Data, which can speed -up hashtables with enum keys and/or values. A full list of changes is -described in -[http://google-sparsehash.googlecode.com/svn/tags/sparsehash-1.9/ChangeLog ChangeLog]. - -=== 29 July 2010 === - -I've just released sparsehash 1.8. This includes improved support for -`Allocator`, including supporting the allocator constructor arg and -`get_allocator()` access method. - -To work around a bug in gcc 4.0.x, I've renamed the static variables -`HT_OCCUPANCY_FLT` and `HT_SHRINK_FLT` to `HT_OCCUPANCY_PCT` and -`HT_SHRINK_PCT`, and changed their type from float to int. This -should not be a user-visible change, since these variables are only -used in the internal hashtable classes (sparsehash clients should use -`max_load_factor()` and `min_load_factor()` instead of modifying these -static variables), but if you do access these constants, you will need -to change your code. - -Internally, the biggest change is a revamp of the test suite. It now -has more complete coverage, and a more capable timing tester. There -are other, more minor changes as well. A full list of changes is -described in the -[http://google-sparsehash.googlecode.com/svn/tags/sparsehash-1.8/ChangeLog ChangeLog]. - -=== 31 March 2010 === - -I've just released sparsehash 1.7. The major news here is the -addition of `Allocator` support. Previously, these hashtable classes -would just ignore the `Allocator` template parameter. They now -respect it, and even inherit `size_type`, `pointer`, etc. from the -allocator class. By default, they use a special allocator we provide -that uses libc `malloc` and `free` to allocate. The hash classes -notice when this special allocator is being used, and use `realloc` -when it can. This means that the default allocator is significantly -faster than custom allocators are likely to be (since realloc-like -functionality is not supported by STL allocators). - -There are a few more minor changes as well. A full list of changes is -described in the -[http://google-sparsehash.googlecode.com/svn/tags/sparsehash-1.7/ChangeLog ChangeLog]. - -=== 11 January 2010 === - -I've just released sparsehash 1.6. The API has widened a bit with the -addition of `deleted_key()` and `empty_key()`, which let you query -what values these keys have. A few rather obscure bugs have been -fixed (such as an error when copying one hashtable into another when -the empty_keys differ). A full list of changes is described in the -[http://google-sparsehash.googlecode.com/svn/tags/sparsehash-1.6/ChangeLog ChangeLog]. - -=== 9 May 2009 === - -I've just released sparsehash 1.5.1. Hot on the heels of sparsehash -1.5, this release fixes a longstanding bug in the sparsehash code, -where `equal_range` would always return an empty range. It now works -as documented. All sparsehash users are encouraged to upgrade. - -=== 7 May 2009 === - -I've just released sparsehash 1.5. This release introduces tr1 -compatibility: I've added `rehash`, `begin(i)`, and other methods that -are expected to be part of the `unordered_map` API once `tr1` in -introduced. This allows `sparse_hash_map`, `dense_hash_map`, -`sparse_hash_set`, and `dense_hash_set` to be (almost) drop-in -replacements for `unordered_map` and `unordered_set`. - -There is no need to upgrade unless you need this functionality, or -need one of the other, more minor, changes described in the -[http://google-sparsehash.googlecode.com/svn/tags/sparsehash-1.5/ChangeLog ChangeLog]. - diff --git a/clipper/sparsehash-2.0.3/README b/clipper/sparsehash-2.0.3/README deleted file mode 100644 index 8c806b4..0000000 --- a/clipper/sparsehash-2.0.3/README +++ /dev/null @@ -1,143 +0,0 @@ -This directory contains several hash-map implementations, similar in -API to SGI's hash_map class, but with different performance -characteristics. sparse_hash_map uses very little space overhead, 1-2 -bits per entry. dense_hash_map is very fast, particulary on lookup. -(sparse_hash_set and dense_hash_set are the set versions of these -routines.) On the other hand, these classes have requirements that -may not make them appropriate for all applications. - -All these implementation use a hashtable with internal quadratic -probing. This method is space-efficient -- there is no pointer -overhead -- and time-efficient for good hash functions. - -COMPILING ---------- -To compile test applications with these classes, run ./configure -followed by make. To install these header files on your system, run -'make install'. (On Windows, the instructions are different; see -README_windows.txt.) See INSTALL for more details. - -This code should work on any modern C++ system. It has been tested on -Linux (Ubuntu, Fedora, RedHat, Debian), Solaris 10 x86, FreeBSD 6.0, -OS X 10.3 and 10.4, and Windows under both VC++7 and VC++8. - -USING ------ -See the html files in the doc directory for small example programs -that use these classes. It's enough to just include the header file: - - #include // or sparse_hash_set, dense_hash_map, ... - google::sparse_hash_set number_mapper; - -and use the class the way you would other hash-map implementations. -(Though see "API" below for caveats.) - -By default (you can change it via a flag to ./configure), these hash -implementations are defined in the google namespace. - -API ---- -The API for sparse_hash_map, dense_hash_map, sparse_hash_set, and -dense_hash_set, are a superset of the API of SGI's hash_map class. -See doc/sparse_hash_map.html, et al., for more information about the -API. - -The usage of these classes differ from SGI's hash_map, and other -hashtable implementations, in the following major ways: - -1) dense_hash_map requires you to set aside one key value as the - 'empty bucket' value, set via the set_empty_key() method. This - *MUST* be called before you can use the dense_hash_map. It is - illegal to insert any elements into a dense_hash_map whose key is - equal to the empty-key. - -2) For both dense_hash_map and sparse_hash_map, if you wish to delete - elements from the hashtable, you must set aside a key value as the - 'deleted bucket' value, set via the set_deleted_key() method. If - your hash-map is insert-only, there is no need to call this - method. If you call set_deleted_key(), it is illegal to insert any - elements into a dense_hash_map or sparse_hash_map whose key is - equal to the deleted-key. - -3) These hash-map implementation support I/O. See below. - -There are also some smaller differences: - -1) The constructor takes an optional argument that specifies the - number of elements you expect to insert into the hashtable. This - differs from SGI's hash_map implementation, which takes an optional - number of buckets. - -2) erase() does not immediately reclaim memory. As a consequence, - erase() does not invalidate any iterators, making loops like this - correct: - for (it = ht.begin(); it != ht.end(); ++it) - if (...) ht.erase(it); - As another consequence, a series of erase() calls can leave your - hashtable using more memory than it needs to. The hashtable will - automatically compact at the next call to insert(), but to - manually compact a hashtable, you can call - ht.resize(0) - -I/O ---- -In addition to the normal hash-map operations, sparse_hash_map can -read and write hashtables to disk. (dense_hash_map also has the API, -but it has not yet been implemented, and writes will always fail.) - -In the simplest case, writing a hashtable is as easy as calling two -methods on the hashtable: - ht.write_metadata(fp); - ht.write_nopointer_data(fp); - -Reading in this data is equally simple: - google::sparse_hash_map<...> ht; - ht.read_metadata(fp); - ht.read_nopointer_data(fp); - -The above is sufficient if the key and value do not contain any -pointers: they are basic C types or agglomorations of basic C types. -If the key and/or value do contain pointers, you can still store the -hashtable by replacing write_nopointer_data() with a custom writing -routine. See sparse_hash_map.html et al. for more information. - -SPARSETABLE ------------ -In addition to the hash-map and hash-set classes, this package also -provides sparsetable.h, an array implementation that uses space -proportional to the number of elements in the array, rather than the -maximum element index. It uses very little space overhead: 1 bit per -entry. See doc/sparsetable.html for the API. - -RESOURCE USAGE --------------- -* sparse_hash_map has memory overhead of about 2 bits per hash-map - entry. -* dense_hash_map has a factor of 2-3 memory overhead: if your - hashtable data takes X bytes, dense_hash_map will use 3X-4X memory - total. - -Hashtables tend to double in size when resizing, creating an -additional 50% space overhead. dense_hash_map does in fact have a -significant "high water mark" memory use requirement. -sparse_hash_map, however, is written to need very little space -overhead when resizing: only a few bits per hashtable entry. - -PERFORMANCE ------------ -You can compile and run the included file time_hash_map.cc to examine -the performance of sparse_hash_map, dense_hash_map, and your native -hash_map implementation on your system. One test against the -SGI hash_map implementation gave the following timing information for -a simple find() call: - SGI hash_map: 22 ns - dense_hash_map: 13 ns - sparse_hash_map: 117 ns - SGI map: 113 ns - -See doc/performance.html for more detailed charts on resource usage -and performance data. - ---- -16 March 2005 -(Last updated: 12 September 2010) diff --git a/clipper/sparsehash-2.0.3/README_windows.txt b/clipper/sparsehash-2.0.3/README_windows.txt deleted file mode 100644 index 54df6f8..0000000 --- a/clipper/sparsehash-2.0.3/README_windows.txt +++ /dev/null @@ -1,25 +0,0 @@ -This project has been ported to Windows. A working solution file -exists in this directory: - sparsehash.sln - -You can load this solution file into either VC++ 7.1 (Visual Studio -2003) or VC++ 8.0 (Visual Studio 2005) -- in the latter case, it will -automatically convert the files to the latest format for you. - -When you build the solution, it will create a number of -unittests,which you can run by hand (or, more easily, under the Visual -Studio debugger) to make sure everything is working properly on your -system. The binaries will end up in a directory called "debug" or -"release" in the top-level directory (next to the .sln file). - -Note that these systems are set to build in Debug mode by default. -You may want to change them to Release mode. - -I have little experience with Windows programming, so there may be -better ways to set this up than I've done! If you run across any -problems, please post to the google-sparsehash Google Group, or report -them on the sparsehash Google Code site: - http://groups.google.com/group/google-sparsehash - http://code.google.com/p/sparsehash/issues/list - --- craig diff --git a/clipper/sparsehash-2.0.3/TODO b/clipper/sparsehash-2.0.3/TODO deleted file mode 100644 index e9b0263..0000000 --- a/clipper/sparsehash-2.0.3/TODO +++ /dev/null @@ -1,28 +0,0 @@ -1) TODO: I/O implementation in densehashtable.h - -2) TODO: document SPARSEHASH_STAT_UPDATE macro, and also macros that - tweak performance. Perhaps add support to these to the API? - -3) TODO: support exceptions? - -4) BUG: sparsetable's operator[] doesn't work well with printf: you - need to explicitly cast the result to value_type to print it. (It - works fine with streams.) - -5) TODO: consider rewriting dense_hash_map to use a 'groups' scheme, - like sparsetable, but without the sparse-allocation within a - group. This makes resizing have better memory-use properties. The - downside is that probes across groups might take longer since - groups are not contiguous in memory. Making groups the same size - as a cache-line, and ensuring they're loaded on cache-line - boundaries, might help. Needs careful testing to make sure it - doesn't hurt performance. - -6) TODO: Get the C-only version of sparsehash in experimental/ ready - for prime-time. - -7) TODO: use cmake (www.cmake.org) to make it easy to isntall this on - a windows system. - ---- -28 February 2007 diff --git a/clipper/sparsehash-2.0.3/aclocal.m4 b/clipper/sparsehash-2.0.3/aclocal.m4 deleted file mode 100644 index 09d60ad..0000000 --- a/clipper/sparsehash-2.0.3/aclocal.m4 +++ /dev/null @@ -1,968 +0,0 @@ -# generated automatically by aclocal 1.11.1 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, -[m4_warning([this file was generated for autoconf 2.68. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically `autoreconf'.])]) - -# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.11' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], UPC, [depcc="$UPC" am_compiler_list=], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -#serial 5 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 8 - -# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. -AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 16 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The `parallel-tests' driver may need to know about EXEEXT, so add the -dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi -AC_SUBST(install_sh)]) - -# Copyright (C) 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_MKDIR_P -# --------------- -# Check for `mkdir -p'. -AC_DEFUN([AM_PROG_MKDIR_P], -[AC_PREREQ([2.60])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, -dnl while keeping a definition of mkdir_p for backward compatibility. -dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. -dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of -dnl Makefile.ins that do not define MKDIR_P, so we do our own -dnl adjustment using top_builddir (which is defined more often than -dnl MKDIR_P). -AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl -case $mkdir_p in - [[\\/$]]* | ?:[[\\/]]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 4 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 -# Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 5 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[[\\\"\#\$\&\'\`$am_lf]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006, 2008 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004, 2005 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/acx_pthread.m4]) -m4_include([m4/google_namespace.m4]) -m4_include([m4/namespaces.m4]) -m4_include([m4/stl_hash.m4]) -m4_include([m4/stl_hash_fun.m4]) diff --git a/clipper/sparsehash-2.0.3/autogen.sh b/clipper/sparsehash-2.0.3/autogen.sh deleted file mode 100755 index 11b085d..0000000 --- a/clipper/sparsehash-2.0.3/autogen.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh - -# Before using, you should figure out all the .m4 macros that your -# configure.m4 script needs and make sure they exist in the m4/ -# directory. -# -# These are the files that this script might edit: -# aclocal.m4 configure Makefile.in src/config.h.in \ -# compile config.guess config.sub depcomp install-sh missing mkinstalldirs -# -# Here's a command you can run to see what files aclocal will import: -# aclocal -I ../autoconf --output=- | sed -n 's/^m4_include..\([^]]*\).*/\1/p' - -set -ex -rm -rf autom4te.cache - -aclocal --force -I m4 -autoconf -f -W all,no-obsolete -autoheader -f -W all -automake -a -c -f -W all - -rm -rf autom4te.cache -exit 0 diff --git a/clipper/sparsehash-2.0.3/config.guess b/clipper/sparsehash-2.0.3/config.guess deleted file mode 100755 index 40eaed4..0000000 --- a/clipper/sparsehash-2.0.3/config.guess +++ /dev/null @@ -1,1517 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011 Free Software Foundation, Inc. - -timestamp='2011-05-11' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - tile*:Linux:*:*) - echo ${UNAME_MACHINE}-tilera-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/clipper/sparsehash-2.0.3/config.sub b/clipper/sparsehash-2.0.3/config.sub deleted file mode 100755 index 30fdca8..0000000 --- a/clipper/sparsehash-2.0.3/config.sub +++ /dev/null @@ -1,1760 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011 Free Software Foundation, Inc. - -timestamp='2011-03-23' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free -Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 \ - | ns16k | ns32k \ - | open8 \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12 | picochip) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - ms1) - basic_machine=mt-unknown - ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile-* | tilegx-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze) - basic_machine=microblaze-xilinx - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - # This must be matched before tile*. - tilegx*) - basic_machine=tilegx-unknown - os=-linux-gnu - ;; - tile*) - basic_machine=tile-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-haiku) - os=-haiku - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/clipper/sparsehash-2.0.3/configure b/clipper/sparsehash-2.0.3/configure deleted file mode 100755 index 1c4d4cb..0000000 --- a/clipper/sparsehash-2.0.3/configure +++ /dev/null @@ -1,7302 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.68 for sparsehash 2.0.2. -# -# Report bugs to . -# -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software -# Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - # We cannot yet assume a decent shell, so we have to provide a - # neutralization value for shells without unset; and this also - # works around shells that cannot unset nonexistent variables. - # Preserve -v and -x to the replacement shell. - BASH_ENV=/dev/null - ENV=/dev/null - (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV - export CONFIG_SHELL - case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; - esac - exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: google-sparsehash@googlegroups.com about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='sparsehash' -PACKAGE_TARNAME='sparsehash' -PACKAGE_VERSION='2.0.2' -PACKAGE_STRING='sparsehash 2.0.2' -PACKAGE_BUGREPORT='google-sparsehash@googlegroups.com' -PACKAGE_URL='' - -ac_unique_file="README" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='am__EXEEXT_FALSE -am__EXEEXT_TRUE -LTLIBOBJS -LIBOBJS -tcmalloc_libs -tcmalloc_flags -PTHREAD_CFLAGS -PTHREAD_LIBS -PTHREAD_CC -acx_pthread_config -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -CXXCPP -EGREP -GREP -GCC_FALSE -GCC_TRUE -CPP -am__fastdepCC_FALSE -am__fastdepCC_TRUE -CCDEPMODE -ac_ct_CC -CFLAGS -CC -am__fastdepCXX_FALSE -am__fastdepCXX_TRUE -CXXDEPMODE -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -OBJEXT -EXEEXT -ac_ct_CXX -CPPFLAGS -LDFLAGS -CXXFLAGS -CXX -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -AWK -mkdir_p -MKDIR_P -INSTALL_STRIP_PROGRAM -STRIP -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_dependency_tracking -enable_namespace -' - ac_precious_vars='build_alias -host_alias -target_alias -CXX -CXXFLAGS -LDFLAGS -LIBS -CPPFLAGS -CCC -CC -CFLAGS -CPP -CXXCPP' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used" >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures sparsehash 2.0.2 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/sparsehash] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of sparsehash 2.0.2:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --enable-namespace=FOO to define these Google - classes in the FOO namespace. --disable-namespace - to define them in the global namespace. Default - is to define them in namespace google. - -Some influential environment variables: - CXX C++ compiler command - CXXFLAGS C++ compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CC C compiler command - CFLAGS C compiler flags - CPP C preprocessor - CXXCPP C++ preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -sparsehash configure 2.0.2 -generated by GNU Autoconf 2.68 - -Copyright (C) 2010 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_type - -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------------------------- ## -## Report this to google-sparsehash@googlegroups.com ## -## ------------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_mongrel - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_cpp - -# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES -# --------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_cxx_check_header_mongrel () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ------------------------------------------------- ## -## Report this to google-sparsehash@googlegroups.com ## -## ------------------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_cxx_check_header_mongrel -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by sparsehash $as_me 2.0.2, which was -generated by GNU Autoconf 2.68. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# The argument here is just something that should be in the current directory -# (for sanity checking) - -am__api_version='1.11' - -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 -$as_echo_n "checking whether build environment is sane... " >&6; } -# Just in case -sleep 1 -echo timestamp > conftest.file -# Reject unsafe characters in $srcdir or the absolute working directory -# name. Accept space and tab only in the latter. -am_lf=' -' -case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -esac -case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -esac - -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t "$srcdir/configure" conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - as_fn_error $? "ls -t appears to fail. Make sure there is not a broken -alias in your environment" "$LINENO" 5 - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - as_fn_error $? "newly created file is older than distributed files! -Check your system clock" "$LINENO" 5 -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test x"${MISSING+set}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; - *) - MISSING="\${SHELL} $am_aux_dir/missing" ;; - esac -fi -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 -$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if test x"${install_sh}" != xset; then - case $am_aux_dir in - *\ * | *\ *) - install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; - *) - install_sh="\${SHELL} $am_aux_dir/install-sh" - esac -fi - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_STRIP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -mkdir_p="$MKDIR_P" -case $mkdir_p in - [\\/$]* | ?:[\\/]*) ;; - */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; -esac - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AWK+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AWK="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 -$as_echo "$AWK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AWK" && break -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - am__isrc=' -I$(srcdir)' - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 - fi -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='sparsehash' - VERSION='2.0.2' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - -ac_config_headers="$ac_config_headers src/config.h" - - -# Checks for programs. -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 -$as_echo_n "checking whether the C++ compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C++ compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 -$as_echo_n "checking for C++ compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C++ compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CXX" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CXX_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CC_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - if test "$GCC" = yes; then - GCC_TRUE= - GCC_FALSE='#' -else - GCC_TRUE='#' - GCC_FALSE= -fi - # let the Makefile know if we're gcc - -# Check whether some low-level functions/files are available - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -for ac_func in memcpy memmove -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default" -if test "x$ac_cv_type_uint16_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_UINT16_T 1 -_ACEOF - - -fi - # defined in C99 systems -ac_fn_c_check_type "$LINENO" "u_int16_t" "ac_cv_type_u_int16_t" "$ac_includes_default" -if test "x$ac_cv_type_u_int16_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_U_INT16_T 1 -_ACEOF - - -fi - # defined in BSD-derived systems, and gnu -ac_fn_c_check_type "$LINENO" "__uint16" "ac_cv_type___uint16" "$ac_includes_default" -if test "x$ac_cv_type___uint16" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE___UINT16 1 -_ACEOF - - -fi - # defined in some windows systems (vc7) -ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" -if test "x$ac_cv_type_long_long" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_LONG_LONG 1 -_ACEOF - - -fi - # probably defined everywhere, but... - -# These are 'only' needed for unittests -for ac_header in sys/resource.h unistd.h sys/time.h sys/utsname.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# If you have google-perftools installed, we can do a bit more testing. -# We not only want to set HAVE_MALLOC_EXTENSION_H, we also want to set -# a variable to let the Makefile to know to link in tcmalloc. -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 -$as_echo_n "checking how to run the C++ preprocessor... " >&6; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_cxx_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -for ac_header in google/malloc_extension.h -do : - ac_fn_cxx_check_header_mongrel "$LINENO" "google/malloc_extension.h" "ac_cv_header_google_malloc_extension_h" "$ac_includes_default" -if test "x$ac_cv_header_google_malloc_extension_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GOOGLE_MALLOC_EXTENSION_H 1 -_ACEOF - tcmalloc_libs=-ltcmalloc -else - tcmalloc_libs= -fi - -done - -# On some systems, when linking in tcmalloc you also need to link in -# pthread. That's a bug somewhere, but we'll work around it for now. -tcmalloc_flags="" -if test -n "$tcmalloc_libs"; then - # Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 -$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_join (); -int -main () -{ -return pthread_join (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -$as_echo_n "checking whether pthreads work without any flags... " >&6; } - ;; - - -*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 -$as_echo_n "checking whether pthreads work with $flag... " >&6; } - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - # Extract the first word of "pthread-config", so it can be a program name with args. -set dummy pthread-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_acx_pthread_config+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$acx_pthread_config"; then - ac_cv_prog_acx_pthread_config="$acx_pthread_config" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_acx_pthread_config="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - test -z "$ac_cv_prog_acx_pthread_config" && ac_cv_prog_acx_pthread_config="no" -fi -fi -acx_pthread_config=$ac_cv_prog_acx_pthread_config -if test -n "$acx_pthread_config"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_config" >&5 -$as_echo "$acx_pthread_config" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 -$as_echo_n "checking for the pthreads library -l$flag... " >&6; } - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - acx_pthread_ok=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_pthread_ok" >&5 -$as_echo "$acx_pthread_ok" >&6; } - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -$as_echo_n "checking for joinable pthread attribute... " >&6; } - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -int attr=$attr; return attr; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - attr_name=$attr; break -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 -$as_echo "$attr_name" >&6; } - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - -cat >>confdefs.h <<_ACEOF -#define PTHREAD_CREATE_JOINABLE $attr_name -_ACEOF - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 -$as_echo_n "checking if more special flags are required for pthreads... " >&6; } - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 -$as_echo "${flag}" >&6; } - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - for ac_prog in xlc_r cc_r -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PTHREAD_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PTHREAD_CC"; then - ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PTHREAD_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PTHREAD_CC=$ac_cv_prog_PTHREAD_CC -if test -n "$PTHREAD_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -$as_echo "$PTHREAD_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PTHREAD_CC" && break -done -test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" - - else - PTHREAD_CC=$CC - fi - - # The next part tries to detect GCC inconsistency with -shared on some - # architectures and systems. The problem is that in certain - # configurations, when -shared is specified, GCC "forgets" to - # internally use various flags which are still necessary. - - # - # Prepare the flags - # - save_CFLAGS="$CFLAGS" - save_LIBS="$LIBS" - save_CC="$CC" - - # Try with the flags determined by the earlier checks. - # - # -Wl,-z,defs forces link-time symbol resolution, so that the - # linking checks with -shared actually have any value - # - # FIXME: -fPIC is required for -shared on many architectures, - # so we specify it here, but the right way would probably be to - # properly detect whether it is actually required. - CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CC="$PTHREAD_CC" - - # In order not to create several levels of indentation, we test - # the value of "$done" until we find the cure or run out of ideas. - done="no" - - # First, make sure the CFLAGS we added are actually accepted by our - # compiler. If not (and OS X's ld, for instance, does not accept -z), - # then we can't do this test. - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to check for GCC pthread/shared inconsistencies" >&5 -$as_echo_n "checking whether to check for GCC pthread/shared inconsistencies... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -else - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - fi - - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -pthread is sufficient with -shared" >&5 -$as_echo_n "checking whether -pthread is sufficient with -shared... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - - # - # Linux gcc on some architectures such as mips/mipsel forgets - # about -lpthread - # - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lpthread fixes that" >&5 -$as_echo_n "checking whether -lpthread fixes that... " >&6; } - LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - # - # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc - # - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc_r fixes that" >&5 -$as_echo_n "checking whether -lc_r fixes that... " >&6; } - LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - fi - if test x"$done" = xno; then - # OK, we have run out of ideas - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Impossible to determine how to use pthreads with shared libraries" >&5 -$as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shared libraries" >&2;} - - # so it's not safe to assume that we may use pthreads - acx_pthread_ok=no - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether what we have so far is sufficient with -nostdlib" >&5 -$as_echo_n "checking whether what we have so far is sufficient with -nostdlib... " >&6; } - CFLAGS="-nostdlib $CFLAGS" - # we need c with nostdlib - LIBS="$LIBS -lc" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -else - done=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - - if test x"$done" = xno; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lpthread saves the day" >&5 -$as_echo_n "checking whether -lpthread saves the day... " >&6; } - LIBS="-lpthread $LIBS" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - done=yes -else - done=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - - if test "x$done" = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - PTHREAD_LIBS="$PTHREAD_LIBS -lpthread" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Impossible to determine how to use pthreads with shared libraries and -nostdlib" >&5 -$as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shared libraries and -nostdlib" >&2;} - fi - fi - - CFLAGS="$save_CFLAGS" - LIBS="$save_LIBS" - CC="$save_CC" -else - PTHREAD_CC="$CC" -fi - - - - - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - -$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h - - : -else - acx_pthread_ok=no - -fi -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - tcmalloc_flags="\$(PTHREAD_CFLAGS)" - tcmalloc_libs="$tcmalloc_libs \$(PTHREAD_LIBS)" -fi - - - -# Figure out where hash_map lives and also hash_fun.h (or stl_hash_fun.h). -# This also tells us what namespace hash code lives in. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler implements namespaces" >&5 -$as_echo_n "checking whether the compiler implements namespaces... " >&6; } -if ${ac_cv_cxx_namespaces+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -namespace Outer { - namespace Inner { int i = 0; }} -int -main () -{ -using namespace Outer::Inner; return i; - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_cxx_namespaces=yes -else - ac_cv_cxx_namespaces=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_namespaces" >&5 -$as_echo "$ac_cv_cxx_namespaces" >&6; } - if test "$ac_cv_cxx_namespaces" = yes; then - -$as_echo "#define HAVE_NAMESPACES 1" >>confdefs.h - - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking the location of hash_map" >&5 -$as_echo_n "checking the location of hash_map... " >&6; } - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - ac_cv_cxx_hash_map="" - # First try unordered_map, but not on gcc's before 4.2 -- I've - # seen unexplainable unordered_map bugs with -O2 on older gcc's. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)) - # error GCC too old for unordered_map - #endif - -int -main () -{ -/* no program body necessary */ - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - stl_hash_old_gcc=no -else - stl_hash_old_gcc=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - for location in unordered_map tr1/unordered_map; do - for namespace in std std::tr1; do - if test -z "$ac_cv_cxx_hash_map" -a "$stl_hash_old_gcc" != yes; then - # Some older gcc's have a buggy tr1, so test a bit of code. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$location> -int -main () -{ -const ${namespace}::unordered_map t; - return t.find(5) == t.end(); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_cxx_hash_map="<$location>"; - ac_cv_cxx_hash_namespace="$namespace"; - ac_cv_cxx_have_unordered_map="yes"; -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - done - done - # Now try hash_map - for location in ext/hash_map hash_map; do - for namespace in __gnu_cxx "" std stdext; do - if test -z "$ac_cv_cxx_hash_map"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$location> -int -main () -{ -${namespace}::hash_map t - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_cxx_hash_map="<$location>"; - ac_cv_cxx_hash_namespace="$namespace"; - ac_cv_cxx_have_unordered_map="no"; -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - done - done - ac_cv_cxx_hash_set=`echo "$ac_cv_cxx_hash_map" | sed s/map/set/`; - if test -n "$ac_cv_cxx_hash_map"; then - -$as_echo "#define HAVE_HASH_MAP 1" >>confdefs.h - - -$as_echo "#define HAVE_HASH_SET 1" >>confdefs.h - - -cat >>confdefs.h <<_ACEOF -#define HASH_MAP_H $ac_cv_cxx_hash_map -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define HASH_SET_H $ac_cv_cxx_hash_set -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define HASH_NAMESPACE $ac_cv_cxx_hash_namespace -_ACEOF - - if test "$ac_cv_cxx_have_unordered_map" = yes; then - -$as_echo "#define HAVE_UNORDERED_MAP 1" >>confdefs.h - - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_hash_map" >&5 -$as_echo "$ac_cv_cxx_hash_map" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 -$as_echo "" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find an STL hash_map" >&5 -$as_echo "$as_me: WARNING: could not find an STL hash_map" >&2;} - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to include hash_fun directly" >&5 -$as_echo_n "checking how to include hash_fun directly... " >&6; } - - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - ac_cv_cxx_stl_hash_fun="" - for location in functional tr1/functional \ - ext/hash_fun.h ext/stl_hash_fun.h \ - hash_fun.h stl_hash_fun.h \ - stl/_hash_fun.h; do - if test -z "$ac_cv_cxx_stl_hash_fun"; then - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$location> -int -main () -{ -int x = ${ac_cv_cxx_hash_namespace}::hash()(5) - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_cxx_stl_hash_fun="<$location>"; -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - fi - done - ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -cat >>confdefs.h <<_ACEOF -#define HASH_FUN_H $ac_cv_cxx_stl_hash_fun -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define HASH_NAMESPACE $ac_cv_cxx_hash_namespace -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_stl_hash_fun" >&5 -$as_echo "$ac_cv_cxx_stl_hash_fun" >&6; } - - -# Find out what namespace the user wants our classes to be defined in. -# TODO(csilvers): change this to default to sparsehash instead. -google_namespace_default=google - # Check whether --enable-namespace was given. -if test "${enable_namespace+set}" = set; then : - enableval=$enable_namespace; case "$enableval" in - yes) google_namespace="$google_namespace_default" ;; - no) google_namespace="" ;; - *) google_namespace="$enableval" ;; - esac -else - google_namespace="$google_namespace_default" -fi - - if test -n "$google_namespace"; then - ac_google_namespace="::$google_namespace" - ac_google_start_namespace="namespace $google_namespace {" - ac_google_end_namespace="}" - else - ac_google_namespace="" - ac_google_start_namespace="" - ac_google_end_namespace="" - fi - -cat >>confdefs.h <<_ACEOF -#define GOOGLE_NAMESPACE $ac_google_namespace -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define _START_GOOGLE_NAMESPACE_ $ac_google_start_namespace -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define _END_GOOGLE_NAMESPACE_ $ac_google_end_namespace -_ACEOF - - - -# In unix-based systems, hash is always defined as hash<> (in namespace. -# HASH_NAMESPACE.) So we can use a simple AC_DEFINE here. On -# windows, and possibly on future unix STL implementations, this -# macro will evaluate to something different.) - -$as_echo "#define SPARSEHASH_HASH_NO_NAMESPACE hash" >>confdefs.h - - -# Do *not* define this in terms of SPARSEHASH_HASH_NO_NAMESPACE, because -# SPARSEHASH_HASH is exported to sparseconfig.h, but S_H_NO_NAMESPACE isn't. - -$as_echo "#define SPARSEHASH_HASH HASH_NAMESPACE::hash" >>confdefs.h - - - -# Write generated configuration file -ac_config_files="$ac_config_files Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - if test -n "$EXEEXT"; then - am__EXEEXT_TRUE= - am__EXEEXT_FALSE='#' -else - am__EXEEXT_TRUE='#' - am__EXEEXT_FALSE= -fi - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${GCC_TRUE}" && test -z "${GCC_FALSE}"; then - as_fn_error $? "conditional \"GCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -p' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -p' - fi -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -if test -x / >/dev/null 2>&1; then - as_test_x='test -x' -else - if ls -dL / >/dev/null 2>&1; then - as_ls_L_option=L - else - as_ls_L_option= - fi - as_test_x=' - eval sh -c '\'' - if test -d "$1"; then - test -d "$1/."; - else - case $1 in #( - -*)set "./$1";; - esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( - ???[sx]*):;;*)false;;esac;fi - '\'' sh - ' -fi -as_executable_p=$as_test_x - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by sparsehash $as_me 2.0.2, which was -generated by GNU Autoconf 2.68. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -sparsehash config.status 2.0.2 -configured by $0, generated by GNU Autoconf 2.68, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2010 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -AWK='$AWK' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Autoconf 2.62 quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/clipper/sparsehash-2.0.3/configure.ac b/clipper/sparsehash-2.0.3/configure.ac deleted file mode 100644 index 9b4e86d..0000000 --- a/clipper/sparsehash-2.0.3/configure.ac +++ /dev/null @@ -1,73 +0,0 @@ -## Process this file with autoconf to produce configure. -## In general, the safest way to proceed is to run ./autogen.sh - -# make sure we're interpreted by some minimal autoconf -AC_PREREQ(2.57) - -AC_INIT(sparsehash, 2.0.2, google-sparsehash@googlegroups.com) -# The argument here is just something that should be in the current directory -# (for sanity checking) -AC_CONFIG_SRCDIR(README) -AM_INIT_AUTOMAKE([dist-zip]) -AM_CONFIG_HEADER(src/config.h) - -# Checks for programs. -AC_PROG_CXX -AC_PROG_CC -AC_PROG_CPP -AM_CONDITIONAL(GCC, test "$GCC" = yes) # let the Makefile know if we're gcc - -# Check whether some low-level functions/files are available -AC_HEADER_STDC -AC_CHECK_FUNCS(memcpy memmove) -AC_CHECK_TYPES([uint16_t]) # defined in C99 systems -AC_CHECK_TYPES([u_int16_t]) # defined in BSD-derived systems, and gnu -AC_CHECK_TYPES([__uint16]) # defined in some windows systems (vc7) -AC_CHECK_TYPES([long long]) # probably defined everywhere, but... - -# These are 'only' needed for unittests -AC_CHECK_HEADERS(sys/resource.h unistd.h sys/time.h sys/utsname.h) - -# If you have google-perftools installed, we can do a bit more testing. -# We not only want to set HAVE_MALLOC_EXTENSION_H, we also want to set -# a variable to let the Makefile to know to link in tcmalloc. -AC_LANG([C++]) -AC_CHECK_HEADERS(google/malloc_extension.h, - tcmalloc_libs=-ltcmalloc, - tcmalloc_libs=) -# On some systems, when linking in tcmalloc you also need to link in -# pthread. That's a bug somewhere, but we'll work around it for now. -tcmalloc_flags="" -if test -n "$tcmalloc_libs"; then - ACX_PTHREAD - tcmalloc_flags="\$(PTHREAD_CFLAGS)" - tcmalloc_libs="$tcmalloc_libs \$(PTHREAD_LIBS)" -fi -AC_SUBST(tcmalloc_flags) -AC_SUBST(tcmalloc_libs) - -# Figure out where hash_map lives and also hash_fun.h (or stl_hash_fun.h). -# This also tells us what namespace hash code lives in. -AC_CXX_STL_HASH -AC_CXX_STL_HASH_FUN - -# Find out what namespace the user wants our classes to be defined in. -# TODO(csilvers): change this to default to sparsehash instead. -AC_DEFINE_GOOGLE_NAMESPACE(google) - -# In unix-based systems, hash is always defined as hash<> (in namespace. -# HASH_NAMESPACE.) So we can use a simple AC_DEFINE here. On -# windows, and possibly on future unix STL implementations, this -# macro will evaluate to something different.) -AC_DEFINE(SPARSEHASH_HASH_NO_NAMESPACE, hash, - [The system-provided hash function, in namespace HASH_NAMESPACE.]) - -# Do *not* define this in terms of SPARSEHASH_HASH_NO_NAMESPACE, because -# SPARSEHASH_HASH is exported to sparseconfig.h, but S_H_NO_NAMESPACE isn't. -AC_DEFINE(SPARSEHASH_HASH, HASH_NAMESPACE::hash, - [The system-provided hash function including the namespace.]) - - -# Write generated configuration file -AC_CONFIG_FILES([Makefile]) -AC_OUTPUT diff --git a/clipper/sparsehash-2.0.3/depcomp b/clipper/sparsehash-2.0.3/depcomp deleted file mode 100755 index df8eea7..0000000 --- a/clipper/sparsehash-2.0.3/depcomp +++ /dev/null @@ -1,630 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free -# Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u="sed s,\\\\\\\\,/,g" - depmode=msvisualcpp -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> "$depfile" - echo >> "$depfile" - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # With Tru64 cc, shared objects can also be used to make a - # static library. This mechanism is used in libtool 1.4 series to - # handle both shared and static libraries in a single compilation. - # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. - # - # With libtool 1.5 this exception was removed, and libtool now - # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 - tmpdepfile2=$dir$base.o.d # libtool 1.5 - tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 - tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.o.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - tmpdepfile4=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/clipper/sparsehash-2.0.3/doc/dense_hash_map.html b/clipper/sparsehash-2.0.3/doc/dense_hash_map.html deleted file mode 100644 index 3825781..0000000 --- a/clipper/sparsehash-2.0.3/doc/dense_hash_map.html +++ /dev/null @@ -1,1766 +0,0 @@ - - - - - -dense_hash_map<Key, Data, HashFcn, EqualKey, Alloc> - - - - -

[Note: this document is formatted similarly to the SGI STL -implementation documentation pages, and refers to concepts and classes -defined there. However, neither this document nor the code it -describes is associated with SGI, nor is it necessary to have SGI's -STL implementation installed in order to use this class.]

- - -

dense_hash_map<Key, Data, HashFcn, EqualKey, Alloc>

- -

dense_hash_map is a Hashed -Associative Container that associates objects of type Key -with objects of type Data. dense_hash_map is a Pair -Associative Container, meaning that its value type is pair<const Key, Data>. It is also a -Unique -Associative Container, meaning that no two elements have keys that -compare equal using EqualKey.

- -

Looking up an element in a dense_hash_map by its key is -efficient, so dense_hash_map is useful for "dictionaries" -where the order of elements is irrelevant. If it is important for the -elements to be in a particular order, however, then map is more appropriate.

- -

dense_hash_map is distinguished from other hash-map -implementations by its speed and by the ability to save -and restore contents to disk. On the other hand, this hash-map -implementation can use significantly more space than other hash-map -implementations, and it also has requirements -- for instance, for a -distinguished "empty key" -- that may not be easy for all -applications to satisfy.

- -

This class is appropriate for applications that need speedy access -to relatively small "dictionaries" stored in memory, or for -applications that need these dictionaries to be persistent. [implementation note])

- - -

Example

- -(Note: this example uses SGI semantics for hash<> --- the kind used by gcc and most Unix compiler suites -- and not -Dinkumware semantics -- the kind used by Microsoft Visual Studio. If -you are using MSVC, this example will not compile as-is: you'll need -to change hash to hash_compare, and you -won't use eqstr at all. See the MSVC documentation for -hash_map and hash_compare, for more -details.) - -
-#include <iostream>
-#include <sparsehash/dense_hash_map>
-
-using google::dense_hash_map;      // namespace where class lives by default
-using std::cout;
-using std::endl;
-using ext::hash;  // or __gnu_cxx::hash, or maybe tr1::hash, depending on your OS
-
-struct eqstr
-{
-  bool operator()(const char* s1, const char* s2) const
-  {
-    return (s1 == s2) || (s1 && s2 && strcmp(s1, s2) == 0);
-  }
-};
-
-int main()
-{
-  dense_hash_map<const char*, int, hash<const char*>, eqstr> months;
-  
-  months.set_empty_key(NULL);
-  months["january"] = 31;
-  months["february"] = 28;
-  months["march"] = 31;
-  months["april"] = 30;
-  months["may"] = 31;
-  months["june"] = 30;
-  months["july"] = 31;
-  months["august"] = 31;
-  months["september"] = 30;
-  months["october"] = 31;
-  months["november"] = 30;
-  months["december"] = 31;
-  
-  cout << "september -> " << months["september"] << endl;
-  cout << "april     -> " << months["april"] << endl;
-  cout << "june      -> " << months["june"] << endl;
-  cout << "november  -> " << months["november"] << endl;
-}
-
- - -

Definition

- -Defined in the header dense_hash_map. -This class is not part of the C++ standard, though it is mostly -compatible with the tr1 class unordered_map. - - -

Template parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDescriptionDefault
- Key - - The hash_map's key type. This is also defined as - dense_hash_map::key_type. - -   -
- Data - - The hash_map's data type. This is also defined as - dense_hash_map::data_type. [7] - -   -
- HashFcn - - The hash function used by the - hash_map. This is also defined as dense_hash_map::hasher. -
Note: Hashtable performance depends heavily on the choice of - hash function. See the performance - page for more information. -
- hash<Key> -
- EqualKey - - The hash_map key equality function: a binary predicate that determines - whether two keys are equal. This is also defined as - dense_hash_map::key_equal. - - equal_to<Key> -
- Alloc - - The STL allocator to use. By default, uses the provided allocator - libc_allocator_with_realloc, which likely gives better - performance than other STL allocators due to its built-in support - for realloc, which this container takes advantage of. - If you use an allocator other than the default, note that this - container imposes an additional requirement on the STL allocator - type beyond those in [lib.allocator.requirements]: it does not - support allocators that define alternate memory models. That is, - it assumes that pointer, const_pointer, - size_type, and difference_type are just - T*, const T*, size_t, and - ptrdiff_t, respectively. This is also defined as - dense_hash_map::allocator_type. - -
- - -

Model of

- -Unique Hashed Associative Container, -Pair Associative Container - - -

Type requirements

- -
    -
  • -Key is Assignable. -
  • -EqualKey is a Binary Predicate whose argument type is Key. -
  • -EqualKey is an equivalence relation. -
  • -Alloc is an Allocator. -
- - -

Public base classes

- -None. - - -

Members

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberWhere definedDescription
- key_type - - Associative - Container - - The dense_hash_map's key type, Key. -
- data_type - - Pair - Associative Container - - The type of object associated with the keys. -
- value_type - - Pair - Associative Container - - The type of object, pair<const key_type, data_type>, - stored in the hash_map. -
- hasher - - Hashed - Associative Container - - The dense_hash_map's hash - function. -
- key_equal - - Hashed - Associative Container - - Function - object that compares keys for equality. -
- allocator_type - - Unordered Associative Container (tr1) - - The type of the Allocator given as a template parameter. -
- pointer - - Container - - Pointer to T. -
- reference - - Container - - Reference to T -
- const_reference - - Container - - Const reference to T -
- size_type - - Container - - An unsigned integral type. -
- difference_type - - Container - - A signed integral type. -
- iterator - - Container - - Iterator used to iterate through a dense_hash_map. [1] -
- const_iterator - - Container - - Const iterator used to iterate through a dense_hash_map. -
- local_iterator - - Unordered Associative Container (tr1) - - Iterator used to iterate through a subset of - dense_hash_map. [1] -
- const_local_iterator - - Unordered Associative Container (tr1) - - Const iterator used to iterate through a subset of - dense_hash_map. -
- iterator begin() - - Container - - Returns an iterator pointing to the beginning of the - dense_hash_map. -
- iterator end() - - Container - - Returns an iterator pointing to the end of the - dense_hash_map. -
- const_iterator begin() const - - Container - - Returns an const_iterator pointing to the beginning of the - dense_hash_map. -
- const_iterator end() const - - Container - - Returns an const_iterator pointing to the end of the - dense_hash_map. -
- local_iterator begin(size_type i) - - Unordered Associative Container (tr1) - - Returns a local_iterator pointing to the beginning of bucket - i in the dense_hash_map. -
- local_iterator end(size_type i) - - Unordered Associative Container (tr1) - - Returns a local_iterator pointing to the end of bucket - i in the dense_hash_map. For - dense_hash_map, each bucket contains either 0 or 1 item. -
- const_local_iterator begin(size_type i) const - - Unordered Associative Container (tr1) - - Returns a const_local_iterator pointing to the beginning of bucket - i in the dense_hash_map. -
- const_local_iterator end(size_type i) const - - Unordered Associative Container (tr1) - - Returns a const_local_iterator pointing to the end of bucket - i in the dense_hash_map. For - dense_hash_map, each bucket contains either 0 or 1 item. -
- size_type size() const - - Container - - Returns the size of the dense_hash_map. -
- size_type max_size() const - - Container - - Returns the largest possible size of the dense_hash_map. -
- bool empty() const - - Container - - true if the dense_hash_map's size is 0. -
- size_type bucket_count() const - - Hashed - Associative Container - - Returns the number of buckets used by the dense_hash_map. -
- size_type max_bucket_count() const - - Hashed - Associative Container - - Returns the largest possible number of buckets used by the dense_hash_map. -
- size_type bucket_size(size_type i) const - - Unordered Associative Container (tr1) - - Returns the number of elements in bucket i. For - dense_hash_map, this will be either 0 or 1. -
- size_type bucket(const key_type& key) const - - Unordered Associative Container (tr1) - - If the key exists in the map, returns the index of the bucket - containing the given key, otherwise, return the bucket the key - would be inserted into. - This value may be passed to begin(size_type) and - end(size_type). -
- float load_factor() const - - Unordered Associative Container (tr1) - - The number of elements in the dense_hash_map divided by - the number of buckets. -
- float max_load_factor() const - - Unordered Associative Container (tr1) - - The maximum load factor before increasing the number of buckets in - the dense_hash_map. -
- void max_load_factor(float new_grow) - - Unordered Associative Container (tr1) - - Sets the maximum load factor before increasing the number of - buckets in the dense_hash_map. -
- float min_load_factor() const - - dense_hash_map - - The minimum load factor before decreasing the number of buckets in - the dense_hash_map. -
- void min_load_factor(float new_grow) - - dense_hash_map - - Sets the minimum load factor before decreasing the number of - buckets in the dense_hash_map. -
- void set_resizing_parameters(float shrink, float grow) - - dense_hash_map - - DEPRECATED. See below. -
- void resize(size_type n) - - Hashed - Associative Container - - Increases the bucket count to hold at least n items. - [4] [5] -
- void rehash(size_type n) - - Unordered Associative Container (tr1) - - Increases the bucket count to hold at least n items. - This is identical to resize. - [4] [5] -
- hasher hash_funct() const - - Hashed - Associative Container - - Returns the hasher object used by the dense_hash_map. -
- hasher hash_function() const - - Unordered Associative Container (tr1) - - Returns the hasher object used by the dense_hash_map. - This is idential to hash_funct. -
- key_equal key_eq() const - - Hashed - Associative Container - - Returns the key_equal object used by the - dense_hash_map. -
- allocator_type get_allocator() const - - Unordered Associative Container (tr1) - - Returns the allocator_type object used by the - dense_hash_map: either the one passed in to the - constructor, or a default Alloc instance. -
- dense_hash_map() - - Container - - Creates an empty dense_hash_map. -
- dense_hash_map(size_type n) - - Hashed - Associative Container - - Creates an empty dense_hash_map that's optimized for holding - up to n items. - [5] -
- dense_hash_map(size_type n, const hasher& h) - - Hashed - Associative Container - - Creates an empty dense_hash_map that's optimized for up - to n items, using h as the hash function. -
- dense_hash_map(size_type n, const hasher& h, const - key_equal& k) - - Hashed - Associative Container - - Creates an empty dense_hash_map that's optimized for up - to n items, using h as the hash function and - k as the key equal function. -
- dense_hash_map(size_type n, const hasher& h, const - key_equal& k, const allocator_type& a) - - Unordered Associative Container (tr1) - - Creates an empty dense_hash_map that's optimized for up - to n items, using h as the hash function, - k as the key equal function, and a as the - allocator object. -
-
template <class InputIterator>
-dense_hash_map(InputIterator f, InputIterator l) 
-[2] -
- Unique - Hashed Associative Container - - Creates a dense_hash_map with a copy of a range. -
-
template <class InputIterator>
-dense_hash_map(InputIterator f, InputIterator l, size_type n) 
-[2] -
- Unique - Hashed Associative Container - - Creates a hash_map with a copy of a range that's optimized to - hold up to n items. -
-
template <class InputIterator>
-dense_hash_map(InputIterator f, InputIterator l, size_type n, const
-hasher& h) 
[2] -
- Unique - Hashed Associative Container - - Creates a hash_map with a copy of a range that's optimized to hold - up to n items, using h as the hash function. -
-
template <class InputIterator>
-dense_hash_map(InputIterator f, InputIterator l, size_type n, const
-hasher& h, const key_equal& k) 
[2] -
- Unique - Hashed Associative Container - - Creates a hash_map with a copy of a range that's optimized for - holding up to n items, using h as the hash - function and k as the key equal function. -
-
template <class InputIterator>
-dense_hash_map(InputIterator f, InputIterator l, size_type n, const
-hasher& h, const key_equal& k, const allocator_type& a) 
- [2] -
- Unordered Associative Container (tr1) - - Creates a hash_map with a copy of a range that's optimized for - holding up to n items, using h as the hash - function, k as the key equal function, and a as - the allocator object. -
- dense_hash_map(const hash_map&) - - Container - - The copy constructor. -
- dense_hash_map& operator=(const hash_map&) - - Container - - The assignment operator -
- void swap(hash_map&) - - Container - - Swaps the contents of two hash_maps. -
-
pair<iterator, bool> insert(const value_type& x)
-
-
- Unique - Associative Container - - Inserts x into the dense_hash_map. -
-
template <class InputIterator>
-void insert(InputIterator f, InputIterator l) 
[2] -
- Unique - Associative Container - - Inserts a range into the dense_hash_map. -
- void set_empty_key(const key_type& key) [6] - - dense_hash_map - - See below. -
- void set_deleted_key(const key_type& key) [6] - - dense_hash_map - - See below. -
- void clear_deleted_key() [6] - - dense_hash_map - - See below. -
- void erase(iterator pos) - - Associative - Container - - Erases the element pointed to by pos. - [6] -
- size_type erase(const key_type& k) - - Associative - Container - - Erases the element whose key is k. - [6] -
- void erase(iterator first, iterator last) - - Associative - Container - - Erases all elements in a range. - [6] -
- void clear() - - Associative - Container - - Erases all of the elements. -
- void clear_no_resize() - - dense_hash_map - - See below. -
- const_iterator find(const key_type& k) const - - Associative - Container - - Finds an element whose key is k. -
- iterator find(const key_type& k) - - Associative - Container - - Finds an element whose key is k. -
- size_type count(const key_type& k) const - - Unique - Associative Container - - Counts the number of elements whose key is k. -
-
pair<const_iterator, const_iterator> equal_range(const
-key_type& k) const 
-
- Associative - Container - - Finds a range containing all elements whose key is k. -
-
pair<iterator, iterator> equal_range(const
-key_type& k) 
-
- Associative - Container - - Finds a range containing all elements whose key is k. -
-
data_type& operator[](const key_type& k) [3] 
-
- dense_hash_map - - See below. -
- template <ValueSerializer, OUTPUT> - bool serialize(ValueSerializer serializer, OUTPUT *fp) - - dense_hash_map - - See below. -
- template <ValueSerializer, INPUT> - bool unserialize(ValueSerializer serializer, INPUT *fp) - - dense_hash_map - - See below. -
- NopointerSerializer - - dense_hash_map - - See below. -
- bool write_metadata(FILE *fp) - - dense_hash_map - - DEPRECATED. See below. -
- bool read_metadata(FILE *fp) - - dense_hash_map - - DEPRECATED. See below. -
- bool write_nopointer_data(FILE *fp) - - dense_hash_map - - DEPRECATED. See below. -
- bool read_nopointer_data(FILE *fp) - - dense_hash_map - - DEPRECATED. See below. -
-
bool operator==(const hash_map&, const hash_map&)
-
-
- Hashed - Associative Container - - Tests two hash_maps for equality. This is a global function, not a - member function. -
- - -

New members

- -These members are not defined in the Unique -Hashed Associative Container, Pair -Associative Container, or tr1's +Unordered Associative -Container requirements, but are specific to -dense_hash_map. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberDescription
- void set_empty_key(const key_type& key) - - Sets the distinguished "empty" key to key. This must be - called immediately after construct time, before calls to another - other dense_hash_map operation. [6] -
- void set_deleted_key(const key_type& key) - - Sets the distinguished "deleted" key to key. This must be - called before any calls to erase(). [6] -
- void clear_deleted_key() - - Clears the distinguished "deleted" key. After this is called, - calls to erase() are not valid on this object. - [6] -
- void clear_no_resize() - - Clears the hashtable like clear() does, but does not - recover the memory used for hashtable buckets. (The memory - used by the items in the hashtable is still recovered.) - This can save time for applications that want to reuse a - dense_hash_map many times, each time with a similar number - of objects. -
-
-data_type& 
-operator[](const key_type& k) [3]
-
-
- Returns a reference to the object that is associated with - a particular key. If the dense_hash_map does not already - contain such an object, operator[] inserts the default - object data_type(). [3] -
- void set_resizing_parameters(float shrink, float grow) - - This function is DEPRECATED. It is equivalent to calling - min_load_factor(shrink); max_load_factor(grow). -
- template <ValueSerializer, OUTPUT> - bool serialize(ValueSerializer serializer, OUTPUT *fp) - - Emit a serialization of the hash_map to a stream. - See below. -
- template <ValueSerializer, INPUT> - bool unserialize(ValueSerializer serializer, INPUT *fp) - - Read in a serialization of a hash_map from a stream, replacing the - existing hash_map contents with the serialized contents. - See below. -
- bool write_metadata(FILE *fp) - - This function is DEPRECATED. See below. -
- bool read_metadata(FILE *fp) - - This function is DEPRECATED. See below. -
- bool write_nopointer_data(FILE *fp) - - This function is DEPRECATED. See below. -
- bool read_nopointer_data(FILE *fp) - - This function is DEPRECATED. See below. -
- - -

Notes

- -

[1] - -dense_hash_map::iterator is not a mutable iterator, because -dense_hash_map::value_type is not Assignable. -That is, if i is of type dense_hash_map::iterator -and p is of type dense_hash_map::value_type, then -*i = p is not a valid expression. However, -dense_hash_map::iterator isn't a constant iterator either, -because it can be used to modify the object that it points to. Using -the same notation as above, (*i).second = p is a valid -expression.

- -

[2] - -This member function relies on member template functions, which -may not be supported by all compilers. If your compiler supports -member templates, you can call this function with any type of input -iterator. If your compiler does not yet support member templates, -though, then the arguments must either be of type const -value_type* or of type dense_hash_map::const_iterator.

- -

[3] - -Since operator[] might insert a new element into the -dense_hash_map, it can't possibly be a const member -function. Note that the definition of operator[] is -extremely simple: m[k] is equivalent to -(*((m.insert(value_type(k, data_type()))).first)).second. -Strictly speaking, this member function is unnecessary: it exists only -for convenience.

- -

[4] - -In order to preserve iterators, erasing hashtable elements does not -cause a hashtable to resize. This means that after a string of -erase() calls, the hashtable will use more space than is -required. At a cost of invalidating all current iterators, you can -call resize() to manually compact the hashtable. The -hashtable promotes too-small resize() arguments to the -smallest legal value, so to compact a hashtable, it's sufficient to -call resize(0).

- -

[5] - -Unlike some other hashtable implementations, the optional n in -the calls to the constructor, resize, and rehash -indicates not the desired number of buckets that -should be allocated, but instead the expected number of items to be -inserted. The class then sizes the hash-map appropriately for the -number of items specified. It's not an error to actually insert more -or fewer items into the hashtable, but the implementation is most -efficient -- does the fewest hashtable resizes -- if the number of -inserted items is n or slightly less.

- -

[6] - -dense_hash_map requires you call -set_empty_key() immediately after constructing the hash-map, -and before calling any other dense_hash_map method. (This is -the largest difference between the dense_hash_map API and -other hash-map APIs. See implementation.html -for why this is necessary.) -The argument to set_empty_key() should be a key-value that -is never used for legitimate hash-map entries. If you have no such -key value, you will be unable to use dense_hash_map. It is -an error to call insert() with an item whose key is the -"empty key."

- -dense_hash_map also requires you call -set_deleted_key() before calling erase(). -The argument to set_deleted_key() should be a key-value that -is never used for legitimate hash-map entries. It must be different -from the key-value used for set_empty_key(). It is an error to call -erase() without first calling set_deleted_key(), and -it is also an error to call insert() with an item whose key -is the "deleted key."

- -

There is no need to call set_deleted_key if you do not -wish to call erase() on the hash-map.

- -

It is acceptable to change the deleted-key at any time by calling -set_deleted_key() with a new argument. You can also call -clear_deleted_key(), at which point all keys become valid for -insertion but no hashtable entries can be deleted until -set_deleted_key() is called again.

- -

[7] - -dense_hash_map requires that data_type has a -zero-argument default constructor. This is because -dense_hash_map uses the special value pair(empty_key, -data_type()) to denote empty buckets, and thus needs to be able -to create data_type using a zero-argument constructor.

- -

If your data_type does not have a zero-argument default -constructor, there are several workarounds:

-
    -
  • Store a pointer to data_type in the map, instead of - data_type directly. This may yield faster code as - well, since hashtable-resizes will just have to move pointers - around, rather than copying the entire data_type. -
  • Add a zero-argument default constructor to data_type. -
  • Subclass data_type and add a zero-argument default - constructor to the subclass. -
- - -

Input/Output

- -

It is possible to save and restore dense_hash_map objects -to an arbitrary stream (such as a disk file) using the -serialize() and unserialize() methods.

- -

Each of these methods takes two arguments: a serializer, -which says how to write hashtable items to disk, and a stream, -which can be a C++ stream (istream or its subclasses for -input, ostream or its subclasses for output), a -FILE*, or a user-defined type (as described below).

- -

The serializer is a functor that takes a stream and a -single hashtable element (a value_type, which is a pair of -the key and data) and copies the hashtable element to the stream (for -serialize()) or fills the hashtable element contents from the -stream (for unserialize()), and returns true on success or -false on error. The copy-in and copy-out functions can be provided in -a single functor. Here is a sample serializer that read/writes a hashtable -element for an int-to-string hash_map to a FILE*:

- -
-struct StringToIntSerializer {
-  bool operator()(FILE* fp, const std::pair<const int, std::string>& value) const {
-    // Write the key.  We ignore endianness for this example.
-    if (fwrite(&value.first, sizeof(value.first), 1, fp) != 1)
-      return false;
-    // Write the value.
-    assert(value.second.length() <= 255);   // we only support writing small strings
-    const unsigned char size = value.second.length();
-    if (fwrite(&size, 1, 1, fp) != 1)
-      return false;
-    if (fwrite(value.second.data(), size, 1, fp) != 1)
-      return false;
-    return true;
-  }
-  bool operator()(FILE* fp, std::pair<const int, std::string>* value) const {
-    // Read the key.  Note the need for const_cast to get around
-    // the fact hash_map keys are always const.
-    if (fread(const_cast<int*>(&value->first), sizeof(value->first), 1, fp) != 1)
-      return false;
-    // Read the value.
-    unsigned char size;    // all strings are <= 255 chars long
-    if (fread(&size, 1, 1, fp) != 1)
-      return false;
-    char* buf = new char[size];
-    if (fread(buf, size, 1, fp) != 1) {
-      delete[] buf;
-      return false;
-    }
-    value->second.assign(buf, size);
-    delete[] buf;
-    return true;
-  }
-};
-
- -

Here is the functor being used in code (error checking omitted):

-
-   dense_hash_map<string, int> mymap = CreateMap();
-   FILE* fp = fopen("hashtable.data", "w");
-   mymap.serialize(StringToIntSerializer(), fp);
-   fclose(fp);
-
-   dense_hash_map<string, int> mymap2;
-   FILE* fp_in = fopen("hashtable.data", "r");
-   mymap2.unserialize(StringToIntSerializer(), fp_in);
-   fclose(fp_in);
-   assert(mymap == mymap2);
-
- -

Note that this example serializer can only serialize to a FILE*. -If you want to also be able to use this serializer with C++ streams, -you will need to write two more overloads of operator()'s, -one that reads from an istream, and one that writes to an -ostream. Likewise if you want to support serializing to a -custom class.

- -

If both the key and data are "simple" enough, you can use the -pre-supplied functor NopointerSerializer. This copies the -hashtable data using the equivalent of a memcpy<>. Native C -data types can be serialized this way, as can structs of native C data -types. Pointers and STL objects cannot.

- -

Note that NopointerSerializer() does not do any endian -conversion. Thus, it is only appropriate when you intend to read the -data on the same endian architecture as you write the data.

- -

If you wish to serialize to your own stream type, you can do so by -creating an object which supports two methods:

-
-   bool Write(const void* data, size_t length);
-   bool Read(void* data, size_t length);
-
-

Write() writes length bytes of data to a -stream (presumably a stream owned by the object), while -Read() reads data bytes from the stream into -data. Both return true on success or false on error.

- -

To unserialize a hashtable from a stream, you wil typically create -a new dense_hash_map object, then call unserialize() -on it. unserialize() destroys the old contents of the -object. You must pass in the appropriate ValueSerializer for -the data being read in.

- -

Both serialize() and unserialize() return -true on success, or false if there was an error -streaming the data.

- -

Note that serialize() is not a const method, since it -purges deleted elements before serializing. It is not safe to -serialize from two threads at once, without synchronization.

- -

NOTE: older versions of dense_hash_map provided a -different API, consisting of read_metadata(), -read_nopointer_data(), write_metadata(), -write_nopointer_data(). These methods were never implemented -and always did nothing but return false. You should -exclusively use the new API for serialization.

- - -

Validity of Iterators

- -

erase() is guaranteed not to invalidate any iterators -- -except for any iterators pointing to the item being erased, of course. -insert() invalidates all iterators, as does -resize().

- -

This is implemented by making erase() not resize the -hashtable. If you desire maximum space efficiency, you can call -resize(0) after a string of erase() calls, to force -the hashtable to resize to the smallest possible size.

- -

In addition to invalidating iterators, insert() -and resize() invalidate all pointers into the hashtable. If -you want to store a pointer to an object held in a dense_hash_map, -either do so after finishing hashtable inserts, or store the object on -the heap and a pointer to it in the dense_hash_map.

- - -

See also

- -

The following are SGI STL, and some Google STL, concepts and -classes related to dense_hash_map.

- -hash_map, -Associative Container, -Hashed Associative Container, -Pair Associative Container, -Unique Hashed Associative Container, -set, -map -multiset, -multimap, -hash_set, -hash_multiset, -hash_multimap, -sparse_hash_map, -sparse_hash_set, -dense_hash_set - - - diff --git a/clipper/sparsehash-2.0.3/doc/dense_hash_set.html b/clipper/sparsehash-2.0.3/doc/dense_hash_set.html deleted file mode 100644 index 58e24bb..0000000 --- a/clipper/sparsehash-2.0.3/doc/dense_hash_set.html +++ /dev/null @@ -1,1604 +0,0 @@ - - - - - -dense_hash_set<Key, HashFcn, EqualKey, Alloc> - - - - -

[Note: this document is formatted similarly to the SGI STL -implementation documentation pages, and refers to concepts and classes -defined there. However, neither this document nor the code it -describes is associated with SGI, nor is it necessary to have SGI's -STL implementation installed in order to use this class.]

- - -

dense_hash_set<Key, HashFcn, EqualKey, Alloc>

- -

dense_hash_set is a Hashed -Associative Container that stores objects of type Key. -dense_hash_set is a Simple -Associative Container, meaning that its value type, as well as its -key type, is key. It is also a -Unique -Associative Container, meaning that no two elements have keys that -compare equal using EqualKey.

- -

Looking up an element in a dense_hash_set by its key is -efficient, so dense_hash_set is useful for "dictionaries" -where the order of elements is irrelevant. If it is important for the -elements to be in a particular order, however, then map is more appropriate.

- -

dense_hash_set is distinguished from other hash-set -implementations by its speed and by the ability to save -and restore contents to disk. On the other hand, this hash-set -implementation can use significantly more space than other hash-set -implementations, and it also has requirements -- for instance, for a -distinguished "empty key" -- that may not be easy for all -applications to satisfy.

- -

This class is appropriate for applications that need speedy access -to relatively small "dictionaries" stored in memory, or for -applications that need these dictionaries to be persistent. [implementation note])

- - -

Example

- -(Note: this example uses SGI semantics for hash<> --- the kind used by gcc and most Unix compiler suites -- and not -Dinkumware semantics -- the kind used by Microsoft Visual Studio. If -you are using MSVC, this example will not compile as-is: you'll need -to change hash to hash_compare, and you -won't use eqstr at all. See the MSVC documentation for -hash_map and hash_compare, for more -details.) - -
-#include <iostream>
-#include <sparsehash/dense_hash_set>
-
-using google::dense_hash_set;      // namespace where class lives by default
-using std::cout;
-using std::endl;
-using ext::hash;  // or __gnu_cxx::hash, or maybe tr1::hash, depending on your OS
-
-struct eqstr
-{
-  bool operator()(const char* s1, const char* s2) const
-  {
-    return (s1 == s2) || (s1 && s2 && strcmp(s1, s2) == 0);
-  }
-};
-
-void lookup(const hash_set<const char*, hash<const char*>, eqstr>& Set,
-            const char* word)
-{
-  dense_hash_set<const char*, hash<const char*>, eqstr>::const_iterator it
-    = Set.find(word);
-  cout << word << ": "
-       << (it != Set.end() ? "present" : "not present")
-       << endl;
-}
-
-int main()
-{
-  dense_hash_set<const char*, hash<const char*>, eqstr> Set;
-  Set.set_empty_key(NULL);
-  Set.insert("kiwi");
-  Set.insert("plum");
-  Set.insert("apple");
-  Set.insert("mango");
-  Set.insert("apricot");
-  Set.insert("banana");
-
-  lookup(Set, "mango");
-  lookup(Set, "apple");
-  lookup(Set, "durian");
-}
-
- - -

Definition

- -Defined in the header dense_hash_set. -This class is not part of the C++ standard, though it is mostly -compatible with the tr1 class unordered_set. - - -

Template parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDescriptionDefault
- Key - - The hash_set's key and value type. This is also defined as - dense_hash_set::key_type and - dense_hash_set::value_type. - -   -
- HashFcn - - The hash function used by the - hash_set. This is also defined as dense_hash_set::hasher. -
Note: Hashtable performance depends heavily on the choice of - hash function. See the performance - page for more information. -
- hash<Key> -
- EqualKey - - The hash_set key equality function: a binary predicate that determines - whether two keys are equal. This is also defined as - dense_hash_set::key_equal. - - equal_to<Key> -
- Alloc - - The STL allocator to use. By default, uses the provided allocator - libc_allocator_with_realloc, which likely gives better - performance than other STL allocators due to its built-in support - for realloc, which this container takes advantage of. - If you use an allocator other than the default, note that this - container imposes an additional requirement on the STL allocator - type beyond those in [lib.allocator.requirements]: it does not - support allocators that define alternate memory models. That is, - it assumes that pointer, const_pointer, - size_type, and difference_type are just - T*, const T*, size_t, and - ptrdiff_t, respectively. This is also defined as - dense_hash_set::allocator_type. - -
- - -

Model of

- -Unique Hashed Associative Container, -Simple Associative Container - - -

Type requirements

- -
    -
  • -Key is Assignable. -
  • -EqualKey is a Binary Predicate whose argument type is Key. -
  • -EqualKey is an equivalence relation. -
  • -Alloc is an Allocator. -
- - -

Public base classes

- -None. - - -

Members

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberWhere definedDescription
- value_type - - Container - - The type of object, T, stored in the hash_set. -
- key_type - - Associative - Container - - The key type associated with value_type. -
- hasher - - Hashed - Associative Container - - The dense_hash_set's hash - function. -
- key_equal - - Hashed - Associative Container - - Function - object that compares keys for equality. -
- allocator_type - - Unordered Associative Container (tr1) - - The type of the Allocator given as a template parameter. -
- pointer - - Container - - Pointer to T. -
- reference - - Container - - Reference to T -
- const_reference - - Container - - Const reference to T -
- size_type - - Container - - An unsigned integral type. -
- difference_type - - Container - - A signed integral type. -
- iterator - - Container - - Iterator used to iterate through a dense_hash_set. -
- const_iterator - - Container - - Const iterator used to iterate through a dense_hash_set. - (iterator and const_iterator are the same type.) -
- local_iterator - - Unordered Associative Container (tr1) - - Iterator used to iterate through a subset of - dense_hash_set. -
- const_local_iterator - - Unordered Associative Container (tr1) - - Const iterator used to iterate through a subset of - dense_hash_set. -
- iterator begin() const - - Container - - Returns an iterator pointing to the beginning of the - dense_hash_set. -
- iterator end() const - - Container - - Returns an iterator pointing to the end of the - dense_hash_set. -
- local_iterator begin(size_type i) - - Unordered Associative Container (tr1) - - Returns a local_iterator pointing to the beginning of bucket - i in the dense_hash_set. -
- local_iterator end(size_type i) - - Unordered Associative Container (tr1) - - Returns a local_iterator pointing to the end of bucket - i in the dense_hash_set. For - dense_hash_set, each bucket contains either 0 or 1 item. -
- const_local_iterator begin(size_type i) const - - Unordered Associative Container (tr1) - - Returns a const_local_iterator pointing to the beginning of bucket - i in the dense_hash_set. -
- const_local_iterator end(size_type i) const - - Unordered Associative Container (tr1) - - Returns a const_local_iterator pointing to the end of bucket - i in the dense_hash_set. For - dense_hash_set, each bucket contains either 0 or 1 item. -
- size_type size() const - - Container - - Returns the size of the dense_hash_set. -
- size_type max_size() const - - Container - - Returns the largest possible size of the dense_hash_set. -
- bool empty() const - - Container - - true if the dense_hash_set's size is 0. -
- size_type bucket_count() const - - Hashed - Associative Container - - Returns the number of buckets used by the dense_hash_set. -
- size_type max_bucket_count() const - - Hashed - Associative Container - - Returns the largest possible number of buckets used by the dense_hash_set. -
- size_type bucket_size(size_type i) const - - Unordered Associative Container (tr1) - - Returns the number of elements in bucket i. For - dense_hash_set, this will be either 0 or 1. -
- size_type bucket(const key_type& key) const - - Unordered Associative Container (tr1) - - If the key exists in the set, returns the index of the bucket - containing the given key, otherwise, return the bucket the key - would be inserted into. - This value may be passed to begin(size_type) and - end(size_type). -
- float load_factor() const - - Unordered Associative Container (tr1) - - The number of elements in the dense_hash_set divided by - the number of buckets. -
- float max_load_factor() const - - Unordered Associative Container (tr1) - - The maximum load factor before increasing the number of buckets in - the dense_hash_set. -
- void max_load_factor(float new_grow) - - Unordered Associative Container (tr1) - - Sets the maximum load factor before increasing the number of - buckets in the dense_hash_set. -
- float min_load_factor() const - - dense_hash_set - - The minimum load factor before decreasing the number of buckets in - the dense_hash_set. -
- void min_load_factor(float new_grow) - - dense_hash_set - - Sets the minimum load factor before decreasing the number of - buckets in the dense_hash_set. -
- void set_resizing_parameters(float shrink, float grow) - - dense_hash_set - - DEPRECATED. See below. -
- void resize(size_type n) - - Hashed - Associative Container - - Increases the bucket count to hold at least n items. - [2] [3] -
- void rehash(size_type n) - - Unordered Associative Container (tr1) - - Increases the bucket count to hold at least n items. - This is identical to resize. - [2] [3] -
- hasher hash_funct() const - - Hashed - Associative Container - - Returns the hasher object used by the dense_hash_set. -
- hasher hash_function() const - - Unordered Associative Container (tr1) - - Returns the hasher object used by the dense_hash_set. - This is idential to hash_funct. -
- key_equal key_eq() const - - Hashed - Associative Container - - Returns the key_equal object used by the - dense_hash_set. -
- allocator_type get_allocator() const - - Unordered Associative Container (tr1) - - Returns the allocator_type object used by the - dense_hash_set: either the one passed in to the - constructor, or a default Alloc instance. -
- dense_hash_set() - - Container - - Creates an empty dense_hash_set. -
- dense_hash_set(size_type n) - - Hashed - Associative Container - - Creates an empty dense_hash_set that's optimized for holding - up to n items. - [3] -
- dense_hash_set(size_type n, const hasher& h) - - Hashed - Associative Container - - Creates an empty dense_hash_set that's optimized for up - to n items, using h as the hash function. -
- dense_hash_set(size_type n, const hasher& h, const - key_equal& k) - - Hashed - Associative Container - - Creates an empty dense_hash_set that's optimized for up - to n items, using h as the hash function and - k as the key equal function. -
- dense_hash_set(size_type n, const hasher& h, const - key_equal& k, const allocator_type& a) - - Unordered Associative Container (tr1) - - Creates an empty dense_hash_set that's optimized for up - to n items, using h as the hash function, - k as the key equal function, and a as the - allocator object. -
-
template <class InputIterator>
-dense_hash_set(InputIterator f, InputIterator l) 
-[2] -
- Unique - Hashed Associative Container - - Creates a dense_hash_set with a copy of a range. -
-
template <class InputIterator>
-dense_hash_set(InputIterator f, InputIterator l, size_type n) 
-[2] -
- Unique - Hashed Associative Container - - Creates a hash_set with a copy of a range that's optimized to - hold up to n items. -
-
template <class InputIterator>
-dense_hash_set(InputIterator f, InputIterator l, size_type n, const
-hasher& h) 
[2] -
- Unique - Hashed Associative Container - - Creates a hash_set with a copy of a range that's optimized to hold - up to n items, using h as the hash function. -
-
template <class InputIterator>
-dense_hash_set(InputIterator f, InputIterator l, size_type n, const
-hasher& h, const key_equal& k) 
[2] -
- Unique - Hashed Associative Container - - Creates a hash_set with a copy of a range that's optimized for - holding up to n items, using h as the hash - function and k as the key equal function. -
-
template <class InputIterator>
-dense_hash_set(InputIterator f, InputIterator l, size_type n, const
-hasher& h, const key_equal& k, const allocator_type& a) 
- [2] -
- Unordered Associative Container (tr1) - - Creates a hash_set with a copy of a range that's optimized for - holding up to n items, using h as the hash - function, k as the key equal function, and a as - the allocator object. -
- dense_hash_set(const hash_set&) - - Container - - The copy constructor. -
- dense_hash_set& operator=(const hash_set&) - - Container - - The assignment operator -
- void swap(hash_set&) - - Container - - Swaps the contents of two hash_sets. -
-
pair<iterator, bool> insert(const value_type& x)
-
-
- Unique - Associative Container - - Inserts x into the dense_hash_set. -
-
template <class InputIterator>
-void insert(InputIterator f, InputIterator l) 
[2] -
- Unique - Associative Container - - Inserts a range into the dense_hash_set. -
- void set_empty_key(const key_type& key) [4] - - dense_hash_set - - See below. -
- void set_deleted_key(const key_type& key) [4] - - dense_hash_set - - See below. -
- void clear_deleted_key() [4] - - dense_hash_set - - See below. -
- void erase(iterator pos) - - Associative - Container - - Erases the element pointed to by pos. - [4] -
- size_type erase(const key_type& k) - - Associative - Container - - Erases the element whose key is k. - [4] -
- void erase(iterator first, iterator last) - - Associative - Container - - Erases all elements in a range. - [4] -
- void clear() - - Associative - Container - - Erases all of the elements. -
- void clear_no_resize() - - dense_hash_set - - See below. -
- iterator find(const key_type& k) const - - Associative - Container - - Finds an element whose key is k. -
- size_type count(const key_type& k) const - - Unique - Associative Container - - Counts the number of elements whose key is k. -
-
pair<iterator, iterator> equal_range(const
-key_type& k) const
-
- Associative - Container - - Finds a range containing all elements whose key is k. -
- template <ValueSerializer, OUTPUT> - bool serialize(ValueSerializer serializer, OUTPUT *fp) - - dense_hash_set - - See below. -
- template <ValueSerializer, INPUT> - bool unserialize(ValueSerializer serializer, INPUT *fp) - - dense_hash_set - - See below. -
- NopointerSerializer - - dense_hash_set - - See below. -
- bool write_metadata(FILE *fp) - - dense_hash_set - - DEPRECATED. See below. -
- bool read_metadata(FILE *fp) - - dense_hash_set - - DEPRECATED. See below. -
- bool write_nopointer_data(FILE *fp) - - dense_hash_set - - DEPRECATED. See below. -
- bool read_nopointer_data(FILE *fp) - - dense_hash_set - - DEPRECATED. See below. -
-
bool operator==(const hash_set&, const hash_set&)
-
-
- Hashed - Associative Container - - Tests two hash_sets for equality. This is a global function, not a - member function. -
- - -

New members

- -These members are not defined in the Unique -Hashed Associative Container, Simple -Associative Container, or tr1's Unordered Associative -Container requirements, but are specific to -dense_hash_set. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberDescription
- void set_empty_key(const key_type& key) - - Sets the distinguished "empty" key to key. This must be - called immediately after construct time, before calls to another - other dense_hash_set operation. [4] -
- void set_deleted_key(const key_type& key) - - Sets the distinguished "deleted" key to key. This must be - called before any calls to erase(). [4] -
- void clear_deleted_key() - - Clears the distinguished "deleted" key. After this is called, - calls to erase() are not valid on this object. - [4] -
- void clear_no_resize() - - Clears the hashtable like clear() does, but does not - recover the memory used for hashtable buckets. (The memory - used by the items in the hashtable is still recovered.) - This can save time for applications that want to reuse a - dense_hash_set many times, each time with a similar number - of objects. -
- void set_resizing_parameters(float shrink, float grow) - - This function is DEPRECATED. It is equivalent to calling - min_load_factor(shrink); max_load_factor(grow). -
- template <ValueSerializer, OUTPUT> - bool serialize(ValueSerializer serializer, OUTPUT *fp) - - Emit a serialization of the hash_set to a stream. - See below. -
- template <ValueSerializer, INPUT> - bool unserialize(ValueSerializer serializer, INPUT *fp) - - Read in a serialization of a hash_set from a stream, replacing the - existing hash_set contents with the serialized contents. - See below. -
- bool write_metadata(FILE *fp) - - This function is DEPRECATED. See below. -
- bool read_metadata(FILE *fp) - - This function is DEPRECATED. See below. -
- bool write_nopointer_data(FILE *fp) - - This function is DEPRECATED. See below. -
- bool read_nopointer_data(FILE *fp) - - This function is DEPRECATED. See below. -
- - -

Notes

- -

[1] - -This member function relies on member template functions, which -may not be supported by all compilers. If your compiler supports -member templates, you can call this function with any type of input -iterator. If your compiler does not yet support member templates, -though, then the arguments must either be of type const -value_type* or of type dense_hash_set::const_iterator.

- -

[2] - -In order to preserve iterators, erasing hashtable elements does not -cause a hashtable to resize. This means that after a string of -erase() calls, the hashtable will use more space than is -required. At a cost of invalidating all current iterators, you can -call resize() to manually compact the hashtable. The -hashtable promotes too-small resize() arguments to the -smallest legal value, so to compact a hashtable, it's sufficient to -call resize(0). - -

[3] - -Unlike some other hashtable implementations, the optional n in -the calls to the constructor, resize, and rehash -indicates not the desired number of buckets that -should be allocated, but instead the expected number of items to be -inserted. The class then sizes the hash-set appropriately for the -number of items specified. It's not an error to actually insert more -or fewer items into the hashtable, but the implementation is most -efficient -- does the fewest hashtable resizes -- if the number of -inserted items is n or slightly less.

- -

[4] - -dense_hash_set requires you call -set_empty_key() immediately after constructing the hash-set, -and before calling any other dense_hash_set method. (This is -the largest difference between the dense_hash_set API and -other hash-set APIs. See implementation.html -for why this is necessary.) -The argument to set_empty_key() should be a key-value that -is never used for legitimate hash-set entries. If you have no such -key value, you will be unable to use dense_hash_set. It is -an error to call insert() with an item whose key is the -"empty key."

- -dense_hash_set also requires you call -set_deleted_key() before calling erase(). -The argument to set_deleted_key() should be a key-value that -is never used for legitimate hash-set entries. It must be different -from the key-value used for set_empty_key(). It is an error to call -erase() without first calling set_deleted_key(), and -it is also an error to call insert() with an item whose key -is the "deleted key."

- -

There is no need to call set_deleted_key if you do not -wish to call erase() on the hash-set.

- -

It is acceptable to change the deleted-key at any time by calling -set_deleted_key() with a new argument. You can also call -clear_deleted_key(), at which point all keys become valid for -insertion but no hashtable entries can be deleted until -set_deleted_key() is called again.

- - -

Input/Output

- -

It is possible to save and restore dense_hash_set objects -to an arbitrary stream (such as a disk file) using the -serialize() and unserialize() methods.

- -

Each of these methods takes two arguments: a serializer, -which says how to write hashtable items to disk, and a stream, -which can be a C++ stream (istream or its subclasses for -input, ostream or its subclasses for output), a -FILE*, or a user-defined type (as described below).

- -

The serializer is a functor that takes a stream and a -single hashtable element (a value_type) and copies the -hashtable element to the stream (for serialize()) or fills -the hashtable element contents from the stream (for -unserialize()), and returns true on success or false on -error. The copy-in and copy-out functions can be provided in a single -functor. Here is a sample serializer that read/writes a hashtable -element for a string hash_set to a FILE*:

- -
-struct StringSerializer {
-  bool operator()(FILE* fp, const std::string& value) const {
-    assert(value.length() <= 255);   // we only support writing small strings
-    const unsigned char size = value.length();
-    if (fwrite(&size, 1, 1, fp) != 1)
-      return false;
-    if (fwrite(value.data(), size, 1, fp) != 1)
-      return false;
-    return true;
-  }
-  bool operator()(FILE* fp, std::string* value) const {
-    unsigned char size;    // all strings are <= 255 chars long
-    if (fread(&size, 1, 1, fp) != 1)
-      return false;
-    char* buf = new char[size];
-    if (fread(buf, size, 1, fp) != 1) {
-      delete[] buf;
-      return false;
-    }
-    value->assign(buf, size);
-    delete[] buf;
-    return true;
-  }
-};
-
- -

Here is the functor being used in code (error checking omitted):

-
-   dense_hash_set<string> myset = CreateSet();
-   FILE* fp = fopen("hashtable.data", "w");
-   myset.serialize(StringSerializer(), fp);
-   fclose(fp);
-
-   dense_hash_set<string> myset2;
-   FILE* fp_in = fopen("hashtable.data", "r");
-   myset2.unserialize(StringSerializer(), fp_in);
-   fclose(fp_in);
-   assert(myset == myset2);
-
- -

Note that this example serializer can only serialize to a FILE*. -If you want to also be able to use this serializer with C++ streams, -you will need to write two more overloads of operator()'s, -one that reads from an istream, and one that writes to an -ostream. Likewise if you want to support serializing to a -custom class.

- -

If the key is "simple" enough, you can use the pre-supplied functor -NopointerSerializer. This copies the hashtable data using -the equivalent of a memcpy<>. Native C data types can be -serialized this way, as can structs of native C data types. Pointers -and STL objects cannot.

- -

Note that NopointerSerializer() does not do any endian -conversion. Thus, it is only appropriate when you intend to read the -data on the same endian architecture as you write the data.

- -

If you wish to serialize to your own stream type, you can do so by -creating an object which supports two methods:

-
-   bool Write(const void* data, size_t length);
-   bool Read(void* data, size_t length);
-
-

Write() writes length bytes of data to a -stream (presumably a stream owned by the object), while -Read() reads data bytes from the stream into -data. Both return true on success or false on error.

- -

To unserialize a hashtable from a stream, you wil typically create -a new dense_hash_set object, then call unserialize() -on it. unserialize() destroys the old contents of the -object. You must pass in the appropriate ValueSerializer for -the data being read in.

- -

Both serialize() and unserialize() return -true on success, or false if there was an error -streaming the data.

- -

Note that serialize() is not a const method, since it -purges deleted elements before serializing. It is not safe to -serialize from two threads at once, without synchronization.

- -

NOTE: older versions of dense_hash_set provided a -different API, consisting of read_metadata(), -read_nopointer_data(), write_metadata(), -write_nopointer_data(). These methods were never implemented -and always did nothing but return false. You should -exclusively use the new API for serialization.

- - -

Validity of Iterators

- -

erase() is guaranteed not to invalidate any iterators -- -except for any iterators pointing to the item being erased, of course. -insert() invalidates all iterators, as does -resize().

- -

This is implemented by making erase() not resize the -hashtable. If you desire maximum space efficiency, you can call -resize(0) after a string of erase() calls, to force -the hashtable to resize to the smallest possible size.

- -

In addition to invalidating iterators, insert() -and resize() invalidate all pointers into the hashtable. If -you want to store a pointer to an object held in a dense_hash_set, -either do so after finishing hashtable inserts, or store the object on -the heap and a pointer to it in the dense_hash_set.

- - - -

See also

- -

The following are SGI STL, and some Google STL, concepts and -classes related to dense_hash_set.

- -hash_set, -Associative Container, -Hashed Associative Container, -Simple Associative Container, -Unique Hashed Associative Container, -set, -map -multiset, -multimap, -hash_map, -hash_multiset, -hash_multimap, -sparse_hash_set, -sparse_hash_map, -dense_hash_map - - - diff --git a/clipper/sparsehash-2.0.3/doc/designstyle.css b/clipper/sparsehash-2.0.3/doc/designstyle.css deleted file mode 100644 index 29299af..0000000 --- a/clipper/sparsehash-2.0.3/doc/designstyle.css +++ /dev/null @@ -1,109 +0,0 @@ -body { - background-color: #ffffff; - color: black; - margin-right: 1in; - margin-left: 1in; -} - - -h1, h2, h3, h4, h5, h6 { - color: #3366ff; - font-family: sans-serif; -} -@media print { - /* Darker version for printing */ - h1, h2, h3, h4, h5, h6 { - color: #000080; - font-family: helvetica, sans-serif; - } -} - -h1 { - text-align: center; - font-size: 18pt; -} -h2 { - margin-left: -0.5in; -} -h3 { - margin-left: -0.25in; -} -h4 { - margin-left: -0.125in; -} -hr { - margin-left: -1in; -} - -/* Definition lists: definition term bold */ -dt { - font-weight: bold; -} - -address { - text-align: right; -} -/* Use the tag for bits of code and for variables and objects. */ -code,pre,samp,var { - color: #006000; -} -/* Use the tag for file and directory paths and names. */ -file { - color: #905050; - font-family: monospace; -} -/* Use the tag for stuff the user should type. */ -kbd { - color: #600000; -} -div.note p { - float: right; - width: 3in; - margin-right: 0%; - padding: 1px; - border: 2px solid #6060a0; - background-color: #fffff0; -} - -UL.nobullets { - list-style-type: none; - list-style-image: none; - margin-left: -1em; -} - -/* pretty printing styles. See prettify.js */ -.str { color: #080; } -.kwd { color: #008; } -.com { color: #800; } -.typ { color: #606; } -.lit { color: #066; } -.pun { color: #660; } -.pln { color: #000; } -.tag { color: #008; } -.atn { color: #606; } -.atv { color: #080; } -pre.prettyprint { padding: 2px; border: 1px solid #888; } - -.embsrc { background: #eee; } - -@media print { - .str { color: #060; } - .kwd { color: #006; font-weight: bold; } - .com { color: #600; font-style: italic; } - .typ { color: #404; font-weight: bold; } - .lit { color: #044; } - .pun { color: #440; } - .pln { color: #000; } - .tag { color: #006; font-weight: bold; } - .atn { color: #404; } - .atv { color: #060; } -} - -/* Table Column Headers */ -.hdr { - color: #006; - font-weight: bold; - background-color: #dddddd; } -.hdr2 { - color: #006; - background-color: #eeeeee; } \ No newline at end of file diff --git a/clipper/sparsehash-2.0.3/doc/implementation.html b/clipper/sparsehash-2.0.3/doc/implementation.html deleted file mode 100644 index 2050d54..0000000 --- a/clipper/sparsehash-2.0.3/doc/implementation.html +++ /dev/null @@ -1,371 +0,0 @@ - - - -Implementation notes: sparse_hash, dense_hash, sparsetable - - - - -

Implementation of sparse_hash_map, dense_hash_map, and -sparsetable

- -This document contains a few notes on how the data structures in this -package are implemented. This discussion refers at several points to -the classic text in this area: Knuth, The Art of Computer -Programming, Vol 3, Hashing. - - -
-

sparsetable

- -

For specificity, consider the declaration

- -
-   sparsetable<Foo> t(100);        // a sparse array with 100 elements
-
- -

A sparsetable is a random container that implements a sparse array, -that is, an array that uses very little memory to store unassigned -indices (in this case, between 1-2 bits per unassigned index). For -instance, if you allocate an array of size 5 and assign a[2] = [big -struct], then a[2] will take up a lot of memory but a[0], a[1], a[3], -and a[4] will not. Array elements that have a value are called -"assigned". Array elements that have no value yet, or have had their -value cleared using erase() or clear(), are called "unassigned". -For assigned elements, lookups return the assigned value; for -unassigned elements, they return the default value, which for t is -Foo().

- -

sparsetable is implemented as an array of "groups". Each group is -responsible for M array indices. The first group knows about -t[0]..t[M-1], the second about t[M]..t[2M-1], and so forth. (M is 48 -by default.) At construct time, t creates an array of (99/M + 1) -groups. From this point on, all operations -- insert, delete, lookup --- are passed to the appropriate group. In particular, any operation -on t[i] is actually performed on (t.group[i / M])[i % M].

- -

Each group contains of a vector, which holds assigned values, and a -bitmap of size M, which indicates which indices are assigned. A -lookup works as follows: the group is asked to look up index i, where -i < M. The group looks at bitmap[i]. If it's 0, the lookup fails. -If it's 1, then the group has to find the appropriate value in the -vector.

- -

find()

- -

Finding the appropriate vector element is the most expensive part of -the lookup. The code counts all bitmap entries <= i that are set to -1. (There's at least 1 of them, since bitmap[i] is 1.) Suppose there -are 4 such entries. Then the right value to return is the 4th element -of the vector: vector[3]. This takes time O(M), which is a constant -since M is a constant.

- -

insert()

- -

Insert starts with a lookup. If the lookup succeeds, the code merely -replaces vector[3] with the new value. If the lookup fails, then the -code must insert a new entry into the middle of the vector. Again, to -insert at position i, the code must count all the bitmap entries <= i -that are set to i. This indicates the position to insert into the -vector. All vector entries above that position must be moved to make -room for the new entry. This takes time, but still constant time -since the vector has size at most M.

- -

(Inserts could be made faster by using a list instead of a vector to -hold group values, but this would use much more memory, since each -list element requires a full pointer of overhead.)

- -

The only metadata that needs to be updated, after the actual value is -inserted, is to set bitmap[i] to 1. No other counts must be -maintained.

- -

delete()

- -

Deletes are similar to inserts. They start with a lookup. If it -fails, the delete is a noop. Otherwise, the appropriate entry is -removed from the vector, all the vector elements above it are moved -down one, and bitmap[i] is set to 0.

- -

iterators

- -

Sparsetable iterators pose a special burden. They must iterate over -unassigned array values, but the act of iterating should not cause an -assignment to happen -- otherwise, iterating over a sparsetable would -cause it to take up much more room. For const iterators, the matter -is simple: the iterator is merely programmed to return the default -value -- Foo() -- when dereferenced while pointing to an unassigned -entry.

- -

For non-const iterators, such simple techniques fail. Instead, -dereferencing a sparsetable_iterator returns an opaque object that -acts like a Foo in almost all situations, but isn't actually a Foo. -(It does this by defining operator=(), operator value_type(), and, -most sneakily, operator&().) This works in almost all cases. If it -doesn't, an explicit cast to value_type will solve the problem:

- -
-   printf("%d", static_cast<Foo>(*t.find(0)));
-
- -

To avoid such problems, consider using get() and set() instead of an -iterator:

- -
-   for (int i = 0; i < t.size(); ++i)
-      if (t.get(i) == ...)  t.set(i, ...);
-
- -

Sparsetable also has a special class of iterator, besides normal and -const: nonempty_iterator. This only iterates over array values that -are assigned. This is particularly fast given the sparsetable -implementation, since it can ignore the bitmaps entirely and just -iterate over the various group vectors.

- -

Resource use

- -

The space overhead for an sparsetable of size N is N + 48N/M bits. -For the default value of M, this is exactly 2 bits per array entry. -(That's for 32-bit pointers; for machines with 64-bit pointers, it's N -+ 80N/M bits, or 2.67 bits per entry.) -A larger M would use less overhead -- approaching 1 bit per array -entry -- but take longer for inserts, deletes, and lookups. A smaller -M would use more overhead but make operations somewhat faster.

- -

You can also look at some specific performance numbers.

- - -
-

sparse_hash_set

- -

For specificity, consider the declaration

- -
-   sparse_hash_set<Foo> t;
-
- -

sparse_hash_set is a hashtable. For more information on hashtables, -see Knuth. Hashtables are basically arrays with complicated logic on -top of them. sparse_hash_set uses a sparsetable to implement the -underlying array.

- -

In particular, sparse_hash_set stores its data in a sparsetable using -quadratic internal probing (see Knuth). Many hashtable -implementations use external probing, so each table element is -actually a pointer chain, holding many hashtable values. -sparse_hash_set, on the other hand, always stores at most one value in -each table location. If the hashtable wants to store a second value -at a given table location, it can't; it's forced to look somewhere -else.

- -

insert()

- -

As a specific example, suppose t is a new sparse_hash_set. It then -holds a sparsetable of size 32. The code for t.insert(foo) works as -follows:

- -

-1) Call hash<Foo>(foo) to convert foo into an integer i. (hash<Foo> is - the default hash function; you can specify a different one in the - template arguments.) - -

-2a) Look at t.sparsetable[i % 32]. If it's unassigned, assign it to - foo. foo is now in the hashtable. - -

-2b) If t.sparsetable[i % 32] is assigned, and its value is foo, then - do nothing: foo was already in t and the insert is a noop. - -

-2c) If t.sparsetable[i % 32] is assigned, but to a value other than - foo, look at t.sparsetable[(i+1) % 32]. If that also fails, try - t.sparsetable[(i+3) % 32], then t.sparsetable[(i+6) % 32]. In - general, keep trying the next triangular number. - -

-3) If the table is now "too full" -- say, 25 of the 32 table entries - are now assigned -- grow the table by creating a new sparsetable - that's twice as big, and rehashing every single element from the - old table into the new one. This keeps the table from ever filling - up. - -

-4) If the table is now "too empty" -- say, only 3 of the 32 table - entries are now assigned -- shrink the table by creating a new - sparsetable that's half as big, and rehashing every element as in - the growing case. This keeps the table overhead proportional to - the number of elements in the table. -

- -

Instead of using triangular numbers as offsets, one could just use -regular integers: try i, then i+1, then i+2, then i+3. This has bad -'clumping' behavior, as explored in Knuth. Quadratic probing, using -the triangular numbers, avoids the clumping while keeping cache -coherency in the common case. As long as the table size is a power of -2, the quadratic-probing method described above will explore every -table element if necessary, to find a good place to insert.

- -

(As a side note, using a table size that's a power of two has several -advantages, including the speed of calculating (i % table_size). On -the other hand, power-of-two tables are not very forgiving of a poor -hash function. Make sure your hash function is a good one! There are -plenty of dos and don'ts on the web (and in Knuth), for writing hash -functions.)

- -

The "too full" value, also called the "maximum occupancy", determines -a time-space tradeoff: in general, the higher it is, the less space is -wasted but the more probes must be performed for each insert. -sparse_hash_set uses a high maximum occupancy, since space is more -important than speed for this data structure.

- -

The "too empty" value is not necessary for performance but helps with -space use. It's rare for hashtable implementations to check this -value at insert() time -- after all, how will inserting cause a -hashtable to get too small? However, the sparse_hash_set -implementation never resizes on erase(); it's nice to have an erase() -that does not invalidate iterators. Thus, the first insert() after a -long string of erase()s could well trigger a hashtable shrink.

- -

find()

- -

find() works similarly to insert. The only difference is in step -(2a): if the value is unassigned, then the lookup fails immediately.

- -

delete()

- -

delete() is tricky in an internal-probing scheme. The obvious -implementation of just "unassigning" the relevant table entry doesn't -work. Consider the following scenario:

- -
-    t.insert(foo1);         // foo1 hashes to 4, is put in table[4]
-    t.insert(foo2);         // foo2 hashes to 4, is put in table[5]
-    t.erase(foo1);          // table[4] is now 'unassigned'
-    t.lookup(foo2);         // fails since table[hash(foo2)] is unassigned
-
- -

To avoid these failure situations, delete(foo1) is actually -implemented by replacing foo1 by a special 'delete' value in the -hashtable. This 'delete' value causes the table entry to be -considered unassigned for the purposes of insertion -- if foo3 hashes -to 4 as well, it can go into table[4] no problem -- but assigned for -the purposes of lookup.

- -

What is this special 'delete' value? The delete value has to be an -element of type Foo, since the table can't hold anything else. It -obviously must be an element the client would never want to insert on -its own, or else the code couldn't distinguish deleted entries from -'real' entries with the same value. There's no way to determine a -good value automatically. The client has to specify it explicitly. -This is what the set_deleted_key() method does.

- -

Note that set_deleted_key() is only necessary if the client actually -wants to call t.erase(). For insert-only hash-sets, set_deleted_key() -is unnecessary.

- -

When copying the hashtable, either to grow it or shrink it, the -special 'delete' values are not copied into the new table. The -copy-time rehash makes them unnecessary.

- -

Resource use

- -

The data is stored in a sparsetable, so space use is the same as -for sparsetable. However, by default the sparse_hash_set -implementation tries to keep about half the table buckets empty, to -keep lookup-chains short. Since sparsehashmap has about 2 bits -overhead per bucket (or 2.5 bits on 64-bit systems), sparse_hash_map -has about 4-5 bits overhead per hashtable item.

- -

Time use is also determined in large part by the sparsetable -implementation. However, there is also an extra probing cost in -hashtables, which depends in large part on the "too full" value. It -should be rare to need more than 4-5 probes per lookup, and usually -significantly less will suffice.

- -

A note on growing and shrinking the hashtable: all hashtable -implementations use the most memory when growing a hashtable, since -they must have room for both the old table and the new table at the -same time. sparse_hash_set is careful to delete entries from the old -hashtable as soon as they're copied into the new one, to minimize this -space overhead. (It does this efficiently by using its knowledge of -the sparsetable class and copying one sparsetable group at a time.)

- -

You can also look at some specific performance numbers.

- - -
-

sparse_hash_map

- -

sparse_hash_map is implemented identically to sparse_hash_set. The -only difference is instead of storing just Foo in each table entry, -the data structure stores pair<Foo, Value>.

- - -
-

dense_hash_set

- -

The hashtable aspects of dense_hash_set are identical to -sparse_hash_set: it uses quadratic internal probing, and resizes -hashtables in exactly the same way. The difference is in the -underlying array: instead of using a sparsetable, dense_hash_set uses -a C array. This means much more space is used, especially if Foo is -big. However, it makes all operations faster, since sparsetable has -memory management overhead that C arrays do not.

- -

The use of C arrays instead of sparsetables points to one immediate -complication dense_hash_set has that sparse_hash_set does not: the -need to distinguish assigned from unassigned entries. In a -sparsetable, this is accomplished by a bitmap. dense_hash_set, on the -other hand, uses a dedicated value to specify unassigned entries. -Thus, dense_hash_set has two special values: one to indicate deleted -table entries, and one to indicated unassigned table entries. At -construct time, all table entries are initialized to 'unassigned'.

- -

dense_hash_set provides the method set_empty_key() to indicate the -value that should be used for unassigned entries. Like -set_deleted_key(), set_empty_key() requires a value that will not be -used by the client for any legitimate purpose. Unlike -set_deleted_key(), set_empty_key() is always required, no matter what -hashtable operations the client wishes to perform.

- -

Resource use

- -

This implementation is fast because even though dense_hash_set may not -be space efficient, most lookups are localized: a single lookup may -need to access table[i], and maybe table[i+1] and table[i+3], but -nothing other than that. For all but the biggest data structures, -these will frequently be in a single cache line.

- -

This implementation takes, for every unused bucket, space as big as -the key-type. Usually between half and two-thirds of the buckets are -empty.

- -

The doubling method used by dense_hash_set tends to work poorly -with most memory allocators. This is because memory allocators tend -to have memory 'buckets' which are a power of two. Since each -doubling of a dense_hash_set doubles the memory use, a single -hashtable doubling will require a new memory 'bucket' from the memory -allocator, leaving the old bucket stranded as fragmented memory. -Hence, it's not recommended this data structure be used with many -inserts in memory-constrained situations.

- -

You can also look at some specific performance numbers.

- - -
-

dense_hash_map

- -

dense_hash_map is identical to dense_hash_set except for what values -are stored in each table entry.

- -
- -Craig Silverstein
-Thu Jan 6 20:15:42 PST 2005 -
- - - diff --git a/clipper/sparsehash-2.0.3/doc/index.html b/clipper/sparsehash-2.0.3/doc/index.html deleted file mode 100644 index 750ab03..0000000 --- a/clipper/sparsehash-2.0.3/doc/index.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - Sparsehash Package (formerly Google Sparsehash) - - - - - - - -

Sparsehash Package (formerly -Google Sparsehash)

-
- -

The sparsehash package consists of two hashtable -implementations: sparse, which is designed to be very space -efficient, and dense, which is designed to be very time -efficient. For each one, the package provides both a hash-map and a -hash-set, to mirror the classes in the common STL implementation.

- -

Documentation on how to use these classes:

- - -

In addition to the hash-map (and hash-set) classes, there's also a -lower-level class that implements a "sparse" array. This class can be -useful in its own right; consider using it when you'd normally use a -sparse_hash_map, but your keys are all small-ish -integers.

- - -

There is also a doc explaining the implementation details of these -classes, for those who are curious. And finally, you can see some -performance comparisons, both between -the various classes here, but also between these implementations and -other standard hashtable implementations.

- -
-
-Craig Silverstein
-Last modified: Thu Jan 25 17:58:02 PST 2007 -
- - - diff --git a/clipper/sparsehash-2.0.3/doc/performance.html b/clipper/sparsehash-2.0.3/doc/performance.html deleted file mode 100644 index 99a6b9d..0000000 --- a/clipper/sparsehash-2.0.3/doc/performance.html +++ /dev/null @@ -1,96 +0,0 @@ - - - -Performance notes: sparse_hash, dense_hash, sparsetable - - - - -

Performance Numbers

- -

Here are some performance numbers from an example desktop machine, -taken from a version of time_hash_map that was instrumented to also -report memory allocation information (this modification is not -included by default because it required a big hack to do, including -modifying the STL code to not try to do its own freelist management).

- -

Note there are lots of caveats on these numbers: they may differ from -machine to machine and compiler to compiler, and they only test a very -particular usage pattern that may not match how you use hashtables -- -for instance, they test hashtables with very small keys. However, -they're still useful for a baseline comparison of the various -hashtable implementations.

- -

These figures are from a 2.80GHz Pentium 4 with 2G of memory. The -'standard' hash_map and map implementations are the SGI STL code -included with gcc2. Compiled with gcc2.95.3 -g --O2

- -
-======
-Average over 10000000 iterations
-Wed Dec  8 14:56:38 PST 2004
-
-SPARSE_HASH_MAP:
-map_grow                  665 ns
-map_predict/grow          303 ns
-map_replace               177 ns
-map_fetch                 117 ns
-map_remove                192 ns
-memory used in map_grow    84.3956 Mbytes
-
-DENSE_HASH_MAP:
-map_grow                   84 ns
-map_predict/grow           22 ns
-map_replace                18 ns
-map_fetch                  13 ns
-map_remove                 23 ns
-memory used in map_grow   256.0000 Mbytes
-
-STANDARD HASH_MAP:
-map_grow                  162 ns
-map_predict/grow          107 ns
-map_replace                44 ns
-map_fetch                  22 ns
-map_remove                124 ns
-memory used in map_grow   204.1643 Mbytes
-
-STANDARD MAP:
-map_grow                  297 ns
-map_predict/grow          282 ns
-map_replace               113 ns
-map_fetch                 113 ns
-map_remove                238 ns
-memory used in map_grow   236.8081 Mbytes
-
- - -

A Note on Hash Functions

- -

For good performance, the sparsehash hash routines depend on a good -hash function: one that distributes data evenly. Many hashtable -implementations come with sub-optimal hash functions that can degrade -performance. For instance, the hash function given in Knuth's _Art of -Computer Programming_, and the default string hash function in SGI's -STL implementation, both distribute certain data sets unevenly, -leading to poor performance.

- -

As an example, in one test of the default SGI STL string hash -function against the Hsieh hash function (see below), for a particular -set of string keys, the Hsieh function resulted in hashtable lookups -that were 20 times as fast as the STLPort hash function. The string -keys were chosen to be "hard" to hash well, so these results may not -be typical, but they are suggestive.

- -

There has been much research over the years into good hash -functions. Here are some hash functions of note.

- - - - - diff --git a/clipper/sparsehash-2.0.3/doc/sparse_hash_map.html b/clipper/sparsehash-2.0.3/doc/sparse_hash_map.html deleted file mode 100644 index 9eaf894..0000000 --- a/clipper/sparsehash-2.0.3/doc/sparse_hash_map.html +++ /dev/null @@ -1,1719 +0,0 @@ - - - - - -sparse_hash_map<Key, Data, HashFcn, EqualKey, Alloc> - - - - -

[Note: this document is formatted similarly to the SGI STL -implementation documentation pages, and refers to concepts and classes -defined there. However, neither this document nor the code it -describes is associated with SGI, nor is it necessary to have SGI's -STL implementation installed in order to use this class.]

- - -

sparse_hash_map<Key, Data, HashFcn, EqualKey, Alloc>

- -

sparse_hash_map is a Hashed -Associative Container that associates objects of type Key -with objects of type Data. sparse_hash_map is a Pair -Associative Container, meaning that its value type is pair<const Key, Data>. It is also a -Unique -Associative Container, meaning that no two elements have keys that -compare equal using EqualKey.

- -

Looking up an element in a sparse_hash_map by its key is -efficient, so sparse_hash_map is useful for "dictionaries" -where the order of elements is irrelevant. If it is important for the -elements to be in a particular order, however, then map is more appropriate.

- -

sparse_hash_map is distinguished from other hash-map -implementations by its stingy use of memory and by the ability to save -and restore contents to disk. On the other hand, this hash-map -implementation, while still efficient, is slower than other hash-map -implementations, and it also has requirements -- for instance, for a -distinguished "deleted key" -- that may not be easy for all -applications to satisfy.

- -

This class is appropriate for applications that need to store -large "dictionaries" in memory, or for applications that need these -dictionaries to be persistent.

- - -

Example

- -(Note: this example uses SGI semantics for hash<> --- the kind used by gcc and most Unix compiler suites -- and not -Dinkumware semantics -- the kind used by Microsoft Visual Studio. If -you are using MSVC, this example will not compile as-is: you'll need -to change hash to hash_compare, and you -won't use eqstr at all. See the MSVC documentation for -hash_map and hash_compare, for more -details.) - -
-#include <iostream>
-#include <sparsehash/sparse_hash_map>
-
-using google::sparse_hash_map;      // namespace where class lives by default
-using std::cout;
-using std::endl;
-using ext::hash;  // or __gnu_cxx::hash, or maybe tr1::hash, depending on your OS
-
-struct eqstr
-{
-  bool operator()(const char* s1, const char* s2) const
-  {
-    return (s1 == s2) || (s1 && s2 && strcmp(s1, s2) == 0);
-  }
-};
-
-int main()
-{
-  sparse_hash_map<const char*, int, hash<const char*>, eqstr> months;
-  
-  months["january"] = 31;
-  months["february"] = 28;
-  months["march"] = 31;
-  months["april"] = 30;
-  months["may"] = 31;
-  months["june"] = 30;
-  months["july"] = 31;
-  months["august"] = 31;
-  months["september"] = 30;
-  months["october"] = 31;
-  months["november"] = 30;
-  months["december"] = 31;
-  
-  cout << "september -> " << months["september"] << endl;
-  cout << "april     -> " << months["april"] << endl;
-  cout << "june      -> " << months["june"] << endl;
-  cout << "november  -> " << months["november"] << endl;
-}
-
- - -

Definition

- -Defined in the header sparse_hash_map. -This class is not part of the C++ standard, though it is mostly -compatible with the tr1 class unordered_map. - - -

Template parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDescriptionDefault
- Key - - The hash_map's key type. This is also defined as - sparse_hash_map::key_type. - -   -
- Data - - The hash_map's data type. This is also defined as - sparse_hash_map::data_type. - -   -
- HashFcn - - The hash function used by the - hash_map. This is also defined as sparse_hash_map::hasher. -
Note: Hashtable performance depends heavily on the choice of - hash function. See the performance - page for more information. -
- hash<Key> -
- EqualKey - - The hash_map key equality function: a binary predicate that determines - whether two keys are equal. This is also defined as - sparse_hash_map::key_equal. - - equal_to<Key> -
- Alloc - - The STL allocator to use. By default, uses the provided allocator - libc_allocator_with_realloc, which likely gives better - performance than other STL allocators due to its built-in support - for realloc, which this container takes advantage of. - If you use an allocator other than the default, note that this - container imposes an additional requirement on the STL allocator - type beyond those in [lib.allocator.requirements]: it does not - support allocators that define alternate memory models. That is, - it assumes that pointer, const_pointer, - size_type, and difference_type are just - T*, const T*, size_t, and - ptrdiff_t, respectively. This is also defined as - sparse_hash_map::allocator_type. - -
- - -

Model of

- -Unique Hashed Associative Container, -Pair Associative Container - - -

Type requirements

- -
    -
  • -Key is Assignable. -
  • -EqualKey is a Binary Predicate whose argument type is Key. -
  • -EqualKey is an equivalence relation. -
  • -Alloc is an Allocator. -
- - -

Public base classes

- -None. - - -

Members

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberWhere definedDescription
- key_type - - Associative - Container - - The sparse_hash_map's key type, Key. -
- data_type - - Pair - Associative Container - - The type of object associated with the keys. -
- value_type - - Pair - Associative Container - - The type of object, pair<const key_type, data_type>, - stored in the hash_map. -
- hasher - - Hashed - Associative Container - - The sparse_hash_map's hash - function. -
- key_equal - - Hashed - Associative Container - - Function - object that compares keys for equality. -
- allocator_type - - Unordered Associative Container (tr1) - - The type of the Allocator given as a template parameter. -
- pointer - - Container - - Pointer to T. -
- reference - - Container - - Reference to T -
- const_reference - - Container - - Const reference to T -
- size_type - - Container - - An unsigned integral type. -
- difference_type - - Container - - A signed integral type. -
- iterator - - Container - - Iterator used to iterate through a sparse_hash_map. [1] -
- const_iterator - - Container - - Const iterator used to iterate through a sparse_hash_map. -
- local_iterator - - Unordered Associative Container (tr1) - - Iterator used to iterate through a subset of - sparse_hash_map. [1] -
- const_local_iterator - - Unordered Associative Container (tr1) - - Const iterator used to iterate through a subset of - sparse_hash_map. -
- iterator begin() - - Container - - Returns an iterator pointing to the beginning of the - sparse_hash_map. -
- iterator end() - - Container - - Returns an iterator pointing to the end of the - sparse_hash_map. -
- const_iterator begin() const - - Container - - Returns an const_iterator pointing to the beginning of the - sparse_hash_map. -
- const_iterator end() const - - Container - - Returns an const_iterator pointing to the end of the - sparse_hash_map. -
- local_iterator begin(size_type i) - - Unordered Associative Container (tr1) - - Returns a local_iterator pointing to the beginning of bucket - i in the sparse_hash_map. -
- local_iterator end(size_type i) - - Unordered Associative Container (tr1) - - Returns a local_iterator pointing to the end of bucket - i in the sparse_hash_map. For - sparse_hash_map, each bucket contains either 0 or 1 item. -
- const_local_iterator begin(size_type i) const - - Unordered Associative Container (tr1) - - Returns a const_local_iterator pointing to the beginning of bucket - i in the sparse_hash_map. -
- const_local_iterator end(size_type i) const - - Unordered Associative Container (tr1) - - Returns a const_local_iterator pointing to the end of bucket - i in the sparse_hash_map. For - sparse_hash_map, each bucket contains either 0 or 1 item. -
- size_type size() const - - Container - - Returns the size of the sparse_hash_map. -
- size_type max_size() const - - Container - - Returns the largest possible size of the sparse_hash_map. -
- bool empty() const - - Container - - true if the sparse_hash_map's size is 0. -
- size_type bucket_count() const - - Hashed - Associative Container - - Returns the number of buckets used by the sparse_hash_map. -
- size_type max_bucket_count() const - - Hashed - Associative Container - - Returns the largest possible number of buckets used by the sparse_hash_map. -
- size_type bucket_size(size_type i) const - - Unordered Associative Container (tr1) - - Returns the number of elements in bucket i. For - sparse_hash_map, this will be either 0 or 1. -
- size_type bucket(const key_type& key) const - - Unordered Associative Container (tr1) - - If the key exists in the map, returns the index of the bucket - containing the given key, otherwise, return the bucket the key - would be inserted into. - This value may be passed to begin(size_type) and - end(size_type). -
- float load_factor() const - - Unordered Associative Container (tr1) - - The number of elements in the sparse_hash_map divided by - the number of buckets. -
- float max_load_factor() const - - Unordered Associative Container (tr1) - - The maximum load factor before increasing the number of buckets in - the sparse_hash_map. -
- void max_load_factor(float new_grow) - - Unordered Associative Container (tr1) - - Sets the maximum load factor before increasing the number of - buckets in the sparse_hash_map. -
- float min_load_factor() const - - sparse_hash_map - - The minimum load factor before decreasing the number of buckets in - the sparse_hash_map. -
- void min_load_factor(float new_grow) - - sparse_hash_map - - Sets the minimum load factor before decreasing the number of - buckets in the sparse_hash_map. -
- void set_resizing_parameters(float shrink, float grow) - - sparse_hash_map - - DEPRECATED. See below. -
- void resize(size_type n) - - Hashed - Associative Container - - Increases the bucket count to hold at least n items. - [4] [5] -
- void rehash(size_type n) - - Unordered Associative Container (tr1) - - Increases the bucket count to hold at least n items. - This is identical to resize. - [4] [5] -
- hasher hash_funct() const - - Hashed - Associative Container - - Returns the hasher object used by the sparse_hash_map. -
- hasher hash_function() const - - Unordered Associative Container (tr1) - - Returns the hasher object used by the sparse_hash_map. - This is idential to hash_funct. -
- key_equal key_eq() const - - Hashed - Associative Container - - Returns the key_equal object used by the - sparse_hash_map. -
- allocator_type get_allocator() const - - Unordered Associative Container (tr1) - - Returns the allocator_type object used by the - sparse_hash_map: either the one passed in to the - constructor, or a default Alloc instance. -
- sparse_hash_map() - - Container - - Creates an empty sparse_hash_map. -
- sparse_hash_map(size_type n) - - Hashed - Associative Container - - Creates an empty sparse_hash_map that's optimized for holding - up to n items. - [5] -
- sparse_hash_map(size_type n, const hasher& h) - - Hashed - Associative Container - - Creates an empty sparse_hash_map that's optimized for up - to n items, using h as the hash function. -
- sparse_hash_map(size_type n, const hasher& h, const - key_equal& k) - - Hashed - Associative Container - - Creates an empty sparse_hash_map that's optimized for up - to n items, using h as the hash function and - k as the key equal function. -
- sparse_hash_map(size_type n, const hasher& h, const - key_equal& k, const allocator_type& a) - - Unordered Associative Container (tr1) - - Creates an empty sparse_hash_map that's optimized for up - to n items, using h as the hash function, - k as the key equal function, and a as the - allocator object. -
-
template <class InputIterator>
-sparse_hash_map(InputIterator f, InputIterator l) 
-[2] -
- Unique - Hashed Associative Container - - Creates a sparse_hash_map with a copy of a range. -
-
template <class InputIterator>
-sparse_hash_map(InputIterator f, InputIterator l, size_type n) 
-[2] -
- Unique - Hashed Associative Container - - Creates a hash_map with a copy of a range that's optimized to - hold up to n items. -
-
template <class InputIterator>
-sparse_hash_map(InputIterator f, InputIterator l, size_type n, const
-hasher& h) 
[2] -
- Unique - Hashed Associative Container - - Creates a hash_map with a copy of a range that's optimized to hold - up to n items, using h as the hash function. -
-
template <class InputIterator>
-sparse_hash_map(InputIterator f, InputIterator l, size_type n, const
-hasher& h, const key_equal& k) 
[2] -
- Unique - Hashed Associative Container - - Creates a hash_map with a copy of a range that's optimized for - holding up to n items, using h as the hash - function and k as the key equal function. -
-
template <class InputIterator>
-sparse_hash_map(InputIterator f, InputIterator l, size_type n, const
-hasher& h, const key_equal& k, const allocator_type& a) 
- [2] -
- Unordered Associative Container (tr1) - - Creates a hash_map with a copy of a range that's optimized for - holding up to n items, using h as the hash - function, k as the key equal function, and a as - the allocator object. -
- sparse_hash_map(const hash_map&) - - Container - - The copy constructor. -
- sparse_hash_map& operator=(const hash_map&) - - Container - - The assignment operator -
- void swap(hash_map&) - - Container - - Swaps the contents of two hash_maps. -
-
pair<iterator, bool> insert(const value_type& x)
-
-
- Unique - Associative Container - - Inserts x into the sparse_hash_map. -
-
template <class InputIterator>
-void insert(InputIterator f, InputIterator l) 
[2] -
- Unique - Associative Container - - Inserts a range into the sparse_hash_map. -
- void set_deleted_key(const key_type& key) [6] - - sparse_hash_map - - See below. -
- void clear_deleted_key() [6] - - sparse_hash_map - - See below. -
- void erase(iterator pos) - - Associative - Container - - Erases the element pointed to by pos. - [6] -
- size_type erase(const key_type& k) - - Associative - Container - - Erases the element whose key is k. - [6] -
- void erase(iterator first, iterator last) - - Associative - Container - - Erases all elements in a range. - [6] -
- void clear() - - Associative - Container - - Erases all of the elements. -
- const_iterator find(const key_type& k) const - - Associative - Container - - Finds an element whose key is k. -
- iterator find(const key_type& k) - - Associative - Container - - Finds an element whose key is k. -
- size_type count(const key_type& k) const - - Unique - Associative Container - - Counts the number of elements whose key is k. -
-
pair<const_iterator, const_iterator> equal_range(const
-key_type& k) const 
-
- Associative - Container - - Finds a range containing all elements whose key is k. -
-
pair<iterator, iterator> equal_range(const
-key_type& k) 
-
- Associative - Container - - Finds a range containing all elements whose key is k. -
-
data_type& operator[](const key_type& k) [3] 
-
- sparse_hash_map - - See below. -
- template <ValueSerializer, OUTPUT> - bool serialize(ValueSerializer serializer, OUTPUT *fp) - - sparse_hash_map - - See below. -
- template <ValueSerializer, INPUT> - bool unserialize(ValueSerializer serializer, INPUT *fp) - - sparse_hash_map - - See below. -
- NopointerSerializer - - sparse_hash_map - - See below. -
- bool write_metadata(FILE *fp) - - sparse_hash_map - - DEPRECATED. See below. -
- bool read_metadata(FILE *fp) - - sparse_hash_map - - DEPRECATED. See below. -
- bool write_nopointer_data(FILE *fp) - - sparse_hash_map - - DEPRECATED. See below. -
- bool read_nopointer_data(FILE *fp) - - sparse_hash_map - - DEPRECATED. See below. -
-
bool operator==(const hash_map&, const hash_map&)
-
-
- Hashed - Associative Container - - Tests two hash_maps for equality. This is a global function, not a - member function. -
- - -

New members

- -These members are not defined in the Unique -Hashed Associative Container, Pair -Associative Container, or tr1's -Unordered Associative Container requirements, -but are specific to sparse_hash_map. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberDescription
- void set_deleted_key(const key_type& key) - - Sets the distinguished "deleted" key to key. This must be - called before any calls to erase(). [6] -
- void clear_deleted_key() - - Clears the distinguished "deleted" key. After this is called, - calls to erase() are not valid on this object. - [6] -
-
-data_type& 
-operator[](const key_type& k) [3]
-
-
- Returns a reference to the object that is associated with - a particular key. If the sparse_hash_map does not already - contain such an object, operator[] inserts the default - object data_type(). [3] -
- void set_resizing_parameters(float shrink, float grow) - - This function is DEPRECATED. It is equivalent to calling - min_load_factor(shrink); max_load_factor(grow). -
- template <ValueSerializer, OUTPUT> - bool serialize(ValueSerializer serializer, OUTPUT *fp) - - Emit a serialization of the hash_map to a stream. - See below. -
- template <ValueSerializer, INPUT> - bool unserialize(ValueSerializer serializer, INPUT *fp) - - Read in a serialization of a hash_map from a stream, replacing the - existing hash_map contents with the serialized contents. - See below. -
- bool write_metadata(FILE *fp) - - This function is DEPRECATED. See below. -
- bool read_metadata(FILE *fp) - - This function is DEPRECATED. See below. -
- bool write_nopointer_data(FILE *fp) - - This function is DEPRECATED. See below. -
- bool read_nopointer_data(FILE *fp) - - This function is DEPRECATED. See below. -
- - -

Notes

- -

[1] - -sparse_hash_map::iterator is not a mutable iterator, because -sparse_hash_map::value_type is not Assignable. -That is, if i is of type sparse_hash_map::iterator -and p is of type sparse_hash_map::value_type, then -*i = p is not a valid expression. However, -sparse_hash_map::iterator isn't a constant iterator either, -because it can be used to modify the object that it points to. Using -the same notation as above, (*i).second = p is a valid -expression.

- -

[2] - -This member function relies on member template functions, which -may not be supported by all compilers. If your compiler supports -member templates, you can call this function with any type of input -iterator. If your compiler does not yet support member templates, -though, then the arguments must either be of type const -value_type* or of type sparse_hash_map::const_iterator.

- -

[3] - -Since operator[] might insert a new element into the -sparse_hash_map, it can't possibly be a const member -function. Note that the definition of operator[] is -extremely simple: m[k] is equivalent to -(*((m.insert(value_type(k, data_type()))).first)).second. -Strictly speaking, this member function is unnecessary: it exists only -for convenience.

- -

[4] - -In order to preserve iterators, erasing hashtable elements does not -cause a hashtable to resize. This means that after a string of -erase() calls, the hashtable will use more space than is -required. At a cost of invalidating all current iterators, you can -call resize() to manually compact the hashtable. The -hashtable promotes too-small resize() arguments to the -smallest legal value, so to compact a hashtable, it's sufficient to -call resize(0). - -

[5] - -Unlike some other hashtable implementations, the optional n in -the calls to the constructor, resize, and rehash -indicates not the desired number of buckets that -should be allocated, but instead the expected number of items to be -inserted. The class then sizes the hash-map appropriately for the -number of items specified. It's not an error to actually insert more -or fewer items into the hashtable, but the implementation is most -efficient -- does the fewest hashtable resizes -- if the number of -inserted items is n or slightly less.

- -

[6] - -sparse_hash_map requires you call -set_deleted_key() before calling erase(). (This is -the largest difference between the sparse_hash_map API and -other hash-map APIs. See implementation.html -for why this is necessary.) -The argument to set_deleted_key() should be a key-value that -is never used for legitimate hash-map entries. It is an error to call -erase() without first calling set_deleted_key(), and -it is also an error to call insert() with an item whose key -is the "deleted key."

- -

There is no need to call set_deleted_key if you do not -wish to call erase() on the hash-map.

- -

It is acceptable to change the deleted-key at any time by calling -set_deleted_key() with a new argument. You can also call -clear_deleted_key(), at which point all keys become valid for -insertion but no hashtable entries can be deleted until -set_deleted_key() is called again.

- -

Note: If you use set_deleted_key, it is also -necessary that data_type has a zero-argument default -constructor. This is because sparse_hash_map uses the -special value pair(deleted_key, data_type()) to denote -deleted buckets, and thus needs to be able to create -data_type using a zero-argument constructor.

- -

If your data_type does not have a zero-argument default -constructor, there are several workarounds:

-
    -
  • Store a pointer to data_type in the map, instead of - data_type directly. This may yield faster code as - well, since hashtable-resizes will just have to move pointers - around, rather than copying the entire data_type. -
  • Add a zero-argument default constructor to data_type. -
  • Subclass data_type and add a zero-argument default - constructor to the subclass. -
- -

If you do not use set_deleted_key, then there is no -requirement that data_type havea zero-argument default -constructor. - - -

Input/Output

- -

It is possible to save and restore sparse_hash_map objects -to an arbitrary stream (such as a disk file) using the -serialize() and unserialize() methods.

- -

Each of these methods takes two arguments: a serializer, -which says how to write hashtable items to disk, and a stream, -which can be a C++ stream (istream or its subclasses for -input, ostream or its subclasses for output), a -FILE*, or a user-defined type (as described below).

- -

The serializer is a functor that takes a stream and a -single hashtable element (a value_type, which is a pair of -the key and data) and copies the hashtable element to the stream (for -serialize()) or fills the hashtable element contents from the -stream (for unserialize()), and returns true on success or -false on error. The copy-in and copy-out functions can be provided in -a single functor. Here is a sample serializer that read/writes a hashtable -element for an int-to-string hash_map to a FILE*:

- -
-struct StringToIntSerializer {
-  bool operator()(FILE* fp, const std::pair<const int, std::string>& value) const {
-    // Write the key.  We ignore endianness for this example.
-    if (fwrite(&value.first, sizeof(value.first), 1, fp) != 1)
-      return false;
-    // Write the value.
-    assert(value.second.length() <= 255);   // we only support writing small strings
-    const unsigned char size = value.second.length();
-    if (fwrite(&size, 1, 1, fp) != 1)
-      return false;
-    if (fwrite(value.second.data(), size, 1, fp) != 1)
-      return false;
-    return true;
-  }
-  bool operator()(FILE* fp, std::pair<const int, std::string>* value) const {
-    // Read the key.  Note the need for const_cast to get around
-    // the fact hash_map keys are always const.
-    if (fread(const_cast<int*>(&value->first), sizeof(value->first), 1, fp) != 1)
-      return false;
-    // Read the value.
-    unsigned char size;    // all strings are <= 255 chars long
-    if (fread(&size, 1, 1, fp) != 1)
-      return false;
-    char* buf = new char[size];
-    if (fread(buf, size, 1, fp) != 1) {
-      delete[] buf;
-      return false;
-    }
-    new(&value->second) string(buf, size);
-    delete[] buf;
-    return true;
-  }
-};
-
- -

Here is the functor being used in code (error checking omitted):

-
-   sparse_hash_map<string, int> mymap = CreateMap();
-   FILE* fp = fopen("hashtable.data", "w");
-   mymap.serialize(StringToIntSerializer(), fp);
-   fclose(fp);
-
-   sparse_hash_map<string, int> mymap2;
-   FILE* fp_in = fopen("hashtable.data", "r");
-   mymap2.unserialize(StringToIntSerializer(), fp_in);
-   fclose(fp_in);
-   assert(mymap == mymap2);
-
- -

Important note: the code above uses placement-new to -instantiate the string. This is required for any -non-POD type (which is why we didn't need to worry about this to read -in the integer key). The value_type passed in to the unserializer -points to garbage memory, so it is not safe to assign to it directly -if doing so causes a destructor to be called.

- -

Also note that this example serializer can only serialize to a -FILE*. If you want to also be able to use this serializer with C++ -streams, you will need to write two more overloads of -operator()'s, one that reads from an istream, and -one that writes to an ostream. Likewise if you want to -support serializing to a custom class.

- -

If both the key and data are "simple" enough, you can use the -pre-supplied functor NopointerSerializer. This copies the -hashtable data using the equivalent of a memcpy<>. Native C -data types can be serialized this way, as can structs of native C data -types. Pointers and STL objects cannot.

- -

Note that NopointerSerializer() does not do any endian -conversion. Thus, it is only appropriate when you intend to read the -data on the same endian architecture as you write the data.

- -

If you wish to serialize to your own stream type, you can do so by -creating an object which supports two methods:

-
-   bool Write(const void* data, size_t length);
-   bool Read(void* data, size_t length);
-
-

Write() writes length bytes of data to a -stream (presumably a stream owned by the object), while -Read() reads data bytes from the stream into -data. Both return true on success or false on error.

- -

To unserialize a hashtable from a stream, you wil typically create -a new sparse_hash_map object, then call unserialize() -on it. unserialize() destroys the old contents of the -object. You must pass in the appropriate ValueSerializer for -the data being read in.

- -

Both serialize() and unserialize() return -true on success, or false if there was an error -streaming the data.

- -

Note that serialize() is not a const method, since it -purges deleted elements before serializing. It is not safe to -serialize from two threads at once, without synchronization.

- -

NOTE: older versions of sparse_hash_map provided a -different API, consisting of read_metadata(), -read_nopointer_data(), write_metadata(), -write_nopointer_data(). Writing to disk consisted of a call -to write_metadata() followed by -write_nopointer_data() (if the hash data was POD) or a custom -loop over the hashtable buckets to write the data (otherwise). -Reading from disk was similar. Prefer the new API for new code.

- - -

Validity of Iterators

- -

erase() is guaranteed not to invalidate any iterators -- -except for any iterators pointing to the item being erased, of course. -insert() invalidates all iterators, as does -resize().

- -

This is implemented by making erase() not resize the -hashtable. If you desire maximum space efficiency, you can call -resize(0) after a string of erase() calls, to force -the hashtable to resize to the smallest possible size.

- -

In addition to invalidating iterators, insert() -and resize() invalidate all pointers into the hashtable. If -you want to store a pointer to an object held in a sparse_hash_map, -either do so after finishing hashtable inserts, or store the object on -the heap and a pointer to it in the sparse_hash_map.

- - -

See also

- -

The following are SGI STL, and some Google STL, concepts and -classes related to sparse_hash_map.

- -hash_map, -Associative Container, -Hashed Associative Container, -Pair Associative Container, -Unique Hashed Associative Container, -set, -map -multiset, -multimap, -hash_set, -hash_multiset, -hash_multimap, -sparsetable, -sparse_hash_set, -dense_hash_set, -dense_hash_map - - - diff --git a/clipper/sparsehash-2.0.3/doc/sparse_hash_set.html b/clipper/sparsehash-2.0.3/doc/sparse_hash_set.html deleted file mode 100644 index 4e73bda..0000000 --- a/clipper/sparsehash-2.0.3/doc/sparse_hash_set.html +++ /dev/null @@ -1,1551 +0,0 @@ - - - - - -sparse_hash_set<Key, HashFcn, EqualKey, Alloc> - - - - -

[Note: this document is formatted similarly to the SGI STL -implementation documentation pages, and refers to concepts and classes -defined there. However, neither this document nor the code it -describes is associated with SGI, nor is it necessary to have SGI's -STL implementation installed in order to use this class.]

- - -

sparse_hash_set<Key, HashFcn, EqualKey, Alloc>

- -

sparse_hash_set is a Hashed -Associative Container that stores objects of type Key. -sparse_hash_set is a Simple -Associative Container, meaning that its value type, as well as its -key type, is key. It is also a -Unique -Associative Container, meaning that no two elements have keys that -compare equal using EqualKey.

- -

Looking up an element in a sparse_hash_set by its key is -efficient, so sparse_hash_set is useful for "dictionaries" -where the order of elements is irrelevant. If it is important for the -elements to be in a particular order, however, then map is more appropriate.

- -

sparse_hash_set is distinguished from other hash-set -implementations by its stingy use of memory and by the ability to save -and restore contents to disk. On the other hand, this hash-set -implementation, while still efficient, is slower than other hash-set -implementations, and it also has requirements -- for instance, for a -distinguished "deleted key" -- that may not be easy for all -applications to satisfy.

- -

This class is appropriate for applications that need to store -large "dictionaries" in memory, or for applications that need these -dictionaries to be persistent.

- - -

Example

- -(Note: this example uses SGI semantics for hash<> --- the kind used by gcc and most Unix compiler suites -- and not -Dinkumware semantics -- the kind used by Microsoft Visual Studio. If -you are using MSVC, this example will not compile as-is: you'll need -to change hash to hash_compare, and you -won't use eqstr at all. See the MSVC documentation for -hash_map and hash_compare, for more -details.) - -
-#include <iostream>
-#include <sparsehash/sparse_hash_set>
-
-using google::sparse_hash_set;      // namespace where class lives by default
-using std::cout;
-using std::endl;
-using ext::hash;  // or __gnu_cxx::hash, or maybe tr1::hash, depending on your OS
-
-struct eqstr
-{
-  bool operator()(const char* s1, const char* s2) const
-  {
-    return (s1 == s2) || (s1 && s2 && strcmp(s1, s2) == 0);
-  }
-};
-
-void lookup(const hash_set<const char*, hash<const char*>, eqstr>& Set,
-            const char* word)
-{
-  sparse_hash_set<const char*, hash<const char*>, eqstr>::const_iterator it
-    = Set.find(word);
-  cout << word << ": "
-       << (it != Set.end() ? "present" : "not present")
-       << endl;
-}
-
-int main()
-{
-  sparse_hash_set<const char*, hash<const char*>, eqstr> Set;
-  Set.insert("kiwi");
-  Set.insert("plum");
-  Set.insert("apple");
-  Set.insert("mango");
-  Set.insert("apricot");
-  Set.insert("banana");
-
-  lookup(Set, "mango");
-  lookup(Set, "apple");
-  lookup(Set, "durian");
-}
-
- - -

Definition

- -Defined in the header sparse_hash_set. -This class is not part of the C++ standard, though it is mostly -compatible with the tr1 class unordered_set. - - -

Template parameters

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterDescriptionDefault
- Key - - The hash_set's key and value type. This is also defined as - sparse_hash_set::key_type and - sparse_hash_set::value_type. - -   -
- HashFcn - - The hash function used by the - hash_set. This is also defined as sparse_hash_set::hasher. -
Note: Hashtable performance depends heavily on the choice of - hash function. See the performance - page for more information. -
- hash<Key> -
- EqualKey - - The hash_set key equality function: a binary predicate that determines - whether two keys are equal. This is also defined as - sparse_hash_set::key_equal. - - equal_to<Key> -
- Alloc - - The STL allocator to use. By default, uses the provided allocator - libc_allocator_with_realloc, which likely gives better - performance than other STL allocators due to its built-in support - for realloc, which this container takes advantage of. - If you use an allocator other than the default, note that this - container imposes an additional requirement on the STL allocator - type beyond those in [lib.allocator.requirements]: it does not - support allocators that define alternate memory models. That is, - it assumes that pointer, const_pointer, - size_type, and difference_type are just - T*, const T*, size_t, and - ptrdiff_t, respectively. This is also defined as - sparse_hash_set::allocator_type. - -
- - -

Model of

- -Unique Hashed Associative Container, -Simple Associative Container - - -

Type requirements

- -
    -
  • -Key is Assignable. -
  • -EqualKey is a Binary Predicate whose argument type is Key. -
  • -EqualKey is an equivalence relation. -
  • -Alloc is an Allocator. -
- - -

Public base classes

- -None. - - -

Members

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberWhere definedDescription
- value_type - - Container - - The type of object, T, stored in the hash_set. -
- key_type - - Associative - Container - - The key type associated with value_type. -
- hasher - - Hashed - Associative Container - - The sparse_hash_set's hash - function. -
- key_equal - - Hashed - Associative Container - - Function - object that compares keys for equality. -
- allocator_type - - Unordered Associative Container (tr1) - - The type of the Allocator given as a template parameter. -
- pointer - - Container - - Pointer to T. -
- reference - - Container - - Reference to T -
- const_reference - - Container - - Const reference to T -
- size_type - - Container - - An unsigned integral type. -
- difference_type - - Container - - A signed integral type. -
- iterator - - Container - - Iterator used to iterate through a sparse_hash_set. -
- const_iterator - - Container - - Const iterator used to iterate through a sparse_hash_set. - (iterator and const_iterator are the same type.) -
- local_iterator - - Unordered Associative Container (tr1) - - Iterator used to iterate through a subset of - sparse_hash_set. -
- const_local_iterator - - Unordered Associative Container (tr1) - - Const iterator used to iterate through a subset of - sparse_hash_set. -
- iterator begin() const - - Container - - Returns an iterator pointing to the beginning of the - sparse_hash_set. -
- iterator end() const - - Container - - Returns an iterator pointing to the end of the - sparse_hash_set. -
- local_iterator begin(size_type i) - - Unordered Associative Container (tr1) - - Returns a local_iterator pointing to the beginning of bucket - i in the sparse_hash_set. -
- local_iterator end(size_type i) - - Unordered Associative Container (tr1) - - Returns a local_iterator pointing to the end of bucket - i in the sparse_hash_set. For - sparse_hash_set, each bucket contains either 0 or 1 item. -
- const_local_iterator begin(size_type i) const - - Unordered Associative Container (tr1) - - Returns a const_local_iterator pointing to the beginning of bucket - i in the sparse_hash_set. -
- const_local_iterator end(size_type i) const - - Unordered Associative Container (tr1) - - Returns a const_local_iterator pointing to the end of bucket - i in the sparse_hash_set. For - sparse_hash_set, each bucket contains either 0 or 1 item. -
- size_type size() const - - Container - - Returns the size of the sparse_hash_set. -
- size_type max_size() const - - Container - - Returns the largest possible size of the sparse_hash_set. -
- bool empty() const - - Container - - true if the sparse_hash_set's size is 0. -
- size_type bucket_count() const - - Hashed - Associative Container - - Returns the number of buckets used by the sparse_hash_set. -
- size_type max_bucket_count() const - - Hashed - Associative Container - - Returns the largest possible number of buckets used by the sparse_hash_set. -
- size_type bucket_size(size_type i) const - - Unordered Associative Container (tr1) - - Returns the number of elements in bucket i. For - sparse_hash_set, this will be either 0 or 1. -
- size_type bucket(const key_type& key) const - - Unordered Associative Container (tr1) - - If the key exists in the set, returns the index of the bucket - containing the given key, otherwise, return the bucket the key - would be inserted into. - This value may be passed to begin(size_type) and - end(size_type). -
- float load_factor() const - - Unordered Associative Container (tr1) - - The number of elements in the sparse_hash_set divided by - the number of buckets. -
- float max_load_factor() const - - Unordered Associative Container (tr1) - - The maximum load factor before increasing the number of buckets in - the sparse_hash_set. -
- void max_load_factor(float new_grow) - - Unordered Associative Container (tr1) - - Sets the maximum load factor before increasing the number of - buckets in the sparse_hash_set. -
- float min_load_factor() const - - sparse_hash_set - - The minimum load factor before decreasing the number of buckets in - the sparse_hash_set. -
- void min_load_factor(float new_grow) - - sparse_hash_set - - Sets the minimum load factor before decreasing the number of - buckets in the sparse_hash_set. -
- void set_resizing_parameters(float shrink, float grow) - - sparse_hash_set - - DEPRECATED. See below. -
- void resize(size_type n) - - Hashed - Associative Container - - Increases the bucket count to hold at least n items. - [2] [3] -
- void rehash(size_type n) - - Unordered Associative Container (tr1) - - Increases the bucket count to hold at least n items. - This is identical to resize. - [2] [3] -
- hasher hash_funct() const - - Hashed - Associative Container - - Returns the hasher object used by the sparse_hash_set. -
- hasher hash_function() const - - Unordered Associative Container (tr1) - - Returns the hasher object used by the sparse_hash_set. - This is idential to hash_funct. -
- key_equal key_eq() const - - Hashed - Associative Container - - Returns the key_equal object used by the - sparse_hash_set. -
- allocator_type get_allocator() const - - Unordered Associative Container (tr1) - - Returns the allocator_type object used by the - sparse_hash_set: either the one passed in to the - constructor, or a default Alloc instance. -
- sparse_hash_set() - - Container - - Creates an empty sparse_hash_set. -
- sparse_hash_set(size_type n) - - Hashed - Associative Container - - Creates an empty sparse_hash_set that's optimized for holding - up to n items. - [3] -
- sparse_hash_set(size_type n, const hasher& h) - - Hashed - Associative Container - - Creates an empty sparse_hash_set that's optimized for up - to n items, using h as the hash function. -
- sparse_hash_set(size_type n, const hasher& h, const - key_equal& k) - - Hashed - Associative Container - - Creates an empty sparse_hash_set that's optimized for up - to n items, using h as the hash function and - k as the key equal function. -
- sparse_hash_set(size_type n, const hasher& h, const - key_equal& k, const allocator_type& a) - - Unordered Associative Container (tr1) - - Creates an empty sparse_hash_set that's optimized for up - to n items, using h as the hash function, - k as the key equal function, and a as the - allocator object. -
-
template <class InputIterator>
-sparse_hash_set(InputIterator f, InputIterator l) 
-[2] -
- Unique - Hashed Associative Container - - Creates a sparse_hash_set with a copy of a range. -
-
template <class InputIterator>
-sparse_hash_set(InputIterator f, InputIterator l, size_type n) 
-[2] -
- Unique - Hashed Associative Container - - Creates a hash_set with a copy of a range that's optimized to - hold up to n items. -
-
template <class InputIterator>
-sparse_hash_set(InputIterator f, InputIterator l, size_type n, const
-hasher& h) 
[2] -
- Unique - Hashed Associative Container - - Creates a hash_set with a copy of a range that's optimized to hold - up to n items, using h as the hash function. -
-
template <class InputIterator>
-sparse_hash_set(InputIterator f, InputIterator l, size_type n, const
-hasher& h, const key_equal& k) 
[2] -
- Unique - Hashed Associative Container - - Creates a hash_set with a copy of a range that's optimized for - holding up to n items, using h as the hash - function and k as the key equal function. -
-
template <class InputIterator>
-sparse_hash_set(InputIterator f, InputIterator l, size_type n, const
-hasher& h, const key_equal& k, const allocator_type& a) 
- [2] -
- Unordered Associative Container (tr1) - - Creates a hash_set with a copy of a range that's optimized for - holding up to n items, using h as the hash - function, k as the key equal function, and a as - the allocator object. -
- sparse_hash_set(const hash_set&) - - Container - - The copy constructor. -
- sparse_hash_set& operator=(const hash_set&) - - Container - - The assignment operator -
- void swap(hash_set&) - - Container - - Swaps the contents of two hash_sets. -
-
pair<iterator, bool> insert(const value_type& x)
-
-
- Unique - Associative Container - - Inserts x into the sparse_hash_set. -
-
template <class InputIterator>
-void insert(InputIterator f, InputIterator l) 
[2] -
- Unique - Associative Container - - Inserts a range into the sparse_hash_set. -
- void set_deleted_key(const key_type& key) [4] - - sparse_hash_set - - See below. -
- void clear_deleted_key() [4] - - sparse_hash_set - - See below. -
- void erase(iterator pos) - - Associative - Container - - Erases the element pointed to by pos. - [4] -
- size_type erase(const key_type& k) - - Associative - Container - - Erases the element whose key is k. - [4] -
- void erase(iterator first, iterator last) - - Associative - Container - - Erases all elements in a range. - [4] -
- void clear() - - Associative - Container - - Erases all of the elements. -
- iterator find(const key_type& k) const - - Associative - Container - - Finds an element whose key is k. -
- size_type count(const key_type& k) const - - Unique - Associative Container - - Counts the number of elements whose key is k. -
-
pair<iterator, iterator> equal_range(const
-key_type& k) const
-
- Associative - Container - - Finds a range containing all elements whose key is k. -
- template <ValueSerializer, OUTPUT> - bool serialize(ValueSerializer serializer, OUTPUT *fp) - - sparse_hash_set - - See below. -
- template <ValueSerializer, INPUT> - bool unserialize(ValueSerializer serializer, INPUT *fp) - - sparse_hash_set - - See below. -
- NopointerSerializer - - sparse_hash_set - - See below. -
- bool write_metadata(FILE *fp) - - sparse_hash_set - - DEPRECATED. See below. -
- bool read_metadata(FILE *fp) - - sparse_hash_set - - DEPRECATED. See below. -
- bool write_nopointer_data(FILE *fp) - - sparse_hash_set - - DEPRECATED. See below. -
- bool read_nopointer_data(FILE *fp) - - sparse_hash_set - - DEPRECATED. See below. -
-
bool operator==(const hash_set&, const hash_set&)
-
-
- Hashed - Associative Container - - Tests two hash_sets for equality. This is a global function, not a - member function. -
- - -

New members

- -These members are not defined in the Unique -Hashed Associative Container, Simple -Associative Container, or tr1's Unordered Associative -Container requirements, but are specific to -sparse_hash_set. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberDescription
- void set_deleted_key(const key_type& key) - - Sets the distinguished "deleted" key to key. This must be - called before any calls to erase(). [4] -
- void clear_deleted_key() - - Clears the distinguished "deleted" key. After this is called, - calls to erase() are not valid on this object. - [4] -
- void set_resizing_parameters(float shrink, float grow) - - This function is DEPRECATED. It is equivalent to calling - min_load_factor(shrink); max_load_factor(grow). -
- template <ValueSerializer, OUTPUT> - bool serialize(ValueSerializer serializer, OUTPUT *fp) - - Emit a serialization of the hash_set to a stream. - See below. -
- template <ValueSerializer, INPUT> - bool unserialize(ValueSerializer serializer, INPUT *fp) - - Read in a serialization of a hash_set from a stream, replacing the - existing hash_set contents with the serialized contents. - See below. -
- bool write_metadata(FILE *fp) - - This function is DEPRECATED. See below. -
- bool read_metadata(FILE *fp) - - This function is DEPRECATED. See below. -
- bool write_nopointer_data(FILE *fp) - - This function is DEPRECATED. See below. -
- bool read_nopointer_data(FILE *fp) - - This function is DEPRECATED. See below. -
- - -

Notes

- -

[1] - -This member function relies on member template functions, which -may not be supported by all compilers. If your compiler supports -member templates, you can call this function with any type of input -iterator. If your compiler does not yet support member templates, -though, then the arguments must either be of type const -value_type* or of type sparse_hash_set::const_iterator.

- -

[2] - -In order to preserve iterators, erasing hashtable elements does not -cause a hashtable to resize. This means that after a string of -erase() calls, the hashtable will use more space than is -required. At a cost of invalidating all current iterators, you can -call resize() to manually compact the hashtable. The -hashtable promotes too-small resize() arguments to the -smallest legal value, so to compact a hashtable, it's sufficient to -call resize(0). - -

[3] - -Unlike some other hashtable implementations, the optional n in -the calls to the constructor, resize, and rehash -indicates not the desired number of buckets that -should be allocated, but instead the expected number of items to be -inserted. The class then sizes the hash-set appropriately for the -number of items specified. It's not an error to actually insert more -or fewer items into the hashtable, but the implementation is most -efficient -- does the fewest hashtable resizes -- if the number of -inserted items is n or slightly less.

- -

[4] - -sparse_hash_set requires you call -set_deleted_key() before calling erase(). (This is -the largest difference between the sparse_hash_set API and -other hash-set APIs. See implementation.html -for why this is necessary.) -The argument to set_deleted_key() should be a key-value that -is never used for legitimate hash-set entries. It is an error to call -erase() without first calling set_deleted_key(), and -it is also an error to call insert() with an item whose key -is the "deleted key."

- -

There is no need to call set_deleted_key if you do not -wish to call erase() on the hash-set.

- -

It is acceptable to change the deleted-key at any time by calling -set_deleted_key() with a new argument. You can also call -clear_deleted_key(), at which point all keys become valid for -insertion but no hashtable entries can be deleted until -set_deleted_key() is called again.

- - -

Input/Output

- -

It is possible to save and restore sparse_hash_set objects -to an arbitrary stream (such as a disk file) using the -serialize() and unserialize() methods.

- -

Each of these methods takes two arguments: a serializer, -which says how to write hashtable items to disk, and a stream, -which can be a C++ stream (istream or its subclasses for -input, ostream or its subclasses for output), a -FILE*, or a user-defined type (as described below).

- -

The serializer is a functor that takes a stream and a -single hashtable element (a value_type) and copies the -hashtable element to the stream (for serialize()) or fills -the hashtable element contents from the stream (for -unserialize()), and returns true on success or false on -error. The copy-in and copy-out functions can be provided in a single -functor. Here is a sample serializer that read/writes a hashtable -element for a string hash_set to a FILE*:

- -
-struct StringSerializer {
-  bool operator()(FILE* fp, const std::string& value) const {
-    assert(value.length() <= 255);   // we only support writing small strings
-    const unsigned char size = value.length();
-    if (fwrite(&size, 1, 1, fp) != 1)
-      return false;
-    if (fwrite(value.data(), size, 1, fp) != 1)
-      return false;
-    return true;
-  }
-  bool operator()(FILE* fp, std::string* value) const {
-    unsigned char size;    // all strings are <= 255 chars long
-    if (fread(&size, 1, 1, fp) != 1)
-      return false;
-    char* buf = new char[size];
-    if (fread(buf, size, 1, fp) != 1) {
-      delete[] buf;
-      return false;
-    }
-    new(value) string(buf, size);
-    delete[] buf;
-    return true;
-  }
-};
-
- -

Here is the functor being used in code (error checking omitted):

-
-   sparse_hash_set<string> myset = CreateSet();
-   FILE* fp = fopen("hashtable.data", "w");
-   myset.serialize(StringSerializer(), fp);
-   fclose(fp);
-
-   sparse_hash_set<string> myset2;
-   FILE* fp_in = fopen("hashtable.data", "r");
-   myset2.unserialize(StringSerializer(), fp_in);
-   fclose(fp_in);
-   assert(myset == myset2);
-
- -

Important note: the code above uses placement-new to -instantiate the string. This is required for any -non-POD type. The value_type passed in to the unserializer -points to garbage memory, so it is not safe to assign to it directly -if doing so causes a destructor to be called.

- -

Also note that this example serializer can only serialize to a -FILE*. If you want to also be able to use this serializer with C++ -streams, you will need to write two more overloads of -operator()'s, one that reads from an istream, and -one that writes to an ostream. Likewise if you want to -support serializing to a custom class.

- -

If the key is "simple" enough, you can use the pre-supplied functor -NopointerSerializer. This copies the hashtable data using -the equivalent of a memcpy<>. Native C data types can be -serialized this way, as can structs of native C data types. Pointers -and STL objects cannot.

- -

Note that NopointerSerializer() does not do any endian -conversion. Thus, it is only appropriate when you intend to read the -data on the same endian architecture as you write the data.

- -

If you wish to serialize to your own stream type, you can do so by -creating an object which supports two methods:

-
-   bool Write(const void* data, size_t length);
-   bool Read(void* data, size_t length);
-
-

Write() writes length bytes of data to a -stream (presumably a stream owned by the object), while -Read() reads data bytes from the stream into -data. Both return true on success or false on error.

- -

To unserialize a hashtable from a stream, you wil typically create -a new sparse_hash_set object, then call unserialize() -on it. unserialize() destroys the old contents of the -object. You must pass in the appropriate ValueSerializer for -the data being read in.

- -

Both serialize() and unserialize() return -true on success, or false if there was an error -streaming the data.

- -

Note that serialize() is not a const method, since it -purges deleted elements before serializing. It is not safe to -serialize from two threads at once, without synchronization.

- -

NOTE: older versions of sparse_hash_set provided a -different API, consisting of read_metadata(), -read_nopointer_data(), write_metadata(), -write_nopointer_data(). Writing to disk consisted of a call -to write_metadata() followed by -write_nopointer_data() (if the hash data was POD) or a custom -loop over the hashtable buckets to write the data (otherwise). -Reading from disk was similar. Prefer the new API for new code.

- - -

Validity of Iterators

- -

erase() is guaranteed not to invalidate any iterators -- -except for any iterators pointing to the item being erased, of course. -insert() invalidates all iterators, as does -resize().

- -

This is implemented by making erase() not resize the -hashtable. If you desire maximum space efficiency, you can call -resize(0) after a string of erase() calls, to force -the hashtable to resize to the smallest possible size.

- -

In addition to invalidating iterators, insert() -and resize() invalidate all pointers into the hashtable. If -you want to store a pointer to an object held in a sparse_hash_set, -either do so after finishing hashtable inserts, or store the object on -the heap and a pointer to it in the sparse_hash_set.

- - -

See also

- -

The following are SGI STL, and some Google STL, concepts and -classes related to sparse_hash_set.

- -hash_set, -Associative Container, -Hashed Associative Container, -Simple Associative Container, -Unique Hashed Associative Container, -set, -map -multiset, -multimap, -hash_map, -hash_multiset, -hash_multimap, -sparsetable, -sparse_hash_map, -dense_hash_set, -dense_hash_map - - - diff --git a/clipper/sparsehash-2.0.3/doc/sparsetable.html b/clipper/sparsehash-2.0.3/doc/sparsetable.html deleted file mode 100644 index 6524344..0000000 --- a/clipper/sparsehash-2.0.3/doc/sparsetable.html +++ /dev/null @@ -1,1393 +0,0 @@ - - - - - -sparsetable<T, GROUP_SIZE> - - - - -

[Note: this document is formatted similarly to the SGI STL -implementation documentation pages, and refers to concepts and classes -defined there. However, neither this document nor the code it -describes is associated with SGI, nor is it necessary to have SGI's -STL implementation installed in order to use this class.]

- -

sparsetable<T, GROUP_SIZE>

- -

A sparsetable is a Random -Access Container that supports constant time random access to -elements, and constant time insertion and removal of elements. It -implements the "array" or "table" abstract data type. The number of -elements in a sparsetable is set at constructor time, though -you can change it at any time by calling resize().

- -

sparsetable is distinguished from other array -implementations, including the default C implementation, in its stingy -use of memory -- in particular, unused array elements require only 1 bit -of disk space to store, rather than sizeof(T) bytes -- and by -the ability to save and restore contents to disk. On the other hand, -this array implementation, while still efficient, is slower than other -array implementations.

- - -

A sparsetable distinguishes between table elements that -have been assigned and those that are unassigned. -Assigned table elements are those that have had a value set via -set(), operator(), assignment via an iterator, and -so forth. Unassigned table elements are those that have not had a -value set in one of these ways, or that have been explicitly -unassigned via a call to erase() or clear(). Lookup -is valid on both assigned and unassigned table elements; for -unassigned elements, lookup returns the default value -T().

-
- -

This class is appropriate for applications that need to store large -arrays in memory, or for applications that need these arrays to be -persistent.

- - -

Example

- -
-#include <sparsehash/sparsetable>
-
-using google::sparsetable;      // namespace where class lives by default
-
-sparsetable<int> t(100);
-t[5] = 6;
-cout << "t[5] = " << t[5];
-cout << "Default value = " << t[99];
-
- - -

Definition

- -Defined in the header sparsetable. This -class is not part of the C++ standard. - - -

Template parameters

- - - - - - - - - - - - - - - - -
ParameterDescriptionDefault
- T - - The sparsetable's value type: the type of object that is stored in - the table. - -   -
- GROUP_SIZE - - The number of elements in each sparsetable group (see the implementation doc for more details - on this value). This almost never need be specified; the default - template parameter value works well in all situations. - -   -
- - -

Model of

- -Random Access Container - - -

Type requirements

- -None, except for those imposed by the requirements of -Random -Access Container - - -

Public base classes

- -None. - - -

Members

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberWhere definedDescription
- value_type - - Container - - The type of object, T, stored in the table. -
- pointer - - Container - - Pointer to T. -
- reference - - Container - - Reference to T. -
- const_reference - - Container - - Const reference to T. -
- size_type - - Container - - An unsigned integral type. -
- difference_type - - Container - - A signed integral type. -
- iterator - - Container - - Iterator used to iterate through a sparsetable. -
- const_iterator - - Container - - Const iterator used to iterate through a sparsetable. -
- reverse_iterator - - Reversible - Container - - Iterator used to iterate backwards through a sparsetable. -
- const_reverse_iterator - - Reversible - Container - - Const iterator used to iterate backwards through a - sparsetable. -
- nonempty_iterator - - sparsetable - - Iterator used to iterate through the - assigned elements of the - sparsetable. -
- const_nonempty_iterator - - sparsetable - - Const iterator used to iterate through the - assigned elements of the - sparsetable. -
- reverse_nonempty_iterator - - sparsetable - - Iterator used to iterate backwards through the - assigned elements of the - sparsetable. -
- const_reverse_nonempty_iterator - - sparsetable - - Const iterator used to iterate backwards through the - assigned elements of the - sparsetable. -
- destructive_iterator - - sparsetable - - Iterator used to iterate through the - assigned elements of the - sparsetable, erasing elements as it iterates. - [1] -
- iterator begin() - - Container - - Returns an iterator pointing to the beginning of the - sparsetable. -
- iterator end() - - Container - - Returns an iterator pointing to the end of the - sparsetable. -
- const_iterator begin() const - - Container - - Returns an const_iterator pointing to the beginning of the - sparsetable. -
- const_iterator end() const - - Container - - Returns an const_iterator pointing to the end of the - sparsetable. -
- reverse_iterator rbegin() - - Reversible - Container - - Returns a reverse_iterator pointing to the beginning of the - reversed sparsetable. -
- reverse_iterator rend() - - Reversible - Container - - Returns a reverse_iterator pointing to the end of the - reversed sparsetable. -
- const_reverse_iterator rbegin() const - - Reversible - Container - - Returns a const_reverse_iterator pointing to the beginning - of the reversed sparsetable. -
- const_reverse_iterator rend() const - - Reversible - Container - - Returns a const_reverse_iterator pointing to the end of - the reversed sparsetable. -
- nonempty_iterator nonempty_begin() - - sparsetable - - Returns a nonempty_iterator pointing to the first - assigned element of the - sparsetable. -
- nonempty_iterator nonempty_end() - - sparsetable - - Returns a nonempty_iterator pointing to the end of the - sparsetable. -
- const_nonempty_iterator nonempty_begin() const - - sparsetable - - Returns a const_nonempty_iterator pointing to the first - assigned element of the - sparsetable. -
- const_nonempty_iterator nonempty_end() const - - sparsetable - - Returns a const_nonempty_iterator pointing to the end of - the sparsetable. -
- reverse_nonempty_iterator nonempty_rbegin() - - sparsetable - - Returns a reverse_nonempty_iterator pointing to the first - assigned element of the reversed - sparsetable. -
- reverse_nonempty_iterator nonempty_rend() - - sparsetable - - Returns a reverse_nonempty_iterator pointing to the end of - the reversed sparsetable. -
- const_reverse_nonempty_iterator nonempty_rbegin() const - - sparsetable - - Returns a const_reverse_nonempty_iterator pointing to the - first assigned element of the reversed - sparsetable. -
- const_reverse_nonempty_iterator nonempty_rend() const - - sparsetable - - Returns a const_reverse_nonempty_iterator pointing to the - end of the reversed sparsetable. -
- destructive_iterator destructive_begin() - - sparsetable - - Returns a destructive_iterator pointing to the first - assigned element of the - sparsetable. -
- destructive_iterator destructive_end() - - sparsetable - - Returns a destructive_iterator pointing to the end of - the sparsetable. -
- size_type size() const - - Container - - Returns the size of the sparsetable. -
- size_type max_size() const - - Container - - Returns the largest possible size of the sparsetable. -
- bool empty() const - - Container - - true if the sparsetable's size is 0. -
- size_type num_nonempty() const - - sparsetable - - Returns the number of sparsetable elements that are currently assigned. -
- sparsetable(size_type n) - - Container - - Creates a sparsetable with n elements. -
- sparsetable(const sparsetable&) - - Container - - The copy constructor. -
- ~sparsetable() - - Container - - The destructor. -
- sparsetable& operator=(const sparsetable&) - - Container - - The assignment operator -
- void swap(sparsetable&) - - Container - - Swaps the contents of two sparsetables. -
- reference operator[](size_type n) - - Random - Access Container - - Returns the n'th element. [2] -
- const_reference operator[](size_type n) const - - Random - Access Container - - Returns the n'th element. -
- bool test(size_type i) const - - sparsetable - - true if the i'th element of the sparsetable is assigned. -
- bool test(iterator pos) const - - sparsetable - - true if the sparsetable element pointed to by pos - is assigned. -
- bool test(const_iterator pos) const - - sparsetable - - true if the sparsetable element pointed to by pos - is assigned. -
- const_reference get(size_type i) const - - sparsetable - - returns the i'th element of the sparsetable. -
- reference set(size_type i, const_reference val) - - sparsetable - - Sets the i'th element of the sparsetable to value - val. -
- void erase(size_type i) - - sparsetable - - Erases the i'th element of the sparsetable. -
- void erase(iterator pos) - - sparsetable - - Erases the element of the sparsetable pointed to by - pos. -
- void erase(iterator first, iterator last) - - sparsetable - - Erases the elements of the sparsetable in the range - [first, last). -
- void clear() - - sparsetable - - Erases all of the elements. -
- void resize(size_type n) - - sparsetable - - Changes the size of sparsetable to n. -
- bool write_metadata(FILE *fp) - - sparsetable - - See below. -
- bool read_metadata(FILE *fp) - - sparsetable - - See below. -
- bool write_nopointer_data(FILE *fp) - - sparsetable - - See below. -
- bool read_nopointer_data(FILE *fp) - - sparsetable - - See below. -
-
bool operator==(const sparsetable&, const sparsetable&)
-
-
- Forward - Container - - Tests two sparsetables for equality. This is a global function, - not a member function. -
-
bool operator<(const sparsetable&, const sparsetable&)
-
-
- Forward - Container - - Lexicographical comparison. This is a global function, - not a member function. -
- - -

New members

- -These members are not defined in the Random -Access Container requirement, but are specific to -sparsetable. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MemberDescription
- nonempty_iterator - - Iterator used to iterate through the - assigned elements of the - sparsetable. -
- const_nonempty_iterator - - Const iterator used to iterate through the - assigned elements of the - sparsetable. -
- reverse_nonempty_iterator - - Iterator used to iterate backwards through the - assigned elements of the - sparsetable. -
- const_reverse_nonempty_iterator - - Const iterator used to iterate backwards through the - assigned elements of the - sparsetable. -
- destructive_iterator - - Iterator used to iterate through the - assigned elements of the - sparsetable, erasing elements as it iterates. - [1] -
- nonempty_iterator nonempty_begin() - - Returns a nonempty_iterator pointing to the first - assigned element of the - sparsetable. -
- nonempty_iterator nonempty_end() - - Returns a nonempty_iterator pointing to the end of the - sparsetable. -
- const_nonempty_iterator nonempty_begin() const - - Returns a const_nonempty_iterator pointing to the first - assigned element of the - sparsetable. -
- const_nonempty_iterator nonempty_end() const - - Returns a const_nonempty_iterator pointing to the end of - the sparsetable. -
- reverse_nonempty_iterator nonempty_rbegin() - - Returns a reverse_nonempty_iterator pointing to the first - assigned element of the reversed - sparsetable. -
- reverse_nonempty_iterator nonempty_rend() - - Returns a reverse_nonempty_iterator pointing to the end of - the reversed sparsetable. -
- const_reverse_nonempty_iterator nonempty_rbegin() const - - Returns a const_reverse_nonempty_iterator pointing to the - first assigned element of the reversed - sparsetable. -
- const_reverse_nonempty_iterator nonempty_rend() const - - Returns a const_reverse_nonempty_iterator pointing to the - end of the reversed sparsetable. -
- destructive_iterator destructive_begin() - - Returns a destructive_iterator pointing to the first - assigned element of the - sparsetable. -
- destructive_iterator destructive_end() - - Returns a destructive_iterator pointing to the end of - the sparsetable. -
- size_type num_nonempty() const - - Returns the number of sparsetable elements that are currently assigned. -
- bool test(size_type i) const - - true if the i'th element of the sparsetable is assigned. -
- bool test(iterator pos) const - - true if the sparsetable element pointed to by pos - is assigned. -
- bool test(const_iterator pos) const - - true if the sparsetable element pointed to by pos - is assigned. -
- const_reference get(size_type i) const - - returns the i'th element of the sparsetable. If - the i'th element is assigned, the - assigned value is returned, otherwise, the default value - T() is returned. -
- reference set(size_type i, const_reference val) - - Sets the i'th element of the sparsetable to value - val, and returns a reference to the i'th element - of the table. This operation causes the i'th element to - be assigned. -
- void erase(size_type i) - - Erases the i'th element of the sparsetable. This - operation causes the i'th element to be unassigned. -
- void erase(iterator pos) - - Erases the element of the sparsetable pointed to by - pos. This operation causes the i'th element to - be unassigned. -
- void erase(iterator first, iterator last) - - Erases the elements of the sparsetable in the range - [first, last). This operation causes these elements to - be unassigned. -
- void clear() - - Erases all of the elements. This causes all elements to be - unassigned. -
- void resize(size_type n) - - Changes the size of sparsetable to n. If n is - greater than the old size, new, unassigned - elements are appended. If n is less than the old size, - all elements in position >n are deleted. -
- bool write_metadata(FILE *fp) - - Write hashtable metadata to fp. See below. -
- bool read_metadata(FILE *fp) - - Read hashtable metadata from fp. See below. -
- bool write_nopointer_data(FILE *fp) - - Write hashtable contents to fp. This is valid only if the - hashtable key and value are "plain" data. See below. -
- bool read_nopointer_data(FILE *fp) - - Read hashtable contents to fp. This is valid only if the - hashtable key and value are "plain" data. See below. -
- - -

Notes

- -

[1] - -sparsetable::destructive_iterator iterates through a -sparsetable like a normal iterator, but ++it may delete the -element being iterated past. Obviously, this iterator can only be -used once on a given table! One application of this iterator is to -copy data from a sparsetable to some other data structure without -using extra memory to store the data in both places during the -copy.

- -

[2] - -Since operator[] might insert a new element into the -sparsetable, it can't possibly be a const member -function. In theory, since it might insert a new element, it should -cause the element it refers to to become assigned. However, this is undesirable when -operator[] is used to examine elements, rather than assign -them. Thus, as an implementation trick, operator[] does not -really return a reference. Instead it returns an object that -behaves almost exactly like a reference. This object, -however, delays setting the appropriate sparsetable element to assigned to when it is actually assigned to.

- -

For a bit more detail: the object returned by operator[] -is an opaque type which defines operator=, operator -reference(), and operator&. The first operator controls -assigning to the value. The second controls examining the value. The -third controls pointing to the value.

- -

All three operators perform exactly as an object of type -reference would perform. The only problems that arise is -when this object is accessed in situations where C++ cannot do the -conversion by default. By far the most common situation is with -variadic functions such as printf. In such situations, you -may need to manually cast the object to the right type:

-
-   printf("%d", static_cast<typename table::reference>(table[i]));
-
- - -

Input/Output

- -

It is possible to save and restore sparsetable objects -to disk. Storage takes place in two steps. The first writes the -table metadata. The second writes the actual data.

- -

To write a sparsetable to disk, first call write_metadata() -on an open file pointer. This saves the sparsetable information in a -byte-order-independent format.

- -

After the metadata has been written to disk, you must write the -actual data stored in the sparsetable to disk. If the value is -"simple" enough, you can do this by calling -write_nopointer_data(). "Simple" data is data that can be -safely copied to disk via fwrite(). Native C data types fall -into this category, as do structs of native C data types. Pointers -and STL objects do not.

- -

Note that write_nopointer_data() does not do any endian -conversion. Thus, it is only appropriate when you intend to read the -data on the same endian architecture as you write the data.

- -

If you cannot use write_nopointer_data() for any reason, -you can write the data yourself by iterating over the -sparsetable with a const_nonempty_iterator and -writing the key and data in any manner you wish.

- -

To read the hashtable information from disk, first you must create -a sparsetable object. Then open a file pointer to point -to the saved sparsetable, and call read_metadata(). If you -saved the data via write_nopointer_data(), you can follow the -read_metadata() call with a call to -read_nopointer_data(). This is all that is needed.

- -

If you saved the data through a custom write routine, you must call -a custom read routine to read in the data. To do this, iterate over -the sparsetable with a nonempty_iterator; this -operation is sensical because the metadata has already been set up. -For each iterator item, you can read the key and value from disk, and -set it appropriately. The code might look like this:

-
-   for (sparsetable<int*>::nonempty_iterator it = t.nonempty_begin();
-        it != t.nonempty_end(); ++it) {
-       *it = new int;
-       fread(*it, sizeof(int), 1, fp);
-   }
-
- -

Here's another example, where the item stored in the sparsetable is -a C++ object with a non-trivial constructor. In this case, you must -use "placement new" to construct the object at the correct memory -location.

-
-   for (sparsetable<ComplicatedCppClass>::nonempty_iterator it = t.nonempty_begin();
-        it != t.nonempty_end(); ++it) {
-       int constructor_arg;   // ComplicatedCppClass takes an int to construct
-       fread(&constructor_arg, sizeof(int), 1, fp);
-       new (&(*it)) ComplicatedCppClass(constructor_arg);     // placement new
-   }
-
- - -

See also

- -

The following are SGI STL concepts and classes related to -sparsetable.

- -Container, -Random Access Container, -sparse_hash_set, -sparse_hash_map - - - diff --git a/clipper/sparsehash-2.0.3/experimental/Makefile b/clipper/sparsehash-2.0.3/experimental/Makefile deleted file mode 100644 index aa997f7..0000000 --- a/clipper/sparsehash-2.0.3/experimental/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -example: example.o libchash.o - $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ - -.SUFFIXES: .c .o .h -.c.o: - $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $< - -example.o: example.c libchash.h -libchash.o: libchash.c libchash.h diff --git a/clipper/sparsehash-2.0.3/experimental/README b/clipper/sparsehash-2.0.3/experimental/README deleted file mode 100644 index 150161d..0000000 --- a/clipper/sparsehash-2.0.3/experimental/README +++ /dev/null @@ -1,14 +0,0 @@ -This is a C version of sparsehash (and also, maybe, densehash) that I -wrote way back when, and served as the inspiration for the C++ -version. The API for the C version is much uglier than the C++, -because of the lack of template support. I believe the class works, -but I'm not convinced it's really flexible or easy enough to use. - -It would be nice to rework this C class to follow the C++ API as -closely as possible (eg have a set_deleted_key() instead of using a -#define like this code does now). I believe the code compiles and -runs, if anybody is interested in using it now, but it's subject to -major change in the future, as people work on it. - -Craig Silverstein -20 March 2005 diff --git a/clipper/sparsehash-2.0.3/experimental/example.c b/clipper/sparsehash-2.0.3/experimental/example.c deleted file mode 100644 index 47b9dba..0000000 --- a/clipper/sparsehash-2.0.3/experimental/example.c +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include -#include -#include -#include "libchash.h" - -static void TestInsert() { - struct HashTable* ht; - HTItem* bck; - - ht = AllocateHashTable(1, 0); /* value is 1 byte, 0: don't copy keys */ - - HashInsert(ht, PTR_KEY(ht, "January"), 31); /* 0: don't overwrite old val */ - bck = HashInsert(ht, PTR_KEY(ht, "February"), 28); - bck = HashInsert(ht, PTR_KEY(ht, "March"), 31); - - bck = HashFind(ht, PTR_KEY(ht, "February")); - assert(bck); - assert(bck->data == 28); - - FreeHashTable(ht); -} - -static void TestFindOrInsert() { - struct HashTable* ht; - int i; - int iterations = 1000000; - int range = 30; /* random number between 1 and 30 */ - - ht = AllocateHashTable(4, 0); /* value is 4 bytes, 0: don't copy keys */ - - /* We'll test how good rand() is as a random number generator */ - for (i = 0; i < iterations; ++i) { - int key = rand() % range; - HTItem* bck = HashFindOrInsert(ht, key, 0); /* initialize to 0 */ - bck->data++; /* found one more of them */ - } - - for (i = 0; i < range; ++i) { - HTItem* bck = HashFind(ht, i); - if (bck) { - printf("%3d: %d\n", bck->key, bck->data); - } else { - printf("%3d: 0\n", i); - } - } - - FreeHashTable(ht); -} - -int main(int argc, char** argv) { - TestInsert(); - TestFindOrInsert(); - return 0; -} diff --git a/clipper/sparsehash-2.0.3/experimental/libchash.c b/clipper/sparsehash-2.0.3/experimental/libchash.c deleted file mode 100644 index 761cf24..0000000 --- a/clipper/sparsehash-2.0.3/experimental/libchash.c +++ /dev/null @@ -1,1538 +0,0 @@ -/* Copyright (c) 1998 - 2005, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * --- - * Author: Craig Silverstein - * - * This library is intended to be used for in-memory hash tables, - * though it provides rudimentary permanent-storage capabilities. - * It attempts to be fast, portable, and small. The best algorithm - * to fulfill these goals is an internal probing hashing algorithm, - * as in Knuth, _Art of Computer Programming_, vol III. Unlike - * chained (open) hashing, it doesn't require a pointer for every - * item, yet it is still constant time lookup in practice. - * - * Also to save space, we let the contents (both data and key) that - * you insert be a union: if the key/data is small, we store it - * directly in the hashtable, otherwise we store a pointer to it. - * To keep you from having to figure out which, use KEY_PTR and - * PTR_KEY to convert between the arguments to these functions and - * a pointer to the real data. For instance: - * char key[] = "ab", *key2; - * HTItem *bck; HashTable *ht; - * HashInsert(ht, PTR_KEY(ht, key), 0); - * bck = HashFind(ht, PTR_KEY(ht, "ab")); - * key2 = KEY_PTR(ht, bck->key); - * - * There are a rich set of operations supported: - * AllocateHashTable() -- Allocates a hashtable structure and - * returns it. - * cchKey: if it's a positive number, then each key is a - * fixed-length record of that length. If it's 0, - * the key is assumed to be a \0-terminated string. - * fSaveKey: normally, you are responsible for allocating - * space for the key. If this is 1, we make a - * copy of the key for you. - * ClearHashTable() -- Removes everything from a hashtable - * FreeHashTable() -- Frees memory used by a hashtable - * - * HashFind() -- takes a key (use PTR_KEY) and returns the - * HTItem containing that key, or NULL if the - * key is not in the hashtable. - * HashFindLast() -- returns the item found by last HashFind() - * HashFindOrInsert() -- inserts the key/data pair if the key - * is not already in the hashtable, or - * returns the appropraite HTItem if it is. - * HashFindOrInsertItem() -- takes key/data as an HTItem. - * HashInsert() -- adds a key/data pair to the hashtable. What - * it does if the key is already in the table - * depends on the value of SAMEKEY_OVERWRITE. - * HashInsertItem() -- takes key/data as an HTItem. - * HashDelete() -- removes a key/data pair from the hashtable, - * if it's there. RETURNS 1 if it was there, - * 0 else. - * If you use sparse tables and never delete, the full data - * space is available. Otherwise we steal -2 (maybe -3), - * so you can't have data fields with those values. - * HashDeleteLast() -- deletes the item returned by the last Find(). - * - * HashFirstBucket() -- used to iterate over the buckets in a - * hashtable. DON'T INSERT OR DELETE WHILE - * ITERATING! You can't nest iterations. - * HashNextBucket() -- RETURNS NULL at the end of iterating. - * - * HashSetDeltaGoalSize() -- if you're going to insert 1000 items - * at once, call this fn with arg 1000. - * It grows the table more intelligently. - * - * HashSave() -- saves the hashtable to a file. It saves keys ok, - * but it doesn't know how to interpret the data field, - * so if the data field is a pointer to some complex - * structure, you must send a function that takes a - * file pointer and a pointer to the structure, and - * write whatever you want to write. It should return - * the number of bytes written. If the file is NULL, - * it should just return the number of bytes it would - * write, without writing anything. - * If your data field is just an integer, not a - * pointer, just send NULL for the function. - * HashLoad() -- loads a hashtable. It needs a function that takes - * a file and the size of the structure, and expects - * you to read in the structure and return a pointer - * to it. You must do memory allocation, etc. If - * the data is just a number, send NULL. - * HashLoadKeys() -- unlike HashLoad(), doesn't load the data off disk - * until needed. This saves memory, but if you look - * up the same key a lot, it does a disk access each - * time. - * You can't do Insert() or Delete() on hashtables that were loaded - * from disk. - * - * See libchash.h for parameters you can modify. Make sure LOG_WORD_SIZE - * is defined correctly for your machine! (5 for 32 bit words, 6 for 64). - */ - -#include -#include -#include -#include /* for strcmp, memcmp, etc */ -#include /* ULTRIX needs this for in.h */ -#include /* for reading/writing hashtables */ -#include -#include "libchash.h" /* all the types */ - - /* if keys are stored directly but cchKey is less than sizeof(ulong), */ - /* this cuts off the bits at the end */ -char grgKeyTruncMask[sizeof(ulong)][sizeof(ulong)]; -#define KEY_TRUNC(ht, key) \ - ( STORES_PTR(ht) || (ht)->cchKey == sizeof(ulong) \ - ? (key) : ((key) & *(ulong *)&(grgKeyTruncMask[(ht)->cchKey][0])) ) - - /* round num up to a multiple of wordsize. (LOG_WORD_SIZE-3 is in bytes) */ -#define WORD_ROUND(num) ( ((num-1) | ((1<<(LOG_WORD_SIZE-3))-1)) + 1 ) -#define NULL_TERMINATED 0 /* val of cchKey if keys are null-term strings */ - - /* Useful operations we do to keys: compare them, copy them, free them */ - -#define KEY_CMP(ht, key1, key2) ( !STORES_PTR(ht) ? (key1) - (key2) : \ - (key1) == (key2) ? 0 : \ - HashKeySize(ht) == NULL_TERMINATED ? \ - strcmp((char *)key1, (char *)key2) :\ - memcmp((void *)key1, (void *)key2, \ - HashKeySize(ht)) ) - -#define COPY_KEY(ht, keyTo, keyFrom) do \ - if ( !STORES_PTR(ht) || !(ht)->fSaveKeys ) \ - (keyTo) = (keyFrom); /* just copy pointer or info */\ - else if ( (ht)->cchKey == NULL_TERMINATED ) /* copy 0-term.ed str */\ - { \ - (keyTo) = (ulong)HTsmalloc( WORD_ROUND(strlen((char *)(keyFrom))+1) ); \ - strcpy((char *)(keyTo), (char *)(keyFrom)); \ - } \ - else \ - { \ - (keyTo) = (ulong) HTsmalloc( WORD_ROUND((ht)->cchKey) ); \ - memcpy( (char *)(keyTo), (char *)(keyFrom), (ht)->cchKey); \ - } \ - while ( 0 ) - -#define FREE_KEY(ht, key) do \ - if ( STORES_PTR(ht) && (ht)->fSaveKeys ) \ - if ( (ht)->cchKey == NULL_TERMINATED ) \ - HTfree((char *)(key), WORD_ROUND(strlen((char *)(key))+1)); \ - else \ - HTfree((char *)(key), WORD_ROUND((ht)->cchKey)); \ - while ( 0 ) - - /* the following are useful for bitmaps */ - /* Format is like this (if 1 word = 4 bits): 3210 7654 ba98 fedc ... */ -typedef ulong HTBitmapPart; /* this has to be unsigned, for >> */ -typedef HTBitmapPart HTBitmap[1<> LOG_WORD_SIZE) << (LOG_WORD_SIZE-3) ) -#define MOD2(i, logmod) ( (i) & ((1<<(logmod))-1) ) -#define DIV_NUM_ENTRIES(i) ( (i) >> LOG_WORD_SIZE ) -#define MOD_NUM_ENTRIES(i) ( MOD2(i, LOG_WORD_SIZE) ) -#define MODBIT(i) ( ((ulong)1) << MOD_NUM_ENTRIES(i) ) - -#define TEST_BITMAP(bm, i) ( (bm)[DIV_NUM_ENTRIES(i)] & MODBIT(i) ? 1 : 0 ) -#define SET_BITMAP(bm, i) (bm)[DIV_NUM_ENTRIES(i)] |= MODBIT(i) -#define CLEAR_BITMAP(bm, i) (bm)[DIV_NUM_ENTRIES(i)] &= ~MODBIT(i) - - /* the following are useful for reading and writing hashtables */ -#define READ_UL(fp, data) \ - do { \ - long _ul; \ - fread(&_ul, sizeof(_ul), 1, (fp)); \ - data = ntohl(_ul); \ - } while (0) - -#define WRITE_UL(fp, data) \ - do { \ - long _ul = htonl((long)(data)); \ - fwrite(&_ul, sizeof(_ul), 1, (fp)); \ - } while (0) - - /* Moves data from disk to memory if necessary. Note dataRead cannot be * - * NULL, because then we might as well (and do) load the data into memory */ -#define LOAD_AND_RETURN(ht, loadCommand) /* lC returns an HTItem * */ \ - if ( !(ht)->fpData ) /* data is stored in memory */ \ - return (loadCommand); \ - else /* must read data off of disk */ \ - { \ - int cchData; \ - HTItem *bck; \ - if ( (ht)->bckData.data ) free((char *)(ht)->bckData.data); \ - ht->bckData.data = (ulong)NULL; /* needed if loadCommand fails */ \ - bck = (loadCommand); \ - if ( bck == NULL ) /* loadCommand failed: key not found */ \ - return NULL; \ - else \ - (ht)->bckData = *bck; \ - fseek(ht->fpData, (ht)->bckData.data, SEEK_SET); \ - READ_UL((ht)->fpData, cchData); \ - (ht)->bckData.data = (ulong)(ht)->dataRead((ht)->fpData, cchData); \ - return &((ht)->bckData); \ - } - - -/* ======================================================================== */ -/* UTILITY ROUTINES */ -/* ---------------------- */ - -/* HTsmalloc() -- safe malloc - * allocates memory, or crashes if the allocation fails. - */ -static void *HTsmalloc(unsigned long size) -{ - void *retval; - - if ( size == 0 ) - return NULL; - retval = (void *)malloc(size); - if ( !retval ) - { - fprintf(stderr, "HTsmalloc: Unable to allocate %lu bytes of memory\n", - size); - exit(1); - } - return retval; -} - -/* HTscalloc() -- safe calloc - * allocates memory and initializes it to 0, or crashes if - * the allocation fails. - */ -static void *HTscalloc(unsigned long size) -{ - void *retval; - - retval = (void *)calloc(size, 1); - if ( !retval && size > 0 ) - { - fprintf(stderr, "HTscalloc: Unable to allocate %lu bytes of memory\n", - size); - exit(1); - } - return retval; -} - -/* HTsrealloc() -- safe calloc - * grows the amount of memory from a source, or crashes if - * the allocation fails. - */ -static void *HTsrealloc(void *ptr, unsigned long new_size, long delta) -{ - if ( ptr == NULL ) - return HTsmalloc(new_size); - ptr = realloc(ptr, new_size); - if ( !ptr && new_size > 0 ) - { - fprintf(stderr, "HTsrealloc: Unable to reallocate %lu bytes of memory\n", - new_size); - exit(1); - } - return ptr; -} - -/* HTfree() -- keep track of memory use - * frees memory using free, but updates count of how much memory - * is being used. - */ -static void HTfree(void *ptr, unsigned long size) -{ - if ( size > 0 ) /* some systems seem to not like freeing NULL */ - free(ptr); -} - -/*************************************************************************\ -| HTcopy() | -| Sometimes we interpret data as a ulong. But ulongs must be | -| aligned on some machines, so instead of casting we copy. | -\*************************************************************************/ - -unsigned long HTcopy(char *ul) -{ - unsigned long retval; - - memcpy(&retval, ul, sizeof(retval)); - return retval; -} - -/*************************************************************************\ -| HTSetupKeyTrunc() | -| If keys are stored directly but cchKey is less than | -| sizeof(ulong), this cuts off the bits at the end. | -\*************************************************************************/ - -static void HTSetupKeyTrunc(void) -{ - int i, j; - - for ( i = 0; i < sizeof(unsigned long); i++ ) - for ( j = 0; j < sizeof(unsigned long); j++ ) - grgKeyTruncMask[i][j] = j < i ? 255 : 0; /* chars have 8 bits */ -} - - -/* ======================================================================== */ -/* TABLE ROUTINES */ -/* -------------------- */ - -/* The idea is that a hashtable with (logically) t buckets is divided - * into t/M groups of M buckets each. (M is a constant set in - * LOG_BM_WORDS for efficiency.) Each group is stored sparsely. - * Thus, inserting into the table causes some array to grow, which is - * slow but still constant time. Lookup involves doing a - * logical-position-to-sparse-position lookup, which is also slow but - * constant time. The larger M is, the slower these operations are - * but the less overhead (slightly). - * - * To store the sparse array, we store a bitmap B, where B[i] = 1 iff - * bucket i is non-empty. Then to look up bucket i we really look up - * array[# of 1s before i in B]. This is constant time for fixed M. - * - * Terminology: the position of an item in the overall table (from - * 1 .. t) is called its "location." The logical position in a group - * (from 1 .. M ) is called its "position." The actual location in - * the array (from 1 .. # of non-empty buckets in the group) is - * called its "offset." - * - * The following operations are supported: - * o Allocate an array with t buckets, all empty - * o Free a array (but not whatever was stored in the buckets) - * o Tell whether or not a bucket is empty - * o Return a bucket with a given location - * o Set the value of a bucket at a given location - * o Iterate through all the buckets in the array - * o Read and write an occupancy bitmap to disk - * o Return how much memory is being allocated by the array structure - */ - -#ifndef SparseBucket /* by default, each bucket holds an HTItem */ -#define SparseBucket HTItem -#endif - -typedef struct SparseBin { - SparseBucket *binSparse; - HTBitmap bmOccupied; /* bmOccupied[i] is 1 if bucket i has an item */ - short cOccupied; /* size of binSparse; useful for iterators, eg */ -} SparseBin; - -typedef struct SparseIterator { - long posGroup; - long posOffset; - SparseBin *binSparse; /* state info, to avoid args for NextBucket() */ - ulong cBuckets; -} SparseIterator; - -#define LOG_LOW_BIN_SIZE ( LOG_BM_WORDS+LOG_WORD_SIZE ) -#define SPARSE_GROUPS(cBuckets) ( (((cBuckets)-1) >> LOG_LOW_BIN_SIZE) + 1 ) - - /* we need a small function to figure out # of items set in the bm */ -static HTOffset EntriesUpto(HTBitmapPart *bm, int i) -{ /* returns # of set bits in 0..i-1 */ - HTOffset retval = 0; - static HTOffset rgcBits[256] = /* # of bits set in one char */ - {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8}; - - if ( i == 0 ) return 0; - for ( ; i > sizeof(*bm)*8; i -= sizeof(*bm)*8, bm++ ) - { /* think of it as loop unrolling */ -#if LOG_WORD_SIZE >= 3 /* 1 byte per word, or more */ - retval += rgcBits[*bm & 255]; /* get the low byte */ -#if LOG_WORD_SIZE >= 4 /* at least 2 bytes */ - retval += rgcBits[(*bm >> 8) & 255]; -#if LOG_WORD_SIZE >= 5 /* at least 4 bytes */ - retval += rgcBits[(*bm >> 16) & 255]; - retval += rgcBits[(*bm >> 24) & 255]; -#if LOG_WORD_SIZE >= 6 /* 8 bytes! */ - retval += rgcBits[(*bm >> 32) & 255]; - retval += rgcBits[(*bm >> 40) & 255]; - retval += rgcBits[(*bm >> 48) & 255]; - retval += rgcBits[(*bm >> 56) & 255]; -#if LOG_WORD_SIZE >= 7 /* not a concern for a while... */ -#error Need to rewrite EntriesUpto to support such big words -#endif /* >8 bytes */ -#endif /* 8 bytes */ -#endif /* 4 bytes */ -#endif /* 2 bytes */ -#endif /* 1 byte */ - } - switch ( i ) { /* from 0 to 63 */ - case 0: - return retval; -#if LOG_WORD_SIZE >= 3 /* 1 byte per word, or more */ - case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: - return (retval + rgcBits[*bm & ((1 << i)-1)]); -#if LOG_WORD_SIZE >= 4 /* at least 2 bytes */ - case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: - return (retval + rgcBits[*bm & 255] + - rgcBits[(*bm >> 8) & ((1 << (i-8))-1)]); -#if LOG_WORD_SIZE >= 5 /* at least 4 bytes */ - case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: - return (retval + rgcBits[*bm & 255] + rgcBits[(*bm >> 8) & 255] + - rgcBits[(*bm >> 16) & ((1 << (i-16))-1)]); - case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: - return (retval + rgcBits[*bm & 255] + rgcBits[(*bm >> 8) & 255] + - rgcBits[(*bm >> 16) & 255] + - rgcBits[(*bm >> 24) & ((1 << (i-24))-1)]); -#if LOG_WORD_SIZE >= 6 /* 8 bytes! */ - case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: - return (retval + rgcBits[*bm & 255] + rgcBits[(*bm >> 8) & 255] + - rgcBits[(*bm >> 16) & 255] + rgcBits[(*bm >> 24) & 255] + - rgcBits[(*bm >> 32) & ((1 << (i-32))-1)]); - case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 48: - return (retval + rgcBits[*bm & 255] + rgcBits[(*bm >> 8) & 255] + - rgcBits[(*bm >> 16) & 255] + rgcBits[(*bm >> 24) & 255] + - rgcBits[(*bm >> 32) & 255] + - rgcBits[(*bm >> 40) & ((1 << (i-40))-1)]); - case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: - return (retval + rgcBits[*bm & 255] + rgcBits[(*bm >> 8) & 255] + - rgcBits[(*bm >> 16) & 255] + rgcBits[(*bm >> 24) & 255] + - rgcBits[(*bm >> 32) & 255] + rgcBits[(*bm >> 40) & 255] + - rgcBits[(*bm >> 48) & ((1 << (i-48))-1)]); - case 57: case 58: case 59: case 60: case 61: case 62: case 63: case 64: - return (retval + rgcBits[*bm & 255] + rgcBits[(*bm >> 8) & 255] + - rgcBits[(*bm >> 16) & 255] + rgcBits[(*bm >> 24) & 255] + - rgcBits[(*bm >> 32) & 255] + rgcBits[(*bm >> 40) & 255] + - rgcBits[(*bm >> 48) & 255] + - rgcBits[(*bm >> 56) & ((1 << (i-56))-1)]); -#endif /* 8 bytes */ -#endif /* 4 bytes */ -#endif /* 2 bytes */ -#endif /* 1 byte */ - } - assert("" == "word size is too big in EntriesUpto()"); - return -1; -} -#define SPARSE_POS_TO_OFFSET(bm, i) ( EntriesUpto(&((bm)[0]), i) ) -#define SPARSE_BUCKET(bin, location) \ - ( (bin)[(location) >> LOG_LOW_BIN_SIZE].binSparse + \ - SPARSE_POS_TO_OFFSET((bin)[(location)>>LOG_LOW_BIN_SIZE].bmOccupied, \ - MOD2(location, LOG_LOW_BIN_SIZE)) ) - - -/*************************************************************************\ -| SparseAllocate() | -| SparseFree() | -| Allocates, sets-to-empty, and frees a sparse array. All you need | -| to tell me is how many buckets you want. I return the number of | -| buckets I actually allocated, setting the array as a parameter. | -| Note that you have to set auxilliary parameters, like cOccupied. | -\*************************************************************************/ - -static ulong SparseAllocate(SparseBin **pbinSparse, ulong cBuckets) -{ - int cGroups = SPARSE_GROUPS(cBuckets); - - *pbinSparse = (SparseBin *) HTscalloc(sizeof(**pbinSparse) * cGroups); - return cGroups << LOG_LOW_BIN_SIZE; -} - -static SparseBin *SparseFree(SparseBin *binSparse, ulong cBuckets) -{ - ulong iGroup, cGroups = SPARSE_GROUPS(cBuckets); - - for ( iGroup = 0; iGroup < cGroups; iGroup++ ) - HTfree(binSparse[iGroup].binSparse, (sizeof(*binSparse[iGroup].binSparse) - * binSparse[iGroup].cOccupied)); - HTfree(binSparse, sizeof(*binSparse) * cGroups); - return NULL; -} - -/*************************************************************************\ -| SparseIsEmpty() | -| SparseFind() | -| You give me a location (ie a number between 1 and t), and I | -| return the bucket at that location, or NULL if the bucket is | -| empty. It's OK to call Find() on an empty table. | -\*************************************************************************/ - -static int SparseIsEmpty(SparseBin *binSparse, ulong location) -{ - return !TEST_BITMAP(binSparse[location>>LOG_LOW_BIN_SIZE].bmOccupied, - MOD2(location, LOG_LOW_BIN_SIZE)); -} - -static SparseBucket *SparseFind(SparseBin *binSparse, ulong location) -{ - if ( SparseIsEmpty(binSparse, location) ) - return NULL; - return SPARSE_BUCKET(binSparse, location); -} - -/*************************************************************************\ -| SparseInsert() | -| You give me a location, and contents to put there, and I insert | -| into that location and RETURN a pointer to the location. If | -| bucket was already occupied, I write over the contents only if | -| *pfOverwrite is 1. We set *pfOverwrite to 1 if there was someone | -| there (whether or not we overwrote) and 0 else. | -\*************************************************************************/ - -static SparseBucket *SparseInsert(SparseBin *binSparse, SparseBucket *bckInsert, - ulong location, int *pfOverwrite) -{ - SparseBucket *bckPlace; - HTOffset offset; - - bckPlace = SparseFind(binSparse, location); - if ( bckPlace ) /* means we replace old contents */ - { - if ( *pfOverwrite ) - *bckPlace = *bckInsert; - *pfOverwrite = 1; - return bckPlace; - } - - binSparse += (location >> LOG_LOW_BIN_SIZE); - offset = SPARSE_POS_TO_OFFSET(binSparse->bmOccupied, - MOD2(location, LOG_LOW_BIN_SIZE)); - binSparse->binSparse = (SparseBucket *) - HTsrealloc(binSparse->binSparse, - sizeof(*binSparse->binSparse) * ++binSparse->cOccupied, - sizeof(*binSparse->binSparse)); - memmove(binSparse->binSparse + offset+1, - binSparse->binSparse + offset, - (binSparse->cOccupied-1 - offset) * sizeof(*binSparse->binSparse)); - binSparse->binSparse[offset] = *bckInsert; - SET_BITMAP(binSparse->bmOccupied, MOD2(location, LOG_LOW_BIN_SIZE)); - *pfOverwrite = 0; - return binSparse->binSparse + offset; -} - -/*************************************************************************\ -| SparseFirstBucket() | -| SparseNextBucket() | -| SparseCurrentBit() | -| Iterate through the occupied buckets of a dense hashtable. You | -| must, of course, have allocated space yourself for the iterator. | -\*************************************************************************/ - -static SparseBucket *SparseNextBucket(SparseIterator *iter) -{ - if ( iter->posOffset != -1 && /* not called from FirstBucket()? */ - (++iter->posOffset < iter->binSparse[iter->posGroup].cOccupied) ) - return iter->binSparse[iter->posGroup].binSparse + iter->posOffset; - - iter->posOffset = 0; /* start the next group */ - for ( iter->posGroup++; iter->posGroup < SPARSE_GROUPS(iter->cBuckets); - iter->posGroup++ ) - if ( iter->binSparse[iter->posGroup].cOccupied > 0 ) - return iter->binSparse[iter->posGroup].binSparse; /* + 0 */ - return NULL; /* all remaining groups were empty */ -} - -static SparseBucket *SparseFirstBucket(SparseIterator *iter, - SparseBin *binSparse, ulong cBuckets) -{ - iter->binSparse = binSparse; /* set it up for NextBucket() */ - iter->cBuckets = cBuckets; - iter->posOffset = -1; /* when we advance, we're at 0 */ - iter->posGroup = -1; - return SparseNextBucket(iter); -} - -/*************************************************************************\ -| SparseWrite() | -| SparseRead() | -| These are routines for storing a sparse hashtable onto disk. We | -| store the number of buckets and a bitmap indicating which buckets | -| are allocated (occupied). The actual contents of the buckets | -| must be stored separately. | -\*************************************************************************/ - -static void SparseWrite(FILE *fp, SparseBin *binSparse, ulong cBuckets) -{ - ulong i, j; - - WRITE_UL(fp, cBuckets); - for ( i = 0; i < SPARSE_GROUPS(cBuckets); i++ ) - for ( j = 0; j < (1<rgBuckets, cBuckets); -} - -static ulong DenseAllocate(DenseBin **pbin, ulong cBuckets) -{ - *pbin = (DenseBin *) HTsmalloc(sizeof(*pbin)); - (*pbin)->rgBuckets = (DenseBucket *) HTsmalloc(sizeof(*(*pbin)->rgBuckets) - * cBuckets); - DenseClear(*pbin, cBuckets); - return cBuckets; -} - -static DenseBin *DenseFree(DenseBin *bin, ulong cBuckets) -{ - HTfree(bin->rgBuckets, sizeof(*bin->rgBuckets) * cBuckets); - HTfree(bin, sizeof(*bin)); - return NULL; -} - -static int DenseIsEmpty(DenseBin *bin, ulong location) -{ - return DENSE_IS_EMPTY(bin->rgBuckets, location); -} - -static DenseBucket *DenseFind(DenseBin *bin, ulong location) -{ - if ( DenseIsEmpty(bin, location) ) - return NULL; - return bin->rgBuckets + location; -} - -static DenseBucket *DenseInsert(DenseBin *bin, DenseBucket *bckInsert, - ulong location, int *pfOverwrite) -{ - DenseBucket *bckPlace; - - bckPlace = DenseFind(bin, location); - if ( bckPlace ) /* means something is already there */ - { - if ( *pfOverwrite ) - *bckPlace = *bckInsert; - *pfOverwrite = 1; /* set to 1 to indicate someone was there */ - return bckPlace; - } - else - { - bin->rgBuckets[location] = *bckInsert; - *pfOverwrite = 0; - return bin->rgBuckets + location; - } -} - -static DenseBucket *DenseNextBucket(DenseIterator *iter) -{ - for ( iter->pos++; iter->pos < iter->cBuckets; iter->pos++ ) - if ( !DenseIsEmpty(iter->bin, iter->pos) ) - return iter->bin->rgBuckets + iter->pos; - return NULL; /* all remaining groups were empty */ -} - -static DenseBucket *DenseFirstBucket(DenseIterator *iter, - DenseBin *bin, ulong cBuckets) -{ - iter->bin = bin; /* set it up for NextBucket() */ - iter->cBuckets = cBuckets; - iter->pos = -1; /* thus the next bucket will be 0 */ - return DenseNextBucket(iter); -} - -static void DenseWrite(FILE *fp, DenseBin *bin, ulong cBuckets) -{ - ulong pos = 0, bit, bm; - - WRITE_UL(fp, cBuckets); - while ( pos < cBuckets ) - { - bm = 0; - for ( bit = 0; bit < 8*sizeof(ulong); bit++ ) - { - if ( !DenseIsEmpty(bin, pos) ) - SET_BITMAP(&bm, bit); /* in fks-hash.h */ - if ( ++pos == cBuckets ) - break; - } - WRITE_UL(fp, bm); - } -} - -static ulong DenseRead(FILE *fp, DenseBin **pbin) -{ - ulong pos = 0, bit, bm, cBuckets; - - READ_UL(fp, cBuckets); - cBuckets = DenseAllocate(pbin, cBuckets); - while ( pos < cBuckets ) - { - READ_UL(fp, bm); - for ( bit = 0; bit < 8*sizeof(ulong); bit++ ) - { - if ( TEST_BITMAP(&bm, bit) ) /* in fks-hash.h */ - DENSE_SET_OCCUPIED((*pbin)->rgBuckets, pos); - else - DENSE_SET_EMPTY((*pbin)->rgBuckets, pos); - if ( ++pos == cBuckets ) - break; - } - } - return cBuckets; -} - -static ulong DenseMemory(ulong cBuckets, ulong cOccupied) -{ - return cBuckets * sizeof(DenseBucket); -} - - -/* ======================================================================== */ -/* HASHING ROUTINES */ -/* ---------------------- */ - -/* Implements a simple quadratic hashing scheme. We have a single hash - * table of size t and a single hash function h(x). When inserting an - * item, first we try h(x) % t. If it's occupied, we try h(x) + - * i*(i-1)/2 % t for increasing values of i until we hit a not-occupied - * space. To make this dynamic, we double the size of the hash table as - * soon as more than half the cells are occupied. When deleting, we can - * choose to shrink the hashtable when less than a quarter of the - * cells are occupied, or we can choose never to shrink the hashtable. - * For lookup, we check h(x) + i*(i-1)/2 % t (starting with i=0) until - * we get a match or we hit an empty space. Note that as a result, - * we can't make a cell empty on deletion, or lookups may end prematurely. - * Instead we mark the cell as "deleted." We thus steal the value - * DELETED as a possible "data" value. As long as data are pointers, - * that's ok. - * The hash increment we use, i(i-1)/2, is not the standard quadratic - * hash increment, which is i^2. i(i-1)/2 covers the entire bucket space - * when the hashtable size is a power of two, as it is for us. In fact, - * the first n probes cover n distinct buckets; then it repeats. This - * guarantees insertion will always succeed. - * If you linear hashing, set JUMP in chash.h. You can also change - * various other parameters there. - */ - -/*************************************************************************\ -| Hash() | -| The hash function I use is due to Bob Jenkins (see | -| http://burtleburtle.net/bob/hash/evahash.html | -| According to http://burtleburtle.net/bob/c/lookup2.c, | -| his implementation is public domain.) | -| It takes 36 instructions, in 18 cycles if you're lucky. | -| hashing depends on the fact the hashtable size is always a | -| power of 2. cBuckets is probably ht->cBuckets. | -\*************************************************************************/ - -#if LOG_WORD_SIZE == 5 /* 32 bit words */ - -#define mix(a,b,c) \ -{ \ - a -= b; a -= c; a ^= (c>>13); \ - b -= c; b -= a; b ^= (a<<8); \ - c -= a; c -= b; c ^= (b>>13); \ - a -= b; a -= c; a ^= (c>>12); \ - b -= c; b -= a; b ^= (a<<16); \ - c -= a; c -= b; c ^= (b>>5); \ - a -= b; a -= c; a ^= (c>>3); \ - b -= c; b -= a; b ^= (a<<10); \ - c -= a; c -= b; c ^= (b>>15); \ -} -#ifdef WORD_HASH /* play with this on little-endian machines */ -#define WORD_AT(ptr) ( *(ulong *)(ptr) ) -#else -#define WORD_AT(ptr) ( (ptr)[0] + ((ulong)(ptr)[1]<<8) + \ - ((ulong)(ptr)[2]<<16) + ((ulong)(ptr)[3]<<24) ) -#endif - -#elif LOG_WORD_SIZE == 6 /* 64 bit words */ - -#define mix(a,b,c) \ -{ \ - a -= b; a -= c; a ^= (c>>43); \ - b -= c; b -= a; b ^= (a<<9); \ - c -= a; c -= b; c ^= (b>>8); \ - a -= b; a -= c; a ^= (c>>38); \ - b -= c; b -= a; b ^= (a<<23); \ - c -= a; c -= b; c ^= (b>>5); \ - a -= b; a -= c; a ^= (c>>35); \ - b -= c; b -= a; b ^= (a<<49); \ - c -= a; c -= b; c ^= (b>>11); \ - a -= b; a -= c; a ^= (c>>12); \ - b -= c; b -= a; b ^= (a<<18); \ - c -= a; c -= b; c ^= (b>>22); \ -} -#ifdef WORD_HASH /* alpha is little-endian, btw */ -#define WORD_AT(ptr) ( *(ulong *)(ptr) ) -#else -#define WORD_AT(ptr) ( (ptr)[0] + ((ulong)(ptr)[1]<<8) + \ - ((ulong)(ptr)[2]<<16) + ((ulong)(ptr)[3]<<24) + \ - ((ulong)(ptr)[4]<<32) + ((ulong)(ptr)[5]<<40) + \ - ((ulong)(ptr)[6]<<48) + ((ulong)(ptr)[7]<<56) ) -#endif - -#else /* neither 32 or 64 bit words */ -#error This hash function can only hash 32 or 64 bit words. Sorry. -#endif - -static ulong Hash(HashTable *ht, char *key, ulong cBuckets) -{ - ulong a, b, c, cchKey, cchKeyOrig; - - cchKeyOrig = ht->cchKey == NULL_TERMINATED ? strlen(key) : ht->cchKey; - a = b = c = 0x9e3779b9; /* the golden ratio; an arbitrary value */ - - for ( cchKey = cchKeyOrig; cchKey >= 3 * sizeof(ulong); - cchKey -= 3 * sizeof(ulong), key += 3 * sizeof(ulong) ) - { - a += WORD_AT(key); - b += WORD_AT(key + sizeof(ulong)); - c += WORD_AT(key + sizeof(ulong)*2); - mix(a,b,c); - } - - c += cchKeyOrig; - switch ( cchKey ) { /* deal with rest. Cases fall through */ -#if LOG_WORD_SIZE == 5 - case 11: c += (ulong)key[10]<<24; - case 10: c += (ulong)key[9]<<16; - case 9 : c += (ulong)key[8]<<8; - /* the first byte of c is reserved for the length */ - case 8 : b += WORD_AT(key+4); a+= WORD_AT(key); break; - case 7 : b += (ulong)key[6]<<16; - case 6 : b += (ulong)key[5]<<8; - case 5 : b += key[4]; - case 4 : a += WORD_AT(key); break; - case 3 : a += (ulong)key[2]<<16; - case 2 : a += (ulong)key[1]<<8; - case 1 : a += key[0]; - /* case 0 : nothing left to add */ -#elif LOG_WORD_SIZE == 6 - case 23: c += (ulong)key[22]<<56; - case 22: c += (ulong)key[21]<<48; - case 21: c += (ulong)key[20]<<40; - case 20: c += (ulong)key[19]<<32; - case 19: c += (ulong)key[18]<<24; - case 18: c += (ulong)key[17]<<16; - case 17: c += (ulong)key[16]<<8; - /* the first byte of c is reserved for the length */ - case 16: b += WORD_AT(key+8); a+= WORD_AT(key); break; - case 15: b += (ulong)key[14]<<48; - case 14: b += (ulong)key[13]<<40; - case 13: b += (ulong)key[12]<<32; - case 12: b += (ulong)key[11]<<24; - case 11: b += (ulong)key[10]<<16; - case 10: b += (ulong)key[ 9]<<8; - case 9: b += (ulong)key[ 8]; - case 8: a += WORD_AT(key); break; - case 7: a += (ulong)key[ 6]<<48; - case 6: a += (ulong)key[ 5]<<40; - case 5: a += (ulong)key[ 4]<<32; - case 4: a += (ulong)key[ 3]<<24; - case 3: a += (ulong)key[ 2]<<16; - case 2: a += (ulong)key[ 1]<<8; - case 1: a += (ulong)key[ 0]; - /* case 0: nothing left to add */ -#endif - } - mix(a,b,c); - return c & (cBuckets-1); -} - - -/*************************************************************************\ -| Rehash() | -| You give me a hashtable, a new size, and a bucket to follow, and | -| I resize the hashtable's bin to be the new size, rehashing | -| everything in it. I keep particular track of the bucket you pass | -| in, and RETURN a pointer to where the item in the bucket got to. | -| (If you pass in NULL, I return an arbitrary pointer.) | -\*************************************************************************/ - -static HTItem *Rehash(HashTable *ht, ulong cNewBuckets, HTItem *bckWatch) -{ - Table *tableNew; - ulong iBucketFirst; - HTItem *bck, *bckNew = NULL; - ulong offset; /* the i in h(x) + i*(i-1)/2 */ - int fOverwrite = 0; /* not an issue: there can be no collisions */ - - assert( ht->table ); - cNewBuckets = Table(Allocate)(&tableNew, cNewBuckets); - /* Since we RETURN the new position of bckWatch, we want * - * to make sure it doesn't get moved due to some table * - * rehashing that comes after it's inserted. Thus, we * - * have to put it in last. This makes the loop weird. */ - for ( bck = HashFirstBucket(ht); ; bck = HashNextBucket(ht) ) - { - if ( bck == NULL ) /* we're done iterating, so look at bckWatch */ - { - bck = bckWatch; - if ( bck == NULL ) /* I guess bckWatch wasn't specified */ - break; - } - else if ( bck == bckWatch ) - continue; /* ignore if we see it during the iteration */ - - offset = 0; /* a new i for a new bucket */ - for ( iBucketFirst = Hash(ht, KEY_PTR(ht, bck->key), cNewBuckets); - !Table(IsEmpty)(tableNew, iBucketFirst); - iBucketFirst = (iBucketFirst + JUMP(KEY_PTR(ht,bck->key), offset)) - & (cNewBuckets-1) ) - ; - bckNew = Table(Insert)(tableNew, bck, iBucketFirst, &fOverwrite); - if ( bck == bckWatch ) /* we're done with the last thing to do */ - break; - } - Table(Free)(ht->table, ht->cBuckets); - ht->table = tableNew; - ht->cBuckets = cNewBuckets; - ht->cDeletedItems = 0; - return bckNew; /* new position of bckWatch, which was inserted last */ -} - -/*************************************************************************\ -| Find() | -| Does the quadratic searching stuff. RETURNS NULL if we don't | -| find an object with the given key, and a pointer to the Item | -| holding the key, if we do. Also sets posLastFind. If piEmpty is | -| non-NULL, we set it to the first open bucket we pass; helpful for | -| doing a later insert if the search fails, for instance. | -\*************************************************************************/ - -static HTItem *Find(HashTable *ht, ulong key, ulong *piEmpty) -{ - ulong iBucketFirst; - HTItem *item; - ulong offset = 0; /* the i in h(x) + i*(i-1)/2 */ - int fFoundEmpty = 0; /* set when we pass over an empty bucket */ - - ht->posLastFind = NULL; /* set up for failure: a new find starts */ - if ( ht->table == NULL ) /* empty hash table: find is bound to fail */ - return NULL; - - iBucketFirst = Hash(ht, KEY_PTR(ht, key), ht->cBuckets); - while ( 1 ) /* now try all i > 0 */ - { - item = Table(Find)(ht->table, iBucketFirst); - if ( item == NULL ) /* it's not in the table */ - { - if ( piEmpty && !fFoundEmpty ) *piEmpty = iBucketFirst; - return NULL; - } - else - { - if ( IS_BCK_DELETED(item) ) /* always 0 ifdef INSERT_ONLY */ - { - if ( piEmpty && !fFoundEmpty ) - { - *piEmpty = iBucketFirst; - fFoundEmpty = 1; - } - } else - if ( !KEY_CMP(ht, key, item->key) ) /* must be occupied */ - { - ht->posLastFind = item; - return item; /* we found it! */ - } - } - iBucketFirst = ((iBucketFirst + JUMP(KEY_PTR(ht, key), offset)) - & (ht->cBuckets-1)); - } -} - -/*************************************************************************\ -| Insert() | -| If an item with the key already exists in the hashtable, RETURNS | -| a pointer to the item (replacing its data if fOverwrite is 1). | -| If not, we find the first place-to-insert (which Find() is nice | -| enough to set for us) and insert the item there, RETURNing a | -| pointer to the item. We might grow the hashtable if it's getting | -| full. Note we include buckets holding DELETED when determining | -| fullness, because they slow down searching. | -\*************************************************************************/ - -static ulong NextPow2(ulong x) /* returns next power of 2 > x, or 2^31 */ -{ - if ( ((x << 1) >> 1) != x ) /* next power of 2 overflows */ - x >>= 1; /* so we return highest power of 2 we can */ - while ( (x & (x-1)) != 0 ) /* blacks out all but the top bit */ - x &= (x-1); - return x << 1; /* makes it the *next* power of 2 */ -} - -static HTItem *Insert(HashTable *ht, ulong key, ulong data, int fOverwrite) -{ - HTItem *item, bckInsert; - ulong iEmpty; /* first empty bucket key probes */ - - if ( ht->table == NULL ) /* empty hash table: find is bound to fail */ - return NULL; - item = Find(ht, key, &iEmpty); - ht->posLastFind = NULL; /* last operation is insert, not find */ - if ( item ) - { - if ( fOverwrite ) - item->data = data; /* key already matches */ - return item; - } - - COPY_KEY(ht, bckInsert.key, key); /* make our own copy of the key */ - bckInsert.data = data; /* oh, and the data too */ - item = Table(Insert)(ht->table, &bckInsert, iEmpty, &fOverwrite); - if ( fOverwrite ) /* we overwrote a deleted bucket */ - ht->cDeletedItems--; - ht->cItems++; /* insert couldn't have overwritten */ - if ( ht->cDeltaGoalSize > 0 ) /* closer to our goal size */ - ht->cDeltaGoalSize--; - if ( ht->cItems + ht->cDeletedItems >= ht->cBuckets * OCCUPANCY_PCT - || ht->cDeltaGoalSize < 0 ) /* we must've overestimated # of deletes */ - item = Rehash(ht, - NextPow2((ulong)(((ht->cDeltaGoalSize > 0 ? - ht->cDeltaGoalSize : 0) - + ht->cItems) / OCCUPANCY_PCT)), - item); - return item; -} - -/*************************************************************************\ -| Delete() | -| Removes the item from the hashtable, and if fShrink is 1, will | -| shrink the hashtable if it's too small (ie even after halving, | -| the ht would be less than half full, though in order to avoid | -| oscillating table size, we insist that after halving the ht would | -| be less than 40% full). RETURNS 1 if the item was found, 0 else. | -| If fLastFindSet is true, then this function is basically | -| DeleteLastFind. | -\*************************************************************************/ - -static int Delete(HashTable *ht, ulong key, int fShrink, int fLastFindSet) -{ - if ( !fLastFindSet && !Find(ht, key, NULL) ) - return 0; - SET_BCK_DELETED(ht, ht->posLastFind); /* find set this, how nice */ - ht->cItems--; - ht->cDeletedItems++; - if ( ht->cDeltaGoalSize < 0 ) /* heading towards our goal of deletion */ - ht->cDeltaGoalSize++; - - if ( fShrink && ht->cItems < ht->cBuckets * OCCUPANCY_PCT*0.4 - && ht->cDeltaGoalSize >= 0 /* wait until we're done deleting */ - && (ht->cBuckets >> 1) >= MIN_HASH_SIZE ) /* shrink */ - Rehash(ht, - NextPow2((ulong)((ht->cItems+ht->cDeltaGoalSize)/OCCUPANCY_PCT)), - NULL); - ht->posLastFind = NULL; /* last operation is delete, not find */ - return 1; -} - - -/* ======================================================================== */ -/* USER-VISIBLE API */ -/* ---------------------- */ - -/*************************************************************************\ -| AllocateHashTable() | -| ClearHashTable() | -| FreeHashTable() | -| Allocate() allocates a hash table and sets up size parameters. | -| Free() frees it. Clear() deletes all the items from the hash | -| table, but frees not. | -| cchKey is < 0 if the keys you send me are meant to be pointers | -| to \0-terminated strings. Then -cchKey is the maximum key size. | -| If cchKey < one word (ulong), the keys you send me are the keys | -| themselves; else the keys you send me are pointers to the data. | -| If fSaveKeys is 1, we copy any keys given to us to insert. We | -| also free these keys when freeing the hash table. If it's 0, the | -| user is responsible for key space management. | -| AllocateHashTable() RETURNS a hash table; the others TAKE one. | -\*************************************************************************/ - -HashTable *AllocateHashTable(int cchKey, int fSaveKeys) -{ - HashTable *ht; - - ht = (HashTable *) HTsmalloc(sizeof(*ht)); /* set everything to 0 */ - ht->cBuckets = Table(Allocate)(&ht->table, MIN_HASH_SIZE); - ht->cchKey = cchKey <= 0 ? NULL_TERMINATED : cchKey; - ht->cItems = 0; - ht->cDeletedItems = 0; - ht->fSaveKeys = fSaveKeys; - ht->cDeltaGoalSize = 0; - ht->iter = HTsmalloc( sizeof(TableIterator) ); - - ht->fpData = NULL; /* set by HashLoad, maybe */ - ht->bckData.data = (ulong) NULL; /* this must be done */ - HTSetupKeyTrunc(); /* in util.c */ - return ht; -} - -void ClearHashTable(HashTable *ht) -{ - HTItem *bck; - - if ( STORES_PTR(ht) && ht->fSaveKeys ) /* need to free keys */ - for ( bck = HashFirstBucket(ht); bck; bck = HashNextBucket(ht) ) - { - FREE_KEY(ht, bck->key); - if ( ht->fSaveKeys == 2 ) /* this means key stored in one block */ - break; /* ...so only free once */ - } - Table(Free)(ht->table, ht->cBuckets); - ht->cBuckets = Table(Allocate)(&ht->table, MIN_HASH_SIZE); - - ht->cItems = 0; - ht->cDeletedItems = 0; - ht->cDeltaGoalSize = 0; - ht->posLastFind = NULL; - ht->fpData = NULL; /* no longer HashLoading */ - if ( ht->bckData.data ) free( (char *)(ht)->bckData.data); - ht->bckData.data = (ulong) NULL; -} - -void FreeHashTable(HashTable *ht) -{ - ClearHashTable(ht); - if ( ht->iter ) HTfree(ht->iter, sizeof(TableIterator)); - if ( ht->table ) Table(Free)(ht->table, ht->cBuckets); - free(ht); -} - -/*************************************************************************\ -| HashFind() | -| HashFindLast() | -| HashFind(): looks in h(x) + i(i-1)/2 % t as i goes up from 0 | -| until we either find the key or hit an empty bucket. RETURNS a | -| pointer to the item in the hit bucket, if we find it, else | -| RETURNS NULL. | -| HashFindLast() returns the item returned by the last | -| HashFind(), which may be NULL if the last HashFind() failed. | -| LOAD_AND_RETURN reads the data from off disk, if necessary. | -\*************************************************************************/ - -HTItem *HashFind(HashTable *ht, ulong key) -{ - LOAD_AND_RETURN(ht, Find(ht, KEY_TRUNC(ht, key), NULL)); -} - -HTItem *HashFindLast(HashTable *ht) -{ - LOAD_AND_RETURN(ht, ht->posLastFind); -} - -/*************************************************************************\ -| HashFindOrInsert() | -| HashFindOrInsertItem() | -| HashInsert() | -| HashInsertItem() | -| HashDelete() | -| HashDeleteLast() | -| Pretty obvious what these guys do. Some take buckets (items), | -| some take keys and data separately. All things RETURN the bucket | -| (a pointer into the hashtable) if appropriate. | -\*************************************************************************/ - -HTItem *HashFindOrInsert(HashTable *ht, ulong key, ulong dataInsert) -{ - /* This is equivalent to Insert without samekey-overwrite */ - return Insert(ht, KEY_TRUNC(ht, key), dataInsert, 0); -} - -HTItem *HashFindOrInsertItem(HashTable *ht, HTItem *pItem) -{ - return HashFindOrInsert(ht, pItem->key, pItem->data); -} - -HTItem *HashInsert(HashTable *ht, ulong key, ulong data) -{ - return Insert(ht, KEY_TRUNC(ht, key), data, SAMEKEY_OVERWRITE); -} - -HTItem *HashInsertItem(HashTable *ht, HTItem *pItem) -{ - return HashInsert(ht, pItem->key, pItem->data); -} - -int HashDelete(HashTable *ht, ulong key) -{ - return Delete(ht, KEY_TRUNC(ht, key), !FAST_DELETE, 0); -} - -int HashDeleteLast(HashTable *ht) -{ - if ( !ht->posLastFind ) /* last find failed */ - return 0; - return Delete(ht, 0, !FAST_DELETE, 1); /* no need to specify a key */ -} - -/*************************************************************************\ -| HashFirstBucket() | -| HashNextBucket() | -| Iterates through the items in the hashtable by iterating through | -| the table. Since we know about deleted buckets and loading data | -| off disk, and the table doesn't, our job is to take care of these | -| things. RETURNS a bucket, or NULL after the last bucket. | -\*************************************************************************/ - -HTItem *HashFirstBucket(HashTable *ht) -{ - HTItem *retval; - - for ( retval = Table(FirstBucket)(ht->iter, ht->table, ht->cBuckets); - retval; retval = Table(NextBucket)(ht->iter) ) - if ( !IS_BCK_DELETED(retval) ) - LOAD_AND_RETURN(ht, retval); - return NULL; -} - -HTItem *HashNextBucket(HashTable *ht) -{ - HTItem *retval; - - while ( (retval=Table(NextBucket)(ht->iter)) ) - if ( !IS_BCK_DELETED(retval) ) - LOAD_AND_RETURN(ht, retval); - return NULL; -} - -/*************************************************************************\ -| HashSetDeltaGoalSize() | -| If we're going to insert 100 items, set the delta goal size to | -| 100 and we take that into account when inserting. Likewise, if | -| we're going to delete 10 items, set it to -100 and we won't | -| rehash until all 100 have been done. It's ok to be wrong, but | -| it's efficient to be right. Returns the delta value. | -\*************************************************************************/ - -int HashSetDeltaGoalSize(HashTable *ht, int delta) -{ - ht->cDeltaGoalSize = delta; -#if FAST_DELETE == 1 || defined INSERT_ONLY - if ( ht->cDeltaGoalSize < 0 ) /* for fast delete, we never */ - ht->cDeltaGoalSize = 0; /* ...rehash after deletion */ -#endif - return ht->cDeltaGoalSize; -} - - -/*************************************************************************\ -| HashSave() | -| HashLoad() | -| HashLoadKeys() | -| Routines for saving and loading the hashtable from disk. We can | -| then use the hashtable in two ways: loading it back into memory | -| (HashLoad()) or loading only the keys into memory, in which case | -| the data for a given key is loaded off disk when the key is | -| retrieved. The data is freed when something new is retrieved in | -| its place, so this is not a "lazy-load" scheme. | -| The key is saved automatically and restored upon load, but the | -| user needs to specify a routine for reading and writing the data. | -| fSaveKeys is of course set to 1 when you read in a hashtable. | -| HashLoad RETURNS a newly allocated hashtable. | -| DATA_WRITE() takes an fp and a char * (representing the data | -| field), and must perform two separate tasks. If fp is NULL, | -| return the number of bytes written. If not, writes the data to | -| disk at the place the fp points to. | -| DATA_READ() takes an fp and the number of bytes in the data | -| field, and returns a char * which points to wherever you've | -| written the data. Thus, you must allocate memory for the data. | -| Both dataRead and dataWrite may be NULL if you just wish to | -| store the data field directly, as an integer. | -\*************************************************************************/ - -void HashSave(FILE *fp, HashTable *ht, int (*dataWrite)(FILE *, char *)) -{ - long cchData, posStart; - HTItem *bck; - - /* File format: magic number (4 bytes) - : cchKey (one word) - : cItems (one word) - : cDeletedItems (one word) - : table info (buckets and a bitmap) - : cchAllKeys (one word) - Then the keys, in a block. If cchKey is NULL_TERMINATED, the keys - are null-terminated too, otherwise this takes up cchKey*cItems bytes. - Note that keys are not written for DELETED buckets. - Then the data: - : EITHER DELETED (one word) to indicate it's a deleted bucket, - : OR number of bytes for this (non-empty) bucket's data - (one word). This is not stored if dataWrite == NULL - since the size is known to be sizeof(ul). Plus: - : the data for this bucket (variable length) - All words are in network byte order. */ - - fprintf(fp, "%s", MAGIC_KEY); - WRITE_UL(fp, ht->cchKey); /* WRITE_UL, READ_UL, etc in fks-hash.h */ - WRITE_UL(fp, ht->cItems); - WRITE_UL(fp, ht->cDeletedItems); - Table(Write)(fp, ht->table, ht->cBuckets); /* writes cBuckets too */ - - WRITE_UL(fp, 0); /* to be replaced with sizeof(key block) */ - posStart = ftell(fp); - for ( bck = HashFirstBucket(ht); bck; bck = HashNextBucket(ht) ) - fwrite(KEY_PTR(ht, bck->key), 1, - (ht->cchKey == NULL_TERMINATED ? - strlen(KEY_PTR(ht, bck->key))+1 : ht->cchKey), fp); - cchData = ftell(fp) - posStart; - fseek(fp, posStart - sizeof(unsigned long), SEEK_SET); - WRITE_UL(fp, cchData); - fseek(fp, 0, SEEK_END); /* done with our sojourn at the header */ - - /* Unlike HashFirstBucket, TableFirstBucket iters through deleted bcks */ - for ( bck = Table(FirstBucket)(ht->iter, ht->table, ht->cBuckets); - bck; bck = Table(NextBucket)(ht->iter) ) - if ( dataWrite == NULL || IS_BCK_DELETED(bck) ) - WRITE_UL(fp, bck->data); - else /* write cchData followed by the data */ - { - WRITE_UL(fp, (*dataWrite)(NULL, (char *)bck->data)); - (*dataWrite)(fp, (char *)bck->data); - } -} - -static HashTable *HashDoLoad(FILE *fp, char * (*dataRead)(FILE *, int), - HashTable *ht) -{ - ulong cchKey; - char szMagicKey[4], *rgchKeys; - HTItem *bck; - - fread(szMagicKey, 1, 4, fp); - if ( strncmp(szMagicKey, MAGIC_KEY, 4) ) - { - fprintf(stderr, "ERROR: not a hash table (magic key is %4.4s, not %s)\n", - szMagicKey, MAGIC_KEY); - exit(3); - } - Table(Free)(ht->table, ht->cBuckets); /* allocated in AllocateHashTable */ - - READ_UL(fp, ht->cchKey); - READ_UL(fp, ht->cItems); - READ_UL(fp, ht->cDeletedItems); - ht->cBuckets = Table(Read)(fp, &ht->table); /* next is the table info */ - - READ_UL(fp, cchKey); - rgchKeys = (char *) HTsmalloc( cchKey ); /* stores all the keys */ - fread(rgchKeys, 1, cchKey, fp); - /* We use the table iterator so we don't try to LOAD_AND_RETURN */ - for ( bck = Table(FirstBucket)(ht->iter, ht->table, ht->cBuckets); - bck; bck = Table(NextBucket)(ht->iter) ) - { - READ_UL(fp, bck->data); /* all we need if dataRead is NULL */ - if ( IS_BCK_DELETED(bck) ) /* always 0 if defined(INSERT_ONLY) */ - continue; /* this is why we read the data first */ - if ( dataRead != NULL ) /* if it's null, we're done */ - if ( !ht->fpData ) /* load data into memory */ - bck->data = (ulong)dataRead(fp, bck->data); - else /* store location of data on disk */ - { - fseek(fp, bck->data, SEEK_CUR); /* bck->data held size of data */ - bck->data = ftell(fp) - bck->data - sizeof(unsigned long); - } - - if ( ht->cchKey == NULL_TERMINATED ) /* now read the key */ - { - bck->key = (ulong) rgchKeys; - rgchKeys = strchr(rgchKeys, '\0') + 1; /* read past the string */ - } - else - { - if ( STORES_PTR(ht) ) /* small keys stored directly */ - bck->key = (ulong) rgchKeys; - else - memcpy(&bck->key, rgchKeys, ht->cchKey); - rgchKeys += ht->cchKey; - } - } - if ( !STORES_PTR(ht) ) /* keys are stored directly */ - HTfree(rgchKeys - cchKey, cchKey); /* we've advanced rgchK to end */ - return ht; -} - -HashTable *HashLoad(FILE *fp, char * (*dataRead)(FILE *, int)) -{ - HashTable *ht; - ht = AllocateHashTable(0, 2); /* cchKey set later, fSaveKey should be 2! */ - return HashDoLoad(fp, dataRead, ht); -} - -HashTable *HashLoadKeys(FILE *fp, char * (*dataRead)(FILE *, int)) -{ - HashTable *ht; - - if ( dataRead == NULL ) - return HashLoad(fp, NULL); /* no reason not to load the data here */ - ht = AllocateHashTable(0, 2); /* cchKey set later, fSaveKey should be 2! */ - ht->fpData = fp; /* tells HashDoLoad() to only load keys */ - ht->dataRead = dataRead; - return HashDoLoad(fp, dataRead, ht); -} - -/*************************************************************************\ -| PrintHashTable() | -| A debugging tool. Prints the entire contents of the hash table, | -| like so: : key of the contents. Returns number of bytes | -| allocated. If time is not -1, we print it as the time required | -| for the hash. If iForm is 0, we just print the stats. If it's | -| 1, we print the keys and data too, but the keys are printed as | -| ulongs. If it's 2, we print the keys correctly (as long numbers | -| or as strings). | -\*************************************************************************/ - -ulong PrintHashTable(HashTable *ht, double time, int iForm) -{ - ulong cbData = 0, cbBin = 0, cItems = 0, cOccupied = 0; - HTItem *item; - - printf("HASH TABLE.\n"); - if ( time > -1.0 ) - { - printf("----------\n"); - printf("Time: %27.2f\n", time); - } - - for ( item = Table(FirstBucket)(ht->iter, ht->table, ht->cBuckets); - item; item = Table(NextBucket)(ht->iter) ) - { - cOccupied++; /* this includes deleted buckets */ - if ( IS_BCK_DELETED(item) ) /* we don't need you for anything else */ - continue; - cItems++; /* this is for a sanity check */ - if ( STORES_PTR(ht) ) - cbData += ht->cchKey == NULL_TERMINATED ? - WORD_ROUND(strlen((char *)item->key)+1) : ht->cchKey; - else - cbBin -= sizeof(item->key), cbData += sizeof(item->key); - cbBin -= sizeof(item->data), cbData += sizeof(item->data); - if ( iForm != 0 ) /* we want the actual contents */ - { - if ( iForm == 2 && ht->cchKey == NULL_TERMINATED ) - printf("%s/%lu\n", (char *)item->key, item->data); - else if ( iForm == 2 && STORES_PTR(ht) ) - printf("%.*s/%lu\n", - (int)ht->cchKey, (char *)item->key, item->data); - else /* either key actually is a ulong, or iForm == 1 */ - printf("%lu/%lu\n", item->key, item->data); - } - } - assert( cItems == ht->cItems ); /* sanity check */ - cbBin = Table(Memory)(ht->cBuckets, cOccupied); - - printf("----------\n"); - printf("%lu buckets (%lu bytes). %lu empty. %lu hold deleted items.\n" - "%lu items (%lu bytes).\n" - "%lu bytes total. %lu bytes (%2.1f%%) of this is ht overhead.\n", - ht->cBuckets, cbBin, ht->cBuckets - cOccupied, cOccupied - ht->cItems, - ht->cItems, cbData, - cbData + cbBin, cbBin, cbBin*100.0/(cbBin+cbData)); - - return cbData + cbBin; -} diff --git a/clipper/sparsehash-2.0.3/experimental/libchash.h b/clipper/sparsehash-2.0.3/experimental/libchash.h deleted file mode 100644 index 8c8ac30..0000000 --- a/clipper/sparsehash-2.0.3/experimental/libchash.h +++ /dev/null @@ -1,253 +0,0 @@ -/* Copyright (c) 1998 - 2005, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * --- - * Author: Craig Silverstein - * - * This library is intended to be used for in-memory hash tables, - * though it provides rudimentary permanent-storage capabilities. - * It attempts to be fast, portable, and small. The best algorithm - * to fulfill these goals is an internal probing hashing algorithm, - * as in Knuth, _Art of Computer Programming_, vol III. Unlike - * chained (open) hashing, it doesn't require a pointer for every - * item, yet it is still constant time lookup in practice. - * - * Also to save space, we let the contents (both data and key) that - * you insert be a union: if the key/data is small, we store it - * directly in the hashtable, otherwise we store a pointer to it. - * To keep you from having to figure out which, use KEY_PTR and - * PTR_KEY to convert between the arguments to these functions and - * a pointer to the real data. For instance: - * char key[] = "ab", *key2; - * HTItem *bck; HashTable *ht; - * HashInsert(ht, PTR_KEY(ht, key), 0); - * bck = HashFind(ht, PTR_KEY(ht, "ab")); - * key2 = KEY_PTR(ht, bck->key); - * - * There are a rich set of operations supported: - * AllocateHashTable() -- Allocates a hashtable structure and - * returns it. - * cchKey: if it's a positive number, then each key is a - * fixed-length record of that length. If it's 0, - * the key is assumed to be a \0-terminated string. - * fSaveKey: normally, you are responsible for allocating - * space for the key. If this is 1, we make a - * copy of the key for you. - * ClearHashTable() -- Removes everything from a hashtable - * FreeHashTable() -- Frees memory used by a hashtable - * - * HashFind() -- takes a key (use PTR_KEY) and returns the - * HTItem containing that key, or NULL if the - * key is not in the hashtable. - * HashFindLast() -- returns the item found by last HashFind() - * HashFindOrInsert() -- inserts the key/data pair if the key - * is not already in the hashtable, or - * returns the appropraite HTItem if it is. - * HashFindOrInsertItem() -- takes key/data as an HTItem. - * HashInsert() -- adds a key/data pair to the hashtable. What - * it does if the key is already in the table - * depends on the value of SAMEKEY_OVERWRITE. - * HashInsertItem() -- takes key/data as an HTItem. - * HashDelete() -- removes a key/data pair from the hashtable, - * if it's there. RETURNS 1 if it was there, - * 0 else. - * If you use sparse tables and never delete, the full data - * space is available. Otherwise we steal -2 (maybe -3), - * so you can't have data fields with those values. - * HashDeleteLast() -- deletes the item returned by the last Find(). - * - * HashFirstBucket() -- used to iterate over the buckets in a - * hashtable. DON'T INSERT OR DELETE WHILE - * ITERATING! You can't nest iterations. - * HashNextBucket() -- RETURNS NULL at the end of iterating. - * - * HashSetDeltaGoalSize() -- if you're going to insert 1000 items - * at once, call this fn with arg 1000. - * It grows the table more intelligently. - * - * HashSave() -- saves the hashtable to a file. It saves keys ok, - * but it doesn't know how to interpret the data field, - * so if the data field is a pointer to some complex - * structure, you must send a function that takes a - * file pointer and a pointer to the structure, and - * write whatever you want to write. It should return - * the number of bytes written. If the file is NULL, - * it should just return the number of bytes it would - * write, without writing anything. - * If your data field is just an integer, not a - * pointer, just send NULL for the function. - * HashLoad() -- loads a hashtable. It needs a function that takes - * a file and the size of the structure, and expects - * you to read in the structure and return a pointer - * to it. You must do memory allocation, etc. If - * the data is just a number, send NULL. - * HashLoadKeys() -- unlike HashLoad(), doesn't load the data off disk - * until needed. This saves memory, but if you look - * up the same key a lot, it does a disk access each - * time. - * You can't do Insert() or Delete() on hashtables that were loaded - * from disk. - */ - -#include -#include /* includes definition of "ulong", we hope */ -#define ulong u_long - -#define MAGIC_KEY "CHsh" /* when we save the file */ - -#ifndef LOG_WORD_SIZE /* 5 for 32 bit words, 6 for 64 */ -#if defined (__LP64__) || defined (_LP64) -#define LOG_WORD_SIZE 6 /* log_2(sizeof(ulong)) [in bits] */ -#else -#define LOG_WORD_SIZE 5 /* log_2(sizeof(ulong)) [in bits] */ -#endif -#endif - - /* The following gives a speed/time tradeoff: how many buckets are * - * in each bin. 0 gives 32 buckets/bin, which is a good number. */ -#ifndef LOG_BM_WORDS -#define LOG_BM_WORDS 0 /* each group has 2^L_B_W * 32 buckets */ -#endif - - /* The following are all parameters that affect performance. */ -#ifndef JUMP -#define JUMP(key, offset) ( ++(offset) ) /* ( 1 ) for linear hashing */ -#endif -#ifndef Table -#define Table(x) Sparse##x /* Dense##x for dense tables */ -#endif -#ifndef FAST_DELETE -#define FAST_DELETE 0 /* if it's 1, we never shrink the ht */ -#endif -#ifndef SAMEKEY_OVERWRITE -#define SAMEKEY_OVERWRITE 1 /* overwrite item with our key on insert? */ -#endif -#ifndef OCCUPANCY_PCT -#define OCCUPANCY_PCT 0.5 /* large PCT means smaller and slower */ -#endif -#ifndef MIN_HASH_SIZE -#define MIN_HASH_SIZE 512 /* ht size when first created */ -#endif - /* When deleting a bucket, we can't just empty it (future hashes * - * may fail); instead we set the data field to DELETED. Thus you * - * should set DELETED to a data value you never use. Better yet, * - * if you don't need to delete, define INSERT_ONLY. */ -#ifndef INSERT_ONLY -#define DELETED -2UL -#define IS_BCK_DELETED(bck) ( (bck) && (bck)->data == DELETED ) -#define SET_BCK_DELETED(ht, bck) do { (bck)->data = DELETED; \ - FREE_KEY(ht, (bck)->key); } while ( 0 ) -#else -#define IS_BCK_DELETED(bck) 0 -#define SET_BCK_DELETED(ht, bck) \ - do { fprintf(stderr, "Deletion not supported for insert-only hashtable\n");\ - exit(2); } while ( 0 ) -#endif - - /* We need the following only for dense buckets (Dense##x above). * - * If you need to, set this to a value you'll never use for data. */ -#define EMPTY -3UL /* steal more of the bck->data space */ - - - /* This is what an item is. Either can be cast to a pointer. */ -typedef struct { - ulong data; /* 4 bytes for data: either a pointer or an integer */ - ulong key; /* 4 bytes for the key: either a pointer or an int */ -} HTItem; - -struct Table(Bin); /* defined in chash.c, I hope */ -struct Table(Iterator); -typedef struct Table(Bin) Table; /* Expands to SparseBin, etc */ -typedef struct Table(Iterator) TableIterator; - - /* for STORES_PTR to work ok, cchKey MUST BE DEFINED 1st, cItems 2nd! */ -typedef struct HashTable { - ulong cchKey; /* the length of the key, or if it's \0 terminated */ - ulong cItems; /* number of items currently in the hashtable */ - ulong cDeletedItems; /* # of buckets holding DELETE in the hashtable */ - ulong cBuckets; /* size of the table */ - Table *table; /* The actual contents of the hashtable */ - int fSaveKeys; /* 1 if we copy keys locally; 2 if keys in one block */ - int cDeltaGoalSize; /* # of coming inserts (or deletes, if <0) we expect */ - HTItem *posLastFind; /* position of last Find() command */ - TableIterator *iter; /* used in First/NextBucket */ - - FILE *fpData; /* if non-NULL, what item->data points into */ - char * (*dataRead)(FILE *, int); /* how to load data from disk */ - HTItem bckData; /* holds data after being loaded from disk */ -} HashTable; - - /* Small keys are stored and passed directly, but large keys are - * stored and passed as pointers. To make it easier to remember - * what to pass, we provide two functions: - * PTR_KEY: give it a pointer to your data, and it returns - * something appropriate to send to Hash() functions or - * be stored in a data field. - * KEY_PTR: give it something returned by a Hash() routine, and - * it returns a (char *) pointer to the actual data. - */ -#define HashKeySize(ht) ( ((ulong *)(ht))[0] ) /* this is how we inline */ -#define HashSize(ht) ( ((ulong *)(ht))[1] ) /* ...a la C++ :-) */ - -#define STORES_PTR(ht) ( HashKeySize(ht) == 0 || \ - HashKeySize(ht) > sizeof(ulong) ) -#define KEY_PTR(ht, key) ( STORES_PTR(ht) ? (char *)(key) : (char *)&(key) ) -#ifdef DONT_HAVE_TO_WORRY_ABOUT_BUS_ERRORS -#define PTR_KEY(ht, ptr) ( STORES_PTR(ht) ? (ulong)(ptr) : *(ulong *)(ptr) ) -#else -#define PTR_KEY(ht, ptr) ( STORES_PTR(ht) ? (ulong)(ptr) : HTcopy((char *)ptr)) -#endif - - - /* Function prototypes */ -unsigned long HTcopy(char *pul); /* for PTR_KEY, not for users */ - -struct HashTable *AllocateHashTable(int cchKey, int fSaveKeys); -void ClearHashTable(struct HashTable *ht); -void FreeHashTable(struct HashTable *ht); - -HTItem *HashFind(struct HashTable *ht, ulong key); -HTItem *HashFindLast(struct HashTable *ht); -HTItem *HashFindOrInsert(struct HashTable *ht, ulong key, ulong dataInsert); -HTItem *HashFindOrInsertItem(struct HashTable *ht, HTItem *pItem); - -HTItem *HashInsert(struct HashTable *ht, ulong key, ulong data); -HTItem *HashInsertItem(struct HashTable *ht, HTItem *pItem); - -int HashDelete(struct HashTable *ht, ulong key); -int HashDeleteLast(struct HashTable *ht); - -HTItem *HashFirstBucket(struct HashTable *ht); -HTItem *HashNextBucket(struct HashTable *ht); - -int HashSetDeltaGoalSize(struct HashTable *ht, int delta); - -void HashSave(FILE *fp, struct HashTable *ht, int (*write)(FILE *, char *)); -struct HashTable *HashLoad(FILE *fp, char * (*read)(FILE *, int)); -struct HashTable *HashLoadKeys(FILE *fp, char * (*read)(FILE *, int)); diff --git a/clipper/sparsehash-2.0.3/google-sparsehash.sln b/clipper/sparsehash-2.0.3/google-sparsehash.sln deleted file mode 100755 index 4e57c62..0000000 --- a/clipper/sparsehash-2.0.3/google-sparsehash.sln +++ /dev/null @@ -1,71 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "type_traits_unittest", "vsprojects\type_traits_unittest\type_traits_unittest.vcproj", "{008CCFED-7D7B-46F8-8E13-03837A2258B3}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "template_util_unittest", "vsprojects\template_util_unittest\template_util_unittest.vcproj", "{F08CCFED-7D7B-46F8-8E13-03837A2258B3}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sparsetable_unittest", "vsprojects\sparsetable_unittest\sparsetable_unittest.vcproj", "{E420867B-8BFA-4739-99EC-E008AB762FF9}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hashtable_test", "vsprojects\hashtable_test\hashtable_test.vcproj", "{FCDB3718-F01C-4DE4-B9F5-E10F2C5C0535}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_test", "vsprojects\simple_test\simple_test.vcproj", "{FCDB3718-F01C-4DE4-B9F5-E10F2C5C0538}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libc_allocator_with_realloc_test", "vsprojects\libc_allocator_with_realloc_test\libc_allocator_with_realloc_test.vcproj", "{FCDB3718-F01C-4DE4-B9F5-E10F2C5C0539}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "time_hash_map", "vsprojects\time_hash_map\time_hash_map.vcproj", "{A74E5DB8-5295-487A-AB1D-23859F536F45}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {008CCFED-7D7B-46F8-8E13-03837A2258B3}.Debug.ActiveCfg = Debug|Win32 - {008CCFED-7D7B-46F8-8E13-03837A2258B3}.Debug.Build.0 = Debug|Win32 - {008CCFED-7D7B-46F8-8E13-03837A2258B3}.Release.ActiveCfg = Release|Win32 - {008CCFED-7D7B-46F8-8E13-03837A2258B3}.Release.Build.0 = Release|Win32 - {F08CCFED-7D7B-46F8-8E13-03837A2258B3}.Debug.ActiveCfg = Debug|Win32 - {F08CCFED-7D7B-46F8-8E13-03837A2258B3}.Debug.Build.0 = Debug|Win32 - {F08CCFED-7D7B-46F8-8E13-03837A2258B3}.Release.ActiveCfg = Release|Win32 - {F08CCFED-7D7B-46F8-8E13-03837A2258B3}.Release.Build.0 = Release|Win32 - {E420867B-8BFA-4739-99EC-E008AB762FF9}.Debug.ActiveCfg = Debug|Win32 - {E420867B-8BFA-4739-99EC-E008AB762FF9}.Debug.Build.0 = Debug|Win32 - {E420867B-8BFA-4739-99EC-E008AB762FF9}.Release.ActiveCfg = Release|Win32 - {E420867B-8BFA-4739-99EC-E008AB762FF9}.Release.Build.0 = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0535}.Debug.ActiveCfg = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0535}.Debug.Build.0 = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0535}.Release.ActiveCfg = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0535}.Release.Build.0 = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0538}.Debug.ActiveCfg = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0538}.Debug.Build.0 = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0538}.Release.ActiveCfg = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0538}.Release.Build.0 = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0539}.Debug.ActiveCfg = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0539}.Debug.Build.0 = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0539}.Release.ActiveCfg = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0539}.Release.Build.0 = Release|Win32 - {A74E5DB8-5295-487A-AB1D-23859F536F45}.Debug.ActiveCfg = Debug|Win32 - {A74E5DB8-5295-487A-AB1D-23859F536F45}.Debug.Build.0 = Debug|Win32 - {A74E5DB8-5295-487A-AB1D-23859F536F45}.Release.ActiveCfg = Release|Win32 - {A74E5DB8-5295-487A-AB1D-23859F536F45}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/clipper/sparsehash-2.0.3/install-sh b/clipper/sparsehash-2.0.3/install-sh deleted file mode 100755 index 6781b98..0000000 --- a/clipper/sparsehash-2.0.3/install-sh +++ /dev/null @@ -1,520 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2009-04-28.21; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -no_target_directory= - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - trap '(exit $?); exit' 1 2 13 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dst_arg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - test -d "$dstdir" - dstdir_status=$? - fi - fi - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 - - if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writeable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/d" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - -*) prefix='./';; - *) prefix='';; - esac - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob set +f - IFS=$oIFS - - prefixes= - - for d - do - test -z "$d" && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob set +f && - - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/clipper/sparsehash-2.0.3/m4/acx_pthread.m4 b/clipper/sparsehash-2.0.3/m4/acx_pthread.m4 deleted file mode 100644 index 89d42c7..0000000 --- a/clipper/sparsehash-2.0.3/m4/acx_pthread.m4 +++ /dev/null @@ -1,397 +0,0 @@ -# This was retrieved from -# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?revision=1277&root=avahi -# See also (perhaps for new versions?) -# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?root=avahi -# -# We've rewritten the inconsistency check code (from avahi), to work -# more broadly. In particular, it no longer assumes ld accepts -zdefs. -# This caused a restructing of the code, but the functionality has only -# changed a little. - -dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -dnl -dnl @summary figure out how to build C programs using POSIX threads -dnl -dnl This macro figures out how to build C programs using POSIX threads. -dnl It sets the PTHREAD_LIBS output variable to the threads library and -dnl linker flags, and the PTHREAD_CFLAGS output variable to any special -dnl C compiler flags that are needed. (The user can also force certain -dnl compiler flags/libs to be tested by setting these environment -dnl variables.) -dnl -dnl Also sets PTHREAD_CC to any special C compiler that is needed for -dnl multi-threaded programs (defaults to the value of CC otherwise). -dnl (This is necessary on AIX to use the special cc_r compiler alias.) -dnl -dnl NOTE: You are assumed to not only compile your program with these -dnl flags, but also link it with them as well. e.g. you should link -dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS -dnl $LIBS -dnl -dnl If you are only building threads programs, you may wish to use -dnl these variables in your default LIBS, CFLAGS, and CC: -dnl -dnl LIBS="$PTHREAD_LIBS $LIBS" -dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -dnl CC="$PTHREAD_CC" -dnl -dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute -dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to -dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). -dnl -dnl ACTION-IF-FOUND is a list of shell commands to run if a threads -dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to -dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the -dnl default action will define HAVE_PTHREAD. -dnl -dnl Please let the authors know if this macro fails on any platform, or -dnl if you have any other suggestions or comments. This macro was based -dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with -dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros -dnl posted by Alejandro Forero Cuervo to the autoconf macro repository. -dnl We are also grateful for the helpful feedback of numerous users. -dnl -dnl @category InstalledPackages -dnl @author Steven G. Johnson -dnl @version 2006-05-29 -dnl @license GPLWithACException -dnl -dnl Checks for GCC shared/pthread inconsistency based on work by -dnl Marcin Owsiany - - -AC_DEFUN([ACX_PTHREAD], [ -AC_REQUIRE([AC_CANONICAL_HOST]) -AC_LANG_SAVE -AC_LANG_C -acx_pthread_ok=no - -# We used to check for pthread.h first, but this fails if pthread.h -# requires special compiler flags (e.g. on True64 or Sequent). -# It gets checked for in the link test anyway. - -# First of all, check if the user has set any of the PTHREAD_LIBS, -# etcetera environment variables, and if threads linking works using -# them: -if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) - AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) - AC_MSG_RESULT($acx_pthread_ok) - if test x"$acx_pthread_ok" = xno; then - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" - fi - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" -fi - -# We must check for the threads library under a number of different -# names; the ordering is very important because some systems -# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -# libraries is broken (non-POSIX). - -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. - -acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" - -# The ordering *is* (sometimes) important. Some notes on the -# individual items follow: - -# pthreads: AIX (must check this before -lpthread) -# none: in case threads are in libc; should be tried before -Kthread and -# other compiler flags to prevent continual compiler warnings -# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -# -pthreads: Solaris/gcc -# -mthreads: Mingw32/gcc, Lynx/gcc -# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -# doesn't hurt to check since this sometimes defines pthreads too; -# also defines -D_REENTRANT) -# ... -mt is also the pthreads flag for HP/aCC -# pthread: Linux, etcetera -# --thread-safe: KAI C++ -# pthread-config: use pthread-config program (for GNU Pth library) - -case "${host_cpu}-${host_os}" in - *solaris*) - - # On Solaris (at least, for some versions), libc contains stubbed - # (non-functional) versions of the pthreads routines, so link-based - # tests will erroneously succeed. (We need to link with -pthreads/-mt/ - # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather - # a function called by this macro, so we could check for that, but - # who knows whether they'll stub that too in a future libc.) So, - # we'll just look for -pthreads and -lpthread first: - - acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" - ;; -esac - -if test x"$acx_pthread_ok" = xno; then -for flag in $acx_pthread_flags; do - - case $flag in - none) - AC_MSG_CHECKING([whether pthreads work without any flags]) - ;; - - -*) - AC_MSG_CHECKING([whether pthreads work with $flag]) - PTHREAD_CFLAGS="$flag" - ;; - - pthread-config) - AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) - if test x"$acx_pthread_config" = xno; then continue; fi - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - AC_MSG_CHECKING([for the pthreads library -l$flag]) - PTHREAD_LIBS="-l$flag" - ;; - esac - - save_LIBS="$LIBS" - save_CFLAGS="$CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [acx_pthread_ok=yes]) - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - - AC_MSG_RESULT($acx_pthread_ok) - if test "x$acx_pthread_ok" = xyes; then - break; - fi - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi - -# Various other checks: -if test "x$acx_pthread_ok" = xyes; then - save_LIBS="$LIBS" - LIBS="$PTHREAD_LIBS $LIBS" - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - - # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - AC_MSG_CHECKING([for joinable pthread attribute]) - attr_name=unknown - for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do - AC_TRY_LINK([#include ], [int attr=$attr; return attr;], - [attr_name=$attr; break]) - done - AC_MSG_RESULT($attr_name) - if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, - [Define to necessary symbol if this constant - uses a non-standard name on your system.]) - fi - - AC_MSG_CHECKING([if more special flags are required for pthreads]) - flag=no - case "${host_cpu}-${host_os}" in - *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; - *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; - esac - AC_MSG_RESULT(${flag}) - if test "x$flag" != xno; then - PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" - fi - - LIBS="$save_LIBS" - CFLAGS="$save_CFLAGS" - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) - else - PTHREAD_CC=$CC - fi - - # The next part tries to detect GCC inconsistency with -shared on some - # architectures and systems. The problem is that in certain - # configurations, when -shared is specified, GCC "forgets" to - # internally use various flags which are still necessary. - - # - # Prepare the flags - # - save_CFLAGS="$CFLAGS" - save_LIBS="$LIBS" - save_CC="$CC" - - # Try with the flags determined by the earlier checks. - # - # -Wl,-z,defs forces link-time symbol resolution, so that the - # linking checks with -shared actually have any value - # - # FIXME: -fPIC is required for -shared on many architectures, - # so we specify it here, but the right way would probably be to - # properly detect whether it is actually required. - CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - CC="$PTHREAD_CC" - - # In order not to create several levels of indentation, we test - # the value of "$done" until we find the cure or run out of ideas. - done="no" - - # First, make sure the CFLAGS we added are actually accepted by our - # compiler. If not (and OS X's ld, for instance, does not accept -z), - # then we can't do this test. - if test x"$done" = xno; then - AC_MSG_CHECKING([whether to check for GCC pthread/shared inconsistencies]) - AC_TRY_LINK(,, , [done=yes]) - - if test "x$done" = xyes ; then - AC_MSG_RESULT([no]) - else - AC_MSG_RESULT([yes]) - fi - fi - - if test x"$done" = xno; then - AC_MSG_CHECKING([whether -pthread is sufficient with -shared]) - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [done=yes]) - - if test "x$done" = xyes; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - fi - - # - # Linux gcc on some architectures such as mips/mipsel forgets - # about -lpthread - # - if test x"$done" = xno; then - AC_MSG_CHECKING([whether -lpthread fixes that]) - LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [done=yes]) - - if test "x$done" = xyes; then - AC_MSG_RESULT([yes]) - PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" - else - AC_MSG_RESULT([no]) - fi - fi - # - # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc - # - if test x"$done" = xno; then - AC_MSG_CHECKING([whether -lc_r fixes that]) - LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [done=yes]) - - if test "x$done" = xyes; then - AC_MSG_RESULT([yes]) - PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" - else - AC_MSG_RESULT([no]) - fi - fi - if test x"$done" = xno; then - # OK, we have run out of ideas - AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries]) - - # so it's not safe to assume that we may use pthreads - acx_pthread_ok=no - fi - - AC_MSG_CHECKING([whether what we have so far is sufficient with -nostdlib]) - CFLAGS="-nostdlib $CFLAGS" - # we need c with nostdlib - LIBS="$LIBS -lc" - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [done=yes],[done=no]) - - if test "x$done" = xyes; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - - if test x"$done" = xno; then - AC_MSG_CHECKING([whether -lpthread saves the day]) - LIBS="-lpthread $LIBS" - AC_TRY_LINK([#include ], - [pthread_t th; pthread_join(th, 0); - pthread_attr_init(0); pthread_cleanup_push(0, 0); - pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], - [done=yes],[done=no]) - - if test "x$done" = xyes; then - AC_MSG_RESULT([yes]) - PTHREAD_LIBS="$PTHREAD_LIBS -lpthread" - else - AC_MSG_RESULT([no]) - AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries and -nostdlib]) - fi - fi - - CFLAGS="$save_CFLAGS" - LIBS="$save_LIBS" - CC="$save_CC" -else - PTHREAD_CC="$CC" -fi - -AC_SUBST(PTHREAD_LIBS) -AC_SUBST(PTHREAD_CFLAGS) -AC_SUBST(PTHREAD_CC) - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x"$acx_pthread_ok" = xyes; then - ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) - : -else - acx_pthread_ok=no - $2 -fi -AC_LANG_RESTORE -])dnl ACX_PTHREAD diff --git a/clipper/sparsehash-2.0.3/m4/google_namespace.m4 b/clipper/sparsehash-2.0.3/m4/google_namespace.m4 deleted file mode 100644 index 7f244cc..0000000 --- a/clipper/sparsehash-2.0.3/m4/google_namespace.m4 +++ /dev/null @@ -1,42 +0,0 @@ -# Allow users to override the namespace we define our application's classes in -# Arg $1 is the default namespace to use if --enable-namespace isn't present. - -# In general, $1 should be 'google', so we put all our exported symbols in a -# unique namespace that is not likely to conflict with anyone else. However, -# when it makes sense -- for instance, when publishing stl-like code -- you -# may want to go with a different default, like 'std'. - -# We guarantee the invariant that GOOGLE_NAMESPACE starts with ::, -# unless it's the empty string. Thus, it's always safe to do -# GOOGLE_NAMESPACE::foo and be sure you're getting the foo that's -# actually in the google namespace, and not some other namespace that -# the namespace rules might kick in. - -AC_DEFUN([AC_DEFINE_GOOGLE_NAMESPACE], - [google_namespace_default=[$1] - AC_ARG_ENABLE(namespace, [ --enable-namespace=FOO to define these Google - classes in the FOO namespace. --disable-namespace - to define them in the global namespace. Default - is to define them in namespace $1.], - [case "$enableval" in - yes) google_namespace="$google_namespace_default" ;; - no) google_namespace="" ;; - *) google_namespace="$enableval" ;; - esac], - [google_namespace="$google_namespace_default"]) - if test -n "$google_namespace"; then - ac_google_namespace="::$google_namespace" - ac_google_start_namespace="namespace $google_namespace {" - ac_google_end_namespace="}" - else - ac_google_namespace="" - ac_google_start_namespace="" - ac_google_end_namespace="" - fi - AC_DEFINE_UNQUOTED(GOOGLE_NAMESPACE, $ac_google_namespace, - Namespace for Google classes) - AC_DEFINE_UNQUOTED(_START_GOOGLE_NAMESPACE_, $ac_google_start_namespace, - Puts following code inside the Google namespace) - AC_DEFINE_UNQUOTED(_END_GOOGLE_NAMESPACE_, $ac_google_end_namespace, - Stops putting the code inside the Google namespace) -]) diff --git a/clipper/sparsehash-2.0.3/m4/namespaces.m4 b/clipper/sparsehash-2.0.3/m4/namespaces.m4 deleted file mode 100644 index d78dbe4..0000000 --- a/clipper/sparsehash-2.0.3/m4/namespaces.m4 +++ /dev/null @@ -1,15 +0,0 @@ -# Checks whether the compiler implements namespaces -AC_DEFUN([AC_CXX_NAMESPACES], - [AC_CACHE_CHECK(whether the compiler implements namespaces, - ac_cv_cxx_namespaces, - [AC_LANG_SAVE - AC_LANG_CPLUSPLUS - AC_TRY_COMPILE([namespace Outer { - namespace Inner { int i = 0; }}], - [using namespace Outer::Inner; return i;], - ac_cv_cxx_namespaces=yes, - ac_cv_cxx_namespaces=no) - AC_LANG_RESTORE]) - if test "$ac_cv_cxx_namespaces" = yes; then - AC_DEFINE(HAVE_NAMESPACES, 1, [define if the compiler implements namespaces]) - fi]) diff --git a/clipper/sparsehash-2.0.3/m4/stl_hash.m4 b/clipper/sparsehash-2.0.3/m4/stl_hash.m4 deleted file mode 100644 index a31baab..0000000 --- a/clipper/sparsehash-2.0.3/m4/stl_hash.m4 +++ /dev/null @@ -1,70 +0,0 @@ -# We check two things: where the include file is for -# unordered_map/hash_map (we prefer the first form), and what -# namespace unordered/hash_map lives in within that include file. We -# include AC_TRY_COMPILE for all the combinations we've seen in the -# wild. We define HASH_MAP_H to the location of the header file, and -# HASH_NAMESPACE to the namespace the class (unordered_map or -# hash_map) is in. We define HAVE_UNORDERED_MAP if the class we found -# is named unordered_map, or leave it undefined if not. - -# This also checks if unordered map exists. -AC_DEFUN([AC_CXX_STL_HASH], - [AC_REQUIRE([AC_CXX_NAMESPACES]) - AC_MSG_CHECKING(the location of hash_map) - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - ac_cv_cxx_hash_map="" - # First try unordered_map, but not on gcc's before 4.2 -- I've - # seen unexplainable unordered_map bugs with -O2 on older gcc's. - AC_TRY_COMPILE([#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2)) - # error GCC too old for unordered_map - #endif - ], - [/* no program body necessary */], - [stl_hash_old_gcc=no], - [stl_hash_old_gcc=yes]) - for location in unordered_map tr1/unordered_map; do - for namespace in std std::tr1; do - if test -z "$ac_cv_cxx_hash_map" -a "$stl_hash_old_gcc" != yes; then - # Some older gcc's have a buggy tr1, so test a bit of code. - AC_TRY_COMPILE([#include <$location>], - [const ${namespace}::unordered_map t; - return t.find(5) == t.end();], - [ac_cv_cxx_hash_map="<$location>"; - ac_cv_cxx_hash_namespace="$namespace"; - ac_cv_cxx_have_unordered_map="yes";]) - fi - done - done - # Now try hash_map - for location in ext/hash_map hash_map; do - for namespace in __gnu_cxx "" std stdext; do - if test -z "$ac_cv_cxx_hash_map"; then - AC_TRY_COMPILE([#include <$location>], - [${namespace}::hash_map t], - [ac_cv_cxx_hash_map="<$location>"; - ac_cv_cxx_hash_namespace="$namespace"; - ac_cv_cxx_have_unordered_map="no";]) - fi - done - done - ac_cv_cxx_hash_set=`echo "$ac_cv_cxx_hash_map" | sed s/map/set/`; - if test -n "$ac_cv_cxx_hash_map"; then - AC_DEFINE(HAVE_HASH_MAP, 1, [define if the compiler has hash_map]) - AC_DEFINE(HAVE_HASH_SET, 1, [define if the compiler has hash_set]) - AC_DEFINE_UNQUOTED(HASH_MAP_H,$ac_cv_cxx_hash_map, - [the location of or ]) - AC_DEFINE_UNQUOTED(HASH_SET_H,$ac_cv_cxx_hash_set, - [the location of or ]) - AC_DEFINE_UNQUOTED(HASH_NAMESPACE,$ac_cv_cxx_hash_namespace, - [the namespace of hash_map/hash_set]) - if test "$ac_cv_cxx_have_unordered_map" = yes; then - AC_DEFINE(HAVE_UNORDERED_MAP,1, - [define if the compiler supports unordered_{map,set}]) - fi - AC_MSG_RESULT([$ac_cv_cxx_hash_map]) - else - AC_MSG_RESULT() - AC_MSG_WARN([could not find an STL hash_map]) - fi -]) diff --git a/clipper/sparsehash-2.0.3/m4/stl_hash_fun.m4 b/clipper/sparsehash-2.0.3/m4/stl_hash_fun.m4 deleted file mode 100644 index 962b088..0000000 --- a/clipper/sparsehash-2.0.3/m4/stl_hash_fun.m4 +++ /dev/null @@ -1,36 +0,0 @@ -# We just try to figure out where hash<> is defined. It's in some file -# that ends in hash_fun.h... -# -# Ideally we'd use AC_CACHE_CHECK, but that only lets us store one value -# at a time, and we need to store two (filename and namespace). -# prints messages itself, so we have to do the message-printing ourselves -# via AC_MSG_CHECKING + AC_MSG_RESULT. (TODO(csilvers): can we cache?) -# -# tr1/functional_hash.h: new gcc's with tr1 support -# stl_hash_fun.h: old gcc's (gc2.95?) -# ext/hash_fun.h: newer gcc's (gcc4) -# stl/_hash_fun.h: STLport - -AC_DEFUN([AC_CXX_STL_HASH_FUN], - [AC_REQUIRE([AC_CXX_STL_HASH]) - AC_MSG_CHECKING(how to include hash_fun directly) - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - ac_cv_cxx_stl_hash_fun="" - for location in functional tr1/functional \ - ext/hash_fun.h ext/stl_hash_fun.h \ - hash_fun.h stl_hash_fun.h \ - stl/_hash_fun.h; do - if test -z "$ac_cv_cxx_stl_hash_fun"; then - AC_TRY_COMPILE([#include <$location>], - [int x = ${ac_cv_cxx_hash_namespace}::hash()(5)], - [ac_cv_cxx_stl_hash_fun="<$location>";]) - fi - done - AC_LANG_RESTORE - AC_DEFINE_UNQUOTED(HASH_FUN_H,$ac_cv_cxx_stl_hash_fun, - [the location of the header defining hash functions]) - AC_DEFINE_UNQUOTED(HASH_NAMESPACE,$ac_cv_cxx_hash_namespace, - [the namespace of the hash<> function]) - AC_MSG_RESULT([$ac_cv_cxx_stl_hash_fun]) -]) diff --git a/clipper/sparsehash-2.0.3/missing b/clipper/sparsehash-2.0.3/missing deleted file mode 100755 index 28055d2..0000000 --- a/clipper/sparsehash-2.0.3/missing +++ /dev/null @@ -1,376 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2009-04-28.21; # UTC - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, -# 2008, 2009 Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - autom4te touch the output file, or create a stub one - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and -\`g' are ignored when checking the name. - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# normalize program name to check for. -program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). This is about non-GNU programs, so use $1 not -# $program. -case $1 in - lex*|yacc*) - # Not GNU programs, they don't have --version. - ;; - - tar*) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $program in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te*) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison*|yacc*) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex*|flex*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG="\${$#}" - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit $? - fi - ;; - - makeinfo*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - tar*) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case $firstarg in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case $firstarg in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/clipper/sparsehash-2.0.3/packages/deb.sh b/clipper/sparsehash-2.0.3/packages/deb.sh deleted file mode 100755 index 31b423c..0000000 --- a/clipper/sparsehash-2.0.3/packages/deb.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/bash -e - -# This takes one commandline argument, the name of the package. If no -# name is given, then we'll end up just using the name associated with -# an arbitrary .tar.gz file in the rootdir. That's fine: there's probably -# only one. -# -# Run this from the 'packages' directory, just under rootdir - -## Set LIB to lib if exporting a library, empty-string else -LIB= -#LIB=lib - -PACKAGE="$1" -VERSION="$2" - -# We can only build Debian packages, if the Debian build tools are installed -if [ \! -x /usr/bin/debuild ]; then - echo "Cannot find /usr/bin/debuild. Not building Debian packages." 1>&2 - exit 0 -fi - -# Double-check we're in the packages directory, just under rootdir -if [ \! -r ../Makefile -a \! -r ../INSTALL ]; then - echo "Must run $0 in the 'packages' directory, under the root directory." 1>&2 - echo "Also, you must run \"make dist\" before running this script." 1>&2 - exit 0 -fi - -# Find the top directory for this package -topdir="${PWD%/*}" - -# Find the tar archive built by "make dist" -archive="${PACKAGE}-${VERSION}" -archive_with_underscore="${PACKAGE}_${VERSION}" -if [ -z "${archive}" ]; then - echo "Cannot find ../$PACKAGE*.tar.gz. Run \"make dist\" first." 1>&2 - exit 0 -fi - -# Create a pristine directory for building the Debian package files -trap 'rm -rf '`pwd`/tmp'; exit $?' EXIT SIGHUP SIGINT SIGTERM - -rm -rf tmp -mkdir -p tmp -cd tmp - -# Debian has very specific requirements about the naming of build -# directories, and tar archives. It also wants to write all generated -# packages to the parent of the source directory. We accommodate these -# requirements by building directly from the tar file. -ln -s "${topdir}/${archive}.tar.gz" "${LIB}${archive}.orig.tar.gz" -# Some version of debuilder want foo.orig.tar.gz with _ between versions. -ln -s "${topdir}/${archive}.tar.gz" "${LIB}${archive_with_underscore}.orig.tar.gz" -tar zfx "${LIB}${archive}.orig.tar.gz" -[ -n "${LIB}" ] && mv "${archive}" "${LIB}${archive}" -cd "${LIB}${archive}" -# This is one of those 'specific requirements': where the deb control files live -cp -a "packages/deb" "debian" - -# Now, we can call Debian's standard build tool -debuild -uc -us -cd ../.. # get back to the original top-level dir - -# We'll put the result in a subdirectory that's named after the OS version -# we've made this .deb file for. -destdir="debian-$(cat /etc/debian_version 2>/dev/null || echo UNKNOWN)" - -rm -rf "$destdir" -mkdir -p "$destdir" -mv $(find tmp -mindepth 1 -maxdepth 1 -type f) "$destdir" - -echo -echo "The Debian package files are located in $PWD/$destdir" diff --git a/clipper/sparsehash-2.0.3/packages/deb/README b/clipper/sparsehash-2.0.3/packages/deb/README deleted file mode 100644 index 57becfd..0000000 --- a/clipper/sparsehash-2.0.3/packages/deb/README +++ /dev/null @@ -1,7 +0,0 @@ -The list of files here isn't complete. For a step-by-step guide on -how to set this package up correctly, check out - http://www.debian.org/doc/maint-guide/ - -Most of the files that are in this directory are boilerplate. -However, you may need to change the list of binary-arch dependencies -in 'rules'. diff --git a/clipper/sparsehash-2.0.3/packages/deb/changelog b/clipper/sparsehash-2.0.3/packages/deb/changelog deleted file mode 100644 index 5792e32..0000000 --- a/clipper/sparsehash-2.0.3/packages/deb/changelog +++ /dev/null @@ -1,173 +0,0 @@ -sparsehash (2.0.2-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. and others Thu, 23 Feb 2012 23:47:18 +0000 - -sparsehash (2.0.1-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. and others Wed, 01 Feb 2012 02:57:48 +0000 - -sparsehash (2.0-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. and others Tue, 31 Jan 2012 11:33:04 -0800 - -sparsehash (1.12-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Tue, 20 Dec 2011 21:04:04 -0800 - -sparsehash (1.11-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Thu, 23 Jun 2011 21:12:58 -0700 - -sparsehash (1.10-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Thu, 20 Jan 2011 16:07:39 -0800 - -sparsehash (1.9-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Fri, 24 Sep 2010 11:37:50 -0700 - -sparsehash (1.8.1-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Thu, 29 Jul 2010 15:01:29 -0700 - -sparsehash (1.8-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Thu, 29 Jul 2010 09:53:26 -0700 - -sparsehash (1.7-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Wed, 31 Mar 2010 12:32:03 -0700 - -sparsehash (1.6-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Fri, 08 Jan 2010 14:47:55 -0800 - -sparsehash (1.5.2-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Tue, 12 May 2009 14:16:38 -0700 - -sparsehash (1.5.1-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Fri, 08 May 2009 15:23:44 -0700 - -sparsehash (1.5-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Wed, 06 May 2009 11:28:49 -0700 - -sparsehash (1.4-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Wed, 28 Jan 2009 17:11:31 -0800 - -sparsehash (1.3-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Thu, 06 Nov 2008 15:06:09 -0800 - -sparsehash (1.2-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Thu, 18 Sep 2008 13:53:20 -0700 - -sparsehash (1.1-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Mon, 11 Feb 2008 16:30:11 -0800 - -sparsehash (1.0-1) unstable; urgency=low - - * New upstream release. We are now out of beta. - - -- Google Inc. Tue, 13 Nov 2007 15:15:46 -0800 - -sparsehash (0.9.1-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Fri, 12 Oct 2007 12:35:24 -0700 - -sparsehash (0.9-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Tue, 09 Oct 2007 14:15:21 -0700 - -sparsehash (0.8-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Tue, 03 Jul 2007 12:55:04 -0700 - -sparsehash (0.7-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Mon, 11 Jun 2007 11:33:41 -0700 - -sparsehash (0.6-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Tue, 20 Mar 2007 17:29:34 -0700 - -sparsehash (0.5-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Sat, 21 Oct 2006 13:47:47 -0700 - -sparsehash (0.4-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Sun, 23 Apr 2006 22:42:35 -0700 - -sparsehash (0.3-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Thu, 03 Nov 2005 20:12:31 -0800 - -sparsehash (0.2-1) unstable; urgency=low - - * New upstream release. - - -- Google Inc. Mon, 02 May 2005 07:04:46 -0700 - -sparsehash (0.1-1) unstable; urgency=low - - * Initial release. - - -- Google Inc. Tue, 15 Feb 2005 07:17:02 -0800 diff --git a/clipper/sparsehash-2.0.3/packages/deb/compat b/clipper/sparsehash-2.0.3/packages/deb/compat deleted file mode 100644 index b8626c4..0000000 --- a/clipper/sparsehash-2.0.3/packages/deb/compat +++ /dev/null @@ -1 +0,0 @@ -4 diff --git a/clipper/sparsehash-2.0.3/packages/deb/control b/clipper/sparsehash-2.0.3/packages/deb/control deleted file mode 100644 index f647979..0000000 --- a/clipper/sparsehash-2.0.3/packages/deb/control +++ /dev/null @@ -1,17 +0,0 @@ -Source: sparsehash -Section: libdevel -Priority: optional -Maintainer: Google Inc. and others -Build-Depends: debhelper (>= 4.0.0) -Standards-Version: 3.6.1 - -Package: sparsehash -Section: libs -Architecture: any -Description: hash_map and hash_set classes with minimal space overhead - This package contains several hash-map implementations, similar - in API to SGI's hash_map class, but with different performance - characteristics. sparse_hash_map uses very little space overhead: 1-2 - bits per entry. dense_hash_map is typically faster than the default - SGI STL implementation. This package also includes hash-set analogues - of these classes. diff --git a/clipper/sparsehash-2.0.3/packages/deb/copyright b/clipper/sparsehash-2.0.3/packages/deb/copyright deleted file mode 100644 index 948b744..0000000 --- a/clipper/sparsehash-2.0.3/packages/deb/copyright +++ /dev/null @@ -1,36 +0,0 @@ -This package was debianized by Donovan Hide -on Wed, Thu, 23 Feb 2012 23:47:18 +0000. - -It was downloaded from -http://code.google.com/p/sparsehash/downloads/list - -Upstream Author: google-sparsehash@googlegroups.com - -Copyright (c) 2005, Google Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/clipper/sparsehash-2.0.3/packages/deb/docs b/clipper/sparsehash-2.0.3/packages/deb/docs deleted file mode 100644 index 752adb4..0000000 --- a/clipper/sparsehash-2.0.3/packages/deb/docs +++ /dev/null @@ -1,16 +0,0 @@ -AUTHORS -COPYING -ChangeLog -INSTALL -NEWS -README -TODO -doc/dense_hash_map.html -doc/dense_hash_set.html -doc/sparse_hash_map.html -doc/sparse_hash_set.html -doc/sparsetable.html -doc/implementation.html -doc/performance.html -doc/index.html -doc/designstyle.css diff --git a/clipper/sparsehash-2.0.3/packages/deb/rules b/clipper/sparsehash-2.0.3/packages/deb/rules deleted file mode 100755 index f520bef..0000000 --- a/clipper/sparsehash-2.0.3/packages/deb/rules +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/make -f -# -*- makefile -*- -# Sample debian/rules that uses debhelper. -# This file was originally written by Joey Hess and Craig Small. -# As a special exception, when this file is copied by dh-make into a -# dh-make output file, you may use that output file without restriction. -# This special exception was added by Craig Small in version 0.37 of dh-make. - -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 - - -# These are used for cross-compiling and for saving the configure script -# from having to guess our platform (since we know it already) -DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) -DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) - - -CFLAGS = -Wall -g - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -else - CFLAGS += -O2 -endif -ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) - INSTALL_PROGRAM += -s -endif - -# shared library versions, option 1 -#version=2.0.5 -#major=2 -# option 2, assuming the library is created as src/.libs/libfoo.so.2.0.5 or so -version=`ls src/.libs/lib*.so.* | \ - awk '{if (match($$0,/[0-9]+\.[0-9]+\.[0-9]+$$/)) print substr($$0,RSTART)}'` -major=`ls src/.libs/lib*.so.* | \ - awk '{if (match($$0,/\.so\.[0-9]+$$/)) print substr($$0,RSTART+4)}'` - -config.status: configure - dh_testdir - # Add here commands to configure the package. - CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info - - -build: build-stamp -build-stamp: config.status - dh_testdir - - # Add here commands to compile the package. - $(MAKE) - - touch build-stamp - -clean: - dh_testdir - dh_testroot - rm -f build-stamp - - # Add here commands to clean up after the build process. - -$(MAKE) distclean -ifneq "$(wildcard /usr/share/misc/config.sub)" "" - cp -f /usr/share/misc/config.sub config.sub -endif -ifneq "$(wildcard /usr/share/misc/config.guess)" "" - cp -f /usr/share/misc/config.guess config.guess -endif - - - dh_clean - -install: build - dh_testdir - dh_testroot - dh_clean -k - dh_installdirs - - # Add here commands to install the package into debian/tmp - $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp - - -# Build architecture-independent files here. -binary-indep: build install -# We have nothing to do by default. - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir - dh_testroot - dh_installchangelogs ChangeLog - dh_installdocs - dh_installexamples - dh_install --sourcedir=debian/tmp -# dh_installmenu -# dh_installdebconf -# dh_installlogrotate -# dh_installemacsen -# dh_installpam -# dh_installmime -# dh_installinit -# dh_installcron -# dh_installinfo - dh_installman - dh_link - dh_strip - dh_compress - dh_fixperms -# dh_perl -# dh_python - dh_makeshlibs - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb - -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install diff --git a/clipper/sparsehash-2.0.3/packages/deb/sparsehash.dirs b/clipper/sparsehash-2.0.3/packages/deb/sparsehash.dirs deleted file mode 100644 index f4d02ef..0000000 --- a/clipper/sparsehash-2.0.3/packages/deb/sparsehash.dirs +++ /dev/null @@ -1,5 +0,0 @@ -usr/include -usr/include/google -usr/include/sparsehash -usr/lib -usr/lib/pkgconfig diff --git a/clipper/sparsehash-2.0.3/packages/deb/sparsehash.install b/clipper/sparsehash-2.0.3/packages/deb/sparsehash.install deleted file mode 100644 index b6ee103..0000000 --- a/clipper/sparsehash-2.0.3/packages/deb/sparsehash.install +++ /dev/null @@ -1,6 +0,0 @@ -usr/include/google/* -usr/include/sparsehash/* -usr/lib/pkgconfig/* -debian/tmp/usr/include/google/* -debian/tmp/usr/include/sparsehash/* -debian/tmp/usr/lib/pkgconfig/* diff --git a/clipper/sparsehash-2.0.3/packages/rpm.sh b/clipper/sparsehash-2.0.3/packages/rpm.sh deleted file mode 100755 index 448a032..0000000 --- a/clipper/sparsehash-2.0.3/packages/rpm.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/sh -e - -# Run this from the 'packages' directory, just under rootdir - -# We can only build rpm packages, if the rpm build tools are installed -if [ \! -x /usr/bin/rpmbuild ] -then - echo "Cannot find /usr/bin/rpmbuild. Not building an rpm." 1>&2 - exit 0 -fi - -# Check the commandline flags -PACKAGE="$1" -VERSION="$2" -fullname="${PACKAGE}-${VERSION}" -archive=../$fullname.tar.gz - -if [ -z "$1" -o -z "$2" ] -then - echo "Usage: $0 " 1>&2 - exit 0 -fi - -# Double-check we're in the packages directory, just under rootdir -if [ \! -r ../Makefile -a \! -r ../INSTALL ] -then - echo "Must run $0 in the 'packages' directory, under the root directory." 1>&2 - echo "Also, you must run \"make dist\" before running this script." 1>&2 - exit 0 -fi - -if [ \! -r "$archive" ] -then - echo "Cannot find $archive. Run \"make dist\" first." 1>&2 - exit 0 -fi - -# Create the directory where the input lives, and where the output should live -RPM_SOURCE_DIR="/tmp/rpmsource-$fullname" -RPM_BUILD_DIR="/tmp/rpmbuild-$fullname" - -trap 'rm -rf $RPM_SOURCE_DIR $RPM_BUILD_DIR; exit $?' EXIT SIGHUP SIGINT SIGTERM - -rm -rf "$RPM_SOURCE_DIR" "$RPM_BUILD_DIR" -mkdir "$RPM_SOURCE_DIR" -mkdir "$RPM_BUILD_DIR" - -cp "$archive" "$RPM_SOURCE_DIR" - -# rpmbuild -- as far as I can tell -- asks the OS what CPU it has. -# This may differ from what kind of binaries gcc produces. dpkg -# does a better job of this, so if we can run 'dpkg --print-architecture' -# to get the build CPU, we use that in preference of the rpmbuild -# default. -target=`dpkg --print-architecture 2>/dev/null || echo ""` -if [ -n "$target" ] -then - target=" --target $target" -fi - -rpmbuild -bb rpm/rpm.spec $target \ - --define "NAME $PACKAGE" \ - --define "VERSION $VERSION" \ - --define "_sourcedir $RPM_SOURCE_DIR" \ - --define "_builddir $RPM_BUILD_DIR" \ - --define "_rpmdir $RPM_SOURCE_DIR" - -# We put the output in a directory based on what system we've built for -destdir=rpm-unknown -if [ -r /etc/issue ] -then - grep "Red Hat.*release 7" /etc/issue >/dev/null 2>&1 && destdir=rh7 - grep "Red Hat.*release 8" /etc/issue >/dev/null 2>&1 && destdir=rh8 - grep "Red Hat.*release 9" /etc/issue >/dev/null 2>&1 && destdir=rh9 - grep "Fedora Core.*release 1" /etc/issue >/dev/null 2>&1 && destdir=fc1 - grep "Fedora Core.*release 2" /etc/issue >/dev/null 2>&1 && destdir=fc2 - grep "Fedora Core.*release 3" /etc/issue >/dev/null 2>&1 && destdir=fc3 -fi - -rm -rf "$destdir" -mkdir -p "$destdir" -# We want to get not only the main package but devel etc, hence the middle * -mv "$RPM_SOURCE_DIR"/*/"${PACKAGE}"-*"${VERSION}"*.rpm "$destdir" - -echo -echo "The rpm package file(s) are located in $PWD/$destdir" diff --git a/clipper/sparsehash-2.0.3/packages/rpm/rpm.spec b/clipper/sparsehash-2.0.3/packages/rpm/rpm.spec deleted file mode 100644 index 35abc4a..0000000 --- a/clipper/sparsehash-2.0.3/packages/rpm/rpm.spec +++ /dev/null @@ -1,63 +0,0 @@ -%define RELEASE 1 -%define rel %{?CUSTOM_RELEASE} %{!?CUSTOM_RELEASE:%RELEASE} -%define prefix /usr - -Name: %NAME -Summary: hash_map and hash_set classes with minimal space overhead -Version: %VERSION -Release: %rel -Group: Development/Libraries -URL: http://code.google.com/p/sparsehash -License: BSD -Vendor: Google Inc. and others -Packager: Google Inc. and others -Source: http://%{NAME}.googlecode.com/files/%{NAME}-%{VERSION}.tar.gz -Distribution: Redhat 7 and above. -Buildroot: %{_tmppath}/%{name}-root -Prefix: %prefix -Buildarch: noarch - -%description -The %name package contains several hash-map implementations, similar -in API to the SGI hash_map class, but with different performance -characteristics. sparse_hash_map uses very little space overhead: 1-2 -bits per entry. dense_hash_map is typically faster than the default -SGI STL implementation. This package also includes hash-set analogues -of these classes. - -%changelog - * Wed Apr 22 2009 - - Change build rule to use %configure instead of ./configure - - Change install to use DESTDIR instead of prefix for make install - - Use wildcards for doc/ and lib/ directories - - Use {_includedir} instead of {prefix}/include - - * Fri Jan 14 2005 - - First draft - -%prep -%setup - -%build -# I can't use '% configure', because it defines -m32 which breaks on -# my development environment for some reason. But I do take -# as much from % configure (in /usr/lib/rpm/macros) as I can. -./configure --prefix=%{_prefix} --exec-prefix=%{_exec_prefix} --bindir=%{_bindir} --sbindir=%{_sbindir} --sysconfdir=%{_sysconfdir} --datadir=%{_datadir} --includedir=%{_includedir} --libdir=%{_libdir} --libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} --sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} --infodir=%{_infodir} -make - -%install -rm -rf $RPM_BUILD_ROOT -make DESTDIR=$RPM_BUILD_ROOT install - -%clean -rm -rf $RPM_BUILD_ROOT - -%files -%defattr(-,root,root) - -%docdir %{prefix}/share/doc/%{NAME}-%{VERSION} -%{prefix}/share/doc/%{NAME}-%{VERSION}/* - -%{_includedir}/google -%{_includedir}/sparsehash -%{_libdir}/pkgconfig/*.pc diff --git a/clipper/sparsehash-2.0.3/sparsehash.sln b/clipper/sparsehash-2.0.3/sparsehash.sln deleted file mode 100755 index f2d2ea2..0000000 --- a/clipper/sparsehash-2.0.3/sparsehash.sln +++ /dev/null @@ -1,63 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "type_traits_unittest", "vsprojects\type_traits_unittest\type_traits_unittest.vcproj", "{008CCFED-7D7B-46F8-8E13-03837A2258B3}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sparsetable_unittest", "vsprojects\sparsetable_unittest\sparsetable_unittest.vcproj", "{E420867B-8BFA-4739-99EC-E008AB762FF9}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hashtable_test", "vsprojects\hashtable_test\hashtable_test.vcproj", "{FCDB3718-F01C-4DE4-B9F5-E10F2C5C0535}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "simple_test", "vsprojects\simple_test\simple_test.vcproj", "{FCDB3718-F01C-4DE4-B9F5-E10F2C5C0538}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libc_allocator_with_realloc_test", "vsprojects\libc_allocator_with_realloc_test\libc_allocator_with_realloc_test.vcproj", "{FCDB3718-F01C-4DE4-B9F5-E10F2C5C0539}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "time_hash_map", "vsprojects\time_hash_map\time_hash_map.vcproj", "{A74E5DB8-5295-487A-AB1D-23859F536F45}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {008CCFED-7D7B-46F8-8E13-03837A2258B3}.Debug.ActiveCfg = Debug|Win32 - {008CCFED-7D7B-46F8-8E13-03837A2258B3}.Debug.Build.0 = Debug|Win32 - {008CCFED-7D7B-46F8-8E13-03837A2258B3}.Release.ActiveCfg = Release|Win32 - {008CCFED-7D7B-46F8-8E13-03837A2258B3}.Release.Build.0 = Release|Win32 - {E420867B-8BFA-4739-99EC-E008AB762FF9}.Debug.ActiveCfg = Debug|Win32 - {E420867B-8BFA-4739-99EC-E008AB762FF9}.Debug.Build.0 = Debug|Win32 - {E420867B-8BFA-4739-99EC-E008AB762FF9}.Release.ActiveCfg = Release|Win32 - {E420867B-8BFA-4739-99EC-E008AB762FF9}.Release.Build.0 = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0535}.Debug.ActiveCfg = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0535}.Debug.Build.0 = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0535}.Release.ActiveCfg = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0535}.Release.Build.0 = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0538}.Debug.ActiveCfg = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0538}.Debug.Build.0 = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0538}.Release.ActiveCfg = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0538}.Release.Build.0 = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0539}.Debug.ActiveCfg = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0539}.Debug.Build.0 = Debug|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0539}.Release.ActiveCfg = Release|Win32 - {FCDB3718-F01C-4DE4-B9F5-E10F2C5C0539}.Release.Build.0 = Release|Win32 - {A74E5DB8-5295-487A-AB1D-23859F536F45}.Debug.ActiveCfg = Debug|Win32 - {A74E5DB8-5295-487A-AB1D-23859F536F45}.Debug.Build.0 = Debug|Win32 - {A74E5DB8-5295-487A-AB1D-23859F536F45}.Release.ActiveCfg = Release|Win32 - {A74E5DB8-5295-487A-AB1D-23859F536F45}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/clipper/sparsehash-2.0.3/src/config.h.in b/clipper/sparsehash-2.0.3/src/config.h.in deleted file mode 100644 index 9f4f81f..0000000 --- a/clipper/sparsehash-2.0.3/src/config.h.in +++ /dev/null @@ -1,131 +0,0 @@ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* Namespace for Google classes */ -#undef GOOGLE_NAMESPACE - -/* the location of the header defining hash functions */ -#undef HASH_FUN_H - -/* the location of or */ -#undef HASH_MAP_H - -/* the namespace of the hash<> function */ -#undef HASH_NAMESPACE - -/* the location of or */ -#undef HASH_SET_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_GOOGLE_MALLOC_EXTENSION_H - -/* define if the compiler has hash_map */ -#undef HAVE_HASH_MAP - -/* define if the compiler has hash_set */ -#undef HAVE_HASH_SET - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if the system has the type `long long'. */ -#undef HAVE_LONG_LONG - -/* Define to 1 if you have the `memcpy' function. */ -#undef HAVE_MEMCPY - -/* Define to 1 if you have the `memmove' function. */ -#undef HAVE_MEMMOVE - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* define if the compiler implements namespaces */ -#undef HAVE_NAMESPACES - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_RESOURCE_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_UTSNAME_H - -/* Define to 1 if the system has the type `uint16_t'. */ -#undef HAVE_UINT16_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* define if the compiler supports unordered_{map,set} */ -#undef HAVE_UNORDERED_MAP - -/* Define to 1 if the system has the type `u_int16_t'. */ -#undef HAVE_U_INT16_T - -/* Define to 1 if the system has the type `__uint16'. */ -#undef HAVE___UINT16 - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* The system-provided hash function including the namespace. */ -#undef SPARSEHASH_HASH - -/* The system-provided hash function, in namespace HASH_NAMESPACE. */ -#undef SPARSEHASH_HASH_NO_NAMESPACE - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION - -/* Stops putting the code inside the Google namespace */ -#undef _END_GOOGLE_NAMESPACE_ - -/* Puts following code inside the Google namespace */ -#undef _START_GOOGLE_NAMESPACE_ diff --git a/clipper/sparsehash-2.0.3/src/config.h.include b/clipper/sparsehash-2.0.3/src/config.h.include deleted file mode 100644 index 6116342..0000000 --- a/clipper/sparsehash-2.0.3/src/config.h.include +++ /dev/null @@ -1,22 +0,0 @@ -/*** - *** These are #defines that autoheader puts in config.h.in that we - *** want to show up in sparseconfig.h, the minimal config.h file - *** #included by all our .h files. The reason we don't take - *** everything that autoheader emits is that we have to include a - *** config.h in installed header files, and we want to minimize the - *** number of #defines we make so as to not pollute the namespace. - ***/ -GOOGLE_NAMESPACE -HASH_NAMESPACE -HASH_FUN_H -SPARSEHASH_HASH -HAVE_UINT16_T -HAVE_U_INT16_T -HAVE___UINT16 -HAVE_LONG_LONG -HAVE_SYS_TYPES_H -HAVE_STDINT_H -HAVE_INTTYPES_H -HAVE_MEMCPY -_END_GOOGLE_NAMESPACE_ -_START_GOOGLE_NAMESPACE_ diff --git a/clipper/sparsehash-2.0.3/src/google/dense_hash_map b/clipper/sparsehash-2.0.3/src/google/dense_hash_map deleted file mode 100644 index 45b9d19..0000000 --- a/clipper/sparsehash-2.0.3/src/google/dense_hash_map +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/google/dense_hash_set b/clipper/sparsehash-2.0.3/src/google/dense_hash_set deleted file mode 100644 index 691a148..0000000 --- a/clipper/sparsehash-2.0.3/src/google/dense_hash_set +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/google/sparse_hash_map b/clipper/sparsehash-2.0.3/src/google/sparse_hash_map deleted file mode 100644 index f6088c1..0000000 --- a/clipper/sparsehash-2.0.3/src/google/sparse_hash_map +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/google/sparse_hash_set b/clipper/sparsehash-2.0.3/src/google/sparse_hash_set deleted file mode 100644 index c9ebdc7..0000000 --- a/clipper/sparsehash-2.0.3/src/google/sparse_hash_set +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/google/sparsehash/densehashtable.h b/clipper/sparsehash-2.0.3/src/google/sparsehash/densehashtable.h deleted file mode 100644 index 7b89543..0000000 --- a/clipper/sparsehash-2.0.3/src/google/sparsehash/densehashtable.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/google/sparsehash/hashtable-common.h b/clipper/sparsehash-2.0.3/src/google/sparsehash/hashtable-common.h deleted file mode 100644 index b7e9153..0000000 --- a/clipper/sparsehash-2.0.3/src/google/sparsehash/hashtable-common.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/google/sparsehash/libc_allocator_with_realloc.h b/clipper/sparsehash-2.0.3/src/google/sparsehash/libc_allocator_with_realloc.h deleted file mode 100644 index 0da7a7e..0000000 --- a/clipper/sparsehash-2.0.3/src/google/sparsehash/libc_allocator_with_realloc.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/google/sparsehash/sparsehashtable.h b/clipper/sparsehash-2.0.3/src/google/sparsehash/sparsehashtable.h deleted file mode 100644 index 093bca4..0000000 --- a/clipper/sparsehash-2.0.3/src/google/sparsehash/sparsehashtable.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/google/sparsetable b/clipper/sparsehash-2.0.3/src/google/sparsetable deleted file mode 100644 index 2ea29c8..0000000 --- a/clipper/sparsehash-2.0.3/src/google/sparsetable +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/google/template_util.h b/clipper/sparsehash-2.0.3/src/google/template_util.h deleted file mode 100644 index 9c87d6d..0000000 --- a/clipper/sparsehash-2.0.3/src/google/template_util.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/google/type_traits.h b/clipper/sparsehash-2.0.3/src/google/type_traits.h deleted file mode 100644 index cc555e3..0000000 --- a/clipper/sparsehash-2.0.3/src/google/type_traits.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Header files have moved from the google directory to the sparsehash -// directory. This forwarding file is provided only for backwards -// compatibility. Use in all new code. - -#include diff --git a/clipper/sparsehash-2.0.3/src/hash_test_interface.h b/clipper/sparsehash-2.0.3/src/hash_test_interface.h deleted file mode 100644 index 98b4662..0000000 --- a/clipper/sparsehash-2.0.3/src/hash_test_interface.h +++ /dev/null @@ -1,1038 +0,0 @@ -// Copyright (c) 2010, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// This implements a uniform interface for all 6 hash implementations: -// dense_hashtable, dense_hash_map, dense_hash_set -// sparse_hashtable, sparse_hash_map, sparse_hash_set -// This is intended to be used for testing, to provide a single routine -// that can easily test all 6 implementations. -// -// The main reasons to specialize are to (1) provide dummy -// implementations for methods that are only needed for some of the -// implementations (for instance, set_empty_key()), and (2) provide a -// uniform interface to just the keys -- for instance, we provide -// wrappers around the iterators that define it.key, which gives the -// "key" part of the bucket (*it or it->first, depending on the class). - -#ifndef UTIL_GTL_HASH_TEST_INTERFACE_H_ -#define UTIL_GTL_HASH_TEST_INTERFACE_H_ - -#include -#include // for equal_to<> -#include -#include -#include -#include -#include -#include -#include HASH_FUN_H // for hash<> - -_START_GOOGLE_NAMESPACE_ - -// This is the "default" interface, which just passes everything -// through to the underlying hashtable. You'll need to subclass it to -// specialize behavior for an individual hashtable. -template -class BaseHashtableInterface { - public: - virtual ~BaseHashtableInterface() {} - - typedef typename HT::key_type key_type; - typedef typename HT::value_type value_type; - typedef typename HT::hasher hasher; - typedef typename HT::key_equal key_equal; - typedef typename HT::allocator_type allocator_type; - - typedef typename HT::size_type size_type; - typedef typename HT::difference_type difference_type; - typedef typename HT::pointer pointer; - typedef typename HT::const_pointer const_pointer; - typedef typename HT::reference reference; - typedef typename HT::const_reference const_reference; - - class const_iterator; - - class iterator : public HT::iterator { - public: - iterator() : parent_(NULL) { } // this allows code like "iterator it;" - iterator(typename HT::iterator it, - const BaseHashtableInterface* parent) - : HT::iterator(it), parent_(parent) { } - key_type key() { return parent_->it_to_key(*this); } - private: - friend class BaseHashtableInterface::const_iterator; // for its ctor - const BaseHashtableInterface* parent_; - }; - - class const_iterator : public HT::const_iterator { - public: - const_iterator() : parent_(NULL) { } - const_iterator(typename HT::const_iterator it, - const BaseHashtableInterface* parent) - : HT::const_iterator(it), parent_(parent) { } - const_iterator(typename HT::iterator it, - BaseHashtableInterface* parent) - : HT::const_iterator(it), parent_(parent) { } - // The parameter type here *should* just be "iterator", but MSVC - // gets confused by that, so I'm overly specific. - const_iterator(typename BaseHashtableInterface::iterator it) - : HT::const_iterator(it), parent_(it.parent_) { } - key_type key() { return parent_->it_to_key(*this); } - private: - const BaseHashtableInterface* parent_; - }; - - class const_local_iterator; - - class local_iterator : public HT::local_iterator { - public: - local_iterator() : parent_(NULL) { } - local_iterator(typename HT::local_iterator it, - const BaseHashtableInterface* parent) - : HT::local_iterator(it), parent_(parent) { } - key_type key() { return parent_->it_to_key(*this); } - private: - friend class BaseHashtableInterface::const_local_iterator; // for its ctor - const BaseHashtableInterface* parent_; - }; - - class const_local_iterator : public HT::const_local_iterator { - public: - const_local_iterator() : parent_(NULL) { } - const_local_iterator(typename HT::const_local_iterator it, - const BaseHashtableInterface* parent) - : HT::const_local_iterator(it), parent_(parent) { } - const_local_iterator(typename HT::local_iterator it, - BaseHashtableInterface* parent) - : HT::const_local_iterator(it), parent_(parent) { } - const_local_iterator(local_iterator it) - : HT::const_local_iterator(it), parent_(it.parent_) { } - key_type key() { return parent_->it_to_key(*this); } - private: - const BaseHashtableInterface* parent_; - }; - - iterator begin() { - return iterator(ht_.begin(), this); - } - iterator end() { - return iterator(ht_.end(), this); - } - const_iterator begin() const { - return const_iterator(ht_.begin(), this); - } - const_iterator end() const { - return const_iterator(ht_.end(), this); - } - local_iterator begin(size_type i) { - return local_iterator(ht_.begin(i), this); - } - local_iterator end(size_type i) { - return local_iterator(ht_.end(i), this); - } - const_local_iterator begin(size_type i) const { - return const_local_iterator(ht_.begin(i), this); - } - const_local_iterator end(size_type i) const { - return const_local_iterator(ht_.end(i), this); - } - - hasher hash_funct() const { return ht_.hash_funct(); } - hasher hash_function() const { return ht_.hash_function(); } - key_equal key_eq() const { return ht_.key_eq(); } - allocator_type get_allocator() const { return ht_.get_allocator(); } - - BaseHashtableInterface(size_type expected_max_items_in_table, - const hasher& hf, - const key_equal& eql, - const allocator_type& alloc) - : ht_(expected_max_items_in_table, hf, eql, alloc) { } - - // Not all ht_'s support this constructor: you should only call it - // from a subclass if you know your ht supports it. Otherwise call - // the previous constructor, followed by 'insert(f, l);'. - template - BaseHashtableInterface(InputIterator f, InputIterator l, - size_type expected_max_items_in_table, - const hasher& hf, - const key_equal& eql, - const allocator_type& alloc) - : ht_(f, l, expected_max_items_in_table, hf, eql, alloc) { - } - - // This is the version of the constructor used by dense_*, which - // requires an empty key in the constructor. - template - BaseHashtableInterface(InputIterator f, InputIterator l, key_type empty_k, - size_type expected_max_items_in_table, - const hasher& hf, - const key_equal& eql, - const allocator_type& alloc) - : ht_(f, l, empty_k, expected_max_items_in_table, hf, eql, alloc) { - } - - // This is the constructor appropriate for {dense,sparse}hashtable. - template - BaseHashtableInterface(size_type expected_max_items_in_table, - const hasher& hf, - const key_equal& eql, - const ExtractKey& ek, - const SetKey& sk, - const allocator_type& alloc) - : ht_(expected_max_items_in_table, hf, eql, ek, sk, alloc) { } - - - void clear() { ht_.clear(); } - void swap(BaseHashtableInterface& other) { ht_.swap(other.ht_); } - - // Only part of the API for some hashtable implementations. - void clear_no_resize() { clear(); } - - size_type size() const { return ht_.size(); } - size_type max_size() const { return ht_.max_size(); } - bool empty() const { return ht_.empty(); } - size_type bucket_count() const { return ht_.bucket_count(); } - size_type max_bucket_count() const { return ht_.max_bucket_count(); } - - size_type bucket_size(size_type i) const { - return ht_.bucket_size(i); - } - size_type bucket(const key_type& key) const { - return ht_.bucket(key); - } - - float load_factor() const { return ht_.load_factor(); } - float max_load_factor() const { return ht_.max_load_factor(); } - void max_load_factor(float grow) { ht_.max_load_factor(grow); } - float min_load_factor() const { return ht_.min_load_factor(); } - void min_load_factor(float shrink) { ht_.min_load_factor(shrink); } - void set_resizing_parameters(float shrink, float grow) { - ht_.set_resizing_parameters(shrink, grow); - } - - void resize(size_type hint) { ht_.resize(hint); } - void rehash(size_type hint) { ht_.rehash(hint); } - - iterator find(const key_type& key) { - return iterator(ht_.find(key), this); - } - const_iterator find(const key_type& key) const { - return const_iterator(ht_.find(key), this); - } - - // Rather than try to implement operator[], which doesn't make much - // sense for set types, we implement two methods: bracket_equal and - // bracket_assign. By default, bracket_equal(a, b) returns true if - // ht[a] == b, and false otherwise. (Note that this follows - // operator[] semantics exactly, including inserting a if it's not - // already in the hashtable, before doing the equality test.) For - // sets, which have no operator[], b is ignored, and bracket_equal - // returns true if key is in the set and false otherwise. - // bracket_assign(a, b) is equivalent to ht[a] = b. For sets, b is - // ignored, and bracket_assign is equivalent to ht.insert(a). - template - bool bracket_equal(const key_type& key, const AssignValue& expected) { - return ht_[key] == expected; - } - - template - void bracket_assign(const key_type& key, const AssignValue& value) { - ht_[key] = value; - } - - size_type count(const key_type& key) const { return ht_.count(key); } - - std::pair equal_range(const key_type& key) { - std::pair r - = ht_.equal_range(key); - return std::pair(iterator(r.first, this), - iterator(r.second, this)); - } - std::pair equal_range(const key_type& key) - const { - std::pair r - = ht_.equal_range(key); - return std::pair( - const_iterator(r.first, this), const_iterator(r.second, this)); - } - - const_iterator random_element(class ACMRandom* r) const { - return const_iterator(ht_.random_element(r), this); - } - iterator random_element(class ACMRandom* r) { - return iterator(ht_.random_element(r), this); - } - - std::pair insert(const value_type& obj) { - std::pair r = ht_.insert(obj); - return std::pair(iterator(r.first, this), r.second); - } - template - void insert(InputIterator f, InputIterator l) { - ht_.insert(f, l); - } - void insert(typename HT::const_iterator f, typename HT::const_iterator l) { - ht_.insert(f, l); - } - iterator insert(typename HT::iterator, const value_type& obj) { - return iterator(insert(obj).first, this); - } - - // These will commonly need to be overridden by the child. - void set_empty_key(const key_type& k) { ht_.set_empty_key(k); } - void clear_empty_key() { ht_.clear_empty_key(); } - key_type empty_key() const { return ht_.empty_key(); } - - void set_deleted_key(const key_type& k) { ht_.set_deleted_key(k); } - void clear_deleted_key() { ht_.clear_deleted_key(); } - key_type deleted_key() const { return ht_.deleted_key(); } - - size_type erase(const key_type& key) { return ht_.erase(key); } - void erase(typename HT::iterator it) { ht_.erase(it); } - void erase(typename HT::iterator f, typename HT::iterator l) { - ht_.erase(f, l); - } - - bool operator==(const BaseHashtableInterface& other) const { - return ht_ == other.ht_; - } - bool operator!=(const BaseHashtableInterface& other) const { - return ht_ != other.ht_; - } - - template - bool serialize(ValueSerializer serializer, OUTPUT *fp) { - return ht_.serialize(serializer, fp); - } - template - bool unserialize(ValueSerializer serializer, INPUT *fp) { - return ht_.unserialize(serializer, fp); - } - - template - bool write_metadata(OUTPUT *fp) { - return ht_.write_metadata(fp); - } - template - bool read_metadata(INPUT *fp) { - return ht_.read_metadata(fp); - } - template - bool write_nopointer_data(OUTPUT *fp) { - return ht_.write_nopointer_data(fp); - } - template - bool read_nopointer_data(INPUT *fp) { - return ht_.read_nopointer_data(fp); - } - - // low-level stats - int num_table_copies() const { return ht_.num_table_copies(); } - - // Not part of the hashtable API, but is provided to make testing easier. - virtual key_type get_key(const value_type& value) const = 0; - // All subclasses should define get_data(value_type) as well. I don't - // provide an abstract-virtual definition here, because the return type - // differs between subclasses (not all subclasses define data_type). - //virtual data_type get_data(const value_type& value) const = 0; - //virtual data_type default_data() const = 0; - - // These allow introspection into the interface. "Supports" means - // that the implementation of this functionality isn't a noop. - virtual bool supports_clear_no_resize() const = 0; - virtual bool supports_empty_key() const = 0; - virtual bool supports_deleted_key() const = 0; - virtual bool supports_brackets() const = 0; // has a 'real' operator[] - virtual bool supports_readwrite() const = 0; - virtual bool supports_num_table_copies() const = 0; - virtual bool supports_serialization() const = 0; - - protected: - HT ht_; - - // These are what subclasses have to define to get class-specific behavior - virtual key_type it_to_key(const iterator& it) const = 0; - virtual key_type it_to_key(const const_iterator& it) const = 0; - virtual key_type it_to_key(const local_iterator& it) const = 0; - virtual key_type it_to_key(const const_local_iterator& it) const = 0; -}; - -// --------------------------------------------------------------------- - -template , - class EqualKey = std::equal_to, - class Alloc = libc_allocator_with_realloc > > -class HashtableInterface_SparseHashMap - : public BaseHashtableInterface< sparse_hash_map > { - private: - typedef sparse_hash_map ht; - typedef BaseHashtableInterface p; // parent - - public: - explicit HashtableInterface_SparseHashMap( - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(expected_max_items, hf, eql, alloc) { } - - template - HashtableInterface_SparseHashMap( - InputIterator f, InputIterator l, - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(f, l, expected_max_items, hf, eql, alloc) { } - - typename p::key_type get_key(const typename p::value_type& value) const { - return value.first; - } - typename ht::data_type get_data(const typename p::value_type& value) const { - return value.second; - } - typename ht::data_type default_data() const { - return typename ht::data_type(); - } - - bool supports_clear_no_resize() const { return false; } - bool supports_empty_key() const { return false; } - bool supports_deleted_key() const { return true; } - bool supports_brackets() const { return true; } - bool supports_readwrite() const { return true; } - bool supports_num_table_copies() const { return false; } - bool supports_serialization() const { return true; } - - void set_empty_key(const typename p::key_type&) { } - void clear_empty_key() { } - typename p::key_type empty_key() const { return typename p::key_type(); } - - int num_table_copies() const { return 0; } - - typedef typename ht::NopointerSerializer NopointerSerializer; - - protected: - template - friend void swap(HashtableInterface_SparseHashMap& a, - HashtableInterface_SparseHashMap& b); - - typename p::key_type it_to_key(const typename p::iterator& it) const { - return it->first; - } - typename p::key_type it_to_key(const typename p::const_iterator& it) const { - return it->first; - } - typename p::key_type it_to_key(const typename p::local_iterator& it) const { - return it->first; - } - typename p::key_type it_to_key(const typename p::const_local_iterator& it) - const { - return it->first; - } -}; - -template -void swap(HashtableInterface_SparseHashMap& a, - HashtableInterface_SparseHashMap& b) { - swap(a.ht_, b.ht_); -} - -// --------------------------------------------------------------------- - -template , - class EqualKey = std::equal_to, - class Alloc = libc_allocator_with_realloc > -class HashtableInterface_SparseHashSet - : public BaseHashtableInterface< sparse_hash_set > { - private: - typedef sparse_hash_set ht; - typedef BaseHashtableInterface p; // parent - - public: - // Bizarrely, MSVC 8.0 has trouble with the (perfectly fine) - // typename's in this constructor, and this constructor alone, out - // of all the ones in the file. So for MSVC, we take some typenames - // out, which is technically invalid C++, but MSVC doesn't seem to - // mind. -#ifdef _MSC_VER - explicit HashtableInterface_SparseHashSet( - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = p::hasher(), - const typename p::key_equal& eql = p::key_equal(), - const typename p::allocator_type& alloc = p::allocator_type()) - : BaseHashtableInterface(expected_max_items, hf, eql, alloc) { } -#else - explicit HashtableInterface_SparseHashSet( - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(expected_max_items, hf, eql, alloc) { } -#endif - - template - HashtableInterface_SparseHashSet( - InputIterator f, InputIterator l, - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(f, l, expected_max_items, hf, eql, alloc) { } - - template - bool bracket_equal(const typename p::key_type& key, const AssignValue&) { - return this->ht_.find(key) != this->ht_.end(); - } - - template - void bracket_assign(const typename p::key_type& key, const AssignValue&) { - this->ht_.insert(key); - } - - typename p::key_type get_key(const typename p::value_type& value) const { - return value; - } - // For sets, the only 'data' is that an item is actually inserted. - bool get_data(const typename p::value_type&) const { - return true; - } - bool default_data() const { - return true; - } - - bool supports_clear_no_resize() const { return false; } - bool supports_empty_key() const { return false; } - bool supports_deleted_key() const { return true; } - bool supports_brackets() const { return false; } - bool supports_readwrite() const { return true; } - bool supports_num_table_copies() const { return false; } - bool supports_serialization() const { return true; } - - void set_empty_key(const typename p::key_type&) { } - void clear_empty_key() { } - typename p::key_type empty_key() const { return typename p::key_type(); } - - int num_table_copies() const { return 0; } - - typedef typename ht::NopointerSerializer NopointerSerializer; - - protected: - template - friend void swap(HashtableInterface_SparseHashSet& a, - HashtableInterface_SparseHashSet& b); - - typename p::key_type it_to_key(const typename p::iterator& it) const { - return *it; - } - typename p::key_type it_to_key(const typename p::const_iterator& it) const { - return *it; - } - typename p::key_type it_to_key(const typename p::local_iterator& it) const { - return *it; - } - typename p::key_type it_to_key(const typename p::const_local_iterator& it) - const { - return *it; - } -}; - -template -void swap(HashtableInterface_SparseHashSet& a, - HashtableInterface_SparseHashSet& b) { - swap(a.ht_, b.ht_); -} - -// --------------------------------------------------------------------- - -template -class HashtableInterface_SparseHashtable - : public BaseHashtableInterface< sparse_hashtable > { - private: - typedef sparse_hashtable ht; - typedef BaseHashtableInterface p; // parent - - public: - explicit HashtableInterface_SparseHashtable( - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(expected_max_items, hf, eql, - ExtractKey(), SetKey(), alloc) { } - - template - HashtableInterface_SparseHashtable( - InputIterator f, InputIterator l, - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(expected_max_items, hf, eql, - ExtractKey(), SetKey(), alloc) { - this->insert(f, l); - } - - float max_load_factor() const { - float shrink, grow; - this->ht_.get_resizing_parameters(&shrink, &grow); - return grow; - } - void max_load_factor(float new_grow) { - float shrink, grow; - this->ht_.get_resizing_parameters(&shrink, &grow); - this->ht_.set_resizing_parameters(shrink, new_grow); - } - float min_load_factor() const { - float shrink, grow; - this->ht_.get_resizing_parameters(&shrink, &grow); - return shrink; - } - void min_load_factor(float new_shrink) { - float shrink, grow; - this->ht_.get_resizing_parameters(&shrink, &grow); - this->ht_.set_resizing_parameters(new_shrink, grow); - } - - template - bool bracket_equal(const typename p::key_type&, const AssignValue&) { - return false; - } - - template - void bracket_assign(const typename p::key_type&, const AssignValue&) { - } - - typename p::key_type get_key(const typename p::value_type& value) const { - return extract_key(value); - } - typename p::value_type get_data(const typename p::value_type& value) const { - return value; - } - typename p::value_type default_data() const { - return typename p::value_type(); - } - - bool supports_clear_no_resize() const { return false; } - bool supports_empty_key() const { return false; } - bool supports_deleted_key() const { return true; } - bool supports_brackets() const { return false; } - bool supports_readwrite() const { return true; } - bool supports_num_table_copies() const { return true; } - bool supports_serialization() const { return true; } - - void set_empty_key(const typename p::key_type&) { } - void clear_empty_key() { } - typename p::key_type empty_key() const { return typename p::key_type(); } - - // These tr1 names aren't defined for sparse_hashtable. - typename p::hasher hash_function() { return this->hash_funct(); } - void rehash(typename p::size_type hint) { this->resize(hint); } - - // TODO(csilvers): also support/test destructive_begin()/destructive_end()? - - typedef typename ht::NopointerSerializer NopointerSerializer; - - protected: - template - friend void swap( - HashtableInterface_SparseHashtable& a, - HashtableInterface_SparseHashtable& b); - - typename p::key_type it_to_key(const typename p::iterator& it) const { - return extract_key(*it); - } - typename p::key_type it_to_key(const typename p::const_iterator& it) const { - return extract_key(*it); - } - typename p::key_type it_to_key(const typename p::local_iterator& it) const { - return extract_key(*it); - } - typename p::key_type it_to_key(const typename p::const_local_iterator& it) - const { - return extract_key(*it); - } - - private: - ExtractKey extract_key; -}; - -template -void swap(HashtableInterface_SparseHashtable& a, - HashtableInterface_SparseHashtable& b) { - swap(a.ht_, b.ht_); -} - -// --------------------------------------------------------------------- - -// Unlike dense_hash_map, the wrapper class takes an extra template -// value saying what the empty key is. - -template , - class EqualKey = std::equal_to, - class Alloc = libc_allocator_with_realloc > > -class HashtableInterface_DenseHashMap - : public BaseHashtableInterface< dense_hash_map > { - private: - typedef dense_hash_map ht; - typedef BaseHashtableInterface p; // parent - - public: - explicit HashtableInterface_DenseHashMap( - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(expected_max_items, hf, eql, alloc) { - this->set_empty_key(EMPTY_KEY); - } - - template - HashtableInterface_DenseHashMap( - InputIterator f, InputIterator l, - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(f, l, EMPTY_KEY, - expected_max_items, hf, eql, alloc) { - } - - void clear_no_resize() { this->ht_.clear_no_resize(); } - - typename p::key_type get_key(const typename p::value_type& value) const { - return value.first; - } - typename ht::data_type get_data(const typename p::value_type& value) const { - return value.second; - } - typename ht::data_type default_data() const { - return typename ht::data_type(); - } - - bool supports_clear_no_resize() const { return true; } - bool supports_empty_key() const { return true; } - bool supports_deleted_key() const { return true; } - bool supports_brackets() const { return true; } - bool supports_readwrite() const { return false; } - bool supports_num_table_copies() const { return false; } - bool supports_serialization() const { return true; } - - typedef typename ht::NopointerSerializer NopointerSerializer; - template bool write_metadata(OUTPUT *) { return false; } - template bool read_metadata(INPUT *) { return false; } - template bool write_nopointer_data(OUTPUT *) { - return false; - } - template bool read_nopointer_data(INPUT *) { - return false; - } - int num_table_copies() const { return 0; } - - protected: - template - friend void swap(HashtableInterface_DenseHashMap& a, - HashtableInterface_DenseHashMap& b); - - typename p::key_type it_to_key(const typename p::iterator& it) const { - return it->first; - } - typename p::key_type it_to_key(const typename p::const_iterator& it) const { - return it->first; - } - typename p::key_type it_to_key(const typename p::local_iterator& it) const { - return it->first; - } - typename p::key_type it_to_key(const typename p::const_local_iterator& it) - const { - return it->first; - } -}; - -template -void swap(HashtableInterface_DenseHashMap& a, - HashtableInterface_DenseHashMap& b) { - swap(a.ht_, b.ht_); -} - -// --------------------------------------------------------------------- - -// Unlike dense_hash_set, the wrapper class takes an extra template -// value saying what the empty key is. - -template , - class EqualKey = std::equal_to, - class Alloc = libc_allocator_with_realloc > -class HashtableInterface_DenseHashSet - : public BaseHashtableInterface< dense_hash_set > { - private: - typedef dense_hash_set ht; - typedef BaseHashtableInterface p; // parent - - public: - explicit HashtableInterface_DenseHashSet( - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(expected_max_items, hf, eql, alloc) { - this->set_empty_key(EMPTY_KEY); - } - - template - HashtableInterface_DenseHashSet( - InputIterator f, InputIterator l, - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(f, l, EMPTY_KEY, - expected_max_items, hf, eql, alloc) { - } - - void clear_no_resize() { this->ht_.clear_no_resize(); } - - template - bool bracket_equal(const typename p::key_type& key, const AssignValue&) { - return this->ht_.find(key) != this->ht_.end(); - } - - template - void bracket_assign(const typename p::key_type& key, const AssignValue&) { - this->ht_.insert(key); - } - - typename p::key_type get_key(const typename p::value_type& value) const { - return value; - } - bool get_data(const typename p::value_type&) const { - return true; - } - bool default_data() const { - return true; - } - - bool supports_clear_no_resize() const { return true; } - bool supports_empty_key() const { return true; } - bool supports_deleted_key() const { return true; } - bool supports_brackets() const { return false; } - bool supports_readwrite() const { return false; } - bool supports_num_table_copies() const { return false; } - bool supports_serialization() const { return true; } - - typedef typename ht::NopointerSerializer NopointerSerializer; - template bool write_metadata(OUTPUT *) { return false; } - template bool read_metadata(INPUT *) { return false; } - template bool write_nopointer_data(OUTPUT *) { - return false; - } - template bool read_nopointer_data(INPUT *) { - return false; - } - int num_table_copies() const { return 0; } - - protected: - template - friend void swap(HashtableInterface_DenseHashSet& a, - HashtableInterface_DenseHashSet& b); - - typename p::key_type it_to_key(const typename p::iterator& it) const { - return *it; - } - typename p::key_type it_to_key(const typename p::const_iterator& it) const { - return *it; - } - typename p::key_type it_to_key(const typename p::local_iterator& it) const { - return *it; - } - typename p::key_type it_to_key(const typename p::const_local_iterator& it) - const { - return *it; - } -}; - -template -void swap(HashtableInterface_DenseHashSet& a, - HashtableInterface_DenseHashSet& b) { - swap(a.ht_, b.ht_); -} - -// --------------------------------------------------------------------- - -// Unlike dense_hashtable, the wrapper class takes an extra template -// value saying what the empty key is. - -template -class HashtableInterface_DenseHashtable - : public BaseHashtableInterface< dense_hashtable > { - private: - typedef dense_hashtable ht; - typedef BaseHashtableInterface p; // parent - - public: - explicit HashtableInterface_DenseHashtable( - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(expected_max_items, hf, eql, - ExtractKey(), SetKey(), alloc) { - this->set_empty_key(EMPTY_KEY); - } - - template - HashtableInterface_DenseHashtable( - InputIterator f, InputIterator l, - typename p::size_type expected_max_items = 0, - const typename p::hasher& hf = typename p::hasher(), - const typename p::key_equal& eql = typename p::key_equal(), - const typename p::allocator_type& alloc = typename p::allocator_type()) - : BaseHashtableInterface(expected_max_items, hf, eql, - ExtractKey(), SetKey(), alloc) { - this->set_empty_key(EMPTY_KEY); - this->insert(f, l); - } - - void clear_no_resize() { this->ht_.clear_no_resize(); } - - float max_load_factor() const { - float shrink, grow; - this->ht_.get_resizing_parameters(&shrink, &grow); - return grow; - } - void max_load_factor(float new_grow) { - float shrink, grow; - this->ht_.get_resizing_parameters(&shrink, &grow); - this->ht_.set_resizing_parameters(shrink, new_grow); - } - float min_load_factor() const { - float shrink, grow; - this->ht_.get_resizing_parameters(&shrink, &grow); - return shrink; - } - void min_load_factor(float new_shrink) { - float shrink, grow; - this->ht_.get_resizing_parameters(&shrink, &grow); - this->ht_.set_resizing_parameters(new_shrink, grow); - } - - template - bool bracket_equal(const typename p::key_type&, const AssignValue&) { - return false; - } - - template - void bracket_assign(const typename p::key_type&, const AssignValue&) { - } - - typename p::key_type get_key(const typename p::value_type& value) const { - return extract_key(value); - } - typename p::value_type get_data(const typename p::value_type& value) const { - return value; - } - typename p::value_type default_data() const { - return typename p::value_type(); - } - - bool supports_clear_no_resize() const { return true; } - bool supports_empty_key() const { return true; } - bool supports_deleted_key() const { return true; } - bool supports_brackets() const { return false; } - bool supports_readwrite() const { return false; } - bool supports_num_table_copies() const { return true; } - bool supports_serialization() const { return true; } - - typedef typename ht::NopointerSerializer NopointerSerializer; - template bool write_metadata(OUTPUT *) { return false; } - template bool read_metadata(INPUT *) { return false; } - template bool write_nopointer_data(OUTPUT *) { - return false; - } - template bool read_nopointer_data(INPUT *) { - return false; - } - - // These tr1 names aren't defined for dense_hashtable. - typename p::hasher hash_function() { return this->hash_funct(); } - void rehash(typename p::size_type hint) { this->resize(hint); } - - protected: - template - friend void swap( - HashtableInterface_DenseHashtable& a, - HashtableInterface_DenseHashtable& b); - - typename p::key_type it_to_key(const typename p::iterator& it) const { - return extract_key(*it); - } - typename p::key_type it_to_key(const typename p::const_iterator& it) const { - return extract_key(*it); - } - typename p::key_type it_to_key(const typename p::local_iterator& it) const { - return extract_key(*it); - } - typename p::key_type it_to_key(const typename p::const_local_iterator& it) - const { - return extract_key(*it); - } - - private: - ExtractKey extract_key; -}; - -template -void swap(HashtableInterface_DenseHashtable& a, - HashtableInterface_DenseHashtable& b) { - swap(a.ht_, b.ht_); -} - -_END_GOOGLE_NAMESPACE_ - -#endif // UTIL_GTL_HASH_TEST_INTERFACE_H_ diff --git a/clipper/sparsehash-2.0.3/src/hashtable_test.cc b/clipper/sparsehash-2.0.3/src/hashtable_test.cc deleted file mode 100644 index 193138b..0000000 --- a/clipper/sparsehash-2.0.3/src/hashtable_test.cc +++ /dev/null @@ -1,2007 +0,0 @@ -// Copyright (c) 2010, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// This tests densehashtable -// This tests dense_hash_set -// This tests dense_hash_map -// This tests sparsehashtable -// This tests sparse_hash_set -// This tests sparse_hash_map -// -// This test replaces hashtable_unittest.cc, which was becoming -// unreadable. This file is opaque but hopefully not unreadable -- at -// least, not the tests! -// -// Note that since all these classes are templatized, it's important -// to call every public method on the class: not just to make sure -// they work, but to make sure they even compile. - -#include -#include -#include -#include // for size_t -#include -#include -#ifdef HAVE_STDINT_H -# include -#endif // for uintptr_t -#include -#include -#include -#include // for class typeinfo (returned by typeid) -#include -#include -#include -#include "hash_test_interface.h" -#include "testutil.h" -namespace testing = GOOGLE_NAMESPACE::testing; - -using std::cout; -using std::pair; -using std::set; -using std::string; -using std::vector; -using GOOGLE_NAMESPACE::dense_hash_map; -using GOOGLE_NAMESPACE::dense_hash_set; -using GOOGLE_NAMESPACE::sparse_hash_map; -using GOOGLE_NAMESPACE::sparse_hash_set; -using GOOGLE_NAMESPACE::sparsetable; -using GOOGLE_NAMESPACE::HashtableInterface_SparseHashMap; -using GOOGLE_NAMESPACE::HashtableInterface_SparseHashSet; -using GOOGLE_NAMESPACE::HashtableInterface_SparseHashtable; -using GOOGLE_NAMESPACE::HashtableInterface_DenseHashMap; -using GOOGLE_NAMESPACE::HashtableInterface_DenseHashSet; -using GOOGLE_NAMESPACE::HashtableInterface_DenseHashtable; -namespace sparsehash_internal = GOOGLE_NAMESPACE::sparsehash_internal; - -typedef unsigned char uint8; - -#ifdef _MSC_VER -// Below, we purposefully test having a very small allocator size. -// This causes some "type conversion too small" errors when using this -// allocator with sparsetable buckets. We're testing to make sure we -// handle that situation ok, so we don't need the compiler warnings. -#pragma warning(disable:4244) -#endif - -namespace { - -#ifndef _MSC_VER // windows defines its own version -# ifdef __MINGW32__ // mingw has trouble writing to /tmp -static string TmpFile(const char* basename) { - return string("./#") + basename; -} -# else -static string TmpFile(const char* basename) { - string kTmpdir = "/tmp"; - return kTmpdir + "/" + basename; -} -# endif -#endif - -// Used as a value in some of the hashtable tests. It's just some -// arbitrary user-defined type with non-trivial memory management. -struct ValueType { - public: - ValueType() : s_(kDefault) { } - ValueType(const char* init_s) : s_(kDefault) { set_s(init_s); } - ~ValueType() { set_s(NULL); } - ValueType(const ValueType& that) : s_(kDefault) { operator=(that); } - void operator=(const ValueType& that) { set_s(that.s_); } - bool operator==(const ValueType& that) const { - return strcmp(this->s(), that.s()) == 0; - } - void set_s(const char* new_s) { - if (s_ != kDefault) - free(const_cast(s_)); - s_ = (new_s == NULL ? kDefault : reinterpret_cast(strdup(new_s))); - } - const char* s() const { return s_; } - private: - const char* s_; - static const char* const kDefault; -}; -const char* const ValueType::kDefault = "hi"; - -// This is used by the low-level sparse/dense_hashtable classes, -// which support the most general relationship between keys and -// values: the key is derived from the value through some arbitrary -// function. (For classes like sparse_hash_map, the 'value' is a -// key/data pair, and the function to derive the key is -// FirstElementOfPair.) KeyToValue is the inverse of this function, -// so GetKey(KeyToValue(key)) == key. To keep the tests a bit -// simpler, we've chosen to make the key and value actually be the -// same type, which is why we need only one template argument for the -// types, rather than two (one for the key and one for the value). -template -struct SetKey { - void operator()(KeyAndValueT* value, const KeyAndValueT& new_key) const { - *value = KeyToValue()(new_key); - } -}; - -// A hash function that keeps track of how often it's called. We use -// a simple djb-hash so we don't depend on how STL hashes. We use -// this same method to do the key-comparison, so we can keep track -// of comparison-counts too. -struct Hasher { - explicit Hasher(int i=0) : id_(i), num_hashes_(0), num_compares_(0) { } - int id() const { return id_; } - int num_hashes() const { return num_hashes_; } - int num_compares() const { return num_compares_; } - - size_t operator()(int a) const { - num_hashes_++; - return static_cast(a); - } - size_t operator()(const char* a) const { - num_hashes_++; - size_t hash = 0; - for (size_t i = 0; a[i]; i++ ) - hash = 33 * hash + a[i]; - return hash; - } - size_t operator()(const string& a) const { - num_hashes_++; - size_t hash = 0; - for (size_t i = 0; i < a.length(); i++ ) - hash = 33 * hash + a[i]; - return hash; - } - size_t operator()(const int* a) const { - num_hashes_++; - return static_cast(reinterpret_cast(a)); - } - bool operator()(int a, int b) const { - num_compares_++; - return a == b; - } - bool operator()(const string& a, const string& b) const { - num_compares_++; - return a == b; - } - bool operator()(const char* a, const char* b) const { - num_compares_++; - // The 'a == b' test is necessary, in case a and b are both NULL. - return (a == b || (a && b && strcmp(a, b) == 0)); - } - - private: - mutable int id_; - mutable int num_hashes_; - mutable int num_compares_; -}; - -// Allocator that allows controlling its size in various ways, to test -// allocator overflow. Because we use this allocator in a vector, we -// need to define != and swap for gcc. -template(~0)> -struct Alloc { - typedef T value_type; - typedef SizeT size_type; - typedef ptrdiff_t difference_type; - typedef T* pointer; - typedef const T* const_pointer; - typedef T& reference; - typedef const T& const_reference; - - explicit Alloc(int i=0, int* count=NULL) : id_(i), count_(count) {} - ~Alloc() {} - pointer address(reference r) const { return &r; } - const_pointer address(const_reference r) const { return &r; } - pointer allocate(size_type n, const_pointer = 0) { - if (count_) ++(*count_); - return static_cast(malloc(n * sizeof(value_type))); - } - void deallocate(pointer p, size_type) { - free(p); - } - pointer reallocate(pointer p, size_type n) { - if (count_) ++(*count_); - return static_cast(realloc(p, n * sizeof(value_type))); - } - size_type max_size() const { - return static_cast(MAX_SIZE); - } - void construct(pointer p, const value_type& val) { - new(p) value_type(val); - } - void destroy(pointer p) { p->~value_type(); } - - bool is_custom_alloc() const { return true; } - - template - Alloc(const Alloc& that) - : id_(that.id_), count_(that.count_) { - } - - template - struct rebind { - typedef Alloc other; - }; - - bool operator==(const Alloc& that) { - return this->id_ == that.id_ && this->count_ == that.count_; - } - bool operator!=(const Alloc& that) { - return !this->operator==(that); - } - - int id() const { return id_; } - - // I have to make these public so the constructor used for rebinding - // can see them. Normally, I'd just make them private and say: - // template friend struct Alloc; - // but MSVC 7.1 barfs on that. So public it is. But no peeking! - public: - int id_; - int* count_; -}; - - -// Below are a few fun routines that convert a value into a key, used -// for dense_hashtable and sparse_hashtable. It's our responsibility -// to make sure, when we insert values into these objects, that the -// values match the keys we insert them under. To allow us to use -// these routines for SetKey as well, we require all these functions -// be their own inverse: f(f(x)) == x. -template -struct Negation { - typedef Value result_type; - Value operator()(Value& v) { return -v; } - const Value operator()(const Value& v) const { return -v; } -}; - -struct Capital { - typedef string result_type; - string operator()(string& s) { - return string(1, s[0] ^ 32) + s.substr(1); - } - const string operator()(const string& s) const { - return string(1, s[0] ^ 32) + s.substr(1); - } -}; - -struct Identity { // lame, I know, but an important case to test. - typedef const char* result_type; - const char* operator()(const char* s) const { - return s; - } -}; - -// This is just to avoid memory leaks -- it's a global pointer to -// all the memory allocated by UniqueObjectHelper. We'll use it -// to semi-test sparsetable as well. :-) -sparsetable g_unique_charstar_objects(16); - -// This is an object-generator: pass in an index, and it will return a -// unique object of type ItemType. We provide specializations for the -// types we actually support. -template ItemType UniqueObjectHelper(int index); -template<> int UniqueObjectHelper(int index) { - return index; -} -template<> string UniqueObjectHelper(int index) { - char buffer[64]; - snprintf(buffer, sizeof(buffer), "%d", index); - return buffer; -} -template<> char* UniqueObjectHelper(int index) { - // First grow the table if need be. - sparsetable::size_type table_size = g_unique_charstar_objects.size(); - while (index >= static_cast(table_size)) { - assert(table_size * 2 > table_size); // avoid overflow problems - table_size *= 2; - } - if (table_size > g_unique_charstar_objects.size()) - g_unique_charstar_objects.resize(table_size); - - if (!g_unique_charstar_objects.test(index)) { - char buffer[64]; - snprintf(buffer, sizeof(buffer), "%d", index); - g_unique_charstar_objects[index] = strdup(buffer); - } - return g_unique_charstar_objects.get(index); -} -template<> const char* UniqueObjectHelper(int index) { - return UniqueObjectHelper(index); -} -template<> ValueType UniqueObjectHelper(int index) { - return ValueType(UniqueObjectHelper(index).c_str()); -} -template<> pair UniqueObjectHelper(int index) { - return pair(index, index + 1); -} -template<> pair UniqueObjectHelper(int index) { - return pair( - UniqueObjectHelper(index), UniqueObjectHelper(index + 1)); -} -template<> pair UniqueObjectHelper(int index) { - return pair( - UniqueObjectHelper(index), UniqueObjectHelper(index+1)); -} - -class ValueSerializer { - public: - bool operator()(FILE* fp, const int& value) { - return fwrite(&value, sizeof(value), 1, fp) == 1; - } - bool operator()(FILE* fp, int* value) { - return fread(value, sizeof(*value), 1, fp) == 1; - } - bool operator()(FILE* fp, const string& value) { - const int size = value.size(); - return (*this)(fp, size) && fwrite(value.c_str(), size, 1, fp) == 1; - } - bool operator()(FILE* fp, string* value) { - int size; - if (!(*this)(fp, &size)) return false; - char* buf = new char[size]; - if (fread(buf, size, 1, fp) != 1) { - delete[] buf; - return false; - } - new(value) string(buf, size); - delete[] buf; - return true; - } - template - bool operator()(OUTPUT* fp, const ValueType& v) { - return (*this)(fp, string(v.s())); - } - template - bool operator()(INPUT* fp, ValueType* v) { - string data; - if (!(*this)(fp, &data)) return false; - new(v) ValueType(data.c_str()); - return true; - } - template - bool operator()(OUTPUT* fp, const char* const& value) { - // Just store the index. - return (*this)(fp, atoi(value)); - } - template - bool operator()(INPUT* fp, const char** value) { - // Look up via index. - int index; - if (!(*this)(fp, &index)) return false; - *value = UniqueObjectHelper(index); - return true; - } - template - bool operator()(OUTPUT* fp, std::pair* value) { - return (*this)(fp, const_cast(&value->first)) - && (*this)(fp, &value->second); - } - template - bool operator()(INPUT* fp, const std::pair& value) { - return (*this)(fp, value.first) && (*this)(fp, value.second); - } -}; - -template -class HashtableTest : public ::testing::Test { - public: - HashtableTest() : ht_() { } - // Give syntactically-prettier access to UniqueObjectHelper. - typename HashtableType::value_type UniqueObject(int index) { - return UniqueObjectHelper(index); - } - typename HashtableType::key_type UniqueKey(int index) { - return this->ht_.get_key(this->UniqueObject(index)); - } - protected: - HashtableType ht_; -}; - -} - -// These are used to specify the empty key and deleted key in some -// contexts. They can't be in the unnamed namespace, or static, -// because the template code requires external linkage. -extern const string kEmptyString("--empty string--"); -extern const string kDeletedString("--deleted string--"); -extern const int kEmptyInt = 0; -extern const int kDeletedInt = -1234676543; // an unlikely-to-pick int -extern const char* const kEmptyCharStar = "--empty char*--"; -extern const char* const kDeletedCharStar = "--deleted char*--"; - -namespace { - -#define INT_HASHTABLES \ - HashtableInterface_SparseHashMap >, \ - HashtableInterface_SparseHashSet >, \ - /* This is a table where the key associated with a value is -value */ \ - HashtableInterface_SparseHashtable, \ - SetKey >, \ - Hasher, Alloc >, \ - HashtableInterface_DenseHashMap >, \ - HashtableInterface_DenseHashSet >, \ - HashtableInterface_DenseHashtable, \ - SetKey >, \ - Hasher, Alloc > - -#define STRING_HASHTABLES \ - HashtableInterface_SparseHashMap >, \ - HashtableInterface_SparseHashSet >, \ - /* This is a table where the key associated with a value is Cap(value) */ \ - HashtableInterface_SparseHashtable, \ - Hasher, Alloc >, \ - HashtableInterface_DenseHashMap >, \ - HashtableInterface_DenseHashSet >, \ - HashtableInterface_DenseHashtable, \ - Hasher, Alloc > - -// I'd like to use ValueType keys for SparseHashtable<> and -// DenseHashtable<> but I can't due to memory-management woes (nobody -// really owns the char* involved). So instead I do something simpler. -#define CHARSTAR_HASHTABLES \ - HashtableInterface_SparseHashMap >, \ - HashtableInterface_SparseHashSet >, \ - /* This is a table where each value is its own key. */ \ - HashtableInterface_SparseHashtable, \ - Hasher, Alloc >, \ - HashtableInterface_DenseHashMap >, \ - HashtableInterface_DenseHashSet >, \ - HashtableInterface_DenseHashtable, \ - Hasher, Alloc > - -// This is the list of types we run each test against. -// We need to define the same class 4 times due to limitations in the -// testing framework. Basically, we associate each class below with -// the set of types we want to run tests on it with. -template class HashtableIntTest - : public HashtableTest { }; -template class HashtableStringTest - : public HashtableTest { }; -template class HashtableCharStarTest - : public HashtableTest { }; -template class HashtableAllTest - : public HashtableTest { }; - -typedef testing::TypeList6 IntHashtables; -typedef testing::TypeList6 StringHashtables; -typedef testing::TypeList6 CharStarHashtables; -typedef testing::TypeList18 AllHashtables; - -TYPED_TEST_CASE_6(HashtableIntTest, IntHashtables); -TYPED_TEST_CASE_6(HashtableStringTest, StringHashtables); -TYPED_TEST_CASE_6(HashtableCharStarTest, CharStarHashtables); -TYPED_TEST_CASE_18(HashtableAllTest, AllHashtables); - -// ------------------------------------------------------------------------ -// First, some testing of the underlying infrastructure. - -TEST(HashtableCommonTest, HashMunging) { - const Hasher hasher; - - // We don't munge the hash value on non-pointer template types. - { - const sparsehash_internal::sh_hashtable_settings - settings(hasher, 0.0, 0.0); - const int v = 1000; - EXPECT_EQ(hasher(v), settings.hash(v)); - } - - { - // We do munge the hash value on pointer template types. - const sparsehash_internal::sh_hashtable_settings - settings(hasher, 0.0, 0.0); - int* v = NULL; - v += 0x10000; // get a non-trivial pointer value - EXPECT_NE(hasher(v), settings.hash(v)); - } - { - const sparsehash_internal::sh_hashtable_settings - settings(hasher, 0.0, 0.0); - const int* v = NULL; - v += 0x10000; // get a non-trivial pointer value - EXPECT_NE(hasher(v), settings.hash(v)); - } -} - -// ------------------------------------------------------------------------ -// If the first arg to TYPED_TEST is HashtableIntTest, it will run -// this test on all the hashtable types, with key=int and value=int. -// Likewise, HashtableStringTest will have string key/values, and -// HashtableCharStarTest will have char* keys and -- just to mix it up -// a little -- ValueType values. HashtableAllTest will run all three -// key/value types on all 6 hashtables types, for 18 test-runs total -// per test. -// -// In addition, TYPED_TEST makes available the magic keyword -// TypeParam, which is the type being used for the current test. - -// This first set of tests just tests the public API, going through -// the public typedefs and methods in turn. It goes approximately -// in the definition-order in sparse_hash_map.h. - -TYPED_TEST(HashtableIntTest, Typedefs) { - // Make sure all the standard STL-y typedefs are defined. The exact - // key/value types don't matter here, so we only bother testing on - // the int tables. This is just a compile-time "test"; nothing here - // can fail at runtime. - this->ht_.set_deleted_key(-2); // just so deleted_key succeeds - typename TypeParam::key_type kt; - typename TypeParam::value_type vt; - typename TypeParam::hasher h; - typename TypeParam::key_equal ke; - typename TypeParam::allocator_type at; - - typename TypeParam::size_type st; - typename TypeParam::difference_type dt; - typename TypeParam::pointer p; - typename TypeParam::const_pointer cp; - // I can't declare variables of reference-type, since I have nothing - // to point them to, so I just make sure that these types exist. - __attribute__((unused)) typedef typename TypeParam::reference r; - __attribute__((unused)) typedef typename TypeParam::const_reference cf; - - typename TypeParam::iterator i; - typename TypeParam::const_iterator ci; - typename TypeParam::local_iterator li; - typename TypeParam::const_local_iterator cli; - - // Now make sure the variables are used, so the compiler doesn't - // complain. Where possible, I "use" the variable by calling the - // method that's supposed to return the unique instance of the - // relevant type (eg. get_allocator()). Otherwise, I try to call a - // different, arbitrary function that returns the type. Sometimes - // the type isn't used at all, and there's no good way to use the - // variable. - kt = this->ht_.deleted_key(); - (void)vt; // value_type may not be copyable. Easiest not to try. - h = this->ht_.hash_funct(); - ke = this->ht_.key_eq(); - at = this->ht_.get_allocator(); - st = this->ht_.size(); - (void)dt; - (void)p; - (void)cp; - i = this->ht_.begin(); - ci = this->ht_.begin(); - li = this->ht_.begin(0); - cli = this->ht_.begin(0); -} - -TYPED_TEST(HashtableAllTest, NormalIterators) { - EXPECT_TRUE(this->ht_.begin() == this->ht_.end()); - this->ht_.insert(this->UniqueObject(1)); - { - typename TypeParam::iterator it = this->ht_.begin(); - EXPECT_TRUE(it != this->ht_.end()); - ++it; - EXPECT_TRUE(it == this->ht_.end()); - } -} - -TEST(HashtableTest, ModifyViaIterator) { - // This only works for hash-maps, since only they have non-const values. - { - sparse_hash_map ht; - ht[1] = 2; - sparse_hash_map::iterator it = ht.find(1); - EXPECT_TRUE(it != ht.end()); - EXPECT_EQ(1, it->first); - EXPECT_EQ(2, it->second); - it->second = 5; - it = ht.find(1); - EXPECT_TRUE(it != ht.end()); - EXPECT_EQ(5, it->second); - } - { - dense_hash_map ht; - ht.set_empty_key(0); - ht[1] = 2; - dense_hash_map::iterator it = ht.find(1); - EXPECT_TRUE(it != ht.end()); - EXPECT_EQ(1, it->first); - EXPECT_EQ(2, it->second); - it->second = 5; - it = ht.find(1); - EXPECT_TRUE(it != ht.end()); - EXPECT_EQ(5, it->second); - } -} - -TYPED_TEST(HashtableAllTest, ConstIterators) { - this->ht_.insert(this->UniqueObject(1)); - typename TypeParam::const_iterator it = this->ht_.begin(); - EXPECT_TRUE(it != this->ht_.end()); - ++it; - EXPECT_TRUE(it == this->ht_.end()); -} - -TYPED_TEST(HashtableAllTest, LocalIterators) { - // Now, tr1 begin/end (the local iterator that takes a bucket-number). - // ht::bucket() returns the bucket that this key would be inserted in. - this->ht_.insert(this->UniqueObject(1)); - const typename TypeParam::size_type bucknum = - this->ht_.bucket(this->UniqueKey(1)); - typename TypeParam::local_iterator b = this->ht_.begin(bucknum); - typename TypeParam::local_iterator e = this->ht_.end(bucknum); - EXPECT_TRUE(b != e); - b++; - EXPECT_TRUE(b == e); - - // Check an empty bucket. We can just xor the bottom bit and be sure - // of getting a legal bucket, since #buckets is always a power of 2. - EXPECT_TRUE(this->ht_.begin(bucknum ^ 1) == this->ht_.end(bucknum ^ 1)); - // Another test, this time making sure we're using the right types. - typename TypeParam::local_iterator b2 = this->ht_.begin(bucknum ^ 1); - typename TypeParam::local_iterator e2 = this->ht_.end(bucknum ^ 1); - EXPECT_TRUE(b2 == e2); -} - -TYPED_TEST(HashtableAllTest, ConstLocalIterators) { - this->ht_.insert(this->UniqueObject(1)); - const typename TypeParam::size_type bucknum = - this->ht_.bucket(this->UniqueKey(1)); - typename TypeParam::const_local_iterator b = this->ht_.begin(bucknum); - typename TypeParam::const_local_iterator e = this->ht_.end(bucknum); - EXPECT_TRUE(b != e); - b++; - EXPECT_TRUE(b == e); - typename TypeParam::const_local_iterator b2 = this->ht_.begin(bucknum ^ 1); - typename TypeParam::const_local_iterator e2 = this->ht_.end(bucknum ^ 1); - EXPECT_TRUE(b2 == e2); -} - -TYPED_TEST(HashtableAllTest, Iterating) { - // Test a bit more iterating than just one ++. - this->ht_.insert(this->UniqueObject(1)); - this->ht_.insert(this->UniqueObject(11)); - this->ht_.insert(this->UniqueObject(111)); - this->ht_.insert(this->UniqueObject(1111)); - this->ht_.insert(this->UniqueObject(11111)); - this->ht_.insert(this->UniqueObject(111111)); - this->ht_.insert(this->UniqueObject(1111111)); - this->ht_.insert(this->UniqueObject(11111111)); - this->ht_.insert(this->UniqueObject(111111111)); - typename TypeParam::iterator it = this->ht_.begin(); - for (int i = 1; i <= 9; i++) { // start at 1 so i is never 0 - // && here makes it easier to tell what loop iteration the test failed on. - EXPECT_TRUE(i && (it++ != this->ht_.end())); - } - EXPECT_TRUE(it == this->ht_.end()); -} - -TYPED_TEST(HashtableIntTest, Constructors) { - // The key/value types don't matter here, so I just test on one set - // of tables, the ones with int keys, which can easily handle the - // placement-news we have to do below. - Hasher hasher(1); // 1 is a unique id - int alloc_count = 0; - Alloc alloc(2, &alloc_count); - - TypeParam ht_noarg; - TypeParam ht_onearg(100); - TypeParam ht_twoarg(100, hasher); - TypeParam ht_threearg(100, hasher, hasher); // hasher serves as key_equal too - TypeParam ht_fourarg(100, hasher, hasher, alloc); - - // The allocator should have been called at most once, for the last ht. - EXPECT_LE(1, alloc_count); - int old_alloc_count = alloc_count; - - const typename TypeParam::value_type input[] = { - this->UniqueObject(1), - this->UniqueObject(2), - this->UniqueObject(4), - this->UniqueObject(8) - }; - const int num_inputs = sizeof(input) / sizeof(input[0]); - const typename TypeParam::value_type *begin = &input[0]; - const typename TypeParam::value_type *end = begin + num_inputs; - TypeParam ht_iter_noarg(begin, end); - TypeParam ht_iter_onearg(begin, end, 100); - TypeParam ht_iter_twoarg(begin, end, 100, hasher); - TypeParam ht_iter_threearg(begin, end, 100, hasher, hasher); - TypeParam ht_iter_fourarg(begin, end, 100, hasher, hasher, alloc); - // Now the allocator should have been called more. - EXPECT_GT(alloc_count, old_alloc_count); - old_alloc_count = alloc_count; - - // Let's do a lot more inserting and make sure the alloc-count goes up - for (int i = 2; i < 2000; i++) - ht_fourarg.insert(this->UniqueObject(i)); - EXPECT_GT(alloc_count, old_alloc_count); - - EXPECT_LT(ht_noarg.bucket_count(), 100u); - EXPECT_GE(ht_onearg.bucket_count(), 100u); - EXPECT_GE(ht_twoarg.bucket_count(), 100u); - EXPECT_GE(ht_threearg.bucket_count(), 100u); - EXPECT_GE(ht_fourarg.bucket_count(), 100u); - EXPECT_GE(ht_iter_onearg.bucket_count(), 100u); - - // When we pass in a hasher -- it can serve both as the hash-function - // and the key-equal function -- its id should be 1. Where we don't - // pass it in and use the default Hasher object, the id should be 0. - EXPECT_EQ(0, ht_noarg.hash_funct().id()); - EXPECT_EQ(0, ht_noarg.key_eq().id()); - EXPECT_EQ(0, ht_onearg.hash_funct().id()); - EXPECT_EQ(0, ht_onearg.key_eq().id()); - EXPECT_EQ(1, ht_twoarg.hash_funct().id()); - EXPECT_EQ(0, ht_twoarg.key_eq().id()); - EXPECT_EQ(1, ht_threearg.hash_funct().id()); - EXPECT_EQ(1, ht_threearg.key_eq().id()); - - EXPECT_EQ(0, ht_iter_noarg.hash_funct().id()); - EXPECT_EQ(0, ht_iter_noarg.key_eq().id()); - EXPECT_EQ(0, ht_iter_onearg.hash_funct().id()); - EXPECT_EQ(0, ht_iter_onearg.key_eq().id()); - EXPECT_EQ(1, ht_iter_twoarg.hash_funct().id()); - EXPECT_EQ(0, ht_iter_twoarg.key_eq().id()); - EXPECT_EQ(1, ht_iter_threearg.hash_funct().id()); - EXPECT_EQ(1, ht_iter_threearg.key_eq().id()); - - // Likewise for the allocator - EXPECT_EQ(0, ht_threearg.get_allocator().id()); - EXPECT_EQ(0, ht_iter_threearg.get_allocator().id()); - EXPECT_EQ(2, ht_fourarg.get_allocator().id()); - EXPECT_EQ(2, ht_iter_fourarg.get_allocator().id()); -} - -TYPED_TEST(HashtableAllTest, OperatorEquals) { - { - TypeParam ht1, ht2; - ht1.set_deleted_key(this->UniqueKey(1)); - ht2.set_deleted_key(this->UniqueKey(2)); - - ht1.insert(this->UniqueObject(10)); - ht2.insert(this->UniqueObject(20)); - EXPECT_FALSE(ht1 == ht2); - ht1 = ht2; - EXPECT_TRUE(ht1 == ht2); - } - { - TypeParam ht1, ht2; - ht1.insert(this->UniqueObject(30)); - ht1 = ht2; - EXPECT_EQ(0u, ht1.size()); - } - { - TypeParam ht1, ht2; - ht1.set_deleted_key(this->UniqueKey(1)); - ht2.insert(this->UniqueObject(1)); // has same key as ht1.delkey - ht1 = ht2; // should reset deleted-key to 'unset' - EXPECT_EQ(1u, ht1.size()); - EXPECT_EQ(1u, ht1.count(this->UniqueKey(1))); - } -} - -TYPED_TEST(HashtableAllTest, Clear) { - for (int i = 1; i < 200; i++) { - this->ht_.insert(this->UniqueObject(i)); - } - this->ht_.clear(); - EXPECT_EQ(0u, this->ht_.size()); - // TODO(csilvers): do we want to enforce that the hashtable has or - // has not shrunk? It does for dense_* but not sparse_*. -} - -TYPED_TEST(HashtableAllTest, ClearNoResize) { - if (!this->ht_.supports_clear_no_resize()) - return; - typename TypeParam::size_type empty_bucket_count = this->ht_.bucket_count(); - int last_element = 1; - while (this->ht_.bucket_count() == empty_bucket_count) { - this->ht_.insert(this->UniqueObject(last_element)); - ++last_element; - } - typename TypeParam::size_type last_bucket_count = this->ht_.bucket_count(); - this->ht_.clear_no_resize(); - EXPECT_EQ(last_bucket_count, this->ht_.bucket_count()); - EXPECT_TRUE(this->ht_.empty()); - - // When inserting the same number of elements again, no resize - // should be necessary. - for (int i = 1; i < last_element; ++i) { - this->ht_.insert(this->UniqueObject(last_element + i)); - EXPECT_EQ(last_bucket_count, this->ht_.bucket_count()); - } -} - -TYPED_TEST(HashtableAllTest, Swap) { - // Let's make a second hashtable with its own hasher, key_equal, etc. - Hasher hasher(1); // 1 is a unique id - TypeParam other_ht(200, hasher, hasher); - - this->ht_.set_deleted_key(this->UniqueKey(1)); - other_ht.set_deleted_key(this->UniqueKey(2)); - - for (int i = 3; i < 2000; i++) { - this->ht_.insert(this->UniqueObject(i)); - } - this->ht_.erase(this->UniqueKey(1000)); - other_ht.insert(this->UniqueObject(2001)); - typename TypeParam::size_type expected_buckets = other_ht.bucket_count(); - - this->ht_.swap(other_ht); - - EXPECT_EQ(this->UniqueKey(2), this->ht_.deleted_key()); - EXPECT_EQ(this->UniqueKey(1), other_ht.deleted_key()); - - EXPECT_EQ(1, this->ht_.hash_funct().id()); - EXPECT_EQ(0, other_ht.hash_funct().id()); - - EXPECT_EQ(1, this->ht_.key_eq().id()); - EXPECT_EQ(0, other_ht.key_eq().id()); - - EXPECT_EQ(expected_buckets, this->ht_.bucket_count()); - EXPECT_GT(other_ht.bucket_count(), 200u); - - EXPECT_EQ(1u, this->ht_.size()); - EXPECT_EQ(1996u, other_ht.size()); // because we erased 1000 - - EXPECT_EQ(0u, this->ht_.count(this->UniqueKey(111))); - EXPECT_EQ(1u, other_ht.count(this->UniqueKey(111))); - EXPECT_EQ(1u, this->ht_.count(this->UniqueKey(2001))); - EXPECT_EQ(0u, other_ht.count(this->UniqueKey(2001))); - EXPECT_EQ(0u, this->ht_.count(this->UniqueKey(1000))); - EXPECT_EQ(0u, other_ht.count(this->UniqueKey(1000))); - - // We purposefully don't swap allocs -- they're not necessarily swappable. - - // Now swap back, using the free-function swap - // NOTE: MSVC seems to have trouble with this free swap, not quite - // sure why. I've given up trying to fix it though. -#ifdef _MSC_VER - other_ht.swap(this->ht_); -#else - std::swap(this->ht_, other_ht); -#endif - - EXPECT_EQ(this->UniqueKey(1), this->ht_.deleted_key()); - EXPECT_EQ(this->UniqueKey(2), other_ht.deleted_key()); - EXPECT_EQ(0, this->ht_.hash_funct().id()); - EXPECT_EQ(1, other_ht.hash_funct().id()); - EXPECT_EQ(1996u, this->ht_.size()); - EXPECT_EQ(1u, other_ht.size()); - EXPECT_EQ(1u, this->ht_.count(this->UniqueKey(111))); - EXPECT_EQ(0u, other_ht.count(this->UniqueKey(111))); - - // A user reported a crash with this code using swap to clear. - // We've since fixed the bug; this prevents a regression. - TypeParam swap_to_clear_ht; - swap_to_clear_ht.set_deleted_key(this->UniqueKey(1)); - for (int i = 2; i < 10000; ++i) { - swap_to_clear_ht.insert(this->UniqueObject(i)); - } - TypeParam empty_ht; - empty_ht.swap(swap_to_clear_ht); - swap_to_clear_ht.set_deleted_key(this->UniqueKey(1)); - for (int i = 2; i < 10000; ++i) { - swap_to_clear_ht.insert(this->UniqueObject(i)); - } -} - -TYPED_TEST(HashtableAllTest, Size) { - EXPECT_EQ(0u, this->ht_.size()); - for (int i = 1; i < 1000; i++) { // go through some resizes - this->ht_.insert(this->UniqueObject(i)); - EXPECT_EQ(static_cast(i), this->ht_.size()); - } - this->ht_.clear(); - EXPECT_EQ(0u, this->ht_.size()); - - this->ht_.set_deleted_key(this->UniqueKey(1)); - EXPECT_EQ(0u, this->ht_.size()); // deleted key doesn't count - for (int i = 2; i < 1000; i++) { // go through some resizes - this->ht_.insert(this->UniqueObject(i)); - this->ht_.erase(this->UniqueKey(i)); - EXPECT_EQ(0u, this->ht_.size()); - } -} - -TEST(HashtableTest, MaxSizeAndMaxBucketCount) { - // The max size depends on the allocator. So we can't use the - // built-in allocator type; instead, we make our own types. - sparse_hash_set > ht_default; - sparse_hash_set > ht_char; - sparse_hash_set > ht_104; - - EXPECT_GE(ht_default.max_size(), 256u); - EXPECT_EQ(255u, ht_char.max_size()); - EXPECT_EQ(104u, ht_104.max_size()); - - // In our implementations, MaxBucketCount == MaxSize. - EXPECT_EQ(ht_default.max_size(), ht_default.max_bucket_count()); - EXPECT_EQ(ht_char.max_size(), ht_char.max_bucket_count()); - EXPECT_EQ(ht_104.max_size(), ht_104.max_bucket_count()); -} - -TYPED_TEST(HashtableAllTest, Empty) { - EXPECT_TRUE(this->ht_.empty()); - - this->ht_.insert(this->UniqueObject(1)); - EXPECT_FALSE(this->ht_.empty()); - - this->ht_.clear(); - EXPECT_TRUE(this->ht_.empty()); - - TypeParam empty_ht; - this->ht_.insert(this->UniqueObject(1)); - this->ht_.swap(empty_ht); - EXPECT_TRUE(this->ht_.empty()); -} - -TYPED_TEST(HashtableAllTest, BucketCount) { - TypeParam ht(100); - // constructor arg is number of *items* to be inserted, not the - // number of buckets, so we expect more buckets. - EXPECT_GT(ht.bucket_count(), 100u); - for (int i = 1; i < 200; i++) { - ht.insert(this->UniqueObject(i)); - } - EXPECT_GT(ht.bucket_count(), 200u); -} - -TYPED_TEST(HashtableAllTest, BucketAndBucketSize) { - const typename TypeParam::size_type expected_bucknum = this->ht_.bucket( - this->UniqueKey(1)); - EXPECT_EQ(0u, this->ht_.bucket_size(expected_bucknum)); - - this->ht_.insert(this->UniqueObject(1)); - EXPECT_EQ(expected_bucknum, this->ht_.bucket(this->UniqueKey(1))); - EXPECT_EQ(1u, this->ht_.bucket_size(expected_bucknum)); - - // Check that a bucket we didn't insert into, has a 0 size. Since - // we have an even number of buckets, bucknum^1 is guaranteed in range. - EXPECT_EQ(0u, this->ht_.bucket_size(expected_bucknum ^ 1)); -} - -TYPED_TEST(HashtableAllTest, LoadFactor) { - const typename TypeParam::size_type kSize = 16536; - // Check growing past various thresholds and then shrinking below - // them. - for (float grow_threshold = 0.2f; - grow_threshold <= 0.8f; - grow_threshold += 0.2f) { - TypeParam ht; - ht.set_deleted_key(this->UniqueKey(1)); - ht.max_load_factor(grow_threshold); - ht.min_load_factor(0.0); - EXPECT_EQ(grow_threshold, ht.max_load_factor()); - EXPECT_EQ(0.0, ht.min_load_factor()); - - ht.resize(kSize); - size_t bucket_count = ht.bucket_count(); - // Erase and insert an element to set consider_shrink = true, - // which should not cause a shrink because the threshold is 0.0. - ht.insert(this->UniqueObject(2)); - ht.erase(this->UniqueKey(2)); - for (int i = 2;; ++i) { - ht.insert(this->UniqueObject(i)); - if (static_cast(ht.size())/bucket_count < grow_threshold) { - EXPECT_EQ(bucket_count, ht.bucket_count()); - } else { - EXPECT_GT(ht.bucket_count(), bucket_count); - break; - } - } - // Now set a shrink threshold 1% below the current size and remove - // items until the size falls below that. - const float shrink_threshold = static_cast(ht.size()) / - ht.bucket_count() - 0.01f; - - // This time around, check the old set_resizing_parameters interface. - ht.set_resizing_parameters(shrink_threshold, 1.0); - EXPECT_EQ(1.0, ht.max_load_factor()); - EXPECT_EQ(shrink_threshold, ht.min_load_factor()); - - bucket_count = ht.bucket_count(); - for (int i = 2;; ++i) { - ht.erase(this->UniqueKey(i)); - // A resize is only triggered by an insert, so add and remove a - // value every iteration to trigger the shrink as soon as the - // threshold is passed. - ht.erase(this->UniqueKey(i+1)); - ht.insert(this->UniqueObject(i+1)); - if (static_cast(ht.size())/bucket_count > shrink_threshold) { - EXPECT_EQ(bucket_count, ht.bucket_count()); - } else { - EXPECT_LT(ht.bucket_count(), bucket_count); - break; - } - } - } -} - -TYPED_TEST(HashtableAllTest, ResizeAndRehash) { - // resize() and rehash() are synonyms. rehash() is the tr1 name. - TypeParam ht(10000); - ht.max_load_factor(0.8f); // for consistency's sake - - for (int i = 1; i < 100; ++i) - ht.insert(this->UniqueObject(i)); - ht.resize(0); - // Now ht should be as small as possible. - EXPECT_LT(ht.bucket_count(), 300u); - - ht.rehash(9000); // use the 'rehash' version of the name. - // Bucket count should be next power of 2, after considering max_load_factor. - EXPECT_EQ(16384u, ht.bucket_count()); - for (int i = 101; i < 200; ++i) - ht.insert(this->UniqueObject(i)); - // Adding a few hundred buckets shouldn't have caused a resize yet. - EXPECT_EQ(ht.bucket_count(), 16384u); -} - -TYPED_TEST(HashtableAllTest, FindAndCountAndEqualRange) { - pair eq_pair; - pair const_eq_pair; - - EXPECT_TRUE(this->ht_.empty()); - EXPECT_TRUE(this->ht_.find(this->UniqueKey(1)) == this->ht_.end()); - EXPECT_EQ(0u, this->ht_.count(this->UniqueKey(1))); - eq_pair = this->ht_.equal_range(this->UniqueKey(1)); - EXPECT_TRUE(eq_pair.first == eq_pair.second); - - this->ht_.insert(this->UniqueObject(1)); - EXPECT_FALSE(this->ht_.empty()); - this->ht_.insert(this->UniqueObject(11)); - this->ht_.insert(this->UniqueObject(111)); - this->ht_.insert(this->UniqueObject(1111)); - this->ht_.insert(this->UniqueObject(11111)); - this->ht_.insert(this->UniqueObject(111111)); - this->ht_.insert(this->UniqueObject(1111111)); - this->ht_.insert(this->UniqueObject(11111111)); - this->ht_.insert(this->UniqueObject(111111111)); - EXPECT_EQ(9u, this->ht_.size()); - typename TypeParam::const_iterator it = this->ht_.find(this->UniqueKey(1)); - EXPECT_EQ(it.key(), this->UniqueKey(1)); - - // Allow testing the const version of the methods as well. - const TypeParam ht = this->ht_; - - // Some successful lookups (via find, count, and equal_range). - EXPECT_TRUE(this->ht_.find(this->UniqueKey(1)) != this->ht_.end()); - EXPECT_EQ(1u, this->ht_.count(this->UniqueKey(1))); - eq_pair = this->ht_.equal_range(this->UniqueKey(1)); - EXPECT_TRUE(eq_pair.first != eq_pair.second); - EXPECT_EQ(eq_pair.first.key(), this->UniqueKey(1)); - ++eq_pair.first; - EXPECT_TRUE(eq_pair.first == eq_pair.second); - - EXPECT_TRUE(ht.find(this->UniqueKey(1)) != ht.end()); - EXPECT_EQ(1u, ht.count(this->UniqueKey(1))); - const_eq_pair = ht.equal_range(this->UniqueKey(1)); - EXPECT_TRUE(const_eq_pair.first != const_eq_pair.second); - EXPECT_EQ(const_eq_pair.first.key(), this->UniqueKey(1)); - ++const_eq_pair.first; - EXPECT_TRUE(const_eq_pair.first == const_eq_pair.second); - - EXPECT_TRUE(this->ht_.find(this->UniqueKey(11111)) != this->ht_.end()); - EXPECT_EQ(1u, this->ht_.count(this->UniqueKey(11111))); - eq_pair = this->ht_.equal_range(this->UniqueKey(11111)); - EXPECT_TRUE(eq_pair.first != eq_pair.second); - EXPECT_EQ(eq_pair.first.key(), this->UniqueKey(11111)); - ++eq_pair.first; - EXPECT_TRUE(eq_pair.first == eq_pair.second); - - EXPECT_TRUE(ht.find(this->UniqueKey(11111)) != ht.end()); - EXPECT_EQ(1u, ht.count(this->UniqueKey(11111))); - const_eq_pair = ht.equal_range(this->UniqueKey(11111)); - EXPECT_TRUE(const_eq_pair.first != const_eq_pair.second); - EXPECT_EQ(const_eq_pair.first.key(), this->UniqueKey(11111)); - ++const_eq_pair.first; - EXPECT_TRUE(const_eq_pair.first == const_eq_pair.second); - - // Some unsuccessful lookups (via find, count, and equal_range). - EXPECT_TRUE(this->ht_.find(this->UniqueKey(11112)) == this->ht_.end()); - EXPECT_EQ(0u, this->ht_.count(this->UniqueKey(11112))); - eq_pair = this->ht_.equal_range(this->UniqueKey(11112)); - EXPECT_TRUE(eq_pair.first == eq_pair.second); - - EXPECT_TRUE(ht.find(this->UniqueKey(11112)) == ht.end()); - EXPECT_EQ(0u, ht.count(this->UniqueKey(11112))); - const_eq_pair = ht.equal_range(this->UniqueKey(11112)); - EXPECT_TRUE(const_eq_pair.first == const_eq_pair.second); - - EXPECT_TRUE(this->ht_.find(this->UniqueKey(11110)) == this->ht_.end()); - EXPECT_EQ(0u, this->ht_.count(this->UniqueKey(11110))); - eq_pair = this->ht_.equal_range(this->UniqueKey(11110)); - EXPECT_TRUE(eq_pair.first == eq_pair.second); - - EXPECT_TRUE(ht.find(this->UniqueKey(11110)) == ht.end()); - EXPECT_EQ(0u, ht.count(this->UniqueKey(11110))); - const_eq_pair = ht.equal_range(this->UniqueKey(11110)); - EXPECT_TRUE(const_eq_pair.first == const_eq_pair.second); -} - -TYPED_TEST(HashtableAllTest, BracketInsert) { - // tests operator[], for those types that support it. - if (!this->ht_.supports_brackets()) - return; - - // bracket_equal is equivalent to ht_[a] == b. It should insert a if - // it doesn't already exist. - EXPECT_TRUE(this->ht_.bracket_equal(this->UniqueKey(1), - this->ht_.default_data())); - EXPECT_TRUE(this->ht_.find(this->UniqueKey(1)) != this->ht_.end()); - - // bracket_assign is equivalent to ht_[a] = b. - this->ht_.bracket_assign(this->UniqueKey(2), - this->ht_.get_data(this->UniqueObject(4))); - EXPECT_TRUE(this->ht_.find(this->UniqueKey(2)) != this->ht_.end()); - EXPECT_TRUE(this->ht_.bracket_equal( - this->UniqueKey(2), this->ht_.get_data(this->UniqueObject(4)))); - - this->ht_.bracket_assign( - this->UniqueKey(2), this->ht_.get_data(this->UniqueObject(6))); - EXPECT_TRUE(this->ht_.bracket_equal( - this->UniqueKey(2), this->ht_.get_data(this->UniqueObject(6)))); - // bracket_equal shouldn't have modified the value. - EXPECT_TRUE(this->ht_.bracket_equal( - this->UniqueKey(2), this->ht_.get_data(this->UniqueObject(6)))); - - // Verify that an operator[] that doesn't cause a resize, also - // doesn't require an extra rehash. - TypeParam ht(100); - EXPECT_EQ(0, ht.hash_funct().num_hashes()); - ht.bracket_assign(this->UniqueKey(2), ht.get_data(this->UniqueObject(2))); - EXPECT_EQ(1, ht.hash_funct().num_hashes()); - - // And overwriting, likewise, should only cause one extra hash. - ht.bracket_assign(this->UniqueKey(2), ht.get_data(this->UniqueObject(2))); - EXPECT_EQ(2, ht.hash_funct().num_hashes()); -} - - -TYPED_TEST(HashtableAllTest, InsertValue) { - // First, try some straightforward insertions. - EXPECT_TRUE(this->ht_.empty()); - this->ht_.insert(this->UniqueObject(1)); - EXPECT_FALSE(this->ht_.empty()); - this->ht_.insert(this->UniqueObject(11)); - this->ht_.insert(this->UniqueObject(111)); - this->ht_.insert(this->UniqueObject(1111)); - this->ht_.insert(this->UniqueObject(11111)); - this->ht_.insert(this->UniqueObject(111111)); - this->ht_.insert(this->UniqueObject(1111111)); - this->ht_.insert(this->UniqueObject(11111111)); - this->ht_.insert(this->UniqueObject(111111111)); - EXPECT_EQ(9u, this->ht_.size()); - EXPECT_EQ(1u, this->ht_.count(this->UniqueKey(1))); - EXPECT_EQ(1u, this->ht_.count(this->UniqueKey(1111))); - - // Check the return type. - pair insert_it; - insert_it = this->ht_.insert(this->UniqueObject(1)); - EXPECT_EQ(false, insert_it.second); // false: already present - EXPECT_TRUE(*insert_it.first == this->UniqueObject(1)); - - insert_it = this->ht_.insert(this->UniqueObject(2)); - EXPECT_EQ(true, insert_it.second); // true: not already present - EXPECT_TRUE(*insert_it.first == this->UniqueObject(2)); -} - -TYPED_TEST(HashtableIntTest, InsertRange) { - // We just test the ints here, to make the placement-new easier. - TypeParam ht_source; - ht_source.insert(this->UniqueObject(10)); - ht_source.insert(this->UniqueObject(100)); - ht_source.insert(this->UniqueObject(1000)); - ht_source.insert(this->UniqueObject(10000)); - ht_source.insert(this->UniqueObject(100000)); - ht_source.insert(this->UniqueObject(1000000)); - - const typename TypeParam::value_type input[] = { - // This is a copy of the first element in ht_source. - *ht_source.begin(), - this->UniqueObject(2), - this->UniqueObject(4), - this->UniqueObject(8) - }; - - set set_input; - set_input.insert(this->UniqueObject(1111111)); - set_input.insert(this->UniqueObject(111111)); - set_input.insert(this->UniqueObject(11111)); - set_input.insert(this->UniqueObject(1111)); - set_input.insert(this->UniqueObject(111)); - set_input.insert(this->UniqueObject(11)); - - // Insert from ht_source, an iterator of the same type as us. - typename TypeParam::const_iterator begin = ht_source.begin(); - typename TypeParam::const_iterator end = begin; - std::advance(end, 3); - this->ht_.insert(begin, end); // insert 3 elements from ht_source - EXPECT_EQ(3u, this->ht_.size()); - EXPECT_TRUE(*this->ht_.begin() == this->UniqueObject(10) || - *this->ht_.begin() == this->UniqueObject(100) || - *this->ht_.begin() == this->UniqueObject(1000) || - *this->ht_.begin() == this->UniqueObject(10000) || - *this->ht_.begin() == this->UniqueObject(100000) || - *this->ht_.begin() == this->UniqueObject(1000000)); - - // And insert from set_input, a separate, non-random-access iterator. - typename set::const_iterator set_begin; - typename set::const_iterator set_end; - set_begin = set_input.begin(); - set_end = set_begin; - std::advance(set_end, 3); - this->ht_.insert(set_begin, set_end); - EXPECT_EQ(6u, this->ht_.size()); - - // Insert from input as well, a separate, random-access iterator. - // The first element of input overlaps with an existing element - // of ht_, so this should only up the size by 2. - this->ht_.insert(&input[0], &input[3]); - EXPECT_EQ(8u, this->ht_.size()); -} - -TEST(HashtableTest, InsertValueToMap) { - // For the maps in particular, ensure that inserting doesn't change - // the value. - sparse_hash_map shm; - pair::iterator, bool> shm_it; - shm[1] = 2; // test a different method of inserting - shm_it = shm.insert(pair(1, 3)); - EXPECT_EQ(false, shm_it.second); - EXPECT_EQ(1, shm_it.first->first); - EXPECT_EQ(2, shm_it.first->second); - shm_it.first->second = 20; - EXPECT_EQ(20, shm[1]); - - shm_it = shm.insert(pair(2, 4)); - EXPECT_EQ(true, shm_it.second); - EXPECT_EQ(2, shm_it.first->first); - EXPECT_EQ(4, shm_it.first->second); - EXPECT_EQ(4, shm[2]); - - // Do it all again, with dense_hash_map. - dense_hash_map dhm; - dhm.set_empty_key(0); - pair::iterator, bool> dhm_it; - dhm[1] = 2; // test a different method of inserting - dhm_it = dhm.insert(pair(1, 3)); - EXPECT_EQ(false, dhm_it.second); - EXPECT_EQ(1, dhm_it.first->first); - EXPECT_EQ(2, dhm_it.first->second); - dhm_it.first->second = 20; - EXPECT_EQ(20, dhm[1]); - - dhm_it = dhm.insert(pair(2, 4)); - EXPECT_EQ(true, dhm_it.second); - EXPECT_EQ(2, dhm_it.first->first); - EXPECT_EQ(4, dhm_it.first->second); - EXPECT_EQ(4, dhm[2]); -} - -TYPED_TEST(HashtableStringTest, EmptyKey) { - // Only run the string tests, to make it easier to know what the - // empty key should be. - if (!this->ht_.supports_empty_key()) - return; - EXPECT_EQ(kEmptyString, this->ht_.empty_key()); -} - -TYPED_TEST(HashtableAllTest, DeletedKey) { - if (!this->ht_.supports_deleted_key()) - return; - this->ht_.insert(this->UniqueObject(10)); - this->ht_.insert(this->UniqueObject(20)); - this->ht_.set_deleted_key(this->UniqueKey(1)); - EXPECT_EQ(this->ht_.deleted_key(), this->UniqueKey(1)); - EXPECT_EQ(2u, this->ht_.size()); - this->ht_.erase(this->UniqueKey(20)); - EXPECT_EQ(1u, this->ht_.size()); - - // Changing the deleted key is fine. - this->ht_.set_deleted_key(this->UniqueKey(2)); - EXPECT_EQ(this->ht_.deleted_key(), this->UniqueKey(2)); - EXPECT_EQ(1u, this->ht_.size()); -} - -TYPED_TEST(HashtableAllTest, Erase) { - this->ht_.set_deleted_key(this->UniqueKey(1)); - EXPECT_EQ(0u, this->ht_.erase(this->UniqueKey(20))); - this->ht_.insert(this->UniqueObject(10)); - this->ht_.insert(this->UniqueObject(20)); - EXPECT_EQ(1u, this->ht_.erase(this->UniqueKey(20))); - EXPECT_EQ(1u, this->ht_.size()); - EXPECT_EQ(0u, this->ht_.erase(this->UniqueKey(20))); - EXPECT_EQ(1u, this->ht_.size()); - EXPECT_EQ(0u, this->ht_.erase(this->UniqueKey(19))); - EXPECT_EQ(1u, this->ht_.size()); - - typename TypeParam::iterator it = this->ht_.find(this->UniqueKey(10)); - EXPECT_TRUE(it != this->ht_.end()); - this->ht_.erase(it); - EXPECT_EQ(0u, this->ht_.size()); - - for (int i = 10; i < 100; i++) - this->ht_.insert(this->UniqueObject(i)); - EXPECT_EQ(90u, this->ht_.size()); - this->ht_.erase(this->ht_.begin(), this->ht_.end()); - EXPECT_EQ(0u, this->ht_.size()); -} - -TYPED_TEST(HashtableAllTest, EraseDoesNotResize) { - this->ht_.set_deleted_key(this->UniqueKey(1)); - for (int i = 10; i < 2000; i++) { - this->ht_.insert(this->UniqueObject(i)); - } - const typename TypeParam::size_type old_count = this->ht_.bucket_count(); - for (int i = 10; i < 1000; i++) { // erase half one at a time - EXPECT_EQ(1u, this->ht_.erase(this->UniqueKey(i))); - } - this->ht_.erase(this->ht_.begin(), this->ht_.end()); // and the rest at once - EXPECT_EQ(0u, this->ht_.size()); - EXPECT_EQ(old_count, this->ht_.bucket_count()); -} - -TYPED_TEST(HashtableAllTest, Equals) { - // The real test here is whether two hashtables are equal if they - // have the same items but in a different order. - TypeParam ht1; - TypeParam ht2; - - EXPECT_TRUE(ht1 == ht1); - EXPECT_FALSE(ht1 != ht1); - EXPECT_TRUE(ht1 == ht2); - EXPECT_FALSE(ht1 != ht2); - ht1.set_deleted_key(this->UniqueKey(1)); - // Only the contents affect equality, not things like deleted-key. - EXPECT_TRUE(ht1 == ht2); - EXPECT_FALSE(ht1 != ht2); - ht1.resize(2000); - EXPECT_TRUE(ht1 == ht2); - - // The choice of allocator/etc doesn't matter either. - Hasher hasher(1); - Alloc alloc(2, NULL); - TypeParam ht3(5, hasher, hasher, alloc); - EXPECT_TRUE(ht1 == ht3); - EXPECT_FALSE(ht1 != ht3); - - ht1.insert(this->UniqueObject(2)); - EXPECT_TRUE(ht1 != ht2); - EXPECT_FALSE(ht1 == ht2); // this should hold as well! - - ht2.insert(this->UniqueObject(2)); - EXPECT_TRUE(ht1 == ht2); - - for (int i = 3; i <= 2000; i++) { - ht1.insert(this->UniqueObject(i)); - } - for (int i = 2000; i >= 3; i--) { - ht2.insert(this->UniqueObject(i)); - } - EXPECT_TRUE(ht1 == ht2); -} - -TEST(HashtableTest, IntIO) { - // Since the set case is just a special (easier) case than the map case, I - // just test on sparse_hash_map. This handles the easy case where we can - // use the standard reader and writer. - sparse_hash_map ht_out; - ht_out.set_deleted_key(0); - for (int i = 1; i < 1000; i++) { - ht_out[i] = i * i; - } - ht_out.erase(563); // just to test having some erased keys when we write. - ht_out.erase(22); - - string file(TmpFile("intio")); - FILE* fp = fopen(file.c_str(), "wb"); - EXPECT_TRUE(fp != NULL); - EXPECT_TRUE(ht_out.write_metadata(fp)); - EXPECT_TRUE(ht_out.write_nopointer_data(fp)); - fclose(fp); - - sparse_hash_map ht_in; - fp = fopen(file.c_str(), "rb"); - EXPECT_TRUE(fp != NULL); - EXPECT_TRUE(ht_in.read_metadata(fp)); - EXPECT_TRUE(ht_in.read_nopointer_data(fp)); - fclose(fp); - - EXPECT_EQ(1, ht_in[1]); - EXPECT_EQ(998001, ht_in[999]); - EXPECT_EQ(100, ht_in[10]); - EXPECT_EQ(441, ht_in[21]); - EXPECT_EQ(0, ht_in[22]); // should not have been saved - EXPECT_EQ(0, ht_in[563]); -} - -TEST(HashtableTest, StringIO) { - // Since the set case is just a special (easier) case than the map case, - // I just test on sparse_hash_map. This handles the difficult case where - // we have to write our own custom reader/writer for the data. - sparse_hash_map ht_out; - ht_out.set_deleted_key(string("")); - for (int i = 32; i < 128; i++) { - // This maps 'a' to 32 a's, 'b' to 33 b's, etc. - ht_out[string(1, i)] = string(i, i); - } - ht_out.erase("c"); // just to test having some erased keys when we write. - ht_out.erase("y"); - - string file(TmpFile("stringio")); - FILE* fp = fopen(file.c_str(), "wb"); - EXPECT_TRUE(fp != NULL); - EXPECT_TRUE(ht_out.write_metadata(fp)); - for (sparse_hash_map::const_iterator - it = ht_out.begin(); it != ht_out.end(); ++it) { - const string::size_type first_size = it->first.length(); - fwrite(&first_size, sizeof(first_size), 1, fp); // ignore endianness issues - fwrite(it->first.c_str(), first_size, 1, fp); - - const string::size_type second_size = it->second.length(); - fwrite(&second_size, sizeof(second_size), 1, fp); - fwrite(it->second.c_str(), second_size, 1, fp); - } - fclose(fp); - - sparse_hash_map ht_in; - fp = fopen(file.c_str(), "rb"); - EXPECT_TRUE(fp != NULL); - EXPECT_TRUE(ht_in.read_metadata(fp)); - for (sparse_hash_map::iterator - it = ht_in.begin(); it != ht_in.end(); ++it) { - string::size_type first_size; - EXPECT_EQ(1u, fread(&first_size, sizeof(first_size), 1, fp)); - char* first = new char[first_size]; - EXPECT_EQ(1u, fread(first, first_size, 1, fp)); - - string::size_type second_size; - EXPECT_EQ(1u, fread(&second_size, sizeof(second_size), 1, fp)); - char* second = new char[second_size]; - EXPECT_EQ(1u, fread(second, second_size, 1, fp)); - - // it points to garbage, so we have to use placement-new to initialize. - // We also have to use const-cast since it->first is const. - new(const_cast(&it->first)) string(first, first_size); - new(&it->second) string(second, second_size); - delete[] first; - delete[] second; - } - fclose(fp); - - EXPECT_EQ(string(" "), ht_in[" "]); - EXPECT_EQ(string("+++++++++++++++++++++++++++++++++++++++++++"), ht_in["+"]); - EXPECT_EQ(string(""), ht_in["c"]); // should not have been saved - EXPECT_EQ(string(""), ht_in["y"]); -} - -TYPED_TEST(HashtableAllTest, Serialization) { - if (!this->ht_.supports_serialization()) return; - TypeParam ht_out; - ht_out.set_deleted_key(this->UniqueKey(2000)); - for (int i = 1; i < 100; i++) { - ht_out.insert(this->UniqueObject(i)); - } - // just to test having some erased keys when we write. - ht_out.erase(this->UniqueKey(56)); - ht_out.erase(this->UniqueKey(22)); - - string file(TmpFile("serialization")); - FILE* fp = fopen(file.c_str(), "wb"); - EXPECT_TRUE(fp != NULL); - EXPECT_TRUE(ht_out.serialize(ValueSerializer(), fp)); - fclose(fp); - - TypeParam ht_in; - fp = fopen(file.c_str(), "rb"); - EXPECT_TRUE(fp != NULL); - EXPECT_TRUE(ht_in.unserialize(ValueSerializer(), fp)); - fclose(fp); - - EXPECT_EQ(this->UniqueObject(1), *ht_in.find(this->UniqueKey(1))); - EXPECT_EQ(this->UniqueObject(99), *ht_in.find(this->UniqueKey(99))); - EXPECT_FALSE(ht_in.count(this->UniqueKey(100))); - EXPECT_EQ(this->UniqueObject(21), *ht_in.find(this->UniqueKey(21))); - // should not have been saved - EXPECT_FALSE(ht_in.count(this->UniqueKey(22))); - EXPECT_FALSE(ht_in.count(this->UniqueKey(56))); -} - -TYPED_TEST(HashtableIntTest, NopointerSerialization) { - if (!this->ht_.supports_serialization()) return; - TypeParam ht_out; - ht_out.set_deleted_key(this->UniqueKey(2000)); - for (int i = 1; i < 100; i++) { - ht_out.insert(this->UniqueObject(i)); - } - // just to test having some erased keys when we write. - ht_out.erase(this->UniqueKey(56)); - ht_out.erase(this->UniqueKey(22)); - - string file(TmpFile("nopointer_serialization")); - FILE* fp = fopen(file.c_str(), "wb"); - EXPECT_TRUE(fp != NULL); - EXPECT_TRUE(ht_out.serialize(typename TypeParam::NopointerSerializer(), fp)); - fclose(fp); - - TypeParam ht_in; - fp = fopen(file.c_str(), "rb"); - EXPECT_TRUE(fp != NULL); - EXPECT_TRUE(ht_in.unserialize(typename TypeParam::NopointerSerializer(), fp)); - fclose(fp); - - EXPECT_EQ(this->UniqueObject(1), *ht_in.find(this->UniqueKey(1))); - EXPECT_EQ(this->UniqueObject(99), *ht_in.find(this->UniqueKey(99))); - EXPECT_FALSE(ht_in.count(this->UniqueKey(100))); - EXPECT_EQ(this->UniqueObject(21), *ht_in.find(this->UniqueKey(21))); - // should not have been saved - EXPECT_FALSE(ht_in.count(this->UniqueKey(22))); - EXPECT_FALSE(ht_in.count(this->UniqueKey(56))); -} - -// We don't support serializing to a string by default, but you can do -// it by writing your own custom input/output class. -class StringIO { - public: - explicit StringIO(string* s) : s_(s) {} - size_t Write(const void* buf, size_t len) { - s_->append(reinterpret_cast(buf), len); - return len; - } - size_t Read(void* buf, size_t len) { - if (s_->length() < len) - len = s_->length(); - memcpy(reinterpret_cast(buf), s_->data(), len); - s_->erase(0, len); - return len; - } - private: - string* const s_; -}; - -TYPED_TEST(HashtableIntTest, SerializingToString) { - if (!this->ht_.supports_serialization()) return; - TypeParam ht_out; - ht_out.set_deleted_key(this->UniqueKey(2000)); - for (int i = 1; i < 100; i++) { - ht_out.insert(this->UniqueObject(i)); - } - // just to test having some erased keys when we write. - ht_out.erase(this->UniqueKey(56)); - ht_out.erase(this->UniqueKey(22)); - - string stringbuf; - StringIO stringio(&stringbuf); - EXPECT_TRUE(ht_out.serialize(typename TypeParam::NopointerSerializer(), - &stringio)); - - TypeParam ht_in; - EXPECT_TRUE(ht_in.unserialize(typename TypeParam::NopointerSerializer(), - &stringio)); - - EXPECT_EQ(this->UniqueObject(1), *ht_in.find(this->UniqueKey(1))); - EXPECT_EQ(this->UniqueObject(99), *ht_in.find(this->UniqueKey(99))); - EXPECT_FALSE(ht_in.count(this->UniqueKey(100))); - EXPECT_EQ(this->UniqueObject(21), *ht_in.find(this->UniqueKey(21))); - // should not have been saved - EXPECT_FALSE(ht_in.count(this->UniqueKey(22))); - EXPECT_FALSE(ht_in.count(this->UniqueKey(56))); -} - -// An easier way to do the above would be to use the existing stream methods. -TYPED_TEST(HashtableIntTest, SerializingToStringStream) { - if (!this->ht_.supports_serialization()) return; - TypeParam ht_out; - ht_out.set_deleted_key(this->UniqueKey(2000)); - for (int i = 1; i < 100; i++) { - ht_out.insert(this->UniqueObject(i)); - } - // just to test having some erased keys when we write. - ht_out.erase(this->UniqueKey(56)); - ht_out.erase(this->UniqueKey(22)); - - std::stringstream string_buffer; - EXPECT_TRUE(ht_out.serialize(typename TypeParam::NopointerSerializer(), - &string_buffer)); - - TypeParam ht_in; - EXPECT_TRUE(ht_in.unserialize(typename TypeParam::NopointerSerializer(), - &string_buffer)); - - EXPECT_EQ(this->UniqueObject(1), *ht_in.find(this->UniqueKey(1))); - EXPECT_EQ(this->UniqueObject(99), *ht_in.find(this->UniqueKey(99))); - EXPECT_FALSE(ht_in.count(this->UniqueKey(100))); - EXPECT_EQ(this->UniqueObject(21), *ht_in.find(this->UniqueKey(21))); - // should not have been saved - EXPECT_FALSE(ht_in.count(this->UniqueKey(22))); - EXPECT_FALSE(ht_in.count(this->UniqueKey(56))); -} - -// Verify that the metadata serialization is endianness and word size -// agnostic. -TYPED_TEST(HashtableAllTest, MetadataSerializationAndEndianness) { - TypeParam ht_out; - string kExpectedDense("\x13W\x86""B\0\0\0\0\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0", - 24); - string kExpectedSparse("$hu1\0\0\0 \0\0\0\0\0\0\0\0\0\0\0\0", 20); - - if (ht_out.supports_readwrite()) { - string file(TmpFile("metadata_serialization")); - FILE* fp = fopen(file.c_str(), "wb"); - EXPECT_TRUE(fp != NULL); - - EXPECT_TRUE(ht_out.write_metadata(fp)); - EXPECT_TRUE(ht_out.write_nopointer_data(fp)); - - const size_t num_bytes = ftell(fp); - fclose(fp); - fp = fopen(file.c_str(), "rb"); - EXPECT_LE(num_bytes, static_cast(24)); - char contents[24]; - EXPECT_EQ(num_bytes, fread(contents, 1, num_bytes, fp)); - EXPECT_EQ(EOF, fgetc(fp)); // check we're *exactly* the right size - fclose(fp); - // TODO(csilvers): check type of ht_out instead of looking at the 1st byte. - if (contents[0] == kExpectedDense[0]) { - EXPECT_EQ(kExpectedDense, string(contents, num_bytes)); - } else { - EXPECT_EQ(kExpectedSparse, string(contents, num_bytes)); - } - } - - // Do it again with new-style serialization. Here we can use StringIO. - if (ht_out.supports_serialization()) { - string stringbuf; - StringIO stringio(&stringbuf); - EXPECT_TRUE(ht_out.serialize(typename TypeParam::NopointerSerializer(), - &stringio)); - if (stringbuf[0] == kExpectedDense[0]) { - EXPECT_EQ(kExpectedDense, stringbuf); - } else { - EXPECT_EQ(kExpectedSparse, stringbuf); - } - } -} - - -// ------------------------------------------------------------------------ -// The above tests test the general API for correctness. These tests -// test a few corner cases that have tripped us up in the past, and -// more general, cross-API issues like memory management. - -TYPED_TEST(HashtableAllTest, BracketOperatorCrashing) { - this->ht_.set_deleted_key(this->UniqueKey(1)); - for (int iters = 0; iters < 10; iters++) { - // We start at 33 because after shrinking, we'll be at 32 buckets. - for (int i = 33; i < 133; i++) { - this->ht_.bracket_assign(this->UniqueKey(i), - this->ht_.get_data(this->UniqueObject(i))); - } - this->ht_.clear_no_resize(); - // This will force a shrink on the next insert, which we want to test. - this->ht_.bracket_assign(this->UniqueKey(2), - this->ht_.get_data(this->UniqueObject(2))); - this->ht_.erase(this->UniqueKey(2)); - } -} - -// For data types with trivial copy-constructors and destructors, we -// should use an optimized routine for data-copying, that involves -// memmove. We test this by keeping count of how many times the -// copy-constructor is called; it should be much less with the -// optimized code. -struct Memmove { - public: - Memmove(): i(0) {} - explicit Memmove(int ival): i(ival) {} - Memmove(const Memmove& that) { this->i = that.i; num_copies++; } - int i; - static int num_copies; -}; -int Memmove::num_copies = 0; - -struct NoMemmove { - public: - NoMemmove(): i(0) {} - explicit NoMemmove(int ival): i(ival) {} - NoMemmove(const NoMemmove& that) { this->i = that.i; num_copies++; } - int i; - static int num_copies; -}; -int NoMemmove::num_copies = 0; - -} // unnamed namespace - -// This is what tells the hashtable code it can use memmove for this class: -_START_GOOGLE_NAMESPACE_ -template<> struct has_trivial_copy : true_type { }; -template<> struct has_trivial_destructor : true_type { }; -_END_GOOGLE_NAMESPACE_ - -namespace { - -TEST(HashtableTest, SimpleDataTypeOptimizations) { - // Only sparsehashtable optimizes moves in this way. - sparse_hash_map memmove; - sparse_hash_map nomemmove; - sparse_hash_map > - memmove_nonstandard_alloc; - - Memmove::num_copies = 0; - for (int i = 10000; i > 0; i--) { - memmove[i] = Memmove(i); - } - const int memmove_copies = Memmove::num_copies; - - NoMemmove::num_copies = 0; - for (int i = 10000; i > 0; i--) { - nomemmove[i] = NoMemmove(i); - } - const int nomemmove_copies = NoMemmove::num_copies; - - Memmove::num_copies = 0; - for (int i = 10000; i > 0; i--) { - memmove_nonstandard_alloc[i] = Memmove(i); - } - const int memmove_nonstandard_alloc_copies = Memmove::num_copies; - - EXPECT_GT(nomemmove_copies, memmove_copies); - EXPECT_EQ(nomemmove_copies, memmove_nonstandard_alloc_copies); -} - -TYPED_TEST(HashtableAllTest, ResizeHysteresis) { - // We want to make sure that when we create a hashtable, and then - // add and delete one element, the size of the hashtable doesn't - // change. - this->ht_.set_deleted_key(this->UniqueKey(1)); - typename TypeParam::size_type old_bucket_count = this->ht_.bucket_count(); - this->ht_.insert(this->UniqueObject(4)); - this->ht_.erase(this->UniqueKey(4)); - this->ht_.insert(this->UniqueObject(4)); - this->ht_.erase(this->UniqueKey(4)); - EXPECT_EQ(old_bucket_count, this->ht_.bucket_count()); - - // Try it again, but with a hashtable that starts very small - TypeParam ht(2); - EXPECT_LT(ht.bucket_count(), 32u); // verify we really do start small - ht.set_deleted_key(this->UniqueKey(1)); - old_bucket_count = ht.bucket_count(); - ht.insert(this->UniqueObject(4)); - ht.erase(this->UniqueKey(4)); - ht.insert(this->UniqueObject(4)); - ht.erase(this->UniqueKey(4)); - EXPECT_EQ(old_bucket_count, ht.bucket_count()); -} - -TEST(HashtableTest, ConstKey) { - // Sometimes people write hash_map, even though the - // const isn't necessary. Make sure we handle this cleanly. - sparse_hash_map shm; - shm.set_deleted_key(1); - shm[10] = 20; - - dense_hash_map dhm; - dhm.set_empty_key(1); - dhm.set_deleted_key(2); - dhm[10] = 20; -} - -TYPED_TEST(HashtableAllTest, ResizeActuallyResizes) { - // This tests for a problem we had where we could repeatedly "resize" - // a hashtable to the same size it was before, on every insert. - const typename TypeParam::size_type kSize = 1<<10; // Pick any power of 2 - const float kResize = 0.8f; // anything between 0.5 and 1 is fine. - const int kThreshold = static_cast(kSize * kResize - 1); - this->ht_.set_resizing_parameters(0, kResize); - this->ht_.set_deleted_key(this->UniqueKey(kThreshold + 100)); - - // Get right up to the resizing threshold. - for (int i = 0; i <= kThreshold; i++) { - this->ht_.insert(this->UniqueObject(i+1)); - } - // The bucket count should equal kSize. - EXPECT_EQ(kSize, this->ht_.bucket_count()); - - // Now start doing erase+insert pairs. This should cause us to - // copy the hashtable at most once. - const int pre_copies = this->ht_.num_table_copies(); - for (int i = 0; i < static_cast(kSize); i++) { - this->ht_.erase(this->UniqueKey(kThreshold)); - this->ht_.insert(this->UniqueObject(kThreshold)); - } - EXPECT_LT(this->ht_.num_table_copies(), pre_copies + 2); - - // Now create a hashtable where we go right to the threshold, then - // delete everything and do one insert. Even though our hashtable - // is now tiny, we should still have at least kSize buckets, because - // our shrink threshhold is 0. - TypeParam ht2; - ht2.set_deleted_key(this->UniqueKey(kThreshold + 100)); - ht2.set_resizing_parameters(0, kResize); - EXPECT_LT(ht2.bucket_count(), kSize); - for (int i = 0; i <= kThreshold; i++) { - ht2.insert(this->UniqueObject(i+1)); - } - EXPECT_EQ(ht2.bucket_count(), kSize); - for (int i = 0; i <= kThreshold; i++) { - ht2.erase(this->UniqueKey(i+1)); - EXPECT_EQ(ht2.bucket_count(), kSize); - } - ht2.insert(this->UniqueObject(kThreshold+2)); - EXPECT_GE(ht2.bucket_count(), kSize); -} - -template class DenseIntMap : public dense_hash_map { - public: - DenseIntMap() { this->set_empty_key(0); } -}; - -class DenseStringSet : public dense_hash_set { - public: - DenseStringSet() { this->set_empty_key(string("")); } -}; - -TEST(HashtableTest, NestedHashtables) { - // People can do better than to have a hash_map of hash_maps, but we - // should still support it. I try a few different mappings. - sparse_hash_map, Hasher, Hasher> ht1; - sparse_hash_map ht2; - dense_hash_map, Hasher, Hasher> ht3; - ht3.set_empty_key(0); - - ht1["hi"]; // create a sub-ht with the default values - ht1["lo"][1] = "there"; - sparse_hash_map, Hasher, Hasher> - ht1copy = ht1; - - ht2["hi"]; - ht2["hi"].insert("lo"); - sparse_hash_map ht2copy = ht2; - - ht3[1]; - ht3[2][3] = 4; - dense_hash_map, Hasher, Hasher> ht3copy = ht3; -} - -TEST(HashtableDeathTest, ResizeOverflow) { - dense_hash_map ht; - EXPECT_DEATH(ht.resize(static_cast(-1)), - "overflows size_type"); - - sparse_hash_map ht2; - EXPECT_DEATH(ht2.resize(static_cast(-1)), - "overflows size_type"); -} - -TEST(HashtableDeathTest, InsertSizeTypeOverflow) { - static const int kMax = 256; - vector test_data(kMax); - for (int i = 0; i < kMax; ++i) { - test_data[i] = i+1000; - } - - sparse_hash_set > shs; - dense_hash_set > dhs; - dhs.set_empty_key(-1); - - // Test we are using the correct allocator - EXPECT_TRUE(shs.get_allocator().is_custom_alloc()); - EXPECT_TRUE(dhs.get_allocator().is_custom_alloc()); - - // Test size_type overflow in insert(it, it) - EXPECT_DEATH(dhs.insert(test_data.begin(), test_data.end()), - "overflows size_type"); - EXPECT_DEATH(shs.insert(test_data.begin(), test_data.end()), - "overflows size_type"); -} - -TEST(HashtableDeathTest, InsertMaxSizeOverflow) { - static const int kMax = 256; - vector test_data(kMax); - for (int i = 0; i < kMax; ++i) { - test_data[i] = i+1000; - } - - sparse_hash_set > shs; - dense_hash_set > dhs; - dhs.set_empty_key(-1); - - // Test max_size overflow - EXPECT_DEATH(dhs.insert(test_data.begin(), test_data.begin() + 11), - "exceed max_size"); - EXPECT_DEATH(shs.insert(test_data.begin(), test_data.begin() + 11), - "exceed max_size"); -} - -TEST(HashtableDeathTest, ResizeSizeTypeOverflow) { - // Test min-buckets overflow, when we want to resize too close to size_type - sparse_hash_set > shs; - dense_hash_set > dhs; - dhs.set_empty_key(-1); - - EXPECT_DEATH(dhs.resize(250), "overflows size_type"); // 9+250 > 256 - EXPECT_DEATH(shs.resize(250), "overflows size_type"); -} - -TEST(HashtableDeathTest, ResizeDeltaOverflow) { - static const int kMax = 256; - vector test_data(kMax); - for (int i = 0; i < kMax; ++i) { - test_data[i] = i+1000; - } - - sparse_hash_set > shs; - dense_hash_set > dhs; - dhs.set_empty_key(-1); - for (int i = 0; i < 9; i++) { - dhs.insert(i); - shs.insert(i); - } - EXPECT_DEATH(dhs.insert(test_data.begin(), test_data.begin() + 250), - "overflows size_type"); // 9+250 > 256 - EXPECT_DEATH(shs.insert(test_data.begin(), test_data.begin() + 250), - "overflows size_type"); -} - -// ------------------------------------------------------------------------ -// This informational "test" comes last so it's easy to see. -// Also, benchmarks. - -TYPED_TEST(HashtableAllTest, ClassSizes) { - std::cout << "sizeof(" << typeid(TypeParam).name() << "): " - << sizeof(this->ht_) << "\n"; -} - -} // unnamed namespace - -int main(int, char **) { - // All the work is done in the static constructors. If they don't - // die, the tests have all passed. - cout << "PASS\n"; - return 0; -} diff --git a/clipper/sparsehash-2.0.3/src/libc_allocator_with_realloc_test.cc b/clipper/sparsehash-2.0.3/src/libc_allocator_with_realloc_test.cc deleted file mode 100644 index 710efa3..0000000 --- a/clipper/sparsehash-2.0.3/src/libc_allocator_with_realloc_test.cc +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright (c) 2010, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- - -#include -#include -#include -#include -#include -#include -#include -#include "testutil.h" - -using std::cerr; -using std::cout; -using std::string; -using std::basic_string; -using std::char_traits; -using std::vector; -using GOOGLE_NAMESPACE::libc_allocator_with_realloc; - -#define arraysize(a) ( sizeof(a) / sizeof(*(a)) ) - -namespace { - -typedef libc_allocator_with_realloc int_alloc; -typedef int_alloc::rebind::other intp_alloc; - -// cstring allocates from libc_allocator_with_realloc. -typedef basic_string, - libc_allocator_with_realloc > cstring; -typedef vector > cstring_vector; - -TEST(LibcAllocatorWithReallocTest, Allocate) { - int_alloc alloc; - intp_alloc palloc; - - int** parray = palloc.allocate(1024); - for (int i = 0; i < 16; ++i) { - parray[i] = alloc.allocate(i * 1024 + 1); - } - for (int i = 0; i < 16; ++i) { - alloc.deallocate(parray[i], i * 1024 + 1); - } - palloc.deallocate(parray, 1024); - - int* p = alloc.allocate(4096); - p[0] = 1; - p[1023] = 2; - p[4095] = 3; - p = alloc.reallocate(p, 8192); - EXPECT_EQ(1, p[0]); - EXPECT_EQ(2, p[1023]); - EXPECT_EQ(3, p[4095]); - p = alloc.reallocate(p, 1024); - EXPECT_EQ(1, p[0]); - EXPECT_EQ(2, p[1023]); - alloc.deallocate(p, 1024); -} - -TEST(LibcAllocatorWithReallocTest, TestSTL) { - // Test strings copied from base/arena_unittest.cc - static const char* test_strings[] = { - "aback", "abaft", "abandon", "abandoned", "abandoning", - "abandonment", "abandons", "abase", "abased", "abasement", - "abasements", "abases", "abash", "abashed", "abashes", "abashing", - "abasing", "abate", "abated", "abatement", "abatements", "abater", - "abates", "abating", "abbe", "abbey", "abbeys", "abbot", "abbots", - "abbreviate", "abbreviated", "abbreviates", "abbreviating", - "abbreviation", "abbreviations", "abdomen", "abdomens", "abdominal", - "abduct", "abducted", "abduction", "abductions", "abductor", "abductors", - "abducts", "Abe", "abed", "Abel", "Abelian", "Abelson", "Aberdeen", - "Abernathy", "aberrant", "aberration", "aberrations", "abet", "abets", - "abetted", "abetter", "abetting", "abeyance", "abhor", "abhorred", - "abhorrent", "abhorrer", "abhorring", "abhors", "abide", "abided", - "abides", "abiding"}; - cstring_vector v; - for (size_t i = 0; i < arraysize(test_strings); ++i) { - v.push_back(test_strings[i]); - } - for (size_t i = arraysize(test_strings); i > 0; --i) { - EXPECT_EQ(cstring(test_strings[i-1]), v.back()); - v.pop_back(); - } -} - -} // namespace - -int main(int, char **) { - // All the work is done in the static constructors. If they don't - // die, the tests have all passed. - cout << "PASS\n"; - return 0; -} - diff --git a/clipper/sparsehash-2.0.3/src/simple_compat_test.cc b/clipper/sparsehash-2.0.3/src/simple_compat_test.cc deleted file mode 100644 index 37afcc0..0000000 --- a/clipper/sparsehash-2.0.3/src/simple_compat_test.cc +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// This tests mostly that we can #include the files correctly -// and have them work. It is like simple_test.cc but uses the -// compatibility #include directory (google/) rather than the -// canonical one (sparsehash/). This unittest purposefully does -// not #include ; it's meant to emulate what a 'regular -// install' of sparsehash would be able to see. - -#include -#include -#include -#include -#include -#include -#include - -#define CHECK_IFF(cond, when) do { \ - if (when) { \ - if (!(cond)) { \ - puts("ERROR: " #cond " failed when " #when " is true\n"); \ - exit(1); \ - } \ - } else { \ - if (cond) { \ - puts("ERROR: " #cond " succeeded when " #when " is false\n"); \ - exit(1); \ - } \ - } \ -} while (0) - -int main(int argc, char**) { - // Run with an argument to get verbose output - const bool verbose = argc > 1; - - google::sparse_hash_set sset; - google::sparse_hash_map smap; - google::dense_hash_set dset; - google::dense_hash_map dmap; - dset.set_empty_key(-1); - dmap.set_empty_key(-1); - - for (int i = 0; i < 100; i += 10) { // go by tens - sset.insert(i); - smap[i] = i+1; - dset.insert(i + 5); - dmap[i+5] = i+6; - } - - if (verbose) { - for (google::sparse_hash_set::const_iterator it = sset.begin(); - it != sset.end(); ++it) - printf("sset: %d\n", *it); - for (google::sparse_hash_map::const_iterator it = smap.begin(); - it != smap.end(); ++it) - printf("smap: %d -> %d\n", it->first, it->second); - for (google::dense_hash_set::const_iterator it = dset.begin(); - it != dset.end(); ++it) - printf("dset: %d\n", *it); - for (google::dense_hash_map::const_iterator it = dmap.begin(); - it != dmap.end(); ++it) - printf("dmap: %d -> %d\n", it->first, it->second); - } - - for (int i = 0; i < 100; i++) { - CHECK_IFF(sset.find(i) != sset.end(), (i % 10) == 0); - CHECK_IFF(smap.find(i) != smap.end(), (i % 10) == 0); - CHECK_IFF(smap.find(i) != smap.end() && smap.find(i)->second == i+1, - (i % 10) == 0); - CHECK_IFF(dset.find(i) != dset.end(), (i % 10) == 5); - CHECK_IFF(dmap.find(i) != dmap.end(), (i % 10) == 5); - CHECK_IFF(dmap.find(i) != dmap.end() && dmap.find(i)->second == i+1, - (i % 10) == 5); - } - printf("PASS\n"); - return 0; -} diff --git a/clipper/sparsehash-2.0.3/src/simple_test.cc b/clipper/sparsehash-2.0.3/src/simple_test.cc deleted file mode 100644 index c0a477c..0000000 --- a/clipper/sparsehash-2.0.3/src/simple_test.cc +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2007, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// This tests mostly that we can #include the files correctly -// and have them work. This unittest purposefully does not -// #include ; it's meant to emulate what a 'regular -// install' of sparsehash would be able to see. - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define CHECK_IFF(cond, when) do { \ - if (when) { \ - if (!(cond)) { \ - puts("ERROR: " #cond " failed when " #when " is true\n"); \ - exit(1); \ - } \ - } else { \ - if (cond) { \ - puts("ERROR: " #cond " succeeded when " #when " is false\n"); \ - exit(1); \ - } \ - } \ -} while (0) - -int main(int argc, char**) { - // Run with an argument to get verbose output - const bool verbose = argc > 1; - - google::sparse_hash_set sset; - google::sparse_hash_map smap; - google::dense_hash_set dset; - google::dense_hash_map dmap; - dset.set_empty_key(-1); - dmap.set_empty_key(-1); - - for (int i = 0; i < 100; i += 10) { // go by tens - sset.insert(i); - smap[i] = i+1; - dset.insert(i + 5); - dmap[i+5] = i+6; - } - - if (verbose) { - for (google::sparse_hash_set::const_iterator it = sset.begin(); - it != sset.end(); ++it) - printf("sset: %d\n", *it); - for (google::sparse_hash_map::const_iterator it = smap.begin(); - it != smap.end(); ++it) - printf("smap: %d -> %d\n", it->first, it->second); - for (google::dense_hash_set::const_iterator it = dset.begin(); - it != dset.end(); ++it) - printf("dset: %d\n", *it); - for (google::dense_hash_map::const_iterator it = dmap.begin(); - it != dmap.end(); ++it) - printf("dmap: %d -> %d\n", it->first, it->second); - } - - for (int i = 0; i < 100; i++) { - CHECK_IFF(sset.find(i) != sset.end(), (i % 10) == 0); - CHECK_IFF(smap.find(i) != smap.end(), (i % 10) == 0); - CHECK_IFF(smap.find(i) != smap.end() && smap.find(i)->second == i+1, - (i % 10) == 0); - CHECK_IFF(dset.find(i) != dset.end(), (i % 10) == 5); - CHECK_IFF(dmap.find(i) != dmap.end(), (i % 10) == 5); - CHECK_IFF(dmap.find(i) != dmap.end() && dmap.find(i)->second == i+1, - (i % 10) == 5); - } - printf("PASS\n"); - return 0; -} diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/dense_hash_map b/clipper/sparsehash-2.0.3/src/sparsehash/dense_hash_map deleted file mode 100644 index 05fd580..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/dense_hash_map +++ /dev/null @@ -1,369 +0,0 @@ -// Copyright (c) 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// ---- -// -// This is just a very thin wrapper over densehashtable.h, just -// like sgi stl's stl_hash_map is a very thin wrapper over -// stl_hashtable. The major thing we define is operator[], because -// we have a concept of a data_type which stl_hashtable doesn't -// (it only has a key and a value). -// -// NOTE: this is exactly like sparse_hash_map.h, with the word -// "sparse" replaced by "dense", except for the addition of -// set_empty_key(). -// -// YOU MUST CALL SET_EMPTY_KEY() IMMEDIATELY AFTER CONSTRUCTION. -// -// Otherwise your program will die in mysterious ways. (Note if you -// use the constructor that takes an InputIterator range, you pass in -// the empty key in the constructor, rather than after. As a result, -// this constructor differs from the standard STL version.) -// -// In other respects, we adhere mostly to the STL semantics for -// hash-map. One important exception is that insert() may invalidate -// iterators entirely -- STL semantics are that insert() may reorder -// iterators, but they all still refer to something valid in the -// hashtable. Not so for us. Likewise, insert() may invalidate -// pointers into the hashtable. (Whether insert invalidates iterators -// and pointers depends on whether it results in a hashtable resize). -// On the plus side, delete() doesn't invalidate iterators or pointers -// at all, or even change the ordering of elements. -// -// Here are a few "power user" tips: -// -// 1) set_deleted_key(): -// If you want to use erase() you *must* call set_deleted_key(), -// in addition to set_empty_key(), after construction. -// The deleted and empty keys must differ. -// -// 2) resize(0): -// When an item is deleted, its memory isn't freed right -// away. This allows you to iterate over a hashtable, -// and call erase(), without invalidating the iterator. -// To force the memory to be freed, call resize(0). -// For tr1 compatibility, this can also be called as rehash(0). -// -// 3) min_load_factor(0.0) -// Setting the minimum load factor to 0.0 guarantees that -// the hash table will never shrink. -// -// Roughly speaking: -// (1) dense_hash_map: fastest, uses the most memory unless entries are small -// (2) sparse_hash_map: slowest, uses the least memory -// (3) hash_map / unordered_map (STL): in the middle -// -// Typically I use sparse_hash_map when I care about space and/or when -// I need to save the hashtable on disk. I use hash_map otherwise. I -// don't personally use dense_hash_set ever; some people use it for -// small sets with lots of lookups. -// -// - dense_hash_map has, typically, about 78% memory overhead (if your -// data takes up X bytes, the hash_map uses .78X more bytes in overhead). -// - sparse_hash_map has about 4 bits overhead per entry. -// - sparse_hash_map can be 3-7 times slower than the others for lookup and, -// especially, inserts. See time_hash_map.cc for details. -// -// See /usr/(local/)?doc/sparsehash-*/dense_hash_map.html -// for information about how to use this class. - -#ifndef _DENSE_HASH_MAP_H_ -#define _DENSE_HASH_MAP_H_ - -#include -#include // needed by stl_alloc -#include // for equal_to<>, select1st<>, etc -#include // for alloc -#include // for pair<> -#include // IWYU pragma: export -#include -#include HASH_FUN_H // for hash<> -_START_GOOGLE_NAMESPACE_ - -template , // defined in sparseconfig.h - class EqualKey = std::equal_to, - class Alloc = libc_allocator_with_realloc > > -class dense_hash_map { - private: - // Apparently select1st is not stl-standard, so we define our own - struct SelectKey { - typedef const Key& result_type; - const Key& operator()(const std::pair& p) const { - return p.first; - } - }; - struct SetKey { - void operator()(std::pair* value, const Key& new_key) const { - *const_cast(&value->first) = new_key; - // It would be nice to clear the rest of value here as well, in - // case it's taking up a lot of memory. We do this by clearing - // the value. This assumes T has a zero-arg constructor! - value->second = T(); - } - }; - // For operator[]. - struct DefaultValue { - std::pair operator()(const Key& key) { - return std::make_pair(key, T()); - } - }; - - // The actual data - typedef dense_hashtable, Key, HashFcn, SelectKey, - SetKey, EqualKey, Alloc> ht; - ht rep; - - public: - typedef typename ht::key_type key_type; - typedef T data_type; - typedef T mapped_type; - typedef typename ht::value_type value_type; - typedef typename ht::hasher hasher; - typedef typename ht::key_equal key_equal; - typedef Alloc allocator_type; - - typedef typename ht::size_type size_type; - typedef typename ht::difference_type difference_type; - typedef typename ht::pointer pointer; - typedef typename ht::const_pointer const_pointer; - typedef typename ht::reference reference; - typedef typename ht::const_reference const_reference; - - typedef typename ht::iterator iterator; - typedef typename ht::const_iterator const_iterator; - typedef typename ht::local_iterator local_iterator; - typedef typename ht::const_local_iterator const_local_iterator; - - // Iterator functions - iterator begin() { return rep.begin(); } - iterator end() { return rep.end(); } - const_iterator begin() const { return rep.begin(); } - const_iterator end() const { return rep.end(); } - - - // These come from tr1's unordered_map. For us, a bucket has 0 or 1 elements. - local_iterator begin(size_type i) { return rep.begin(i); } - local_iterator end(size_type i) { return rep.end(i); } - const_local_iterator begin(size_type i) const { return rep.begin(i); } - const_local_iterator end(size_type i) const { return rep.end(i); } - - // Accessor functions - allocator_type get_allocator() const { return rep.get_allocator(); } - hasher hash_funct() const { return rep.hash_funct(); } - hasher hash_function() const { return hash_funct(); } - key_equal key_eq() const { return rep.key_eq(); } - - - // Constructors - explicit dense_hash_map(size_type expected_max_items_in_table = 0, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& alloc = allocator_type()) - : rep(expected_max_items_in_table, hf, eql, SelectKey(), SetKey(), alloc) { - } - - template - dense_hash_map(InputIterator f, InputIterator l, - const key_type& empty_key_val, - size_type expected_max_items_in_table = 0, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& alloc = allocator_type()) - : rep(expected_max_items_in_table, hf, eql, SelectKey(), SetKey(), alloc) { - set_empty_key(empty_key_val); - rep.insert(f, l); - } - // We use the default copy constructor - // We use the default operator=() - // We use the default destructor - - void clear() { rep.clear(); } - // This clears the hash map without resizing it down to the minimum - // bucket count, but rather keeps the number of buckets constant - void clear_no_resize() { rep.clear_no_resize(); } - void swap(dense_hash_map& hs) { rep.swap(hs.rep); } - - - // Functions concerning size - size_type size() const { return rep.size(); } - size_type max_size() const { return rep.max_size(); } - bool empty() const { return rep.empty(); } - size_type bucket_count() const { return rep.bucket_count(); } - size_type max_bucket_count() const { return rep.max_bucket_count(); } - - // These are tr1 methods. bucket() is the bucket the key is or would be in. - size_type bucket_size(size_type i) const { return rep.bucket_size(i); } - size_type bucket(const key_type& key) const { return rep.bucket(key); } - float load_factor() const { - return size() * 1.0f / bucket_count(); - } - float max_load_factor() const { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - return grow; - } - void max_load_factor(float new_grow) { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - rep.set_resizing_parameters(shrink, new_grow); - } - // These aren't tr1 methods but perhaps ought to be. - float min_load_factor() const { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - return shrink; - } - void min_load_factor(float new_shrink) { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - rep.set_resizing_parameters(new_shrink, grow); - } - // Deprecated; use min_load_factor() or max_load_factor() instead. - void set_resizing_parameters(float shrink, float grow) { - rep.set_resizing_parameters(shrink, grow); - } - - void resize(size_type hint) { rep.resize(hint); } - void rehash(size_type hint) { resize(hint); } // the tr1 name - - // Lookup routines - iterator find(const key_type& key) { return rep.find(key); } - const_iterator find(const key_type& key) const { return rep.find(key); } - - data_type& operator[](const key_type& key) { // This is our value-add! - // If key is in the hashtable, returns find(key)->second, - // otherwise returns insert(value_type(key, T()).first->second. - // Note it does not create an empty T unless the find fails. - return rep.template find_or_insert(key).second; - } - - size_type count(const key_type& key) const { return rep.count(key); } - - std::pair equal_range(const key_type& key) { - return rep.equal_range(key); - } - std::pair equal_range(const key_type& key) - const { - return rep.equal_range(key); - } - - - // Insertion routines - std::pair insert(const value_type& obj) { - return rep.insert(obj); - } - template void insert(InputIterator f, InputIterator l) { - rep.insert(f, l); - } - void insert(const_iterator f, const_iterator l) { - rep.insert(f, l); - } - // Required for std::insert_iterator; the passed-in iterator is ignored. - iterator insert(iterator, const value_type& obj) { - return insert(obj).first; - } - - // Deletion and empty routines - // THESE ARE NON-STANDARD! I make you specify an "impossible" key - // value to identify deleted and empty buckets. You can change the - // deleted key as time goes on, or get rid of it entirely to be insert-only. - void set_empty_key(const key_type& key) { // YOU MUST CALL THIS! - rep.set_empty_key(value_type(key, data_type())); // rep wants a value - } - key_type empty_key() const { - return rep.empty_key().first; // rep returns a value - } - - void set_deleted_key(const key_type& key) { rep.set_deleted_key(key); } - void clear_deleted_key() { rep.clear_deleted_key(); } - key_type deleted_key() const { return rep.deleted_key(); } - - // These are standard - size_type erase(const key_type& key) { return rep.erase(key); } - void erase(iterator it) { rep.erase(it); } - void erase(iterator f, iterator l) { rep.erase(f, l); } - - - // Comparison - bool operator==(const dense_hash_map& hs) const { return rep == hs.rep; } - bool operator!=(const dense_hash_map& hs) const { return rep != hs.rep; } - - - // I/O -- this is an add-on for writing hash map to disk - // - // For maximum flexibility, this does not assume a particular - // file type (though it will probably be a FILE *). We just pass - // the fp through to rep. - - // If your keys and values are simple enough, you can pass this - // serializer to serialize()/unserialize(). "Simple enough" means - // value_type is a POD type that contains no pointers. Note, - // however, we don't try to normalize endianness. - typedef typename ht::NopointerSerializer NopointerSerializer; - - // serializer: a class providing operator()(OUTPUT*, const value_type&) - // (writing value_type to OUTPUT). You can specify a - // NopointerSerializer object if appropriate (see above). - // fp: either a FILE*, OR an ostream*/subclass_of_ostream*, OR a - // pointer to a class providing size_t Write(const void*, size_t), - // which writes a buffer into a stream (which fp presumably - // owns) and returns the number of bytes successfully written. - // Note basic_ostream is not currently supported. - template - bool serialize(ValueSerializer serializer, OUTPUT* fp) { - return rep.serialize(serializer, fp); - } - - // serializer: a functor providing operator()(INPUT*, value_type*) - // (reading from INPUT and into value_type). You can specify a - // NopointerSerializer object if appropriate (see above). - // fp: either a FILE*, OR an istream*/subclass_of_istream*, OR a - // pointer to a class providing size_t Read(void*, size_t), - // which reads into a buffer from a stream (which fp presumably - // owns) and returns the number of bytes successfully read. - // Note basic_istream is not currently supported. - // NOTE: Since value_type is std::pair, ValueSerializer - // may need to do a const cast in order to fill in the key. - template - bool unserialize(ValueSerializer serializer, INPUT* fp) { - return rep.unserialize(serializer, fp); - } -}; - -// We need a global swap as well -template -inline void swap(dense_hash_map& hm1, - dense_hash_map& hm2) { - hm1.swap(hm2); -} - -_END_GOOGLE_NAMESPACE_ - -#endif /* _DENSE_HASH_MAP_H_ */ diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/dense_hash_set b/clipper/sparsehash-2.0.3/src/sparsehash/dense_hash_set deleted file mode 100644 index 050b15d..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/dense_hash_set +++ /dev/null @@ -1,338 +0,0 @@ -// Copyright (c) 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// This is just a very thin wrapper over densehashtable.h, just -// like sgi stl's stl_hash_set is a very thin wrapper over -// stl_hashtable. The major thing we define is operator[], because -// we have a concept of a data_type which stl_hashtable doesn't -// (it only has a key and a value). -// -// This is more different from dense_hash_map than you might think, -// because all iterators for sets are const (you obviously can't -// change the key, and for sets there is no value). -// -// NOTE: this is exactly like sparse_hash_set.h, with the word -// "sparse" replaced by "dense", except for the addition of -// set_empty_key(). -// -// YOU MUST CALL SET_EMPTY_KEY() IMMEDIATELY AFTER CONSTRUCTION. -// -// Otherwise your program will die in mysterious ways. (Note if you -// use the constructor that takes an InputIterator range, you pass in -// the empty key in the constructor, rather than after. As a result, -// this constructor differs from the standard STL version.) -// -// In other respects, we adhere mostly to the STL semantics for -// hash-map. One important exception is that insert() may invalidate -// iterators entirely -- STL semantics are that insert() may reorder -// iterators, but they all still refer to something valid in the -// hashtable. Not so for us. Likewise, insert() may invalidate -// pointers into the hashtable. (Whether insert invalidates iterators -// and pointers depends on whether it results in a hashtable resize). -// On the plus side, delete() doesn't invalidate iterators or pointers -// at all, or even change the ordering of elements. -// -// Here are a few "power user" tips: -// -// 1) set_deleted_key(): -// If you want to use erase() you must call set_deleted_key(), -// in addition to set_empty_key(), after construction. -// The deleted and empty keys must differ. -// -// 2) resize(0): -// When an item is deleted, its memory isn't freed right -// away. This allows you to iterate over a hashtable, -// and call erase(), without invalidating the iterator. -// To force the memory to be freed, call resize(0). -// For tr1 compatibility, this can also be called as rehash(0). -// -// 3) min_load_factor(0.0) -// Setting the minimum load factor to 0.0 guarantees that -// the hash table will never shrink. -// -// Roughly speaking: -// (1) dense_hash_set: fastest, uses the most memory unless entries are small -// (2) sparse_hash_set: slowest, uses the least memory -// (3) hash_set / unordered_set (STL): in the middle -// -// Typically I use sparse_hash_set when I care about space and/or when -// I need to save the hashtable on disk. I use hash_set otherwise. I -// don't personally use dense_hash_set ever; some people use it for -// small sets with lots of lookups. -// -// - dense_hash_set has, typically, about 78% memory overhead (if your -// data takes up X bytes, the hash_set uses .78X more bytes in overhead). -// - sparse_hash_set has about 4 bits overhead per entry. -// - sparse_hash_set can be 3-7 times slower than the others for lookup and, -// especially, inserts. See time_hash_map.cc for details. -// -// See /usr/(local/)?doc/sparsehash-*/dense_hash_set.html -// for information about how to use this class. - -#ifndef _DENSE_HASH_SET_H_ -#define _DENSE_HASH_SET_H_ - -#include -#include // needed by stl_alloc -#include // for equal_to<>, select1st<>, etc -#include // for alloc -#include // for pair<> -#include // IWYU pragma: export -#include -#include HASH_FUN_H // for hash<> -_START_GOOGLE_NAMESPACE_ - -template , // defined in sparseconfig.h - class EqualKey = std::equal_to, - class Alloc = libc_allocator_with_realloc > -class dense_hash_set { - private: - // Apparently identity is not stl-standard, so we define our own - struct Identity { - typedef const Value& result_type; - const Value& operator()(const Value& v) const { return v; } - }; - struct SetKey { - void operator()(Value* value, const Value& new_key) const { - *value = new_key; - } - }; - - // The actual data - typedef dense_hashtable ht; - ht rep; - - public: - typedef typename ht::key_type key_type; - typedef typename ht::value_type value_type; - typedef typename ht::hasher hasher; - typedef typename ht::key_equal key_equal; - typedef Alloc allocator_type; - - typedef typename ht::size_type size_type; - typedef typename ht::difference_type difference_type; - typedef typename ht::const_pointer pointer; - typedef typename ht::const_pointer const_pointer; - typedef typename ht::const_reference reference; - typedef typename ht::const_reference const_reference; - - typedef typename ht::const_iterator iterator; - typedef typename ht::const_iterator const_iterator; - typedef typename ht::const_local_iterator local_iterator; - typedef typename ht::const_local_iterator const_local_iterator; - - - // Iterator functions -- recall all iterators are const - iterator begin() const { return rep.begin(); } - iterator end() const { return rep.end(); } - - // These come from tr1's unordered_set. For us, a bucket has 0 or 1 elements. - local_iterator begin(size_type i) const { return rep.begin(i); } - local_iterator end(size_type i) const { return rep.end(i); } - - - // Accessor functions - allocator_type get_allocator() const { return rep.get_allocator(); } - hasher hash_funct() const { return rep.hash_funct(); } - hasher hash_function() const { return hash_funct(); } // tr1 name - key_equal key_eq() const { return rep.key_eq(); } - - - // Constructors - explicit dense_hash_set(size_type expected_max_items_in_table = 0, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& alloc = allocator_type()) - : rep(expected_max_items_in_table, hf, eql, Identity(), SetKey(), alloc) { - } - - template - dense_hash_set(InputIterator f, InputIterator l, - const key_type& empty_key_val, - size_type expected_max_items_in_table = 0, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& alloc = allocator_type()) - : rep(expected_max_items_in_table, hf, eql, Identity(), SetKey(), alloc) { - set_empty_key(empty_key_val); - rep.insert(f, l); - } - // We use the default copy constructor - // We use the default operator=() - // We use the default destructor - - void clear() { rep.clear(); } - // This clears the hash set without resizing it down to the minimum - // bucket count, but rather keeps the number of buckets constant - void clear_no_resize() { rep.clear_no_resize(); } - void swap(dense_hash_set& hs) { rep.swap(hs.rep); } - - - // Functions concerning size - size_type size() const { return rep.size(); } - size_type max_size() const { return rep.max_size(); } - bool empty() const { return rep.empty(); } - size_type bucket_count() const { return rep.bucket_count(); } - size_type max_bucket_count() const { return rep.max_bucket_count(); } - - // These are tr1 methods. bucket() is the bucket the key is or would be in. - size_type bucket_size(size_type i) const { return rep.bucket_size(i); } - size_type bucket(const key_type& key) const { return rep.bucket(key); } - float load_factor() const { - return size() * 1.0f / bucket_count(); - } - float max_load_factor() const { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - return grow; - } - void max_load_factor(float new_grow) { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - rep.set_resizing_parameters(shrink, new_grow); - } - // These aren't tr1 methods but perhaps ought to be. - float min_load_factor() const { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - return shrink; - } - void min_load_factor(float new_shrink) { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - rep.set_resizing_parameters(new_shrink, grow); - } - // Deprecated; use min_load_factor() or max_load_factor() instead. - void set_resizing_parameters(float shrink, float grow) { - rep.set_resizing_parameters(shrink, grow); - } - - void resize(size_type hint) { rep.resize(hint); } - void rehash(size_type hint) { resize(hint); } // the tr1 name - - // Lookup routines - iterator find(const key_type& key) const { return rep.find(key); } - - size_type count(const key_type& key) const { return rep.count(key); } - - std::pair equal_range(const key_type& key) const { - return rep.equal_range(key); - } - - - // Insertion routines - std::pair insert(const value_type& obj) { - std::pair p = rep.insert(obj); - return std::pair(p.first, p.second); // const to non-const - } - template void insert(InputIterator f, InputIterator l) { - rep.insert(f, l); - } - void insert(const_iterator f, const_iterator l) { - rep.insert(f, l); - } - // Required for std::insert_iterator; the passed-in iterator is ignored. - iterator insert(iterator, const value_type& obj) { - return insert(obj).first; - } - - // Deletion and empty routines - // THESE ARE NON-STANDARD! I make you specify an "impossible" key - // value to identify deleted and empty buckets. You can change the - // deleted key as time goes on, or get rid of it entirely to be insert-only. - void set_empty_key(const key_type& key) { rep.set_empty_key(key); } - key_type empty_key() const { return rep.empty_key(); } - - void set_deleted_key(const key_type& key) { rep.set_deleted_key(key); } - void clear_deleted_key() { rep.clear_deleted_key(); } - key_type deleted_key() const { return rep.deleted_key(); } - - // These are standard - size_type erase(const key_type& key) { return rep.erase(key); } - void erase(iterator it) { rep.erase(it); } - void erase(iterator f, iterator l) { rep.erase(f, l); } - - - // Comparison - bool operator==(const dense_hash_set& hs) const { return rep == hs.rep; } - bool operator!=(const dense_hash_set& hs) const { return rep != hs.rep; } - - - // I/O -- this is an add-on for writing metainformation to disk - // - // For maximum flexibility, this does not assume a particular - // file type (though it will probably be a FILE *). We just pass - // the fp through to rep. - - // If your keys and values are simple enough, you can pass this - // serializer to serialize()/unserialize(). "Simple enough" means - // value_type is a POD type that contains no pointers. Note, - // however, we don't try to normalize endianness. - typedef typename ht::NopointerSerializer NopointerSerializer; - - // serializer: a class providing operator()(OUTPUT*, const value_type&) - // (writing value_type to OUTPUT). You can specify a - // NopointerSerializer object if appropriate (see above). - // fp: either a FILE*, OR an ostream*/subclass_of_ostream*, OR a - // pointer to a class providing size_t Write(const void*, size_t), - // which writes a buffer into a stream (which fp presumably - // owns) and returns the number of bytes successfully written. - // Note basic_ostream is not currently supported. - template - bool serialize(ValueSerializer serializer, OUTPUT* fp) { - return rep.serialize(serializer, fp); - } - - // serializer: a functor providing operator()(INPUT*, value_type*) - // (reading from INPUT and into value_type). You can specify a - // NopointerSerializer object if appropriate (see above). - // fp: either a FILE*, OR an istream*/subclass_of_istream*, OR a - // pointer to a class providing size_t Read(void*, size_t), - // which reads into a buffer from a stream (which fp presumably - // owns) and returns the number of bytes successfully read. - // Note basic_istream is not currently supported. - template - bool unserialize(ValueSerializer serializer, INPUT* fp) { - return rep.unserialize(serializer, fp); - } -}; - -template -inline void swap(dense_hash_set& hs1, - dense_hash_set& hs2) { - hs1.swap(hs2); -} - -_END_GOOGLE_NAMESPACE_ - -#endif /* _DENSE_HASH_SET_H_ */ diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/internal/densehashtable.h b/clipper/sparsehash-2.0.3/src/sparsehash/internal/densehashtable.h deleted file mode 100644 index 1f0c943..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/internal/densehashtable.h +++ /dev/null @@ -1,1319 +0,0 @@ -// Copyright (c) 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// A dense hashtable is a particular implementation of -// a hashtable: one that is meant to minimize memory allocation. -// It does this by using an array to store all the data. We -// steal a value from the key space to indicate "empty" array -// elements (ie indices where no item lives) and another to indicate -// "deleted" elements. -// -// (Note it is possible to change the value of the delete key -// on the fly; you can even remove it, though after that point -// the hashtable is insert_only until you set it again. The empty -// value however can't be changed.) -// -// To minimize allocation and pointer overhead, we use internal -// probing, in which the hashtable is a single table, and collisions -// are resolved by trying to insert again in another bucket. The -// most cache-efficient internal probing schemes are linear probing -// (which suffers, alas, from clumping) and quadratic probing, which -// is what we implement by default. -// -// Type requirements: value_type is required to be Copy Constructible -// and Default Constructible. It is not required to be (and commonly -// isn't) Assignable. -// -// You probably shouldn't use this code directly. Use dense_hash_map<> -// or dense_hash_set<> instead. - -// You can change the following below: -// HT_OCCUPANCY_PCT -- how full before we double size -// HT_EMPTY_PCT -- how empty before we halve size -// HT_MIN_BUCKETS -- default smallest bucket size -// -// You can also change enlarge_factor (which defaults to -// HT_OCCUPANCY_PCT), and shrink_factor (which defaults to -// HT_EMPTY_PCT) with set_resizing_parameters(). -// -// How to decide what values to use? -// shrink_factor's default of .4 * OCCUPANCY_PCT, is probably good. -// HT_MIN_BUCKETS is probably unnecessary since you can specify -// (indirectly) the starting number of buckets at construct-time. -// For enlarge_factor, you can use this chart to try to trade-off -// expected lookup time to the space taken up. By default, this -// code uses quadratic probing, though you can change it to linear -// via JUMP_ below if you really want to. -// -// From http://www.augustana.ca/~mohrj/courses/1999.fall/csc210/lecture_notes/hashing.html -// NUMBER OF PROBES / LOOKUP Successful Unsuccessful -// Quadratic collision resolution 1 - ln(1-L) - L/2 1/(1-L) - L - ln(1-L) -// Linear collision resolution [1+1/(1-L)]/2 [1+1/(1-L)2]/2 -// -// -- enlarge_factor -- 0.10 0.50 0.60 0.75 0.80 0.90 0.99 -// QUADRATIC COLLISION RES. -// probes/successful lookup 1.05 1.44 1.62 2.01 2.21 2.85 5.11 -// probes/unsuccessful lookup 1.11 2.19 2.82 4.64 5.81 11.4 103.6 -// LINEAR COLLISION RES. -// probes/successful lookup 1.06 1.5 1.75 2.5 3.0 5.5 50.5 -// probes/unsuccessful lookup 1.12 2.5 3.6 8.5 13.0 50.0 5000.0 - -#ifndef _DENSEHASHTABLE_H_ -#define _DENSEHASHTABLE_H_ - -#include -#include -#include // for FILE, fwrite, fread -#include // For swap(), eg -#include // For iterator tags -#include // for numeric_limits -#include // For uninitialized_fill -#include // for pair -#include -#include -#include -#include // For length_error - -_START_GOOGLE_NAMESPACE_ - -namespace base { // just to make google->opensource transition easier -using GOOGLE_NAMESPACE::true_type; -using GOOGLE_NAMESPACE::false_type; -using GOOGLE_NAMESPACE::integral_constant; -using GOOGLE_NAMESPACE::is_same; -using GOOGLE_NAMESPACE::remove_const; -} - -// The probing method -// Linear probing -// #define JUMP_(key, num_probes) ( 1 ) -// Quadratic probing -#define JUMP_(key, num_probes) ( num_probes ) - -// Hashtable class, used to implement the hashed associative containers -// hash_set and hash_map. - -// Value: what is stored in the table (each bucket is a Value). -// Key: something in a 1-to-1 correspondence to a Value, that can be used -// to search for a Value in the table (find() takes a Key). -// HashFcn: Takes a Key and returns an integer, the more unique the better. -// ExtractKey: given a Value, returns the unique Key associated with it. -// Must inherit from unary_function, or at least have a -// result_type enum indicating the return type of operator(). -// SetKey: given a Value* and a Key, modifies the value such that -// ExtractKey(value) == key. We guarantee this is only called -// with key == deleted_key or key == empty_key. -// EqualKey: Given two Keys, says whether they are the same (that is, -// if they are both associated with the same Value). -// Alloc: STL allocator to use to allocate memory. - -template -class dense_hashtable; - -template -struct dense_hashtable_iterator; - -template -struct dense_hashtable_const_iterator; - -// We're just an array, but we need to skip over empty and deleted elements -template -struct dense_hashtable_iterator { - private: - typedef typename A::template rebind::other value_alloc_type; - - public: - typedef dense_hashtable_iterator iterator; - typedef dense_hashtable_const_iterator const_iterator; - - typedef std::forward_iterator_tag iterator_category; // very little defined! - typedef V value_type; - typedef typename value_alloc_type::difference_type difference_type; - typedef typename value_alloc_type::size_type size_type; - typedef typename value_alloc_type::reference reference; - typedef typename value_alloc_type::pointer pointer; - - // "Real" constructor and default constructor - dense_hashtable_iterator(const dense_hashtable *h, - pointer it, pointer it_end, bool advance) - : ht(h), pos(it), end(it_end) { - if (advance) advance_past_empty_and_deleted(); - } - dense_hashtable_iterator() { } - // The default destructor is fine; we don't define one - // The default operator= is fine; we don't define one - - // Happy dereferencer - reference operator*() const { return *pos; } - pointer operator->() const { return &(operator*()); } - - // Arithmetic. The only hard part is making sure that - // we're not on an empty or marked-deleted array element - void advance_past_empty_and_deleted() { - while ( pos != end && (ht->test_empty(*this) || ht->test_deleted(*this)) ) - ++pos; - } - iterator& operator++() { - assert(pos != end); ++pos; advance_past_empty_and_deleted(); return *this; - } - iterator operator++(int) { iterator tmp(*this); ++*this; return tmp; } - - // Comparison. - bool operator==(const iterator& it) const { return pos == it.pos; } - bool operator!=(const iterator& it) const { return pos != it.pos; } - - - // The actual data - const dense_hashtable *ht; - pointer pos, end; -}; - - -// Now do it all again, but with const-ness! -template -struct dense_hashtable_const_iterator { - private: - typedef typename A::template rebind::other value_alloc_type; - - public: - typedef dense_hashtable_iterator iterator; - typedef dense_hashtable_const_iterator const_iterator; - - typedef std::forward_iterator_tag iterator_category; // very little defined! - typedef V value_type; - typedef typename value_alloc_type::difference_type difference_type; - typedef typename value_alloc_type::size_type size_type; - typedef typename value_alloc_type::const_reference reference; - typedef typename value_alloc_type::const_pointer pointer; - - // "Real" constructor and default constructor - dense_hashtable_const_iterator( - const dense_hashtable *h, - pointer it, pointer it_end, bool advance) - : ht(h), pos(it), end(it_end) { - if (advance) advance_past_empty_and_deleted(); - } - dense_hashtable_const_iterator() - : ht(NULL), pos(pointer()), end(pointer()) { } - // This lets us convert regular iterators to const iterators - dense_hashtable_const_iterator(const iterator &it) - : ht(it.ht), pos(it.pos), end(it.end) { } - // The default destructor is fine; we don't define one - // The default operator= is fine; we don't define one - - // Happy dereferencer - reference operator*() const { return *pos; } - pointer operator->() const { return &(operator*()); } - - // Arithmetic. The only hard part is making sure that - // we're not on an empty or marked-deleted array element - void advance_past_empty_and_deleted() { - while ( pos != end && (ht->test_empty(*this) || ht->test_deleted(*this)) ) - ++pos; - } - const_iterator& operator++() { - assert(pos != end); ++pos; advance_past_empty_and_deleted(); return *this; - } - const_iterator operator++(int) { const_iterator tmp(*this); ++*this; return tmp; } - - // Comparison. - bool operator==(const const_iterator& it) const { return pos == it.pos; } - bool operator!=(const const_iterator& it) const { return pos != it.pos; } - - - // The actual data - const dense_hashtable *ht; - pointer pos, end; -}; - -template -class dense_hashtable { - private: - typedef typename Alloc::template rebind::other value_alloc_type; - - public: - typedef Key key_type; - typedef Value value_type; - typedef HashFcn hasher; - typedef EqualKey key_equal; - typedef Alloc allocator_type; - - typedef typename value_alloc_type::size_type size_type; - typedef typename value_alloc_type::difference_type difference_type; - typedef typename value_alloc_type::reference reference; - typedef typename value_alloc_type::const_reference const_reference; - typedef typename value_alloc_type::pointer pointer; - typedef typename value_alloc_type::const_pointer const_pointer; - typedef dense_hashtable_iterator - iterator; - - typedef dense_hashtable_const_iterator - const_iterator; - - // These come from tr1. For us they're the same as regular iterators. - typedef iterator local_iterator; - typedef const_iterator const_local_iterator; - - // How full we let the table get before we resize, by default. - // Knuth says .8 is good -- higher causes us to probe too much, - // though it saves memory. - static const int HT_OCCUPANCY_PCT; // defined at the bottom of this file - - // How empty we let the table get before we resize lower, by default. - // (0.0 means never resize lower.) - // It should be less than OCCUPANCY_PCT / 2 or we thrash resizing - static const int HT_EMPTY_PCT; // defined at the bottom of this file - - // Minimum size we're willing to let hashtables be. - // Must be a power of two, and at least 4. - // Note, however, that for a given hashtable, the initial size is a - // function of the first constructor arg, and may be >HT_MIN_BUCKETS. - static const size_type HT_MIN_BUCKETS = 4; - - // By default, if you don't specify a hashtable size at - // construction-time, we use this size. Must be a power of two, and - // at least HT_MIN_BUCKETS. - static const size_type HT_DEFAULT_STARTING_BUCKETS = 32; - - // ITERATOR FUNCTIONS - iterator begin() { return iterator(this, table, - table + num_buckets, true); } - iterator end() { return iterator(this, table + num_buckets, - table + num_buckets, true); } - const_iterator begin() const { return const_iterator(this, table, - table+num_buckets,true);} - const_iterator end() const { return const_iterator(this, table + num_buckets, - table+num_buckets,true);} - - // These come from tr1 unordered_map. They iterate over 'bucket' n. - // We'll just consider bucket n to be the n-th element of the table. - local_iterator begin(size_type i) { - return local_iterator(this, table + i, table + i+1, false); - } - local_iterator end(size_type i) { - local_iterator it = begin(i); - if (!test_empty(i) && !test_deleted(i)) - ++it; - return it; - } - const_local_iterator begin(size_type i) const { - return const_local_iterator(this, table + i, table + i+1, false); - } - const_local_iterator end(size_type i) const { - const_local_iterator it = begin(i); - if (!test_empty(i) && !test_deleted(i)) - ++it; - return it; - } - - // ACCESSOR FUNCTIONS for the things we templatize on, basically - hasher hash_funct() const { return settings; } - key_equal key_eq() const { return key_info; } - allocator_type get_allocator() const { - return allocator_type(val_info); - } - - // Accessor function for statistics gathering. - int num_table_copies() const { return settings.num_ht_copies(); } - - private: - // Annoyingly, we can't copy values around, because they might have - // const components (they're probably pair). We use - // explicit destructor invocation and placement new to get around - // this. Arg. - void set_value(pointer dst, const_reference src) { - dst->~value_type(); // delete the old value, if any - new(dst) value_type(src); - } - - void destroy_buckets(size_type first, size_type last) { - for ( ; first != last; ++first) - table[first].~value_type(); - } - - // DELETE HELPER FUNCTIONS - // This lets the user describe a key that will indicate deleted - // table entries. This key should be an "impossible" entry -- - // if you try to insert it for real, you won't be able to retrieve it! - // (NB: while you pass in an entire value, only the key part is looked - // at. This is just because I don't know how to assign just a key.) - private: - void squash_deleted() { // gets rid of any deleted entries we have - if ( num_deleted ) { // get rid of deleted before writing - dense_hashtable tmp(*this); // copying will get rid of deleted - swap(tmp); // now we are tmp - } - assert(num_deleted == 0); - } - - // Test if the given key is the deleted indicator. Requires - // num_deleted > 0, for correctness of read(), and because that - // guarantees that key_info.delkey is valid. - bool test_deleted_key(const key_type& key) const { - assert(num_deleted > 0); - return equals(key_info.delkey, key); - } - - public: - void set_deleted_key(const key_type &key) { - // the empty indicator (if specified) and the deleted indicator - // must be different - assert((!settings.use_empty() || !equals(key, get_key(val_info.emptyval))) - && "Passed the empty-key to set_deleted_key"); - // It's only safe to change what "deleted" means if we purge deleted guys - squash_deleted(); - settings.set_use_deleted(true); - key_info.delkey = key; - } - void clear_deleted_key() { - squash_deleted(); - settings.set_use_deleted(false); - } - key_type deleted_key() const { - assert(settings.use_deleted() - && "Must set deleted key before calling deleted_key"); - return key_info.delkey; - } - - // These are public so the iterators can use them - // True if the item at position bucknum is "deleted" marker - bool test_deleted(size_type bucknum) const { - // Invariant: !use_deleted() implies num_deleted is 0. - assert(settings.use_deleted() || num_deleted == 0); - return num_deleted > 0 && test_deleted_key(get_key(table[bucknum])); - } - bool test_deleted(const iterator &it) const { - // Invariant: !use_deleted() implies num_deleted is 0. - assert(settings.use_deleted() || num_deleted == 0); - return num_deleted > 0 && test_deleted_key(get_key(*it)); - } - bool test_deleted(const const_iterator &it) const { - // Invariant: !use_deleted() implies num_deleted is 0. - assert(settings.use_deleted() || num_deleted == 0); - return num_deleted > 0 && test_deleted_key(get_key(*it)); - } - - private: - void check_use_deleted(const char* caller) { - (void)caller; // could log it if the assert failed - assert(settings.use_deleted()); - } - - // Set it so test_deleted is true. true if object didn't used to be deleted. - bool set_deleted(iterator &it) { - check_use_deleted("set_deleted()"); - bool retval = !test_deleted(it); - // &* converts from iterator to value-type. - set_key(&(*it), key_info.delkey); - return retval; - } - // Set it so test_deleted is false. true if object used to be deleted. - bool clear_deleted(iterator &it) { - check_use_deleted("clear_deleted()"); - // Happens automatically when we assign something else in its place. - return test_deleted(it); - } - - // We also allow to set/clear the deleted bit on a const iterator. - // We allow a const_iterator for the same reason you can delete a - // const pointer: it's convenient, and semantically you can't use - // 'it' after it's been deleted anyway, so its const-ness doesn't - // really matter. - bool set_deleted(const_iterator &it) { - check_use_deleted("set_deleted()"); - bool retval = !test_deleted(it); - set_key(const_cast(&(*it)), key_info.delkey); - return retval; - } - // Set it so test_deleted is false. true if object used to be deleted. - bool clear_deleted(const_iterator &it) { - check_use_deleted("clear_deleted()"); - return test_deleted(it); - } - - // EMPTY HELPER FUNCTIONS - // This lets the user describe a key that will indicate empty (unused) - // table entries. This key should be an "impossible" entry -- - // if you try to insert it for real, you won't be able to retrieve it! - // (NB: while you pass in an entire value, only the key part is looked - // at. This is just because I don't know how to assign just a key.) - public: - // These are public so the iterators can use them - // True if the item at position bucknum is "empty" marker - bool test_empty(size_type bucknum) const { - assert(settings.use_empty()); // we always need to know what's empty! - return equals(get_key(val_info.emptyval), get_key(table[bucknum])); - } - bool test_empty(const iterator &it) const { - assert(settings.use_empty()); // we always need to know what's empty! - return equals(get_key(val_info.emptyval), get_key(*it)); - } - bool test_empty(const const_iterator &it) const { - assert(settings.use_empty()); // we always need to know what's empty! - return equals(get_key(val_info.emptyval), get_key(*it)); - } - - private: - void fill_range_with_empty(pointer table_start, pointer table_end) { - std::uninitialized_fill(table_start, table_end, val_info.emptyval); - } - - public: - // TODO(csilvers): change all callers of this to pass in a key instead, - // and take a const key_type instead of const value_type. - void set_empty_key(const_reference val) { - // Once you set the empty key, you can't change it - assert(!settings.use_empty() && "Calling set_empty_key multiple times"); - // The deleted indicator (if specified) and the empty indicator - // must be different. - assert((!settings.use_deleted() || !equals(get_key(val), key_info.delkey)) - && "Setting the empty key the same as the deleted key"); - settings.set_use_empty(true); - set_value(&val_info.emptyval, val); - - assert(!table); // must set before first use - // num_buckets was set in constructor even though table was NULL - table = val_info.allocate(num_buckets); - assert(table); - fill_range_with_empty(table, table + num_buckets); - } - // TODO(user): return a key_type rather than a value_type - value_type empty_key() const { - assert(settings.use_empty()); - return val_info.emptyval; - } - - // FUNCTIONS CONCERNING SIZE - public: - size_type size() const { return num_elements - num_deleted; } - size_type max_size() const { return val_info.max_size(); } - bool empty() const { return size() == 0; } - size_type bucket_count() const { return num_buckets; } - size_type max_bucket_count() const { return max_size(); } - size_type nonempty_bucket_count() const { return num_elements; } - // These are tr1 methods. Their idea of 'bucket' doesn't map well to - // what we do. We just say every bucket has 0 or 1 items in it. - size_type bucket_size(size_type i) const { - return begin(i) == end(i) ? 0 : 1; - } - - private: - // Because of the above, size_type(-1) is never legal; use it for errors - static const size_type ILLEGAL_BUCKET = size_type(-1); - - // Used after a string of deletes. Returns true if we actually shrunk. - // TODO(csilvers): take a delta so we can take into account inserts - // done after shrinking. Maybe make part of the Settings class? - bool maybe_shrink() { - assert(num_elements >= num_deleted); - assert((bucket_count() & (bucket_count()-1)) == 0); // is a power of two - assert(bucket_count() >= HT_MIN_BUCKETS); - bool retval = false; - - // If you construct a hashtable with < HT_DEFAULT_STARTING_BUCKETS, - // we'll never shrink until you get relatively big, and we'll never - // shrink below HT_DEFAULT_STARTING_BUCKETS. Otherwise, something - // like "dense_hash_set x; x.insert(4); x.erase(4);" will - // shrink us down to HT_MIN_BUCKETS buckets, which is too small. - const size_type num_remain = num_elements - num_deleted; - const size_type shrink_threshold = settings.shrink_threshold(); - if (shrink_threshold > 0 && num_remain < shrink_threshold && - bucket_count() > HT_DEFAULT_STARTING_BUCKETS) { - const float shrink_factor = settings.shrink_factor(); - size_type sz = bucket_count() / 2; // find how much we should shrink - while (sz > HT_DEFAULT_STARTING_BUCKETS && - num_remain < sz * shrink_factor) { - sz /= 2; // stay a power of 2 - } - dense_hashtable tmp(*this, sz); // Do the actual resizing - swap(tmp); // now we are tmp - retval = true; - } - settings.set_consider_shrink(false); // because we just considered it - return retval; - } - - // We'll let you resize a hashtable -- though this makes us copy all! - // When you resize, you say, "make it big enough for this many more elements" - // Returns true if we actually resized, false if size was already ok. - bool resize_delta(size_type delta) { - bool did_resize = false; - if ( settings.consider_shrink() ) { // see if lots of deletes happened - if ( maybe_shrink() ) - did_resize = true; - } - if (num_elements >= - (std::numeric_limits::max)() - delta) { - throw std::length_error("resize overflow"); - } - if ( bucket_count() >= HT_MIN_BUCKETS && - (num_elements + delta) <= settings.enlarge_threshold() ) - return did_resize; // we're ok as we are - - // Sometimes, we need to resize just to get rid of all the - // "deleted" buckets that are clogging up the hashtable. So when - // deciding whether to resize, count the deleted buckets (which - // are currently taking up room). But later, when we decide what - // size to resize to, *don't* count deleted buckets, since they - // get discarded during the resize. - const size_type needed_size = settings.min_buckets(num_elements + delta, 0); - if ( needed_size <= bucket_count() ) // we have enough buckets - return did_resize; - - size_type resize_to = - settings.min_buckets(num_elements - num_deleted + delta, bucket_count()); - - if (resize_to < needed_size && // may double resize_to - resize_to < (std::numeric_limits::max)() / 2) { - // This situation means that we have enough deleted elements, - // that once we purge them, we won't actually have needed to - // grow. But we may want to grow anyway: if we just purge one - // element, say, we'll have to grow anyway next time we - // insert. Might as well grow now, since we're already going - // through the trouble of copying (in order to purge the - // deleted elements). - const size_type target = - static_cast(settings.shrink_size(resize_to*2)); - if (num_elements - num_deleted + delta >= target) { - // Good, we won't be below the shrink threshhold even if we double. - resize_to *= 2; - } - } - dense_hashtable tmp(*this, resize_to); - swap(tmp); // now we are tmp - return true; - } - - // We require table be not-NULL and empty before calling this. - void resize_table(size_type /*old_size*/, size_type new_size, - base::true_type) { - table = val_info.realloc_or_die(table, new_size); - } - - void resize_table(size_type old_size, size_type new_size, base::false_type) { - val_info.deallocate(table, old_size); - table = val_info.allocate(new_size); - } - - // Used to actually do the rehashing when we grow/shrink a hashtable - void copy_from(const dense_hashtable &ht, size_type min_buckets_wanted) { - clear_to_size(settings.min_buckets(ht.size(), min_buckets_wanted)); - - // We use a normal iterator to get non-deleted bcks from ht - // We could use insert() here, but since we know there are - // no duplicates and no deleted items, we can be more efficient - assert((bucket_count() & (bucket_count()-1)) == 0); // a power of two - for ( const_iterator it = ht.begin(); it != ht.end(); ++it ) { - size_type num_probes = 0; // how many times we've probed - size_type bucknum; - const size_type bucket_count_minus_one = bucket_count() - 1; - for (bucknum = hash(get_key(*it)) & bucket_count_minus_one; - !test_empty(bucknum); // not empty - bucknum = (bucknum + JUMP_(key, num_probes)) & bucket_count_minus_one) { - ++num_probes; - assert(num_probes < bucket_count() - && "Hashtable is full: an error in key_equal<> or hash<>"); - } - set_value(&table[bucknum], *it); // copies the value to here - num_elements++; - } - settings.inc_num_ht_copies(); - } - - // Required by the spec for hashed associative container - public: - // Though the docs say this should be num_buckets, I think it's much - // more useful as num_elements. As a special feature, calling with - // req_elements==0 will cause us to shrink if we can, saving space. - void resize(size_type req_elements) { // resize to this or larger - if ( settings.consider_shrink() || req_elements == 0 ) - maybe_shrink(); - if ( req_elements > num_elements ) - resize_delta(req_elements - num_elements); - } - - // Get and change the value of shrink_factor and enlarge_factor. The - // description at the beginning of this file explains how to choose - // the values. Setting the shrink parameter to 0.0 ensures that the - // table never shrinks. - void get_resizing_parameters(float* shrink, float* grow) const { - *shrink = settings.shrink_factor(); - *grow = settings.enlarge_factor(); - } - void set_resizing_parameters(float shrink, float grow) { - settings.set_resizing_parameters(shrink, grow); - settings.reset_thresholds(bucket_count()); - } - - // CONSTRUCTORS -- as required by the specs, we take a size, - // but also let you specify a hashfunction, key comparator, - // and key extractor. We also define a copy constructor and =. - // DESTRUCTOR -- needs to free the table - explicit dense_hashtable(size_type expected_max_items_in_table = 0, - const HashFcn& hf = HashFcn(), - const EqualKey& eql = EqualKey(), - const ExtractKey& ext = ExtractKey(), - const SetKey& set = SetKey(), - const Alloc& alloc = Alloc()) - : settings(hf), - key_info(ext, set, eql), - num_deleted(0), - num_elements(0), - num_buckets(expected_max_items_in_table == 0 - ? HT_DEFAULT_STARTING_BUCKETS - : settings.min_buckets(expected_max_items_in_table, 0)), - val_info(alloc_impl(alloc)), - table(NULL) { - // table is NULL until emptyval is set. However, we set num_buckets - // here so we know how much space to allocate once emptyval is set - settings.reset_thresholds(bucket_count()); - } - - // As a convenience for resize(), we allow an optional second argument - // which lets you make this new hashtable a different size than ht - dense_hashtable(const dense_hashtable& ht, - size_type min_buckets_wanted = HT_DEFAULT_STARTING_BUCKETS) - : settings(ht.settings), - key_info(ht.key_info), - num_deleted(0), - num_elements(0), - num_buckets(0), - val_info(ht.val_info), - table(NULL) { - if (!ht.settings.use_empty()) { - // If use_empty isn't set, copy_from will crash, so we do our own copying. - assert(ht.empty()); - num_buckets = settings.min_buckets(ht.size(), min_buckets_wanted); - settings.reset_thresholds(bucket_count()); - return; - } - settings.reset_thresholds(bucket_count()); - copy_from(ht, min_buckets_wanted); // copy_from() ignores deleted entries - } - - dense_hashtable& operator= (const dense_hashtable& ht) { - if (&ht == this) return *this; // don't copy onto ourselves - if (!ht.settings.use_empty()) { - assert(ht.empty()); - dense_hashtable empty_table(ht); // empty table with ht's thresholds - this->swap(empty_table); - return *this; - } - settings = ht.settings; - key_info = ht.key_info; - set_value(&val_info.emptyval, ht.val_info.emptyval); - // copy_from() calls clear and sets num_deleted to 0 too - copy_from(ht, HT_MIN_BUCKETS); - // we purposefully don't copy the allocator, which may not be copyable - return *this; - } - - ~dense_hashtable() { - if (table) { - destroy_buckets(0, num_buckets); - val_info.deallocate(table, num_buckets); - } - } - - // Many STL algorithms use swap instead of copy constructors - void swap(dense_hashtable& ht) { - std::swap(settings, ht.settings); - std::swap(key_info, ht.key_info); - std::swap(num_deleted, ht.num_deleted); - std::swap(num_elements, ht.num_elements); - std::swap(num_buckets, ht.num_buckets); - { value_type tmp; // for annoying reasons, swap() doesn't work - set_value(&tmp, val_info.emptyval); - set_value(&val_info.emptyval, ht.val_info.emptyval); - set_value(&ht.val_info.emptyval, tmp); - } - std::swap(table, ht.table); - settings.reset_thresholds(bucket_count()); // also resets consider_shrink - ht.settings.reset_thresholds(ht.bucket_count()); - // we purposefully don't swap the allocator, which may not be swap-able - } - - private: - void clear_to_size(size_type new_num_buckets) { - if (!table) { - table = val_info.allocate(new_num_buckets); - } else { - destroy_buckets(0, num_buckets); - if (new_num_buckets != num_buckets) { // resize, if necessary - typedef base::integral_constant >::value> - realloc_ok; - resize_table(num_buckets, new_num_buckets, realloc_ok()); - } - } - assert(table); - fill_range_with_empty(table, table + new_num_buckets); - num_elements = 0; - num_deleted = 0; - num_buckets = new_num_buckets; // our new size - settings.reset_thresholds(bucket_count()); - } - - public: - // It's always nice to be able to clear a table without deallocating it - void clear() { - // If the table is already empty, and the number of buckets is - // already as we desire, there's nothing to do. - const size_type new_num_buckets = settings.min_buckets(0, 0); - if (num_elements == 0 && new_num_buckets == num_buckets) { - return; - } - clear_to_size(new_num_buckets); - } - - // Clear the table without resizing it. - // Mimicks the stl_hashtable's behaviour when clear()-ing in that it - // does not modify the bucket count - void clear_no_resize() { - if (num_elements > 0) { - assert(table); - destroy_buckets(0, num_buckets); - fill_range_with_empty(table, table + num_buckets); - } - // don't consider to shrink before another erase() - settings.reset_thresholds(bucket_count()); - num_elements = 0; - num_deleted = 0; - } - - // LOOKUP ROUTINES - private: - // Returns a pair of positions: 1st where the object is, 2nd where - // it would go if you wanted to insert it. 1st is ILLEGAL_BUCKET - // if object is not found; 2nd is ILLEGAL_BUCKET if it is. - // Note: because of deletions where-to-insert is not trivial: it's the - // first deleted bucket we see, as long as we don't find the key later - std::pair find_position(const key_type &key) const { - size_type num_probes = 0; // how many times we've probed - const size_type bucket_count_minus_one = bucket_count() - 1; - size_type bucknum = hash(key) & bucket_count_minus_one; - size_type insert_pos = ILLEGAL_BUCKET; // where we would insert - while ( 1 ) { // probe until something happens - if ( test_empty(bucknum) ) { // bucket is empty - if ( insert_pos == ILLEGAL_BUCKET ) // found no prior place to insert - return std::pair(ILLEGAL_BUCKET, bucknum); - else - return std::pair(ILLEGAL_BUCKET, insert_pos); - - } else if ( test_deleted(bucknum) ) {// keep searching, but mark to insert - if ( insert_pos == ILLEGAL_BUCKET ) - insert_pos = bucknum; - - } else if ( equals(key, get_key(table[bucknum])) ) { - return std::pair(bucknum, ILLEGAL_BUCKET); - } - ++num_probes; // we're doing another probe - bucknum = (bucknum + JUMP_(key, num_probes)) & bucket_count_minus_one; - assert(num_probes < bucket_count() - && "Hashtable is full: an error in key_equal<> or hash<>"); - } - } - - public: - - iterator find(const key_type& key) { - if ( size() == 0 ) return end(); - std::pair pos = find_position(key); - if ( pos.first == ILLEGAL_BUCKET ) // alas, not there - return end(); - else - return iterator(this, table + pos.first, table + num_buckets, false); - } - - const_iterator find(const key_type& key) const { - if ( size() == 0 ) return end(); - std::pair pos = find_position(key); - if ( pos.first == ILLEGAL_BUCKET ) // alas, not there - return end(); - else - return const_iterator(this, table + pos.first, table+num_buckets, false); - } - - // This is a tr1 method: the bucket a given key is in, or what bucket - // it would be put in, if it were to be inserted. Shrug. - size_type bucket(const key_type& key) const { - std::pair pos = find_position(key); - return pos.first == ILLEGAL_BUCKET ? pos.second : pos.first; - } - - // Counts how many elements have key key. For maps, it's either 0 or 1. - size_type count(const key_type &key) const { - std::pair pos = find_position(key); - return pos.first == ILLEGAL_BUCKET ? 0 : 1; - } - - // Likewise, equal_range doesn't really make sense for us. Oh well. - std::pair equal_range(const key_type& key) { - iterator pos = find(key); // either an iterator or end - if (pos == end()) { - return std::pair(pos, pos); - } else { - const iterator startpos = pos++; - return std::pair(startpos, pos); - } - } - std::pair equal_range(const key_type& key) - const { - const_iterator pos = find(key); // either an iterator or end - if (pos == end()) { - return std::pair(pos, pos); - } else { - const const_iterator startpos = pos++; - return std::pair(startpos, pos); - } - } - - - // INSERTION ROUTINES - private: - // Private method used by insert_noresize and find_or_insert. - iterator insert_at(const_reference obj, size_type pos) { - if (size() >= max_size()) { - throw std::length_error("insert overflow"); - } - if ( test_deleted(pos) ) { // just replace if it's been del. - // shrug: shouldn't need to be const. - const_iterator delpos(this, table + pos, table + num_buckets, false); - clear_deleted(delpos); - assert( num_deleted > 0); - --num_deleted; // used to be, now it isn't - } else { - ++num_elements; // replacing an empty bucket - } - set_value(&table[pos], obj); - return iterator(this, table + pos, table + num_buckets, false); - } - - // If you know *this is big enough to hold obj, use this routine - std::pair insert_noresize(const_reference obj) { - // First, double-check we're not inserting delkey or emptyval - assert((!settings.use_empty() || !equals(get_key(obj), - get_key(val_info.emptyval))) - && "Inserting the empty key"); - assert((!settings.use_deleted() || !equals(get_key(obj), key_info.delkey)) - && "Inserting the deleted key"); - const std::pair pos = find_position(get_key(obj)); - if ( pos.first != ILLEGAL_BUCKET) { // object was already there - return std::pair(iterator(this, table + pos.first, - table + num_buckets, false), - false); // false: we didn't insert - } else { // pos.second says where to put it - return std::pair(insert_at(obj, pos.second), true); - } - } - - // Specializations of insert(it, it) depending on the power of the iterator: - // (1) Iterator supports operator-, resize before inserting - template - void insert(ForwardIterator f, ForwardIterator l, std::forward_iterator_tag) { - size_t dist = std::distance(f, l); - if (dist >= (std::numeric_limits::max)()) { - throw std::length_error("insert-range overflow"); - } - resize_delta(static_cast(dist)); - for ( ; dist > 0; --dist, ++f) { - insert_noresize(*f); - } - } - - // (2) Arbitrary iterator, can't tell how much to resize - template - void insert(InputIterator f, InputIterator l, std::input_iterator_tag) { - for ( ; f != l; ++f) - insert(*f); - } - - public: - // This is the normal insert routine, used by the outside world - std::pair insert(const_reference obj) { - resize_delta(1); // adding an object, grow if need be - return insert_noresize(obj); - } - - // When inserting a lot at a time, we specialize on the type of iterator - template - void insert(InputIterator f, InputIterator l) { - // specializes on iterator type - insert(f, l, - typename std::iterator_traits::iterator_category()); - } - - // DefaultValue is a functor that takes a key and returns a value_type - // representing the default value to be inserted if none is found. - template - value_type& find_or_insert(const key_type& key) { - // First, double-check we're not inserting emptykey or delkey - assert((!settings.use_empty() || !equals(key, get_key(val_info.emptyval))) - && "Inserting the empty key"); - assert((!settings.use_deleted() || !equals(key, key_info.delkey)) - && "Inserting the deleted key"); - const std::pair pos = find_position(key); - DefaultValue default_value; - if ( pos.first != ILLEGAL_BUCKET) { // object was already there - return table[pos.first]; - } else if (resize_delta(1)) { // needed to rehash to make room - // Since we resized, we can't use pos, so recalculate where to insert. - return *insert_noresize(default_value(key)).first; - } else { // no need to rehash, insert right here - return *insert_at(default_value(key), pos.second); - } - } - - - // DELETION ROUTINES - size_type erase(const key_type& key) { - // First, double-check we're not trying to erase delkey or emptyval. - assert((!settings.use_empty() || !equals(key, get_key(val_info.emptyval))) - && "Erasing the empty key"); - assert((!settings.use_deleted() || !equals(key, key_info.delkey)) - && "Erasing the deleted key"); - const_iterator pos = find(key); // shrug: shouldn't need to be const - if ( pos != end() ) { - assert(!test_deleted(pos)); // or find() shouldn't have returned it - set_deleted(pos); - ++num_deleted; - settings.set_consider_shrink(true); // will think about shrink after next insert - return 1; // because we deleted one thing - } else { - return 0; // because we deleted nothing - } - } - - // We return the iterator past the deleted item. - void erase(iterator pos) { - if ( pos == end() ) return; // sanity check - if ( set_deleted(pos) ) { // true if object has been newly deleted - ++num_deleted; - settings.set_consider_shrink(true); // will think about shrink after next insert - } - } - - void erase(iterator f, iterator l) { - for ( ; f != l; ++f) { - if ( set_deleted(f) ) // should always be true - ++num_deleted; - } - settings.set_consider_shrink(true); // will think about shrink after next insert - } - - // We allow you to erase a const_iterator just like we allow you to - // erase an iterator. This is in parallel to 'delete': you can delete - // a const pointer just like a non-const pointer. The logic is that - // you can't use the object after it's erased anyway, so it doesn't matter - // if it's const or not. - void erase(const_iterator pos) { - if ( pos == end() ) return; // sanity check - if ( set_deleted(pos) ) { // true if object has been newly deleted - ++num_deleted; - settings.set_consider_shrink(true); // will think about shrink after next insert - } - } - void erase(const_iterator f, const_iterator l) { - for ( ; f != l; ++f) { - if ( set_deleted(f) ) // should always be true - ++num_deleted; - } - settings.set_consider_shrink(true); // will think about shrink after next insert - } - - - // COMPARISON - bool operator==(const dense_hashtable& ht) const { - if (size() != ht.size()) { - return false; - } else if (this == &ht) { - return true; - } else { - // Iterate through the elements in "this" and see if the - // corresponding element is in ht - for ( const_iterator it = begin(); it != end(); ++it ) { - const_iterator it2 = ht.find(get_key(*it)); - if ((it2 == ht.end()) || (*it != *it2)) { - return false; - } - } - return true; - } - } - bool operator!=(const dense_hashtable& ht) const { - return !(*this == ht); - } - - - // I/O - // We support reading and writing hashtables to disk. Alas, since - // I don't know how to write a hasher or key_equal, you have to make - // sure everything but the table is the same. We compact before writing. - private: - // Every time the disk format changes, this should probably change too - typedef unsigned long MagicNumberType; - static const MagicNumberType MAGIC_NUMBER = 0x13578642; - - public: - // I/O -- this is an add-on for writing hash table to disk - // - // INPUT and OUTPUT must be either a FILE, *or* a C++ stream - // (istream, ostream, etc) *or* a class providing - // Read(void*, size_t) and Write(const void*, size_t) - // (respectively), which writes a buffer into a stream - // (which the INPUT/OUTPUT instance presumably owns). - - typedef sparsehash_internal::pod_serializer NopointerSerializer; - - // ValueSerializer: a functor. operator()(OUTPUT*, const value_type&) - template - bool serialize(ValueSerializer serializer, OUTPUT *fp) { - squash_deleted(); // so we don't have to worry about delkey - if ( !sparsehash_internal::write_bigendian_number(fp, MAGIC_NUMBER, 4) ) - return false; - if ( !sparsehash_internal::write_bigendian_number(fp, num_buckets, 8) ) - return false; - if ( !sparsehash_internal::write_bigendian_number(fp, num_elements, 8) ) - return false; - // Now write a bitmap of non-empty buckets. - for ( size_type i = 0; i < num_buckets; i += 8 ) { - unsigned char bits = 0; - for ( int bit = 0; bit < 8; ++bit ) { - if ( i + bit < num_buckets && !test_empty(i + bit) ) - bits |= (1 << bit); - } - if ( !sparsehash_internal::write_data(fp, &bits, sizeof(bits)) ) - return false; - for ( int bit = 0; bit < 8; ++bit ) { - if ( bits & (1 << bit) ) { - if ( !serializer(fp, table[i + bit]) ) return false; - } - } - } - return true; - } - - // INPUT: anything we've written an overload of read_data() for. - // ValueSerializer: a functor. operator()(INPUT*, value_type*) - template - bool unserialize(ValueSerializer serializer, INPUT *fp) { - assert(settings.use_empty() && "empty_key not set for read"); - - clear(); // just to be consistent - MagicNumberType magic_read; - if ( !sparsehash_internal::read_bigendian_number(fp, &magic_read, 4) ) - return false; - if ( magic_read != MAGIC_NUMBER ) { - return false; - } - size_type new_num_buckets; - if ( !sparsehash_internal::read_bigendian_number(fp, &new_num_buckets, 8) ) - return false; - clear_to_size(new_num_buckets); - if ( !sparsehash_internal::read_bigendian_number(fp, &num_elements, 8) ) - return false; - - // Read the bitmap of non-empty buckets. - for (size_type i = 0; i < num_buckets; i += 8) { - unsigned char bits; - if ( !sparsehash_internal::read_data(fp, &bits, sizeof(bits)) ) - return false; - for ( int bit = 0; bit < 8; ++bit ) { - if ( i + bit < num_buckets && (bits & (1 << bit)) ) { // not empty - if ( !serializer(fp, &table[i + bit]) ) return false; - } - } - } - return true; - } - - private: - template - class alloc_impl : public A { - public: - typedef typename A::pointer pointer; - typedef typename A::size_type size_type; - - // Convert a normal allocator to one that has realloc_or_die() - alloc_impl(const A& a) : A(a) { } - - // realloc_or_die should only be used when using the default - // allocator (libc_allocator_with_realloc). - pointer realloc_or_die(pointer /*ptr*/, size_type /*n*/) { - fprintf(stderr, "realloc_or_die is only supported for " - "libc_allocator_with_realloc\n"); - exit(1); - return NULL; - } - }; - - // A template specialization of alloc_impl for - // libc_allocator_with_realloc that can handle realloc_or_die. - template - class alloc_impl > - : public libc_allocator_with_realloc { - public: - typedef typename libc_allocator_with_realloc::pointer pointer; - typedef typename libc_allocator_with_realloc::size_type size_type; - - alloc_impl(const libc_allocator_with_realloc& a) - : libc_allocator_with_realloc(a) { } - - pointer realloc_or_die(pointer ptr, size_type n) { - pointer retval = this->reallocate(ptr, n); - if (retval == NULL) { - fprintf(stderr, "sparsehash: FATAL ERROR: failed to reallocate " - "%lu elements for ptr %p", static_cast(n), ptr); - exit(1); - } - return retval; - } - }; - - // Package allocator with emptyval to eliminate memory needed for - // the zero-size allocator. - // If new fields are added to this class, we should add them to - // operator= and swap. - class ValInfo : public alloc_impl { - public: - typedef typename alloc_impl::value_type value_type; - - ValInfo(const alloc_impl& a) - : alloc_impl(a), emptyval() { } - ValInfo(const ValInfo& v) - : alloc_impl(v), emptyval(v.emptyval) { } - - value_type emptyval; // which key marks unused entries - }; - - - // Package functors with another class to eliminate memory needed for - // zero-size functors. Since ExtractKey and hasher's operator() might - // have the same function signature, they must be packaged in - // different classes. - struct Settings : - sparsehash_internal::sh_hashtable_settings { - explicit Settings(const hasher& hf) - : sparsehash_internal::sh_hashtable_settings( - hf, HT_OCCUPANCY_PCT / 100.0f, HT_EMPTY_PCT / 100.0f) {} - }; - - // Packages ExtractKey and SetKey functors. - class KeyInfo : public ExtractKey, public SetKey, public EqualKey { - public: - KeyInfo(const ExtractKey& ek, const SetKey& sk, const EqualKey& eq) - : ExtractKey(ek), - SetKey(sk), - EqualKey(eq) { - } - - // We want to return the exact same type as ExtractKey: Key or const Key& - typename ExtractKey::result_type get_key(const_reference v) const { - return ExtractKey::operator()(v); - } - void set_key(pointer v, const key_type& k) const { - SetKey::operator()(v, k); - } - bool equals(const key_type& a, const key_type& b) const { - return EqualKey::operator()(a, b); - } - - // Which key marks deleted entries. - // TODO(csilvers): make a pointer, and get rid of use_deleted (benchmark!) - typename base::remove_const::type delkey; - }; - - // Utility functions to access the templated operators - size_type hash(const key_type& v) const { - return settings.hash(v); - } - bool equals(const key_type& a, const key_type& b) const { - return key_info.equals(a, b); - } - typename ExtractKey::result_type get_key(const_reference v) const { - return key_info.get_key(v); - } - void set_key(pointer v, const key_type& k) const { - key_info.set_key(v, k); - } - - private: - // Actual data - Settings settings; - KeyInfo key_info; - - size_type num_deleted; // how many occupied buckets are marked deleted - size_type num_elements; - size_type num_buckets; - ValInfo val_info; // holds emptyval, and also the allocator - pointer table; -}; - - -// We need a global swap as well -template -inline void swap(dense_hashtable &x, - dense_hashtable &y) { - x.swap(y); -} - -#undef JUMP_ - -template -const typename dense_hashtable::size_type - dense_hashtable::ILLEGAL_BUCKET; - -// How full we let the table get before we resize. Knuth says .8 is -// good -- higher causes us to probe too much, though saves memory. -// However, we go with .5, getting better performance at the cost of -// more space (a trade-off densehashtable explicitly chooses to make). -// Feel free to play around with different values, though, via -// max_load_factor() and/or set_resizing_parameters(). -template -const int dense_hashtable::HT_OCCUPANCY_PCT = 50; - -// How empty we let the table get before we resize lower. -// It should be less than OCCUPANCY_PCT / 2 or we thrash resizing. -template -const int dense_hashtable::HT_EMPTY_PCT - = static_cast(0.4 * - dense_hashtable::HT_OCCUPANCY_PCT); - -_END_GOOGLE_NAMESPACE_ - -#endif /* _DENSEHASHTABLE_H_ */ diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/internal/hashtable-common.h b/clipper/sparsehash-2.0.3/src/sparsehash/internal/hashtable-common.h deleted file mode 100644 index bac2b88..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/internal/hashtable-common.h +++ /dev/null @@ -1,381 +0,0 @@ -// Copyright (c) 2010, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// Provides classes shared by both sparse and dense hashtable. -// -// sh_hashtable_settings has parameters for growing and shrinking -// a hashtable. It also packages zero-size functor (ie. hasher). -// -// Other functions and classes provide common code for serializing -// and deserializing hashtables to a stream (such as a FILE*). - -#ifndef UTIL_GTL_HASHTABLE_COMMON_H_ -#define UTIL_GTL_HASHTABLE_COMMON_H_ - -#include -#include -#include -#include // for size_t -#include -#include // For length_error - -_START_GOOGLE_NAMESPACE_ - -template struct SparsehashCompileAssert { }; -#define SPARSEHASH_COMPILE_ASSERT(expr, msg) \ - __attribute__((unused)) typedef SparsehashCompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1] - -namespace sparsehash_internal { - -// Adaptor methods for reading/writing data from an INPUT or OUPTUT -// variable passed to serialize() or unserialize(). For now we -// have implemented INPUT/OUTPUT for FILE*, istream*/ostream* (note -// they are pointers, unlike typical use), or else a pointer to -// something that supports a Read()/Write() method. -// -// For technical reasons, we implement read_data/write_data in two -// stages. The actual work is done in *_data_internal, which takes -// the stream argument twice: once as a template type, and once with -// normal type information. (We only use the second version.) We do -// this because of how C++ picks what function overload to use. If we -// implemented this the naive way: -// bool read_data(istream* is, const void* data, size_t length); -// template read_data(T* fp, const void* data, size_t length); -// C++ would prefer the second version for every stream type except -// istream. However, we want C++ to prefer the first version for -// streams that are *subclasses* of istream, such as istringstream. -// This is not possible given the way template types are resolved. So -// we split the stream argument in two, one of which is templated and -// one of which is not. The specialized functions (like the istream -// version above) ignore the template arg and use the second, 'type' -// arg, getting subclass matching as normal. The 'catch-all' -// functions (the second version above) use the template arg to deduce -// the type, and use a second, void* arg to achieve the desired -// 'catch-all' semantics. - -// ----- low-level I/O for FILE* ---- - -template -inline bool read_data_internal(Ignored*, FILE* fp, - void* data, size_t length) { - return fread(data, length, 1, fp) == 1; -} - -template -inline bool write_data_internal(Ignored*, FILE* fp, - const void* data, size_t length) { - return fwrite(data, length, 1, fp) == 1; -} - -// ----- low-level I/O for iostream ---- - -// We want the caller to be responsible for #including , not -// us, because iostream is a big header! According to the standard, -// it's only legal to delay the instantiation the way we want to if -// the istream/ostream is a template type. So we jump through hoops. -template -inline bool read_data_internal_for_istream(ISTREAM* fp, - void* data, size_t length) { - return fp->read(reinterpret_cast(data), length).good(); -} -template -inline bool read_data_internal(Ignored*, std::istream* fp, - void* data, size_t length) { - return read_data_internal_for_istream(fp, data, length); -} - -template -inline bool write_data_internal_for_ostream(OSTREAM* fp, - const void* data, size_t length) { - return fp->write(reinterpret_cast(data), length).good(); -} -template -inline bool write_data_internal(Ignored*, std::ostream* fp, - const void* data, size_t length) { - return write_data_internal_for_ostream(fp, data, length); -} - -// ----- low-level I/O for custom streams ---- - -// The INPUT type needs to support a Read() method that takes a -// buffer and a length and returns the number of bytes read. -template -inline bool read_data_internal(INPUT* fp, void*, - void* data, size_t length) { - return static_cast(fp->Read(data, length)) == length; -} - -// The OUTPUT type needs to support a Write() operation that takes -// a buffer and a length and returns the number of bytes written. -template -inline bool write_data_internal(OUTPUT* fp, void*, - const void* data, size_t length) { - return static_cast(fp->Write(data, length)) == length; -} - -// ----- low-level I/O: the public API ---- - -template -inline bool read_data(INPUT* fp, void* data, size_t length) { - return read_data_internal(fp, fp, data, length); -} - -template -inline bool write_data(OUTPUT* fp, const void* data, size_t length) { - return write_data_internal(fp, fp, data, length); -} - -// Uses read_data() and write_data() to read/write an integer. -// length is the number of bytes to read/write (which may differ -// from sizeof(IntType), allowing us to save on a 32-bit system -// and load on a 64-bit system). Excess bytes are taken to be 0. -// INPUT and OUTPUT must match legal inputs to read/write_data (above). -template -bool read_bigendian_number(INPUT* fp, IntType* value, size_t length) { - *value = 0; - unsigned char byte; - // We require IntType to be unsigned or else the shifting gets all screwy. - SPARSEHASH_COMPILE_ASSERT(static_cast(-1) > static_cast(0), - serializing_int_requires_an_unsigned_type); - for (size_t i = 0; i < length; ++i) { - if (!read_data(fp, &byte, sizeof(byte))) return false; - *value |= static_cast(byte) << ((length - 1 - i) * 8); - } - return true; -} - -template -bool write_bigendian_number(OUTPUT* fp, IntType value, size_t length) { - unsigned char byte; - // We require IntType to be unsigned or else the shifting gets all screwy. - SPARSEHASH_COMPILE_ASSERT(static_cast(-1) > static_cast(0), - serializing_int_requires_an_unsigned_type); - for (size_t i = 0; i < length; ++i) { - byte = (sizeof(value) <= length-1 - i) - ? 0 : static_cast((value >> ((length-1 - i) * 8)) & 255); - if (!write_data(fp, &byte, sizeof(byte))) return false; - } - return true; -} - -// If your keys and values are simple enough, you can pass this -// serializer to serialize()/unserialize(). "Simple enough" means -// value_type is a POD type that contains no pointers. Note, -// however, we don't try to normalize endianness. -// This is the type used for NopointerSerializer. -template struct pod_serializer { - template - bool operator()(INPUT* fp, value_type* value) const { - return read_data(fp, value, sizeof(*value)); - } - - template - bool operator()(OUTPUT* fp, const value_type& value) const { - return write_data(fp, &value, sizeof(value)); - } -}; - - -// Settings contains parameters for growing and shrinking the table. -// It also packages zero-size functor (ie. hasher). -// -// It does some munging of the hash value in cases where we think -// (fear) the original hash function might not be very good. In -// particular, the default hash of pointers is the identity hash, -// so probably all the low bits are 0. We identify when we think -// we're hashing a pointer, and chop off the low bits. Note this -// isn't perfect: even when the key is a pointer, we can't tell -// for sure that the hash is the identity hash. If it's not, this -// is needless work (and possibly, though not likely, harmful). - -template -class sh_hashtable_settings : public HashFunc { - public: - typedef Key key_type; - typedef HashFunc hasher; - typedef SizeType size_type; - - public: - sh_hashtable_settings(const hasher& hf, - const float ht_occupancy_flt, - const float ht_empty_flt) - : hasher(hf), - enlarge_threshold_(0), - shrink_threshold_(0), - consider_shrink_(false), - use_empty_(false), - use_deleted_(false), - num_ht_copies_(0) { - set_enlarge_factor(ht_occupancy_flt); - set_shrink_factor(ht_empty_flt); - } - - size_type hash(const key_type& v) const { - // We munge the hash value when we don't trust hasher::operator(). - return hash_munger::MungedHash(hasher::operator()(v)); - } - - float enlarge_factor() const { - return enlarge_factor_; - } - void set_enlarge_factor(float f) { - enlarge_factor_ = f; - } - float shrink_factor() const { - return shrink_factor_; - } - void set_shrink_factor(float f) { - shrink_factor_ = f; - } - - size_type enlarge_threshold() const { - return enlarge_threshold_; - } - void set_enlarge_threshold(size_type t) { - enlarge_threshold_ = t; - } - size_type shrink_threshold() const { - return shrink_threshold_; - } - void set_shrink_threshold(size_type t) { - shrink_threshold_ = t; - } - - size_type enlarge_size(size_type x) const { - return static_cast(x * enlarge_factor_); - } - size_type shrink_size(size_type x) const { - return static_cast(x * shrink_factor_); - } - - bool consider_shrink() const { - return consider_shrink_; - } - void set_consider_shrink(bool t) { - consider_shrink_ = t; - } - - bool use_empty() const { - return use_empty_; - } - void set_use_empty(bool t) { - use_empty_ = t; - } - - bool use_deleted() const { - return use_deleted_; - } - void set_use_deleted(bool t) { - use_deleted_ = t; - } - - size_type num_ht_copies() const { - return static_cast(num_ht_copies_); - } - void inc_num_ht_copies() { - ++num_ht_copies_; - } - - // Reset the enlarge and shrink thresholds - void reset_thresholds(size_type num_buckets) { - set_enlarge_threshold(enlarge_size(num_buckets)); - set_shrink_threshold(shrink_size(num_buckets)); - // whatever caused us to reset already considered - set_consider_shrink(false); - } - - // Caller is resposible for calling reset_threshold right after - // set_resizing_parameters. - void set_resizing_parameters(float shrink, float grow) { - assert(shrink >= 0.0); - assert(grow <= 1.0); - if (shrink > grow/2.0f) - shrink = grow / 2.0f; // otherwise we thrash hashtable size - set_shrink_factor(shrink); - set_enlarge_factor(grow); - } - - // This is the smallest size a hashtable can be without being too crowded - // If you like, you can give a min #buckets as well as a min #elts - size_type min_buckets(size_type num_elts, size_type min_buckets_wanted) { - float enlarge = enlarge_factor(); - size_type sz = HT_MIN_BUCKETS; // min buckets allowed - while ( sz < min_buckets_wanted || - num_elts >= static_cast(sz * enlarge) ) { - // This just prevents overflowing size_type, since sz can exceed - // max_size() here. - if (static_cast(sz * 2) < sz) { - throw std::length_error("resize overflow"); // protect against overflow - } - sz *= 2; - } - return sz; - } - - private: - template class hash_munger { - public: - static size_t MungedHash(size_t hash) { - return hash; - } - }; - // This matches when the hashtable key is a pointer. - template class hash_munger { - public: - static size_t MungedHash(size_t hash) { - // TODO(csilvers): consider rotating instead: - // static const int shift = (sizeof(void *) == 4) ? 2 : 3; - // return (hash << (sizeof(hash) * 8) - shift)) | (hash >> shift); - // This matters if we ever change sparse/dense_hash_* to compare - // hashes before comparing actual values. It's speedy on x86. - return hash / sizeof(void*); // get rid of known-0 bits - } - }; - - size_type enlarge_threshold_; // table.size() * enlarge_factor - size_type shrink_threshold_; // table.size() * shrink_factor - float enlarge_factor_; // how full before resize - float shrink_factor_; // how empty before resize - // consider_shrink=true if we should try to shrink before next insert - bool consider_shrink_; - bool use_empty_; // used only by densehashtable, not sparsehashtable - bool use_deleted_; // false until delkey has been set - // num_ht_copies is a counter incremented every Copy/Move - unsigned int num_ht_copies_; -}; - -} // namespace sparsehash_internal - -#undef SPARSEHASH_COMPILE_ASSERT -_END_GOOGLE_NAMESPACE_ - -#endif // UTIL_GTL_HASHTABLE_COMMON_H_ diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/internal/libc_allocator_with_realloc.h b/clipper/sparsehash-2.0.3/src/sparsehash/internal/libc_allocator_with_realloc.h deleted file mode 100644 index 0c1e03d..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/internal/libc_allocator_with_realloc.h +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) 2010, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- - -#ifndef UTIL_GTL_LIBC_ALLOCATOR_WITH_REALLOC_H_ -#define UTIL_GTL_LIBC_ALLOCATOR_WITH_REALLOC_H_ - -#include -#include // for malloc/realloc/free -#include // for ptrdiff_t -#include // for placement new - -_START_GOOGLE_NAMESPACE_ - -template -class libc_allocator_with_realloc { - public: - typedef T value_type; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - - typedef T* pointer; - typedef const T* const_pointer; - typedef T& reference; - typedef const T& const_reference; - - libc_allocator_with_realloc() {} - libc_allocator_with_realloc(const libc_allocator_with_realloc&) {} - ~libc_allocator_with_realloc() {} - - pointer address(reference r) const { return &r; } - const_pointer address(const_reference r) const { return &r; } - - pointer allocate(size_type n, const_pointer = 0) { - return static_cast(malloc(n * sizeof(value_type))); - } - void deallocate(pointer p, size_type) { - free(p); - } - pointer reallocate(pointer p, size_type n) { - return static_cast(realloc(p, n * sizeof(value_type))); - } - - size_type max_size() const { - return static_cast(-1) / sizeof(value_type); - } - - void construct(pointer p, const value_type& val) { - new(p) value_type(val); - } - void destroy(pointer p) { p->~value_type(); } - - template - libc_allocator_with_realloc(const libc_allocator_with_realloc&) {} - - template - struct rebind { - typedef libc_allocator_with_realloc other; - }; -}; - -// libc_allocator_with_realloc specialization. -template<> -class libc_allocator_with_realloc { - public: - typedef void value_type; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef void* pointer; - typedef const void* const_pointer; - - template - struct rebind { - typedef libc_allocator_with_realloc other; - }; -}; - -template -inline bool operator==(const libc_allocator_with_realloc&, - const libc_allocator_with_realloc&) { - return true; -} - -template -inline bool operator!=(const libc_allocator_with_realloc&, - const libc_allocator_with_realloc&) { - return false; -} - -_END_GOOGLE_NAMESPACE_ - -#endif // UTIL_GTL_LIBC_ALLOCATOR_WITH_REALLOC_H_ diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/internal/sparsehashtable.h b/clipper/sparsehash-2.0.3/src/sparsehash/internal/sparsehashtable.h deleted file mode 100644 index f54ea51..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/internal/sparsehashtable.h +++ /dev/null @@ -1,1247 +0,0 @@ -// Copyright (c) 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// A sparse hashtable is a particular implementation of -// a hashtable: one that is meant to minimize memory use. -// It does this by using a *sparse table* (cf sparsetable.h), -// which uses between 1 and 2 bits to store empty buckets -// (we may need another bit for hashtables that support deletion). -// -// When empty buckets are so cheap, an appealing hashtable -// implementation is internal probing, in which the hashtable -// is a single table, and collisions are resolved by trying -// to insert again in another bucket. The most cache-efficient -// internal probing schemes are linear probing (which suffers, -// alas, from clumping) and quadratic probing, which is what -// we implement by default. -// -// Deleted buckets are a bit of a pain. We have to somehow mark -// deleted buckets (the probing must distinguish them from empty -// buckets). The most principled way is to have another bitmap, -// but that's annoying and takes up space. Instead we let the -// user specify an "impossible" key. We set deleted buckets -// to have the impossible key. -// -// Note it is possible to change the value of the delete key -// on the fly; you can even remove it, though after that point -// the hashtable is insert_only until you set it again. -// -// You probably shouldn't use this code directly. Use -// sparse_hash_map<> or sparse_hash_set<> instead. -// -// You can modify the following, below: -// HT_OCCUPANCY_PCT -- how full before we double size -// HT_EMPTY_PCT -- how empty before we halve size -// HT_MIN_BUCKETS -- smallest bucket size -// HT_DEFAULT_STARTING_BUCKETS -- default bucket size at construct-time -// -// You can also change enlarge_factor (which defaults to -// HT_OCCUPANCY_PCT), and shrink_factor (which defaults to -// HT_EMPTY_PCT) with set_resizing_parameters(). -// -// How to decide what values to use? -// shrink_factor's default of .4 * OCCUPANCY_PCT, is probably good. -// HT_MIN_BUCKETS is probably unnecessary since you can specify -// (indirectly) the starting number of buckets at construct-time. -// For enlarge_factor, you can use this chart to try to trade-off -// expected lookup time to the space taken up. By default, this -// code uses quadratic probing, though you can change it to linear -// via _JUMP below if you really want to. -// -// From http://www.augustana.ca/~mohrj/courses/1999.fall/csc210/lecture_notes/hashing.html -// NUMBER OF PROBES / LOOKUP Successful Unsuccessful -// Quadratic collision resolution 1 - ln(1-L) - L/2 1/(1-L) - L - ln(1-L) -// Linear collision resolution [1+1/(1-L)]/2 [1+1/(1-L)2]/2 -// -// -- enlarge_factor -- 0.10 0.50 0.60 0.75 0.80 0.90 0.99 -// QUADRATIC COLLISION RES. -// probes/successful lookup 1.05 1.44 1.62 2.01 2.21 2.85 5.11 -// probes/unsuccessful lookup 1.11 2.19 2.82 4.64 5.81 11.4 103.6 -// LINEAR COLLISION RES. -// probes/successful lookup 1.06 1.5 1.75 2.5 3.0 5.5 50.5 -// probes/unsuccessful lookup 1.12 2.5 3.6 8.5 13.0 50.0 5000.0 -// -// The value type is required to be copy constructible and default -// constructible, but it need not be (and commonly isn't) assignable. - -#ifndef _SPARSEHASHTABLE_H_ -#define _SPARSEHASHTABLE_H_ - -#include -#include -#include // For swap(), eg -#include // for iterator tags -#include // for numeric_limits -#include // for pair -#include // for remove_const -#include -#include // IWYU pragma: export -#include // For length_error - -_START_GOOGLE_NAMESPACE_ - -namespace base { // just to make google->opensource transition easier -using GOOGLE_NAMESPACE::remove_const; -} - -#ifndef SPARSEHASH_STAT_UPDATE -#define SPARSEHASH_STAT_UPDATE(x) ((void) 0) -#endif - -// The probing method -// Linear probing -// #define JUMP_(key, num_probes) ( 1 ) -// Quadratic probing -#define JUMP_(key, num_probes) ( num_probes ) - -// The smaller this is, the faster lookup is (because the group bitmap is -// smaller) and the faster insert is, because there's less to move. -// On the other hand, there are more groups. Since group::size_type is -// a short, this number should be of the form 32*x + 16 to avoid waste. -static const u_int16_t DEFAULT_GROUP_SIZE = 48; // fits in 1.5 words - -// Hashtable class, used to implement the hashed associative containers -// hash_set and hash_map. -// -// Value: what is stored in the table (each bucket is a Value). -// Key: something in a 1-to-1 correspondence to a Value, that can be used -// to search for a Value in the table (find() takes a Key). -// HashFcn: Takes a Key and returns an integer, the more unique the better. -// ExtractKey: given a Value, returns the unique Key associated with it. -// Must inherit from unary_function, or at least have a -// result_type enum indicating the return type of operator(). -// SetKey: given a Value* and a Key, modifies the value such that -// ExtractKey(value) == key. We guarantee this is only called -// with key == deleted_key. -// EqualKey: Given two Keys, says whether they are the same (that is, -// if they are both associated with the same Value). -// Alloc: STL allocator to use to allocate memory. - -template -class sparse_hashtable; - -template -struct sparse_hashtable_iterator; - -template -struct sparse_hashtable_const_iterator; - -// As far as iterating, we're basically just a sparsetable -// that skips over deleted elements. -template -struct sparse_hashtable_iterator { - private: - typedef typename A::template rebind::other value_alloc_type; - - public: - typedef sparse_hashtable_iterator iterator; - typedef sparse_hashtable_const_iterator const_iterator; - typedef typename sparsetable::nonempty_iterator - st_iterator; - - typedef std::forward_iterator_tag iterator_category; // very little defined! - typedef V value_type; - typedef typename value_alloc_type::difference_type difference_type; - typedef typename value_alloc_type::size_type size_type; - typedef typename value_alloc_type::reference reference; - typedef typename value_alloc_type::pointer pointer; - - // "Real" constructor and default constructor - sparse_hashtable_iterator(const sparse_hashtable *h, - st_iterator it, st_iterator it_end) - : ht(h), pos(it), end(it_end) { advance_past_deleted(); } - sparse_hashtable_iterator() { } // not ever used internally - // The default destructor is fine; we don't define one - // The default operator= is fine; we don't define one - - // Happy dereferencer - reference operator*() const { return *pos; } - pointer operator->() const { return &(operator*()); } - - // Arithmetic. The only hard part is making sure that - // we're not on a marked-deleted array element - void advance_past_deleted() { - while ( pos != end && ht->test_deleted(*this) ) - ++pos; - } - iterator& operator++() { - assert(pos != end); ++pos; advance_past_deleted(); return *this; - } - iterator operator++(int) { iterator tmp(*this); ++*this; return tmp; } - - // Comparison. - bool operator==(const iterator& it) const { return pos == it.pos; } - bool operator!=(const iterator& it) const { return pos != it.pos; } - - - // The actual data - const sparse_hashtable *ht; - st_iterator pos, end; -}; - -// Now do it all again, but with const-ness! -template -struct sparse_hashtable_const_iterator { - private: - typedef typename A::template rebind::other value_alloc_type; - - public: - typedef sparse_hashtable_iterator iterator; - typedef sparse_hashtable_const_iterator const_iterator; - typedef typename sparsetable::const_nonempty_iterator - st_iterator; - - typedef std::forward_iterator_tag iterator_category; // very little defined! - typedef V value_type; - typedef typename value_alloc_type::difference_type difference_type; - typedef typename value_alloc_type::size_type size_type; - typedef typename value_alloc_type::const_reference reference; - typedef typename value_alloc_type::const_pointer pointer; - - // "Real" constructor and default constructor - sparse_hashtable_const_iterator(const sparse_hashtable *h, - st_iterator it, st_iterator it_end) - : ht(h), pos(it), end(it_end) { advance_past_deleted(); } - // This lets us convert regular iterators to const iterators - sparse_hashtable_const_iterator() { } // never used internally - sparse_hashtable_const_iterator(const iterator &it) - : ht(it.ht), pos(it.pos), end(it.end) { } - // The default destructor is fine; we don't define one - // The default operator= is fine; we don't define one - - // Happy dereferencer - reference operator*() const { return *pos; } - pointer operator->() const { return &(operator*()); } - - // Arithmetic. The only hard part is making sure that - // we're not on a marked-deleted array element - void advance_past_deleted() { - while ( pos != end && ht->test_deleted(*this) ) - ++pos; - } - const_iterator& operator++() { - assert(pos != end); ++pos; advance_past_deleted(); return *this; - } - const_iterator operator++(int) { const_iterator tmp(*this); ++*this; return tmp; } - - // Comparison. - bool operator==(const const_iterator& it) const { return pos == it.pos; } - bool operator!=(const const_iterator& it) const { return pos != it.pos; } - - - // The actual data - const sparse_hashtable *ht; - st_iterator pos, end; -}; - -// And once again, but this time freeing up memory as we iterate -template -struct sparse_hashtable_destructive_iterator { - private: - typedef typename A::template rebind::other value_alloc_type; - - public: - typedef sparse_hashtable_destructive_iterator iterator; - typedef typename sparsetable::destructive_iterator - st_iterator; - - typedef std::forward_iterator_tag iterator_category; // very little defined! - typedef V value_type; - typedef typename value_alloc_type::difference_type difference_type; - typedef typename value_alloc_type::size_type size_type; - typedef typename value_alloc_type::reference reference; - typedef typename value_alloc_type::pointer pointer; - - // "Real" constructor and default constructor - sparse_hashtable_destructive_iterator(const - sparse_hashtable *h, - st_iterator it, st_iterator it_end) - : ht(h), pos(it), end(it_end) { advance_past_deleted(); } - sparse_hashtable_destructive_iterator() { } // never used internally - // The default destructor is fine; we don't define one - // The default operator= is fine; we don't define one - - // Happy dereferencer - reference operator*() const { return *pos; } - pointer operator->() const { return &(operator*()); } - - // Arithmetic. The only hard part is making sure that - // we're not on a marked-deleted array element - void advance_past_deleted() { - while ( pos != end && ht->test_deleted(*this) ) - ++pos; - } - iterator& operator++() { - assert(pos != end); ++pos; advance_past_deleted(); return *this; - } - iterator operator++(int) { iterator tmp(*this); ++*this; return tmp; } - - // Comparison. - bool operator==(const iterator& it) const { return pos == it.pos; } - bool operator!=(const iterator& it) const { return pos != it.pos; } - - - // The actual data - const sparse_hashtable *ht; - st_iterator pos, end; -}; - - -template -class sparse_hashtable { - private: - typedef typename Alloc::template rebind::other value_alloc_type; - - public: - typedef Key key_type; - typedef Value value_type; - typedef HashFcn hasher; - typedef EqualKey key_equal; - typedef Alloc allocator_type; - - typedef typename value_alloc_type::size_type size_type; - typedef typename value_alloc_type::difference_type difference_type; - typedef typename value_alloc_type::reference reference; - typedef typename value_alloc_type::const_reference const_reference; - typedef typename value_alloc_type::pointer pointer; - typedef typename value_alloc_type::const_pointer const_pointer; - typedef sparse_hashtable_iterator - iterator; - - typedef sparse_hashtable_const_iterator - const_iterator; - - typedef sparse_hashtable_destructive_iterator - destructive_iterator; - - // These come from tr1. For us they're the same as regular iterators. - typedef iterator local_iterator; - typedef const_iterator const_local_iterator; - - // How full we let the table get before we resize, by default. - // Knuth says .8 is good -- higher causes us to probe too much, - // though it saves memory. - static const int HT_OCCUPANCY_PCT; // = 80 (out of 100); - - // How empty we let the table get before we resize lower, by default. - // (0.0 means never resize lower.) - // It should be less than OCCUPANCY_PCT / 2 or we thrash resizing - static const int HT_EMPTY_PCT; // = 0.4 * HT_OCCUPANCY_PCT; - - // Minimum size we're willing to let hashtables be. - // Must be a power of two, and at least 4. - // Note, however, that for a given hashtable, the initial size is a - // function of the first constructor arg, and may be >HT_MIN_BUCKETS. - static const size_type HT_MIN_BUCKETS = 4; - - // By default, if you don't specify a hashtable size at - // construction-time, we use this size. Must be a power of two, and - // at least HT_MIN_BUCKETS. - static const size_type HT_DEFAULT_STARTING_BUCKETS = 32; - - // ITERATOR FUNCTIONS - iterator begin() { return iterator(this, table.nonempty_begin(), - table.nonempty_end()); } - iterator end() { return iterator(this, table.nonempty_end(), - table.nonempty_end()); } - const_iterator begin() const { return const_iterator(this, - table.nonempty_begin(), - table.nonempty_end()); } - const_iterator end() const { return const_iterator(this, - table.nonempty_end(), - table.nonempty_end()); } - - // These come from tr1 unordered_map. They iterate over 'bucket' n. - // For sparsehashtable, we could consider each 'group' to be a bucket, - // I guess, but I don't really see the point. We'll just consider - // bucket n to be the n-th element of the sparsetable, if it's occupied, - // or some empty element, otherwise. - local_iterator begin(size_type i) { - if (table.test(i)) - return local_iterator(this, table.get_iter(i), table.nonempty_end()); - else - return local_iterator(this, table.nonempty_end(), table.nonempty_end()); - } - local_iterator end(size_type i) { - local_iterator it = begin(i); - if (table.test(i) && !test_deleted(i)) - ++it; - return it; - } - const_local_iterator begin(size_type i) const { - if (table.test(i)) - return const_local_iterator(this, table.get_iter(i), - table.nonempty_end()); - else - return const_local_iterator(this, table.nonempty_end(), - table.nonempty_end()); - } - const_local_iterator end(size_type i) const { - const_local_iterator it = begin(i); - if (table.test(i) && !test_deleted(i)) - ++it; - return it; - } - - // This is used when resizing - destructive_iterator destructive_begin() { - return destructive_iterator(this, table.destructive_begin(), - table.destructive_end()); - } - destructive_iterator destructive_end() { - return destructive_iterator(this, table.destructive_end(), - table.destructive_end()); - } - - - // ACCESSOR FUNCTIONS for the things we templatize on, basically - hasher hash_funct() const { return settings; } - key_equal key_eq() const { return key_info; } - allocator_type get_allocator() const { return table.get_allocator(); } - - // Accessor function for statistics gathering. - int num_table_copies() const { return settings.num_ht_copies(); } - - private: - // We need to copy values when we set the special marker for deleted - // elements, but, annoyingly, we can't just use the copy assignment - // operator because value_type might not be assignable (it's often - // pair). We use explicit destructor invocation and - // placement new to get around this. Arg. - void set_value(pointer dst, const_reference src) { - dst->~value_type(); // delete the old value, if any - new(dst) value_type(src); - } - - // This is used as a tag for the copy constructor, saying to destroy its - // arg We have two ways of destructively copying: with potentially growing - // the hashtable as we copy, and without. To make sure the outside world - // can't do a destructive copy, we make the typename private. - enum MoveDontCopyT {MoveDontCopy, MoveDontGrow}; - - // DELETE HELPER FUNCTIONS - // This lets the user describe a key that will indicate deleted - // table entries. This key should be an "impossible" entry -- - // if you try to insert it for real, you won't be able to retrieve it! - // (NB: while you pass in an entire value, only the key part is looked - // at. This is just because I don't know how to assign just a key.) - private: - void squash_deleted() { // gets rid of any deleted entries we have - if ( num_deleted ) { // get rid of deleted before writing - sparse_hashtable tmp(MoveDontGrow, *this); - swap(tmp); // now we are tmp - } - assert(num_deleted == 0); - } - - // Test if the given key is the deleted indicator. Requires - // num_deleted > 0, for correctness of read(), and because that - // guarantees that key_info.delkey is valid. - bool test_deleted_key(const key_type& key) const { - assert(num_deleted > 0); - return equals(key_info.delkey, key); - } - - public: - void set_deleted_key(const key_type &key) { - // It's only safe to change what "deleted" means if we purge deleted guys - squash_deleted(); - settings.set_use_deleted(true); - key_info.delkey = key; - } - void clear_deleted_key() { - squash_deleted(); - settings.set_use_deleted(false); - } - key_type deleted_key() const { - assert(settings.use_deleted() - && "Must set deleted key before calling deleted_key"); - return key_info.delkey; - } - - // These are public so the iterators can use them - // True if the item at position bucknum is "deleted" marker - bool test_deleted(size_type bucknum) const { - // Invariant: !use_deleted() implies num_deleted is 0. - assert(settings.use_deleted() || num_deleted == 0); - return num_deleted > 0 && table.test(bucknum) && - test_deleted_key(get_key(table.unsafe_get(bucknum))); - } - bool test_deleted(const iterator &it) const { - // Invariant: !use_deleted() implies num_deleted is 0. - assert(settings.use_deleted() || num_deleted == 0); - return num_deleted > 0 && test_deleted_key(get_key(*it)); - } - bool test_deleted(const const_iterator &it) const { - // Invariant: !use_deleted() implies num_deleted is 0. - assert(settings.use_deleted() || num_deleted == 0); - return num_deleted > 0 && test_deleted_key(get_key(*it)); - } - bool test_deleted(const destructive_iterator &it) const { - // Invariant: !use_deleted() implies num_deleted is 0. - assert(settings.use_deleted() || num_deleted == 0); - return num_deleted > 0 && test_deleted_key(get_key(*it)); - } - - private: - void check_use_deleted(const char* caller) { - (void)caller; // could log it if the assert failed - assert(settings.use_deleted()); - } - - // Set it so test_deleted is true. true if object didn't used to be deleted. - // TODO(csilvers): make these private (also in densehashtable.h) - bool set_deleted(iterator &it) { - check_use_deleted("set_deleted()"); - bool retval = !test_deleted(it); - // &* converts from iterator to value-type. - set_key(&(*it), key_info.delkey); - return retval; - } - // Set it so test_deleted is false. true if object used to be deleted. - bool clear_deleted(iterator &it) { - check_use_deleted("clear_deleted()"); - // Happens automatically when we assign something else in its place. - return test_deleted(it); - } - - // We also allow to set/clear the deleted bit on a const iterator. - // We allow a const_iterator for the same reason you can delete a - // const pointer: it's convenient, and semantically you can't use - // 'it' after it's been deleted anyway, so its const-ness doesn't - // really matter. - bool set_deleted(const_iterator &it) { - check_use_deleted("set_deleted()"); - bool retval = !test_deleted(it); - set_key(const_cast(&(*it)), key_info.delkey); - return retval; - } - // Set it so test_deleted is false. true if object used to be deleted. - bool clear_deleted(const_iterator &it) { - check_use_deleted("clear_deleted()"); - return test_deleted(it); - } - - // FUNCTIONS CONCERNING SIZE - public: - size_type size() const { return table.num_nonempty() - num_deleted; } - size_type max_size() const { return table.max_size(); } - bool empty() const { return size() == 0; } - size_type bucket_count() const { return table.size(); } - size_type max_bucket_count() const { return max_size(); } - // These are tr1 methods. Their idea of 'bucket' doesn't map well to - // what we do. We just say every bucket has 0 or 1 items in it. - size_type bucket_size(size_type i) const { - return begin(i) == end(i) ? 0 : 1; - } - - private: - // Because of the above, size_type(-1) is never legal; use it for errors - static const size_type ILLEGAL_BUCKET = size_type(-1); - - // Used after a string of deletes. Returns true if we actually shrunk. - // TODO(csilvers): take a delta so we can take into account inserts - // done after shrinking. Maybe make part of the Settings class? - bool maybe_shrink() { - assert(table.num_nonempty() >= num_deleted); - assert((bucket_count() & (bucket_count()-1)) == 0); // is a power of two - assert(bucket_count() >= HT_MIN_BUCKETS); - bool retval = false; - - // If you construct a hashtable with < HT_DEFAULT_STARTING_BUCKETS, - // we'll never shrink until you get relatively big, and we'll never - // shrink below HT_DEFAULT_STARTING_BUCKETS. Otherwise, something - // like "dense_hash_set x; x.insert(4); x.erase(4);" will - // shrink us down to HT_MIN_BUCKETS buckets, which is too small. - const size_type num_remain = table.num_nonempty() - num_deleted; - const size_type shrink_threshold = settings.shrink_threshold(); - if (shrink_threshold > 0 && num_remain < shrink_threshold && - bucket_count() > HT_DEFAULT_STARTING_BUCKETS) { - const float shrink_factor = settings.shrink_factor(); - size_type sz = bucket_count() / 2; // find how much we should shrink - while (sz > HT_DEFAULT_STARTING_BUCKETS && - num_remain < static_cast(sz * shrink_factor)) { - sz /= 2; // stay a power of 2 - } - sparse_hashtable tmp(MoveDontCopy, *this, sz); - swap(tmp); // now we are tmp - retval = true; - } - settings.set_consider_shrink(false); // because we just considered it - return retval; - } - - // We'll let you resize a hashtable -- though this makes us copy all! - // When you resize, you say, "make it big enough for this many more elements" - // Returns true if we actually resized, false if size was already ok. - bool resize_delta(size_type delta) { - bool did_resize = false; - if ( settings.consider_shrink() ) { // see if lots of deletes happened - if ( maybe_shrink() ) - did_resize = true; - } - if (table.num_nonempty() >= - (std::numeric_limits::max)() - delta) { - throw std::length_error("resize overflow"); - } - if ( bucket_count() >= HT_MIN_BUCKETS && - (table.num_nonempty() + delta) <= settings.enlarge_threshold() ) - return did_resize; // we're ok as we are - - // Sometimes, we need to resize just to get rid of all the - // "deleted" buckets that are clogging up the hashtable. So when - // deciding whether to resize, count the deleted buckets (which - // are currently taking up room). But later, when we decide what - // size to resize to, *don't* count deleted buckets, since they - // get discarded during the resize. - const size_type needed_size = - settings.min_buckets(table.num_nonempty() + delta, 0); - if ( needed_size <= bucket_count() ) // we have enough buckets - return did_resize; - - size_type resize_to = - settings.min_buckets(table.num_nonempty() - num_deleted + delta, - bucket_count()); - if (resize_to < needed_size && // may double resize_to - resize_to < (std::numeric_limits::max)() / 2) { - // This situation means that we have enough deleted elements, - // that once we purge them, we won't actually have needed to - // grow. But we may want to grow anyway: if we just purge one - // element, say, we'll have to grow anyway next time we - // insert. Might as well grow now, since we're already going - // through the trouble of copying (in order to purge the - // deleted elements). - const size_type target = - static_cast(settings.shrink_size(resize_to*2)); - if (table.num_nonempty() - num_deleted + delta >= target) { - // Good, we won't be below the shrink threshhold even if we double. - resize_to *= 2; - } - } - - sparse_hashtable tmp(MoveDontCopy, *this, resize_to); - swap(tmp); // now we are tmp - return true; - } - - // Used to actually do the rehashing when we grow/shrink a hashtable - void copy_from(const sparse_hashtable &ht, size_type min_buckets_wanted) { - clear(); // clear table, set num_deleted to 0 - - // If we need to change the size of our table, do it now - const size_type resize_to = - settings.min_buckets(ht.size(), min_buckets_wanted); - if ( resize_to > bucket_count() ) { // we don't have enough buckets - table.resize(resize_to); // sets the number of buckets - settings.reset_thresholds(bucket_count()); - } - - // We use a normal iterator to get non-deleted bcks from ht - // We could use insert() here, but since we know there are - // no duplicates and no deleted items, we can be more efficient - assert((bucket_count() & (bucket_count()-1)) == 0); // a power of two - for ( const_iterator it = ht.begin(); it != ht.end(); ++it ) { - size_type num_probes = 0; // how many times we've probed - size_type bucknum; - const size_type bucket_count_minus_one = bucket_count() - 1; - for (bucknum = hash(get_key(*it)) & bucket_count_minus_one; - table.test(bucknum); // not empty - bucknum = (bucknum + JUMP_(key, num_probes)) & bucket_count_minus_one) { - ++num_probes; - assert(num_probes < bucket_count() - && "Hashtable is full: an error in key_equal<> or hash<>"); - } - table.set(bucknum, *it); // copies the value to here - } - settings.inc_num_ht_copies(); - } - - // Implementation is like copy_from, but it destroys the table of the - // "from" guy by freeing sparsetable memory as we iterate. This is - // useful in resizing, since we're throwing away the "from" guy anyway. - void move_from(MoveDontCopyT mover, sparse_hashtable &ht, - size_type min_buckets_wanted) { - clear(); // clear table, set num_deleted to 0 - - // If we need to change the size of our table, do it now - size_type resize_to; - if ( mover == MoveDontGrow ) - resize_to = ht.bucket_count(); // keep same size as old ht - else // MoveDontCopy - resize_to = settings.min_buckets(ht.size(), min_buckets_wanted); - if ( resize_to > bucket_count() ) { // we don't have enough buckets - table.resize(resize_to); // sets the number of buckets - settings.reset_thresholds(bucket_count()); - } - - // We use a normal iterator to get non-deleted bcks from ht - // We could use insert() here, but since we know there are - // no duplicates and no deleted items, we can be more efficient - assert( (bucket_count() & (bucket_count()-1)) == 0); // a power of two - // THIS IS THE MAJOR LINE THAT DIFFERS FROM COPY_FROM(): - for ( destructive_iterator it = ht.destructive_begin(); - it != ht.destructive_end(); ++it ) { - size_type num_probes = 0; // how many times we've probed - size_type bucknum; - for ( bucknum = hash(get_key(*it)) & (bucket_count()-1); // h % buck_cnt - table.test(bucknum); // not empty - bucknum = (bucknum + JUMP_(key, num_probes)) & (bucket_count()-1) ) { - ++num_probes; - assert(num_probes < bucket_count() - && "Hashtable is full: an error in key_equal<> or hash<>"); - } - table.set(bucknum, *it); // copies the value to here - } - settings.inc_num_ht_copies(); - } - - - // Required by the spec for hashed associative container - public: - // Though the docs say this should be num_buckets, I think it's much - // more useful as num_elements. As a special feature, calling with - // req_elements==0 will cause us to shrink if we can, saving space. - void resize(size_type req_elements) { // resize to this or larger - if ( settings.consider_shrink() || req_elements == 0 ) - maybe_shrink(); - if ( req_elements > table.num_nonempty() ) // we only grow - resize_delta(req_elements - table.num_nonempty()); - } - - // Get and change the value of shrink_factor and enlarge_factor. The - // description at the beginning of this file explains how to choose - // the values. Setting the shrink parameter to 0.0 ensures that the - // table never shrinks. - void get_resizing_parameters(float* shrink, float* grow) const { - *shrink = settings.shrink_factor(); - *grow = settings.enlarge_factor(); - } - void set_resizing_parameters(float shrink, float grow) { - settings.set_resizing_parameters(shrink, grow); - settings.reset_thresholds(bucket_count()); - } - - // CONSTRUCTORS -- as required by the specs, we take a size, - // but also let you specify a hashfunction, key comparator, - // and key extractor. We also define a copy constructor and =. - // DESTRUCTOR -- the default is fine, surprisingly. - explicit sparse_hashtable(size_type expected_max_items_in_table = 0, - const HashFcn& hf = HashFcn(), - const EqualKey& eql = EqualKey(), - const ExtractKey& ext = ExtractKey(), - const SetKey& set = SetKey(), - const Alloc& alloc = Alloc()) - : settings(hf), - key_info(ext, set, eql), - num_deleted(0), - table((expected_max_items_in_table == 0 - ? HT_DEFAULT_STARTING_BUCKETS - : settings.min_buckets(expected_max_items_in_table, 0)), - alloc) { - settings.reset_thresholds(bucket_count()); - } - - // As a convenience for resize(), we allow an optional second argument - // which lets you make this new hashtable a different size than ht. - // We also provide a mechanism of saying you want to "move" the ht argument - // into us instead of copying. - sparse_hashtable(const sparse_hashtable& ht, - size_type min_buckets_wanted = HT_DEFAULT_STARTING_BUCKETS) - : settings(ht.settings), - key_info(ht.key_info), - num_deleted(0), - table(0, ht.get_allocator()) { - settings.reset_thresholds(bucket_count()); - copy_from(ht, min_buckets_wanted); // copy_from() ignores deleted entries - } - sparse_hashtable(MoveDontCopyT mover, sparse_hashtable& ht, - size_type min_buckets_wanted = HT_DEFAULT_STARTING_BUCKETS) - : settings(ht.settings), - key_info(ht.key_info), - num_deleted(0), - table(0, ht.get_allocator()) { - settings.reset_thresholds(bucket_count()); - move_from(mover, ht, min_buckets_wanted); // ignores deleted entries - } - - sparse_hashtable& operator= (const sparse_hashtable& ht) { - if (&ht == this) return *this; // don't copy onto ourselves - settings = ht.settings; - key_info = ht.key_info; - num_deleted = ht.num_deleted; - // copy_from() calls clear and sets num_deleted to 0 too - copy_from(ht, HT_MIN_BUCKETS); - // we purposefully don't copy the allocator, which may not be copyable - return *this; - } - - // Many STL algorithms use swap instead of copy constructors - void swap(sparse_hashtable& ht) { - std::swap(settings, ht.settings); - std::swap(key_info, ht.key_info); - std::swap(num_deleted, ht.num_deleted); - table.swap(ht.table); - settings.reset_thresholds(bucket_count()); // also resets consider_shrink - ht.settings.reset_thresholds(ht.bucket_count()); - // we purposefully don't swap the allocator, which may not be swap-able - } - - // It's always nice to be able to clear a table without deallocating it - void clear() { - if (!empty() || (num_deleted != 0)) { - table.clear(); - } - settings.reset_thresholds(bucket_count()); - num_deleted = 0; - } - - // LOOKUP ROUTINES - private: - // Returns a pair of positions: 1st where the object is, 2nd where - // it would go if you wanted to insert it. 1st is ILLEGAL_BUCKET - // if object is not found; 2nd is ILLEGAL_BUCKET if it is. - // Note: because of deletions where-to-insert is not trivial: it's the - // first deleted bucket we see, as long as we don't find the key later - std::pair find_position(const key_type &key) const { - size_type num_probes = 0; // how many times we've probed - const size_type bucket_count_minus_one = bucket_count() - 1; - size_type bucknum = hash(key) & bucket_count_minus_one; - size_type insert_pos = ILLEGAL_BUCKET; // where we would insert - SPARSEHASH_STAT_UPDATE(total_lookups += 1); - while ( 1 ) { // probe until something happens - if ( !table.test(bucknum) ) { // bucket is empty - SPARSEHASH_STAT_UPDATE(total_probes += num_probes); - if ( insert_pos == ILLEGAL_BUCKET ) // found no prior place to insert - return std::pair(ILLEGAL_BUCKET, bucknum); - else - return std::pair(ILLEGAL_BUCKET, insert_pos); - - } else if ( test_deleted(bucknum) ) {// keep searching, but mark to insert - if ( insert_pos == ILLEGAL_BUCKET ) - insert_pos = bucknum; - - } else if ( equals(key, get_key(table.unsafe_get(bucknum))) ) { - SPARSEHASH_STAT_UPDATE(total_probes += num_probes); - return std::pair(bucknum, ILLEGAL_BUCKET); - } - ++num_probes; // we're doing another probe - bucknum = (bucknum + JUMP_(key, num_probes)) & bucket_count_minus_one; - assert(num_probes < bucket_count() - && "Hashtable is full: an error in key_equal<> or hash<>"); - } - } - - public: - - iterator find(const key_type& key) { - if ( size() == 0 ) return end(); - std::pair pos = find_position(key); - if ( pos.first == ILLEGAL_BUCKET ) // alas, not there - return end(); - else - return iterator(this, table.get_iter(pos.first), table.nonempty_end()); - } - - const_iterator find(const key_type& key) const { - if ( size() == 0 ) return end(); - std::pair pos = find_position(key); - if ( pos.first == ILLEGAL_BUCKET ) // alas, not there - return end(); - else - return const_iterator(this, - table.get_iter(pos.first), table.nonempty_end()); - } - - // This is a tr1 method: the bucket a given key is in, or what bucket - // it would be put in, if it were to be inserted. Shrug. - size_type bucket(const key_type& key) const { - std::pair pos = find_position(key); - return pos.first == ILLEGAL_BUCKET ? pos.second : pos.first; - } - - // Counts how many elements have key key. For maps, it's either 0 or 1. - size_type count(const key_type &key) const { - std::pair pos = find_position(key); - return pos.first == ILLEGAL_BUCKET ? 0 : 1; - } - - // Likewise, equal_range doesn't really make sense for us. Oh well. - std::pair equal_range(const key_type& key) { - iterator pos = find(key); // either an iterator or end - if (pos == end()) { - return std::pair(pos, pos); - } else { - const iterator startpos = pos++; - return std::pair(startpos, pos); - } - } - std::pair equal_range(const key_type& key) - const { - const_iterator pos = find(key); // either an iterator or end - if (pos == end()) { - return std::pair(pos, pos); - } else { - const const_iterator startpos = pos++; - return std::pair(startpos, pos); - } - } - - - // INSERTION ROUTINES - private: - // Private method used by insert_noresize and find_or_insert. - iterator insert_at(const_reference obj, size_type pos) { - if (size() >= max_size()) { - throw std::length_error("insert overflow"); - } - if ( test_deleted(pos) ) { // just replace if it's been deleted - // The set() below will undelete this object. We just worry about stats - assert(num_deleted > 0); - --num_deleted; // used to be, now it isn't - } - table.set(pos, obj); - return iterator(this, table.get_iter(pos), table.nonempty_end()); - } - - // If you know *this is big enough to hold obj, use this routine - std::pair insert_noresize(const_reference obj) { - // First, double-check we're not inserting delkey - assert((!settings.use_deleted() || !equals(get_key(obj), key_info.delkey)) - && "Inserting the deleted key"); - const std::pair pos = find_position(get_key(obj)); - if ( pos.first != ILLEGAL_BUCKET) { // object was already there - return std::pair(iterator(this, table.get_iter(pos.first), - table.nonempty_end()), - false); // false: we didn't insert - } else { // pos.second says where to put it - return std::pair(insert_at(obj, pos.second), true); - } - } - - // Specializations of insert(it, it) depending on the power of the iterator: - // (1) Iterator supports operator-, resize before inserting - template - void insert(ForwardIterator f, ForwardIterator l, std::forward_iterator_tag) { - size_t dist = std::distance(f, l); - if (dist >= (std::numeric_limits::max)()) { - throw std::length_error("insert-range overflow"); - } - resize_delta(static_cast(dist)); - for ( ; dist > 0; --dist, ++f) { - insert_noresize(*f); - } - } - - // (2) Arbitrary iterator, can't tell how much to resize - template - void insert(InputIterator f, InputIterator l, std::input_iterator_tag) { - for ( ; f != l; ++f) - insert(*f); - } - - public: - // This is the normal insert routine, used by the outside world - std::pair insert(const_reference obj) { - resize_delta(1); // adding an object, grow if need be - return insert_noresize(obj); - } - - // When inserting a lot at a time, we specialize on the type of iterator - template - void insert(InputIterator f, InputIterator l) { - // specializes on iterator type - insert(f, l, - typename std::iterator_traits::iterator_category()); - } - - // DefaultValue is a functor that takes a key and returns a value_type - // representing the default value to be inserted if none is found. - template - value_type& find_or_insert(const key_type& key) { - // First, double-check we're not inserting delkey - assert((!settings.use_deleted() || !equals(key, key_info.delkey)) - && "Inserting the deleted key"); - const std::pair pos = find_position(key); - DefaultValue default_value; - if ( pos.first != ILLEGAL_BUCKET) { // object was already there - return *table.get_iter(pos.first); - } else if (resize_delta(1)) { // needed to rehash to make room - // Since we resized, we can't use pos, so recalculate where to insert. - return *insert_noresize(default_value(key)).first; - } else { // no need to rehash, insert right here - return *insert_at(default_value(key), pos.second); - } - } - - // DELETION ROUTINES - size_type erase(const key_type& key) { - // First, double-check we're not erasing delkey. - assert((!settings.use_deleted() || !equals(key, key_info.delkey)) - && "Erasing the deleted key"); - assert(!settings.use_deleted() || !equals(key, key_info.delkey)); - const_iterator pos = find(key); // shrug: shouldn't need to be const - if ( pos != end() ) { - assert(!test_deleted(pos)); // or find() shouldn't have returned it - set_deleted(pos); - ++num_deleted; - // will think about shrink after next insert - settings.set_consider_shrink(true); - return 1; // because we deleted one thing - } else { - return 0; // because we deleted nothing - } - } - - // We return the iterator past the deleted item. - void erase(iterator pos) { - if ( pos == end() ) return; // sanity check - if ( set_deleted(pos) ) { // true if object has been newly deleted - ++num_deleted; - // will think about shrink after next insert - settings.set_consider_shrink(true); - } - } - - void erase(iterator f, iterator l) { - for ( ; f != l; ++f) { - if ( set_deleted(f) ) // should always be true - ++num_deleted; - } - // will think about shrink after next insert - settings.set_consider_shrink(true); - } - - // We allow you to erase a const_iterator just like we allow you to - // erase an iterator. This is in parallel to 'delete': you can delete - // a const pointer just like a non-const pointer. The logic is that - // you can't use the object after it's erased anyway, so it doesn't matter - // if it's const or not. - void erase(const_iterator pos) { - if ( pos == end() ) return; // sanity check - if ( set_deleted(pos) ) { // true if object has been newly deleted - ++num_deleted; - // will think about shrink after next insert - settings.set_consider_shrink(true); - } - } - void erase(const_iterator f, const_iterator l) { - for ( ; f != l; ++f) { - if ( set_deleted(f) ) // should always be true - ++num_deleted; - } - // will think about shrink after next insert - settings.set_consider_shrink(true); - } - - - // COMPARISON - bool operator==(const sparse_hashtable& ht) const { - if (size() != ht.size()) { - return false; - } else if (this == &ht) { - return true; - } else { - // Iterate through the elements in "this" and see if the - // corresponding element is in ht - for ( const_iterator it = begin(); it != end(); ++it ) { - const_iterator it2 = ht.find(get_key(*it)); - if ((it2 == ht.end()) || (*it != *it2)) { - return false; - } - } - return true; - } - } - bool operator!=(const sparse_hashtable& ht) const { - return !(*this == ht); - } - - - // I/O - // We support reading and writing hashtables to disk. NOTE that - // this only stores the hashtable metadata, not the stuff you've - // actually put in the hashtable! Alas, since I don't know how to - // write a hasher or key_equal, you have to make sure everything - // but the table is the same. We compact before writing. - // - // The OUTPUT type needs to support a Write() operation. File and - // OutputBuffer are appropriate types to pass in. - // - // The INPUT type needs to support a Read() operation. File and - // InputBuffer are appropriate types to pass in. - template - bool write_metadata(OUTPUT *fp) { - squash_deleted(); // so we don't have to worry about delkey - return table.write_metadata(fp); - } - - template - bool read_metadata(INPUT *fp) { - num_deleted = 0; // since we got rid before writing - const bool result = table.read_metadata(fp); - settings.reset_thresholds(bucket_count()); - return result; - } - - // Only meaningful if value_type is a POD. - template - bool write_nopointer_data(OUTPUT *fp) { - return table.write_nopointer_data(fp); - } - - // Only meaningful if value_type is a POD. - template - bool read_nopointer_data(INPUT *fp) { - return table.read_nopointer_data(fp); - } - - // INPUT and OUTPUT must be either a FILE, *or* a C++ stream - // (istream, ostream, etc) *or* a class providing - // Read(void*, size_t) and Write(const void*, size_t) - // (respectively), which writes a buffer into a stream - // (which the INPUT/OUTPUT instance presumably owns). - - typedef sparsehash_internal::pod_serializer NopointerSerializer; - - // ValueSerializer: a functor. operator()(OUTPUT*, const value_type&) - template - bool serialize(ValueSerializer serializer, OUTPUT *fp) { - squash_deleted(); // so we don't have to worry about delkey - return table.serialize(serializer, fp); - } - - // ValueSerializer: a functor. operator()(INPUT*, value_type*) - template - bool unserialize(ValueSerializer serializer, INPUT *fp) { - num_deleted = 0; // since we got rid before writing - const bool result = table.unserialize(serializer, fp); - settings.reset_thresholds(bucket_count()); - return result; - } - - private: - // Table is the main storage class. - typedef sparsetable Table; - - // Package templated functors with the other types to eliminate memory - // needed for storing these zero-size operators. Since ExtractKey and - // hasher's operator() might have the same function signature, they - // must be packaged in different classes. - struct Settings : - sparsehash_internal::sh_hashtable_settings { - explicit Settings(const hasher& hf) - : sparsehash_internal::sh_hashtable_settings( - hf, HT_OCCUPANCY_PCT / 100.0f, HT_EMPTY_PCT / 100.0f) {} - }; - - // KeyInfo stores delete key and packages zero-size functors: - // ExtractKey and SetKey. - class KeyInfo : public ExtractKey, public SetKey, public EqualKey { - public: - KeyInfo(const ExtractKey& ek, const SetKey& sk, const EqualKey& eq) - : ExtractKey(ek), - SetKey(sk), - EqualKey(eq) { - } - // We want to return the exact same type as ExtractKey: Key or const Key& - typename ExtractKey::result_type get_key(const_reference v) const { - return ExtractKey::operator()(v); - } - void set_key(pointer v, const key_type& k) const { - SetKey::operator()(v, k); - } - bool equals(const key_type& a, const key_type& b) const { - return EqualKey::operator()(a, b); - } - - // Which key marks deleted entries. - // TODO(csilvers): make a pointer, and get rid of use_deleted (benchmark!) - typename base::remove_const::type delkey; - }; - - // Utility functions to access the templated operators - size_type hash(const key_type& v) const { - return settings.hash(v); - } - bool equals(const key_type& a, const key_type& b) const { - return key_info.equals(a, b); - } - typename ExtractKey::result_type get_key(const_reference v) const { - return key_info.get_key(v); - } - void set_key(pointer v, const key_type& k) const { - key_info.set_key(v, k); - } - - private: - // Actual data - Settings settings; - KeyInfo key_info; - size_type num_deleted; // how many occupied buckets are marked deleted - Table table; // holds num_buckets and num_elements too -}; - - -// We need a global swap as well -template -inline void swap(sparse_hashtable &x, - sparse_hashtable &y) { - x.swap(y); -} - -#undef JUMP_ - -template -const typename sparse_hashtable::size_type - sparse_hashtable::ILLEGAL_BUCKET; - -// How full we let the table get before we resize. Knuth says .8 is -// good -- higher causes us to probe too much, though saves memory -template -const int sparse_hashtable::HT_OCCUPANCY_PCT = 80; - -// How empty we let the table get before we resize lower. -// It should be less than OCCUPANCY_PCT / 2 or we thrash resizing -template -const int sparse_hashtable::HT_EMPTY_PCT - = static_cast(0.4 * - sparse_hashtable::HT_OCCUPANCY_PCT); - -_END_GOOGLE_NAMESPACE_ - -#endif /* _SPARSEHASHTABLE_H_ */ diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/sparse_hash_map b/clipper/sparsehash-2.0.3/src/sparsehash/sparse_hash_map deleted file mode 100644 index 1687a8b..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/sparse_hash_map +++ /dev/null @@ -1,363 +0,0 @@ -// Copyright (c) 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// This is just a very thin wrapper over sparsehashtable.h, just -// like sgi stl's stl_hash_map is a very thin wrapper over -// stl_hashtable. The major thing we define is operator[], because -// we have a concept of a data_type which stl_hashtable doesn't -// (it only has a key and a value). -// -// We adhere mostly to the STL semantics for hash-map. One important -// exception is that insert() may invalidate iterators entirely -- STL -// semantics are that insert() may reorder iterators, but they all -// still refer to something valid in the hashtable. Not so for us. -// Likewise, insert() may invalidate pointers into the hashtable. -// (Whether insert invalidates iterators and pointers depends on -// whether it results in a hashtable resize). On the plus side, -// delete() doesn't invalidate iterators or pointers at all, or even -// change the ordering of elements. -// -// Here are a few "power user" tips: -// -// 1) set_deleted_key(): -// Unlike STL's hash_map, if you want to use erase() you -// *must* call set_deleted_key() after construction. -// -// 2) resize(0): -// When an item is deleted, its memory isn't freed right -// away. This is what allows you to iterate over a hashtable -// and call erase() without invalidating the iterator. -// To force the memory to be freed, call resize(0). -// For tr1 compatibility, this can also be called as rehash(0). -// -// 3) min_load_factor(0.0) -// Setting the minimum load factor to 0.0 guarantees that -// the hash table will never shrink. -// -// Roughly speaking: -// (1) dense_hash_map: fastest, uses the most memory unless entries are small -// (2) sparse_hash_map: slowest, uses the least memory -// (3) hash_map / unordered_map (STL): in the middle -// -// Typically I use sparse_hash_map when I care about space and/or when -// I need to save the hashtable on disk. I use hash_map otherwise. I -// don't personally use dense_hash_map ever; some people use it for -// small maps with lots of lookups. -// -// - dense_hash_map has, typically, about 78% memory overhead (if your -// data takes up X bytes, the hash_map uses .78X more bytes in overhead). -// - sparse_hash_map has about 4 bits overhead per entry. -// - sparse_hash_map can be 3-7 times slower than the others for lookup and, -// especially, inserts. See time_hash_map.cc for details. -// -// See /usr/(local/)?doc/sparsehash-*/sparse_hash_map.html -// for information about how to use this class. - -#ifndef _SPARSE_HASH_MAP_H_ -#define _SPARSE_HASH_MAP_H_ - -#include -#include // needed by stl_alloc -#include // for equal_to<>, select1st<>, etc -#include // for alloc -#include // for pair<> -#include -#include // IWYU pragma: export -#include HASH_FUN_H // for hash<> -_START_GOOGLE_NAMESPACE_ - -template , // defined in sparseconfig.h - class EqualKey = std::equal_to, - class Alloc = libc_allocator_with_realloc > > -class sparse_hash_map { - private: - // Apparently select1st is not stl-standard, so we define our own - struct SelectKey { - typedef const Key& result_type; - const Key& operator()(const std::pair& p) const { - return p.first; - } - }; - struct SetKey { - void operator()(std::pair* value, const Key& new_key) const { - *const_cast(&value->first) = new_key; - // It would be nice to clear the rest of value here as well, in - // case it's taking up a lot of memory. We do this by clearing - // the value. This assumes T has a zero-arg constructor! - value->second = T(); - } - }; - // For operator[]. - struct DefaultValue { - std::pair operator()(const Key& key) { - return std::make_pair(key, T()); - } - }; - - // The actual data - typedef sparse_hashtable, Key, HashFcn, SelectKey, - SetKey, EqualKey, Alloc> ht; - ht rep; - - public: - typedef typename ht::key_type key_type; - typedef T data_type; - typedef T mapped_type; - typedef typename ht::value_type value_type; - typedef typename ht::hasher hasher; - typedef typename ht::key_equal key_equal; - typedef Alloc allocator_type; - - typedef typename ht::size_type size_type; - typedef typename ht::difference_type difference_type; - typedef typename ht::pointer pointer; - typedef typename ht::const_pointer const_pointer; - typedef typename ht::reference reference; - typedef typename ht::const_reference const_reference; - - typedef typename ht::iterator iterator; - typedef typename ht::const_iterator const_iterator; - typedef typename ht::local_iterator local_iterator; - typedef typename ht::const_local_iterator const_local_iterator; - - // Iterator functions - iterator begin() { return rep.begin(); } - iterator end() { return rep.end(); } - const_iterator begin() const { return rep.begin(); } - const_iterator end() const { return rep.end(); } - - // These come from tr1's unordered_map. For us, a bucket has 0 or 1 elements. - local_iterator begin(size_type i) { return rep.begin(i); } - local_iterator end(size_type i) { return rep.end(i); } - const_local_iterator begin(size_type i) const { return rep.begin(i); } - const_local_iterator end(size_type i) const { return rep.end(i); } - - // Accessor functions - allocator_type get_allocator() const { return rep.get_allocator(); } - hasher hash_funct() const { return rep.hash_funct(); } - hasher hash_function() const { return hash_funct(); } - key_equal key_eq() const { return rep.key_eq(); } - - - // Constructors - explicit sparse_hash_map(size_type expected_max_items_in_table = 0, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& alloc = allocator_type()) - : rep(expected_max_items_in_table, hf, eql, SelectKey(), SetKey(), alloc) { - } - - template - sparse_hash_map(InputIterator f, InputIterator l, - size_type expected_max_items_in_table = 0, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& alloc = allocator_type()) - : rep(expected_max_items_in_table, hf, eql, SelectKey(), SetKey(), alloc) { - rep.insert(f, l); - } - // We use the default copy constructor - // We use the default operator=() - // We use the default destructor - - void clear() { rep.clear(); } - void swap(sparse_hash_map& hs) { rep.swap(hs.rep); } - - - // Functions concerning size - size_type size() const { return rep.size(); } - size_type max_size() const { return rep.max_size(); } - bool empty() const { return rep.empty(); } - size_type bucket_count() const { return rep.bucket_count(); } - size_type max_bucket_count() const { return rep.max_bucket_count(); } - - // These are tr1 methods. bucket() is the bucket the key is or would be in. - size_type bucket_size(size_type i) const { return rep.bucket_size(i); } - size_type bucket(const key_type& key) const { return rep.bucket(key); } - float load_factor() const { - return size() * 1.0f / bucket_count(); - } - float max_load_factor() const { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - return grow; - } - void max_load_factor(float new_grow) { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - rep.set_resizing_parameters(shrink, new_grow); - } - // These aren't tr1 methods but perhaps ought to be. - float min_load_factor() const { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - return shrink; - } - void min_load_factor(float new_shrink) { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - rep.set_resizing_parameters(new_shrink, grow); - } - // Deprecated; use min_load_factor() or max_load_factor() instead. - void set_resizing_parameters(float shrink, float grow) { - rep.set_resizing_parameters(shrink, grow); - } - - void resize(size_type hint) { rep.resize(hint); } - void rehash(size_type hint) { resize(hint); } // the tr1 name - - // Lookup routines - iterator find(const key_type& key) { return rep.find(key); } - const_iterator find(const key_type& key) const { return rep.find(key); } - - data_type& operator[](const key_type& key) { // This is our value-add! - // If key is in the hashtable, returns find(key)->second, - // otherwise returns insert(value_type(key, T()).first->second. - // Note it does not create an empty T unless the find fails. - return rep.template find_or_insert(key).second; - } - - size_type count(const key_type& key) const { return rep.count(key); } - - std::pair equal_range(const key_type& key) { - return rep.equal_range(key); - } - std::pair equal_range(const key_type& key) - const { - return rep.equal_range(key); - } - - // Insertion routines - std::pair insert(const value_type& obj) { - return rep.insert(obj); - } - template void insert(InputIterator f, InputIterator l) { - rep.insert(f, l); - } - void insert(const_iterator f, const_iterator l) { - rep.insert(f, l); - } - // Required for std::insert_iterator; the passed-in iterator is ignored. - iterator insert(iterator, const value_type& obj) { - return insert(obj).first; - } - - // Deletion routines - // THESE ARE NON-STANDARD! I make you specify an "impossible" key - // value to identify deleted buckets. You can change the key as - // time goes on, or get rid of it entirely to be insert-only. - void set_deleted_key(const key_type& key) { - rep.set_deleted_key(key); - } - void clear_deleted_key() { rep.clear_deleted_key(); } - key_type deleted_key() const { return rep.deleted_key(); } - - // These are standard - size_type erase(const key_type& key) { return rep.erase(key); } - void erase(iterator it) { rep.erase(it); } - void erase(iterator f, iterator l) { rep.erase(f, l); } - - - // Comparison - bool operator==(const sparse_hash_map& hs) const { return rep == hs.rep; } - bool operator!=(const sparse_hash_map& hs) const { return rep != hs.rep; } - - - // I/O -- this is an add-on for writing metainformation to disk - // - // For maximum flexibility, this does not assume a particular - // file type (though it will probably be a FILE *). We just pass - // the fp through to rep. - - // If your keys and values are simple enough, you can pass this - // serializer to serialize()/unserialize(). "Simple enough" means - // value_type is a POD type that contains no pointers. Note, - // however, we don't try to normalize endianness. - typedef typename ht::NopointerSerializer NopointerSerializer; - - // serializer: a class providing operator()(OUTPUT*, const value_type&) - // (writing value_type to OUTPUT). You can specify a - // NopointerSerializer object if appropriate (see above). - // fp: either a FILE*, OR an ostream*/subclass_of_ostream*, OR a - // pointer to a class providing size_t Write(const void*, size_t), - // which writes a buffer into a stream (which fp presumably - // owns) and returns the number of bytes successfully written. - // Note basic_ostream is not currently supported. - template - bool serialize(ValueSerializer serializer, OUTPUT* fp) { - return rep.serialize(serializer, fp); - } - - // serializer: a functor providing operator()(INPUT*, value_type*) - // (reading from INPUT and into value_type). You can specify a - // NopointerSerializer object if appropriate (see above). - // fp: either a FILE*, OR an istream*/subclass_of_istream*, OR a - // pointer to a class providing size_t Read(void*, size_t), - // which reads into a buffer from a stream (which fp presumably - // owns) and returns the number of bytes successfully read. - // Note basic_istream is not currently supported. - // NOTE: Since value_type is std::pair, ValueSerializer - // may need to do a const cast in order to fill in the key. - // NOTE: if Key or T are not POD types, the serializer MUST use - // placement-new to initialize their values, rather than a normal - // equals-assignment or similar. (The value_type* passed into the - // serializer points to garbage memory.) - template - bool unserialize(ValueSerializer serializer, INPUT* fp) { - return rep.unserialize(serializer, fp); - } - - // The four methods below are DEPRECATED. - // Use serialize() and unserialize() for new code. - template - bool write_metadata(OUTPUT *fp) { return rep.write_metadata(fp); } - - template - bool read_metadata(INPUT *fp) { return rep.read_metadata(fp); } - - template - bool write_nopointer_data(OUTPUT *fp) { return rep.write_nopointer_data(fp); } - - template - bool read_nopointer_data(INPUT *fp) { return rep.read_nopointer_data(fp); } -}; - -// We need a global swap as well -template -inline void swap(sparse_hash_map& hm1, - sparse_hash_map& hm2) { - hm1.swap(hm2); -} - -_END_GOOGLE_NAMESPACE_ - -#endif /* _SPARSE_HASH_MAP_H_ */ diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/sparse_hash_set b/clipper/sparsehash-2.0.3/src/sparsehash/sparse_hash_set deleted file mode 100644 index ae4a97a..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/sparse_hash_set +++ /dev/null @@ -1,338 +0,0 @@ -// Copyright (c) 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// This is just a very thin wrapper over sparsehashtable.h, just -// like sgi stl's stl_hash_set is a very thin wrapper over -// stl_hashtable. The major thing we define is operator[], because -// we have a concept of a data_type which stl_hashtable doesn't -// (it only has a key and a value). -// -// This is more different from sparse_hash_map than you might think, -// because all iterators for sets are const (you obviously can't -// change the key, and for sets there is no value). -// -// We adhere mostly to the STL semantics for hash-map. One important -// exception is that insert() may invalidate iterators entirely -- STL -// semantics are that insert() may reorder iterators, but they all -// still refer to something valid in the hashtable. Not so for us. -// Likewise, insert() may invalidate pointers into the hashtable. -// (Whether insert invalidates iterators and pointers depends on -// whether it results in a hashtable resize). On the plus side, -// delete() doesn't invalidate iterators or pointers at all, or even -// change the ordering of elements. -// -// Here are a few "power user" tips: -// -// 1) set_deleted_key(): -// Unlike STL's hash_map, if you want to use erase() you -// *must* call set_deleted_key() after construction. -// -// 2) resize(0): -// When an item is deleted, its memory isn't freed right -// away. This allows you to iterate over a hashtable, -// and call erase(), without invalidating the iterator. -// To force the memory to be freed, call resize(0). -// For tr1 compatibility, this can also be called as rehash(0). -// -// 3) min_load_factor(0.0) -// Setting the minimum load factor to 0.0 guarantees that -// the hash table will never shrink. -// -// Roughly speaking: -// (1) dense_hash_set: fastest, uses the most memory unless entries are small -// (2) sparse_hash_set: slowest, uses the least memory -// (3) hash_set / unordered_set (STL): in the middle -// -// Typically I use sparse_hash_set when I care about space and/or when -// I need to save the hashtable on disk. I use hash_set otherwise. I -// don't personally use dense_hash_set ever; some people use it for -// small sets with lots of lookups. -// -// - dense_hash_set has, typically, about 78% memory overhead (if your -// data takes up X bytes, the hash_set uses .78X more bytes in overhead). -// - sparse_hash_set has about 4 bits overhead per entry. -// - sparse_hash_set can be 3-7 times slower than the others for lookup and, -// especially, inserts. See time_hash_map.cc for details. -// -// See /usr/(local/)?doc/sparsehash-*/sparse_hash_set.html -// for information about how to use this class. - -#ifndef _SPARSE_HASH_SET_H_ -#define _SPARSE_HASH_SET_H_ - -#include -#include // needed by stl_alloc -#include // for equal_to<> -#include // for alloc (which we don't use) -#include // for pair<> -#include -#include // IWYU pragma: export -#include HASH_FUN_H // for hash<> - -_START_GOOGLE_NAMESPACE_ - -template , // defined in sparseconfig.h - class EqualKey = std::equal_to, - class Alloc = libc_allocator_with_realloc > -class sparse_hash_set { - private: - // Apparently identity is not stl-standard, so we define our own - struct Identity { - typedef const Value& result_type; - const Value& operator()(const Value& v) const { return v; } - }; - struct SetKey { - void operator()(Value* value, const Value& new_key) const { - *value = new_key; - } - }; - - typedef sparse_hashtable ht; - ht rep; - - public: - typedef typename ht::key_type key_type; - typedef typename ht::value_type value_type; - typedef typename ht::hasher hasher; - typedef typename ht::key_equal key_equal; - typedef Alloc allocator_type; - - typedef typename ht::size_type size_type; - typedef typename ht::difference_type difference_type; - typedef typename ht::const_pointer pointer; - typedef typename ht::const_pointer const_pointer; - typedef typename ht::const_reference reference; - typedef typename ht::const_reference const_reference; - - typedef typename ht::const_iterator iterator; - typedef typename ht::const_iterator const_iterator; - typedef typename ht::const_local_iterator local_iterator; - typedef typename ht::const_local_iterator const_local_iterator; - - - // Iterator functions -- recall all iterators are const - iterator begin() const { return rep.begin(); } - iterator end() const { return rep.end(); } - - // These come from tr1's unordered_set. For us, a bucket has 0 or 1 elements. - local_iterator begin(size_type i) const { return rep.begin(i); } - local_iterator end(size_type i) const { return rep.end(i); } - - - // Accessor functions - allocator_type get_allocator() const { return rep.get_allocator(); } - hasher hash_funct() const { return rep.hash_funct(); } - hasher hash_function() const { return hash_funct(); } // tr1 name - key_equal key_eq() const { return rep.key_eq(); } - - - // Constructors - explicit sparse_hash_set(size_type expected_max_items_in_table = 0, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& alloc = allocator_type()) - : rep(expected_max_items_in_table, hf, eql, Identity(), SetKey(), alloc) { - } - - template - sparse_hash_set(InputIterator f, InputIterator l, - size_type expected_max_items_in_table = 0, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& alloc = allocator_type()) - : rep(expected_max_items_in_table, hf, eql, Identity(), SetKey(), alloc) { - rep.insert(f, l); - } - // We use the default copy constructor - // We use the default operator=() - // We use the default destructor - - void clear() { rep.clear(); } - void swap(sparse_hash_set& hs) { rep.swap(hs.rep); } - - - // Functions concerning size - size_type size() const { return rep.size(); } - size_type max_size() const { return rep.max_size(); } - bool empty() const { return rep.empty(); } - size_type bucket_count() const { return rep.bucket_count(); } - size_type max_bucket_count() const { return rep.max_bucket_count(); } - - // These are tr1 methods. bucket() is the bucket the key is or would be in. - size_type bucket_size(size_type i) const { return rep.bucket_size(i); } - size_type bucket(const key_type& key) const { return rep.bucket(key); } - float load_factor() const { - return size() * 1.0f / bucket_count(); - } - float max_load_factor() const { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - return grow; - } - void max_load_factor(float new_grow) { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - rep.set_resizing_parameters(shrink, new_grow); - } - // These aren't tr1 methods but perhaps ought to be. - float min_load_factor() const { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - return shrink; - } - void min_load_factor(float new_shrink) { - float shrink, grow; - rep.get_resizing_parameters(&shrink, &grow); - rep.set_resizing_parameters(new_shrink, grow); - } - // Deprecated; use min_load_factor() or max_load_factor() instead. - void set_resizing_parameters(float shrink, float grow) { - rep.set_resizing_parameters(shrink, grow); - } - - void resize(size_type hint) { rep.resize(hint); } - void rehash(size_type hint) { resize(hint); } // the tr1 name - - // Lookup routines - iterator find(const key_type& key) const { return rep.find(key); } - - size_type count(const key_type& key) const { return rep.count(key); } - - std::pair equal_range(const key_type& key) const { - return rep.equal_range(key); - } - - - // Insertion routines - std::pair insert(const value_type& obj) { - std::pair p = rep.insert(obj); - return std::pair(p.first, p.second); // const to non-const - } - template void insert(InputIterator f, InputIterator l) { - rep.insert(f, l); - } - void insert(const_iterator f, const_iterator l) { - rep.insert(f, l); - } - // Required for std::insert_iterator; the passed-in iterator is ignored. - iterator insert(iterator, const value_type& obj) { - return insert(obj).first; - } - - // Deletion routines - // THESE ARE NON-STANDARD! I make you specify an "impossible" key - // value to identify deleted buckets. You can change the key as - // time goes on, or get rid of it entirely to be insert-only. - void set_deleted_key(const key_type& key) { rep.set_deleted_key(key); } - void clear_deleted_key() { rep.clear_deleted_key(); } - key_type deleted_key() const { return rep.deleted_key(); } - - // These are standard - size_type erase(const key_type& key) { return rep.erase(key); } - void erase(iterator it) { rep.erase(it); } - void erase(iterator f, iterator l) { rep.erase(f, l); } - - - // Comparison - bool operator==(const sparse_hash_set& hs) const { return rep == hs.rep; } - bool operator!=(const sparse_hash_set& hs) const { return rep != hs.rep; } - - - // I/O -- this is an add-on for writing metainformation to disk - // - // For maximum flexibility, this does not assume a particular - // file type (though it will probably be a FILE *). We just pass - // the fp through to rep. - - // If your keys and values are simple enough, you can pass this - // serializer to serialize()/unserialize(). "Simple enough" means - // value_type is a POD type that contains no pointers. Note, - // however, we don't try to normalize endianness. - typedef typename ht::NopointerSerializer NopointerSerializer; - - // serializer: a class providing operator()(OUTPUT*, const value_type&) - // (writing value_type to OUTPUT). You can specify a - // NopointerSerializer object if appropriate (see above). - // fp: either a FILE*, OR an ostream*/subclass_of_ostream*, OR a - // pointer to a class providing size_t Write(const void*, size_t), - // which writes a buffer into a stream (which fp presumably - // owns) and returns the number of bytes successfully written. - // Note basic_ostream is not currently supported. - template - bool serialize(ValueSerializer serializer, OUTPUT* fp) { - return rep.serialize(serializer, fp); - } - - // serializer: a functor providing operator()(INPUT*, value_type*) - // (reading from INPUT and into value_type). You can specify a - // NopointerSerializer object if appropriate (see above). - // fp: either a FILE*, OR an istream*/subclass_of_istream*, OR a - // pointer to a class providing size_t Read(void*, size_t), - // which reads into a buffer from a stream (which fp presumably - // owns) and returns the number of bytes successfully read. - // Note basic_istream is not currently supported. - // NOTE: Since value_type is const Key, ValueSerializer - // may need to do a const cast in order to fill in the key. - // NOTE: if Key is not a POD type, the serializer MUST use - // placement-new to initialize its value, rather than a normal - // equals-assignment or similar. (The value_type* passed into - // the serializer points to garbage memory.) - template - bool unserialize(ValueSerializer serializer, INPUT* fp) { - return rep.unserialize(serializer, fp); - } - - // The four methods below are DEPRECATED. - // Use serialize() and unserialize() for new code. - template - bool write_metadata(OUTPUT *fp) { return rep.write_metadata(fp); } - - template - bool read_metadata(INPUT *fp) { return rep.read_metadata(fp); } - - template - bool write_nopointer_data(OUTPUT *fp) { return rep.write_nopointer_data(fp); } - - template - bool read_nopointer_data(INPUT *fp) { return rep.read_nopointer_data(fp); } -}; - -template -inline void swap(sparse_hash_set& hs1, - sparse_hash_set& hs2) { - hs1.swap(hs2); -} - -_END_GOOGLE_NAMESPACE_ - -#endif /* _SPARSE_HASH_SET_H_ */ diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/sparsetable b/clipper/sparsehash-2.0.3/src/sparsehash/sparsetable deleted file mode 100644 index efbeaac..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/sparsetable +++ /dev/null @@ -1,1820 +0,0 @@ -// Copyright (c) 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// -// A sparsetable is a random container that implements a sparse array, -// that is, an array that uses very little memory to store unassigned -// indices (in this case, between 1-2 bits per unassigned index). For -// instance, if you allocate an array of size 5 and assign a[2] = , then a[2] will take up a lot of memory but a[0], a[1], -// a[3], and a[4] will not. Array elements that have a value are -// called "assigned". Array elements that have no value yet, or have -// had their value cleared using erase() or clear(), are called -// "unassigned". -// -// Unassigned values seem to have the default value of T (see below). -// Nevertheless, there is a difference between an unassigned index and -// one explicitly assigned the value of T(). The latter is considered -// assigned. -// -// Access to an array element is constant time, as is insertion and -// deletion. Insertion and deletion may be fairly slow, however: -// because of this container's memory economy, each insert and delete -// causes a memory reallocation. -// -// NOTE: You should not test(), get(), or set() any index that is -// greater than sparsetable.size(). If you need to do that, call -// resize() first. -// -// --- Template parameters -// PARAMETER DESCRIPTION DEFAULT -// T The value of the array: the type of -- -// object that is stored in the array. -// -// GROUP_SIZE How large each "group" in the table 48 -// is (see below). Larger values use -// a little less memory but cause most -// operations to be a little slower -// -// Alloc: Allocator to use to allocate memory. libc_allocator_with_realloc -// -// --- Model of -// Random Access Container -// -// --- Type requirements -// T must be Copy Constructible. It need not be Assignable. -// -// --- Public base classes -// None. -// -// --- Members -// Type members -// -// MEMBER WHERE DEFINED DESCRIPTION -// value_type container The type of object, T, stored in the array -// allocator_type container Allocator to use -// pointer container Pointer to p -// const_pointer container Const pointer to p -// reference container Reference to t -// const_reference container Const reference to t -// size_type container An unsigned integral type -// difference_type container A signed integral type -// iterator [*] container Iterator used to iterate over a sparsetable -// const_iterator container Const iterator used to iterate over a table -// reverse_iterator reversible Iterator used to iterate backwards over -// container a sparsetable -// const_reverse_iterator reversible container Guess -// nonempty_iterator [+] sparsetable Iterates over assigned -// array elements only -// const_nonempty_iterator sparsetable Iterates over assigned -// array elements only -// reverse_nonempty_iterator sparsetable Iterates backwards over -// assigned array elements only -// const_reverse_nonempty_iterator sparsetable Iterates backwards over -// assigned array elements only -// -// [*] All iterators are const in a sparsetable (though nonempty_iterators -// may not be). Use get() and set() to assign values, not iterators. -// -// [+] iterators are random-access iterators. nonempty_iterators are -// bidirectional iterators. - -// Iterator members -// MEMBER WHERE DEFINED DESCRIPTION -// -// iterator begin() container An iterator to the beginning of the table -// iterator end() container An iterator to the end of the table -// const_iterator container A const_iterator pointing to the -// begin() const beginning of a sparsetable -// const_iterator container A const_iterator pointing to the -// end() const end of a sparsetable -// -// reverse_iterator reversable Points to beginning of a reversed -// rbegin() container sparsetable -// reverse_iterator reversable Points to end of a reversed table -// rend() container -// const_reverse_iterator reversable Points to beginning of a -// rbegin() const container reversed sparsetable -// const_reverse_iterator reversable Points to end of a reversed table -// rend() const container -// -// nonempty_iterator sparsetable Points to first assigned element -// begin() of a sparsetable -// nonempty_iterator sparsetable Points past last assigned element -// end() of a sparsetable -// const_nonempty_iterator sparsetable Points to first assigned element -// begin() const of a sparsetable -// const_nonempty_iterator sparsetable Points past last assigned element -// end() const of a sparsetable -// -// reverse_nonempty_iterator sparsetable Points to first assigned element -// begin() of a reversed sparsetable -// reverse_nonempty_iterator sparsetable Points past last assigned element -// end() of a reversed sparsetable -// const_reverse_nonempty_iterator sparsetable Points to first assigned -// begin() const elt of a reversed sparsetable -// const_reverse_nonempty_iterator sparsetable Points past last assigned -// end() const elt of a reversed sparsetable -// -// -// Other members -// MEMBER WHERE DEFINED DESCRIPTION -// sparsetable() sparsetable A table of size 0; must resize() -// before using. -// sparsetable(size_type size) sparsetable A table of size size. All -// indices are unassigned. -// sparsetable( -// const sparsetable &tbl) sparsetable Copy constructor -// ~sparsetable() sparsetable The destructor -// sparsetable &operator=( sparsetable The assignment operator -// const sparsetable &tbl) -// -// void resize(size_type size) sparsetable Grow or shrink a table to -// have size indices [*] -// -// void swap(sparsetable &x) sparsetable Swap two sparsetables -// void swap(sparsetable &x, sparsetable Swap two sparsetables -// sparsetable &y) (global, not member, function) -// -// size_type size() const sparsetable Number of "buckets" in the table -// size_type max_size() const sparsetable Max allowed size of a sparsetable -// bool empty() const sparsetable true if size() == 0 -// size_type num_nonempty() const sparsetable Number of assigned "buckets" -// -// const_reference get( sparsetable Value at index i, or default -// size_type i) const value if i is unassigned -// const_reference operator[]( sparsetable Identical to get(i) [+] -// difference_type i) const -// reference set(size_type i, sparsetable Set element at index i to -// const_reference val) be a copy of val -// bool test(size_type i) sparsetable True if element at index i -// const has been assigned to -// bool test(iterator pos) sparsetable True if element pointed to -// const by pos has been assigned to -// void erase(iterator pos) sparsetable Set element pointed to by -// pos to be unassigned [!] -// void erase(size_type i) sparsetable Set element i to be unassigned -// void erase(iterator start, sparsetable Erases all elements between -// iterator end) start and end -// void clear() sparsetable Erases all elements in the table -// -// I/O versions exist for both FILE* and for File* (Google2-style files): -// bool write_metadata(FILE *fp) sparsetable Writes a sparsetable to the -// bool write_metadata(File *fp) given file. true if write -// completes successfully -// bool read_metadata(FILE *fp) sparsetable Replaces sparsetable with -// bool read_metadata(File *fp) version read from fp. true -// if read completes sucessfully -// bool write_nopointer_data(FILE *fp) Read/write the data stored in -// bool read_nopointer_data(FILE*fp) the table, if it's simple -// -// bool operator==( forward Tests two tables for equality. -// const sparsetable &t1, container This is a global function, -// const sparsetable &t2) not a member function. -// bool operator<( forward Lexicographical comparison. -// const sparsetable &t1, container This is a global function, -// const sparsetable &t2) not a member function. -// -// [*] If you shrink a sparsetable using resize(), assigned elements -// past the end of the table are removed using erase(). If you grow -// a sparsetable, new unassigned indices are created. -// -// [+] Note that operator[] returns a const reference. You must use -// set() to change the value of a table element. -// -// [!] Unassignment also calls the destructor. -// -// Iterators are invalidated whenever an item is inserted or -// deleted (ie set() or erase() is used) or when the size of -// the table changes (ie resize() or clear() is used). -// -// See doc/sparsetable.html for more information about how to use this class. - -// Note: this uses STL style for naming, rather than Google naming. -// That's because this is an STL-y container - -#ifndef UTIL_GTL_SPARSETABLE_H_ -#define UTIL_GTL_SPARSETABLE_H_ - -#include -#include // for malloc/free -#include // to read/write tables -#include // for memcpy -#ifdef HAVE_STDINT_H -#include // the normal place uint16_t is defined -#endif -#ifdef HAVE_SYS_TYPES_H -#include // the normal place u_int16_t is defined -#endif -#ifdef HAVE_INTTYPES_H -#include // a third place for uint16_t or u_int16_t -#endif -#include // for bounds checking -#include // to define reverse_iterator for me -#include // equal, lexicographical_compare, swap,... -#include // uninitialized_copy, uninitialized_fill -#include // a sparsetable is a vector of groups -#include -#include -#include - -// A lot of work to get a type that's guaranteed to be 16 bits... -#ifndef HAVE_U_INT16_T -# if defined HAVE_UINT16_T - typedef uint16_t u_int16_t; // true on solaris, possibly other C99 libc's -# elif defined HAVE___UINT16 - typedef __int16 int16_t; // true on vc++7 - typedef unsigned __int16 u_int16_t; -# else - // Cannot find a 16-bit integer type. Hoping for the best with "short"... - typedef short int int16_t; - typedef unsigned short int u_int16_t; -# endif -#endif - -_START_GOOGLE_NAMESPACE_ - -namespace base { // just to make google->opensource transition easier -using GOOGLE_NAMESPACE::true_type; -using GOOGLE_NAMESPACE::false_type; -using GOOGLE_NAMESPACE::integral_constant; -using GOOGLE_NAMESPACE::has_trivial_copy; -using GOOGLE_NAMESPACE::has_trivial_destructor; -using GOOGLE_NAMESPACE::is_same; -} - - -// The smaller this is, the faster lookup is (because the group bitmap is -// smaller) and the faster insert is, because there's less to move. -// On the other hand, there are more groups. Since group::size_type is -// a short, this number should be of the form 32*x + 16 to avoid waste. -static const u_int16_t DEFAULT_SPARSEGROUP_SIZE = 48; // fits in 1.5 words - - -// Our iterator as simple as iterators can be: basically it's just -// the index into our table. Dereference, the only complicated -// thing, we punt to the table class. This just goes to show how -// much machinery STL requires to do even the most trivial tasks. -// -// A NOTE ON ASSIGNING: -// A sparse table does not actually allocate memory for entries -// that are not filled. Because of this, it becomes complicated -// to have a non-const iterator: we don't know, if the iterator points -// to a not-filled bucket, whether you plan to fill it with something -// or whether you plan to read its value (in which case you'll get -// the default bucket value). Therefore, while we can define const -// operations in a pretty 'normal' way, for non-const operations, we -// define something that returns a helper object with operator= and -// operator& that allocate a bucket lazily. We use this for table[] -// and also for regular table iterators. - -template -class table_element_adaptor { - public: - typedef typename tabletype::value_type value_type; - typedef typename tabletype::size_type size_type; - typedef typename tabletype::reference reference; - typedef typename tabletype::pointer pointer; - - table_element_adaptor(tabletype *tbl, size_type p) - : table(tbl), pos(p) { } - table_element_adaptor& operator= (const value_type &val) { - table->set(pos, val); - return *this; - } - operator value_type() { return table->get(pos); } // we look like a value - pointer operator& () { return &table->mutating_get(pos); } - - private: - tabletype* table; - size_type pos; -}; - -// Our iterator as simple as iterators can be: basically it's just -// the index into our table. Dereference, the only complicated -// thing, we punt to the table class. This just goes to show how -// much machinery STL requires to do even the most trivial tasks. -// -// By templatizing over tabletype, we have one iterator type which -// we can use for both sparsetables and sparsebins. In fact it -// works on any class that allows size() and operator[] (eg vector), -// as long as it does the standard STL typedefs too (eg value_type). - -template -class table_iterator { - public: - typedef table_iterator iterator; - - typedef std::random_access_iterator_tag iterator_category; - typedef typename tabletype::value_type value_type; - typedef typename tabletype::difference_type difference_type; - typedef typename tabletype::size_type size_type; - typedef table_element_adaptor reference; - typedef table_element_adaptor* pointer; - - // The "real" constructor - table_iterator(tabletype *tbl, size_type p) - : table(tbl), pos(p) { } - // The default constructor, used when I define vars of type table::iterator - table_iterator() : table(NULL), pos(0) { } - // The copy constructor, for when I say table::iterator foo = tbl.begin() - // The default destructor is fine; we don't define one - // The default operator= is fine; we don't define one - - // The main thing our iterator does is dereference. If the table entry - // we point to is empty, we return the default value type. - // This is the big different function from the const iterator. - reference operator*() { - return table_element_adaptor(table, pos); - } - pointer operator->() { return &(operator*()); } - - // Helper function to assert things are ok; eg pos is still in range - void check() const { - assert(table); - assert(pos <= table->size()); - } - - // Arithmetic: we just do arithmetic on pos. We don't even need to - // do bounds checking, since STL doesn't consider that its job. :-) - iterator& operator+=(size_type t) { pos += t; check(); return *this; } - iterator& operator-=(size_type t) { pos -= t; check(); return *this; } - iterator& operator++() { ++pos; check(); return *this; } - iterator& operator--() { --pos; check(); return *this; } - iterator operator++(int) { iterator tmp(*this); // for x++ - ++pos; check(); return tmp; } - iterator operator--(int) { iterator tmp(*this); // for x-- - --pos; check(); return tmp; } - iterator operator+(difference_type i) const { iterator tmp(*this); - tmp += i; return tmp; } - iterator operator-(difference_type i) const { iterator tmp(*this); - tmp -= i; return tmp; } - difference_type operator-(iterator it) const { // for "x = it2 - it" - assert(table == it.table); - return pos - it.pos; - } - reference operator[](difference_type n) const { - return *(*this + n); // simple though not totally efficient - } - - // Comparisons. - bool operator==(const iterator& it) const { - return table == it.table && pos == it.pos; - } - bool operator<(const iterator& it) const { - assert(table == it.table); // life is bad bad bad otherwise - return pos < it.pos; - } - bool operator!=(const iterator& it) const { return !(*this == it); } - bool operator<=(const iterator& it) const { return !(it < *this); } - bool operator>(const iterator& it) const { return it < *this; } - bool operator>=(const iterator& it) const { return !(*this < it); } - - // Here's the info we actually need to be an iterator - tabletype *table; // so we can dereference and bounds-check - size_type pos; // index into the table -}; - -// support for "3 + iterator" has to be defined outside the class, alas -template -table_iterator operator+(typename table_iterator::difference_type i, - table_iterator it) { - return it + i; // so people can say it2 = 3 + it -} - -template -class const_table_iterator { - public: - typedef table_iterator iterator; - typedef const_table_iterator const_iterator; - - typedef std::random_access_iterator_tag iterator_category; - typedef typename tabletype::value_type value_type; - typedef typename tabletype::difference_type difference_type; - typedef typename tabletype::size_type size_type; - typedef typename tabletype::const_reference reference; // we're const-only - typedef typename tabletype::const_pointer pointer; - - // The "real" constructor - const_table_iterator(const tabletype *tbl, size_type p) - : table(tbl), pos(p) { } - // The default constructor, used when I define vars of type table::iterator - const_table_iterator() : table(NULL), pos(0) { } - // The copy constructor, for when I say table::iterator foo = tbl.begin() - // Also converts normal iterators to const iterators - const_table_iterator(const iterator &from) - : table(from.table), pos(from.pos) { } - // The default destructor is fine; we don't define one - // The default operator= is fine; we don't define one - - // The main thing our iterator does is dereference. If the table entry - // we point to is empty, we return the default value type. - reference operator*() const { return (*table)[pos]; } - pointer operator->() const { return &(operator*()); } - - // Helper function to assert things are ok; eg pos is still in range - void check() const { - assert(table); - assert(pos <= table->size()); - } - - // Arithmetic: we just do arithmetic on pos. We don't even need to - // do bounds checking, since STL doesn't consider that its job. :-) - const_iterator& operator+=(size_type t) { pos += t; check(); return *this; } - const_iterator& operator-=(size_type t) { pos -= t; check(); return *this; } - const_iterator& operator++() { ++pos; check(); return *this; } - const_iterator& operator--() { --pos; check(); return *this; } - const_iterator operator++(int) { const_iterator tmp(*this); // for x++ - ++pos; check(); return tmp; } - const_iterator operator--(int) { const_iterator tmp(*this); // for x-- - --pos; check(); return tmp; } - const_iterator operator+(difference_type i) const { const_iterator tmp(*this); - tmp += i; return tmp; } - const_iterator operator-(difference_type i) const { const_iterator tmp(*this); - tmp -= i; return tmp; } - difference_type operator-(const_iterator it) const { // for "x = it2 - it" - assert(table == it.table); - return pos - it.pos; - } - reference operator[](difference_type n) const { - return *(*this + n); // simple though not totally efficient - } - - // Comparisons. - bool operator==(const const_iterator& it) const { - return table == it.table && pos == it.pos; - } - bool operator<(const const_iterator& it) const { - assert(table == it.table); // life is bad bad bad otherwise - return pos < it.pos; - } - bool operator!=(const const_iterator& it) const { return !(*this == it); } - bool operator<=(const const_iterator& it) const { return !(it < *this); } - bool operator>(const const_iterator& it) const { return it < *this; } - bool operator>=(const const_iterator& it) const { return !(*this < it); } - - // Here's the info we actually need to be an iterator - const tabletype *table; // so we can dereference and bounds-check - size_type pos; // index into the table -}; - -// support for "3 + iterator" has to be defined outside the class, alas -template -const_table_iterator operator+(typename - const_table_iterator::difference_type i, - const_table_iterator it) { - return it + i; // so people can say it2 = 3 + it -} - - -// --------------------------------------------------------------------------- - - -/* -// This is a 2-D iterator. You specify a begin and end over a list -// of *containers*. We iterate over each container by iterating over -// it. It's actually simple: -// VECTOR.begin() VECTOR[0].begin() --------> VECTOR[0].end() ---, -// | ________________________________________________/ -// | \_> VECTOR[1].begin() --------> VECTOR[1].end() -, -// | ___________________________________________________/ -// v \_> ...... -// VECTOR.end() -// -// It's impossible to do random access on one of these things in constant -// time, so it's just a bidirectional iterator. -// -// Unfortunately, because we need to use this for a non-empty iterator, -// we use nonempty_begin() and nonempty_end() instead of begin() and end() -// (though only going across, not down). -*/ - -#define TWOD_BEGIN_ nonempty_begin -#define TWOD_END_ nonempty_end -#define TWOD_ITER_ nonempty_iterator -#define TWOD_CONST_ITER_ const_nonempty_iterator - -template -class two_d_iterator { - public: - typedef two_d_iterator iterator; - - typedef std::bidirectional_iterator_tag iterator_category; - // apparently some versions of VC++ have trouble with two ::'s in a typename - typedef typename containertype::value_type _tmp_vt; - typedef typename _tmp_vt::value_type value_type; - typedef typename _tmp_vt::difference_type difference_type; - typedef typename _tmp_vt::reference reference; - typedef typename _tmp_vt::pointer pointer; - - // The "real" constructor. begin and end specify how many rows we have - // (in the diagram above); we always iterate over each row completely. - two_d_iterator(typename containertype::iterator begin, - typename containertype::iterator end, - typename containertype::iterator curr) - : row_begin(begin), row_end(end), row_current(curr), col_current() { - if ( row_current != row_end ) { - col_current = row_current->TWOD_BEGIN_(); - advance_past_end(); // in case cur->begin() == cur->end() - } - } - // If you want to start at an arbitrary place, you can, I guess - two_d_iterator(typename containertype::iterator begin, - typename containertype::iterator end, - typename containertype::iterator curr, - typename containertype::value_type::TWOD_ITER_ col) - : row_begin(begin), row_end(end), row_current(curr), col_current(col) { - advance_past_end(); // in case cur->begin() == cur->end() - } - // The default constructor, used when I define vars of type table::iterator - two_d_iterator() : row_begin(), row_end(), row_current(), col_current() { } - // The default destructor is fine; we don't define one - // The default operator= is fine; we don't define one - - // Happy dereferencer - reference operator*() const { return *col_current; } - pointer operator->() const { return &(operator*()); } - - // Arithmetic: we just do arithmetic on pos. We don't even need to - // do bounds checking, since STL doesn't consider that its job. :-) - // NOTE: this is not amortized constant time! What do we do about it? - void advance_past_end() { // used when col_current points to end() - while ( col_current == row_current->TWOD_END_() ) { // end of current row - ++row_current; // go to beginning of next - if ( row_current != row_end ) // col is irrelevant at end - col_current = row_current->TWOD_BEGIN_(); - else - break; // don't go past row_end - } - } - - iterator& operator++() { - assert(row_current != row_end); // how to ++ from there? - ++col_current; - advance_past_end(); // in case col_current is at end() - return *this; - } - iterator& operator--() { - while ( row_current == row_end || - col_current == row_current->TWOD_BEGIN_() ) { - assert(row_current != row_begin); - --row_current; - col_current = row_current->TWOD_END_(); // this is 1 too far - } - --col_current; - return *this; - } - iterator operator++(int) { iterator tmp(*this); ++*this; return tmp; } - iterator operator--(int) { iterator tmp(*this); --*this; return tmp; } - - - // Comparisons. - bool operator==(const iterator& it) const { - return ( row_begin == it.row_begin && - row_end == it.row_end && - row_current == it.row_current && - (row_current == row_end || col_current == it.col_current) ); - } - bool operator!=(const iterator& it) const { return !(*this == it); } - - - // Here's the info we actually need to be an iterator - // These need to be public so we convert from iterator to const_iterator - typename containertype::iterator row_begin, row_end, row_current; - typename containertype::value_type::TWOD_ITER_ col_current; -}; - -// The same thing again, but this time const. :-( -template -class const_two_d_iterator { - public: - typedef const_two_d_iterator iterator; - - typedef std::bidirectional_iterator_tag iterator_category; - // apparently some versions of VC++ have trouble with two ::'s in a typename - typedef typename containertype::value_type _tmp_vt; - typedef typename _tmp_vt::value_type value_type; - typedef typename _tmp_vt::difference_type difference_type; - typedef typename _tmp_vt::const_reference reference; - typedef typename _tmp_vt::const_pointer pointer; - - const_two_d_iterator(typename containertype::const_iterator begin, - typename containertype::const_iterator end, - typename containertype::const_iterator curr) - : row_begin(begin), row_end(end), row_current(curr), col_current() { - if ( curr != end ) { - col_current = curr->TWOD_BEGIN_(); - advance_past_end(); // in case cur->begin() == cur->end() - } - } - const_two_d_iterator(typename containertype::const_iterator begin, - typename containertype::const_iterator end, - typename containertype::const_iterator curr, - typename containertype::value_type::TWOD_CONST_ITER_ col) - : row_begin(begin), row_end(end), row_current(curr), col_current(col) { - advance_past_end(); // in case cur->begin() == cur->end() - } - const_two_d_iterator() - : row_begin(), row_end(), row_current(), col_current() { - } - // Need this explicitly so we can convert normal iterators to const iterators - const_two_d_iterator(const two_d_iterator& it) : - row_begin(it.row_begin), row_end(it.row_end), row_current(it.row_current), - col_current(it.col_current) { } - - typename containertype::const_iterator row_begin, row_end, row_current; - typename containertype::value_type::TWOD_CONST_ITER_ col_current; - - - // EVERYTHING FROM HERE DOWN IS THE SAME AS THE NON-CONST ITERATOR - reference operator*() const { return *col_current; } - pointer operator->() const { return &(operator*()); } - - void advance_past_end() { // used when col_current points to end() - while ( col_current == row_current->TWOD_END_() ) { // end of current row - ++row_current; // go to beginning of next - if ( row_current != row_end ) // col is irrelevant at end - col_current = row_current->TWOD_BEGIN_(); - else - break; // don't go past row_end - } - } - iterator& operator++() { - assert(row_current != row_end); // how to ++ from there? - ++col_current; - advance_past_end(); // in case col_current is at end() - return *this; - } - iterator& operator--() { - while ( row_current == row_end || - col_current == row_current->TWOD_BEGIN_() ) { - assert(row_current != row_begin); - --row_current; - col_current = row_current->TWOD_END_(); // this is 1 too far - } - --col_current; - return *this; - } - iterator operator++(int) { iterator tmp(*this); ++*this; return tmp; } - iterator operator--(int) { iterator tmp(*this); --*this; return tmp; } - - bool operator==(const iterator& it) const { - return ( row_begin == it.row_begin && - row_end == it.row_end && - row_current == it.row_current && - (row_current == row_end || col_current == it.col_current) ); - } - bool operator!=(const iterator& it) const { return !(*this == it); } -}; - -// We provide yet another version, to be as frugal with memory as -// possible. This one frees each block of memory as it finishes -// iterating over it. By the end, the entire table is freed. -// For understandable reasons, you can only iterate over it once, -// which is why it's an input iterator -template -class destructive_two_d_iterator { - public: - typedef destructive_two_d_iterator iterator; - - typedef std::input_iterator_tag iterator_category; - // apparently some versions of VC++ have trouble with two ::'s in a typename - typedef typename containertype::value_type _tmp_vt; - typedef typename _tmp_vt::value_type value_type; - typedef typename _tmp_vt::difference_type difference_type; - typedef typename _tmp_vt::reference reference; - typedef typename _tmp_vt::pointer pointer; - - destructive_two_d_iterator(typename containertype::iterator begin, - typename containertype::iterator end, - typename containertype::iterator curr) - : row_begin(begin), row_end(end), row_current(curr), col_current() { - if ( curr != end ) { - col_current = curr->TWOD_BEGIN_(); - advance_past_end(); // in case cur->begin() == cur->end() - } - } - destructive_two_d_iterator(typename containertype::iterator begin, - typename containertype::iterator end, - typename containertype::iterator curr, - typename containertype::value_type::TWOD_ITER_ col) - : row_begin(begin), row_end(end), row_current(curr), col_current(col) { - advance_past_end(); // in case cur->begin() == cur->end() - } - destructive_two_d_iterator() - : row_begin(), row_end(), row_current(), col_current() { - } - - typename containertype::iterator row_begin, row_end, row_current; - typename containertype::value_type::TWOD_ITER_ col_current; - - // This is the part that destroys - void advance_past_end() { // used when col_current points to end() - while ( col_current == row_current->TWOD_END_() ) { // end of current row - row_current->clear(); // the destructive part - // It would be nice if we could decrement sparsetable->num_buckets here - ++row_current; // go to beginning of next - if ( row_current != row_end ) // col is irrelevant at end - col_current = row_current->TWOD_BEGIN_(); - else - break; // don't go past row_end - } - } - - // EVERYTHING FROM HERE DOWN IS THE SAME AS THE REGULAR ITERATOR - reference operator*() const { return *col_current; } - pointer operator->() const { return &(operator*()); } - - iterator& operator++() { - assert(row_current != row_end); // how to ++ from there? - ++col_current; - advance_past_end(); // in case col_current is at end() - return *this; - } - iterator operator++(int) { iterator tmp(*this); ++*this; return tmp; } - - bool operator==(const iterator& it) const { - return ( row_begin == it.row_begin && - row_end == it.row_end && - row_current == it.row_current && - (row_current == row_end || col_current == it.col_current) ); - } - bool operator!=(const iterator& it) const { return !(*this == it); } -}; - -#undef TWOD_BEGIN_ -#undef TWOD_END_ -#undef TWOD_ITER_ -#undef TWOD_CONST_ITER_ - - - - -// SPARSE-TABLE -// ------------ -// The idea is that a table with (logically) t buckets is divided -// into t/M *groups* of M buckets each. (M is a constant set in -// GROUP_SIZE for efficiency.) Each group is stored sparsely. -// Thus, inserting into the table causes some array to grow, which is -// slow but still constant time. Lookup involves doing a -// logical-position-to-sparse-position lookup, which is also slow but -// constant time. The larger M is, the slower these operations are -// but the less overhead (slightly). -// -// To store the sparse array, we store a bitmap B, where B[i] = 1 iff -// bucket i is non-empty. Then to look up bucket i we really look up -// array[# of 1s before i in B]. This is constant time for fixed M. -// -// Terminology: the position of an item in the overall table (from -// 1 .. t) is called its "location." The logical position in a group -// (from 1 .. M ) is called its "position." The actual location in -// the array (from 1 .. # of non-empty buckets in the group) is -// called its "offset." - -template -class sparsegroup { - private: - typedef typename Alloc::template rebind::other value_alloc_type; - - public: - // Basic types - typedef T value_type; - typedef Alloc allocator_type; - typedef typename value_alloc_type::reference reference; - typedef typename value_alloc_type::const_reference const_reference; - typedef typename value_alloc_type::pointer pointer; - typedef typename value_alloc_type::const_pointer const_pointer; - - typedef table_iterator > iterator; - typedef const_table_iterator > - const_iterator; - typedef table_element_adaptor > - element_adaptor; - typedef u_int16_t size_type; // max # of buckets - typedef int16_t difference_type; - typedef std::reverse_iterator const_reverse_iterator; - typedef std::reverse_iterator reverse_iterator; // from iterator.h - - // These are our special iterators, that go over non-empty buckets in a - // group. These aren't const-only because you can change non-empty bcks. - typedef pointer nonempty_iterator; - typedef const_pointer const_nonempty_iterator; - typedef std::reverse_iterator reverse_nonempty_iterator; - typedef std::reverse_iterator const_reverse_nonempty_iterator; - - // Iterator functions - iterator begin() { return iterator(this, 0); } - const_iterator begin() const { return const_iterator(this, 0); } - iterator end() { return iterator(this, size()); } - const_iterator end() const { return const_iterator(this, size()); } - reverse_iterator rbegin() { return reverse_iterator(end()); } - const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } - reverse_iterator rend() { return reverse_iterator(begin()); } - const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } - - // We'll have versions for our special non-empty iterator too - nonempty_iterator nonempty_begin() { return group; } - const_nonempty_iterator nonempty_begin() const { return group; } - nonempty_iterator nonempty_end() { - return group + settings.num_buckets; - } - const_nonempty_iterator nonempty_end() const { - return group + settings.num_buckets; - } - reverse_nonempty_iterator nonempty_rbegin() { - return reverse_nonempty_iterator(nonempty_end()); - } - const_reverse_nonempty_iterator nonempty_rbegin() const { - return const_reverse_nonempty_iterator(nonempty_end()); - } - reverse_nonempty_iterator nonempty_rend() { - return reverse_nonempty_iterator(nonempty_begin()); - } - const_reverse_nonempty_iterator nonempty_rend() const { - return const_reverse_nonempty_iterator(nonempty_begin()); - } - - - // This gives us the "default" value to return for an empty bucket. - // We just use the default constructor on T, the template type - const_reference default_value() const { - static value_type defaultval = value_type(); - return defaultval; - } - - - private: - // We need to do all this bit manipulation, of course. ick - static size_type charbit(size_type i) { return i >> 3; } - static size_type modbit(size_type i) { return 1 << (i&7); } - int bmtest(size_type i) const { return bitmap[charbit(i)] & modbit(i); } - void bmset(size_type i) { bitmap[charbit(i)] |= modbit(i); } - void bmclear(size_type i) { bitmap[charbit(i)] &= ~modbit(i); } - - pointer allocate_group(size_type n) { - pointer retval = settings.allocate(n); - if (retval == NULL) { - // We really should use PRIuS here, but I don't want to have to add - // a whole new configure option, with concomitant macro namespace - // pollution, just to print this (unlikely) error message. So I cast. - fprintf(stderr, "sparsehash FATAL ERROR: failed to allocate %lu groups\n", - static_cast(n)); - exit(1); - } - return retval; - } - - void free_group() { - if (!group) return; - pointer end_it = group + settings.num_buckets; - for (pointer p = group; p != end_it; ++p) - p->~value_type(); - settings.deallocate(group, settings.num_buckets); - group = NULL; - } - - static size_type bits_in_char(unsigned char c) { - // We could make these ints. The tradeoff is size (eg does it overwhelm - // the cache?) vs efficiency in referencing sub-word-sized array elements. - static const char bits_in[256] = { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8, - }; - return bits_in[c]; - } - - public: // get_iter() in sparsetable needs it - // We need a small function that tells us how many set bits there are - // in positions 0..i-1 of the bitmap. It uses a big table. - // We make it static so templates don't allocate lots of these tables. - // There are lots of ways to do this calculation (called 'popcount'). - // The 8-bit table lookup is one of the fastest, though this - // implementation suffers from not doing any loop unrolling. See, eg, - // http://www.dalkescientific.com/writings/diary/archive/2008/07/03/hakmem_and_other_popcounts.html - // http://gurmeetsingh.wordpress.com/2008/08/05/fast-bit-counting-routines/ - static size_type pos_to_offset(const unsigned char *bm, size_type pos) { - size_type retval = 0; - - // [Note: condition pos > 8 is an optimization; convince yourself we - // give exactly the same result as if we had pos >= 8 here instead.] - for ( ; pos > 8; pos -= 8 ) // bm[0..pos/8-1] - retval += bits_in_char(*bm++); // chars we want *all* bits in - return retval + bits_in_char(*bm & ((1 << pos)-1)); // char including pos - } - - size_type pos_to_offset(size_type pos) const { // not static but still const - return pos_to_offset(bitmap, pos); - } - - // Returns the (logical) position in the bm[] array, i, such that - // bm[i] is the offset-th set bit in the array. It is the inverse - // of pos_to_offset. get_pos() uses this function to find the index - // of an nonempty_iterator in the table. Bit-twiddling from - // http://hackersdelight.org/basics.pdf - static size_type offset_to_pos(const unsigned char *bm, size_type offset) { - size_type retval = 0; - // This is sizeof(this->bitmap). - const size_type group_size = (GROUP_SIZE-1) / 8 + 1; - for (size_type i = 0; i < group_size; i++) { // forward scan - const size_type pop_count = bits_in_char(*bm); - if (pop_count > offset) { - unsigned char last_bm = *bm; - for (; offset > 0; offset--) { - last_bm &= (last_bm-1); // remove right-most set bit - } - // Clear all bits to the left of the rightmost bit (the &), - // and then clear the rightmost bit but set all bits to the - // right of it (the -1). - last_bm = (last_bm & -last_bm) - 1; - retval += bits_in_char(last_bm); - return retval; - } - offset -= pop_count; - retval += 8; - bm++; - } - return retval; - } - - size_type offset_to_pos(size_type offset) const { - return offset_to_pos(bitmap, offset); - } - - - public: - // Constructors -- default and copy -- and destructor - explicit sparsegroup(allocator_type& a) : - group(0), settings(alloc_impl(a)) { - memset(bitmap, 0, sizeof(bitmap)); - } - sparsegroup(const sparsegroup& x) : group(0), settings(x.settings) { - if ( settings.num_buckets ) { - group = allocate_group(x.settings.num_buckets); - std::uninitialized_copy(x.group, x.group + x.settings.num_buckets, group); - } - memcpy(bitmap, x.bitmap, sizeof(bitmap)); - } - ~sparsegroup() { free_group(); } - - // Operator= is just like the copy constructor, I guess - // TODO(austern): Make this exception safe. Handle exceptions in value_type's - // copy constructor. - sparsegroup &operator=(const sparsegroup& x) { - if ( &x == this ) return *this; // x = x - if ( x.settings.num_buckets == 0 ) { - free_group(); - } else { - pointer p = allocate_group(x.settings.num_buckets); - std::uninitialized_copy(x.group, x.group + x.settings.num_buckets, p); - free_group(); - group = p; - } - memcpy(bitmap, x.bitmap, sizeof(bitmap)); - settings.num_buckets = x.settings.num_buckets; - return *this; - } - - // Many STL algorithms use swap instead of copy constructors - void swap(sparsegroup& x) { - std::swap(group, x.group); // defined in - for ( int i = 0; i < sizeof(bitmap) / sizeof(*bitmap); ++i ) - std::swap(bitmap[i], x.bitmap[i]); // swap not defined on arrays - std::swap(settings.num_buckets, x.settings.num_buckets); - // we purposefully don't swap the allocator, which may not be swap-able - } - - // It's always nice to be able to clear a table without deallocating it - void clear() { - free_group(); - memset(bitmap, 0, sizeof(bitmap)); - settings.num_buckets = 0; - } - - // Functions that tell you about size. Alas, these aren't so useful - // because our table is always fixed size. - size_type size() const { return GROUP_SIZE; } - size_type max_size() const { return GROUP_SIZE; } - bool empty() const { return false; } - // We also may want to know how many *used* buckets there are - size_type num_nonempty() const { return settings.num_buckets; } - - - // get()/set() are explicitly const/non-const. You can use [] if - // you want something that can be either (potentially more expensive). - const_reference get(size_type i) const { - if ( bmtest(i) ) // bucket i is occupied - return group[pos_to_offset(bitmap, i)]; - else - return default_value(); // return the default reference - } - - // TODO(csilvers): make protected + friend - // This is used by sparse_hashtable to get an element from the table - // when we know it exists. - const_reference unsafe_get(size_type i) const { - assert(bmtest(i)); - return group[pos_to_offset(bitmap, i)]; - } - - // TODO(csilvers): make protected + friend - reference mutating_get(size_type i) { // fills bucket i before getting - if ( !bmtest(i) ) - set(i, default_value()); - return group[pos_to_offset(bitmap, i)]; - } - - // Syntactic sugar. It's easy to return a const reference. To - // return a non-const reference, we need to use the assigner adaptor. - const_reference operator[](size_type i) const { - return get(i); - } - - element_adaptor operator[](size_type i) { - return element_adaptor(this, i); - } - - private: - // Create space at group[offset], assuming value_type has trivial - // copy constructor and destructor, and the allocator_type is - // the default libc_allocator_with_alloc. (Really, we want it to have - // "trivial move", because that's what realloc and memmove both do. - // But there's no way to capture that using type_traits, so we - // pretend that move(x, y) is equivalent to "x.~T(); new(x) T(y);" - // which is pretty much correct, if a bit conservative.) - void set_aux(size_type offset, base::true_type) { - group = settings.realloc_or_die(group, settings.num_buckets+1); - // This is equivalent to memmove(), but faster on my Intel P4, - // at least with gcc4.1 -O2 / glibc 2.3.6. - for (size_type i = settings.num_buckets; i > offset; --i) - memcpy(group + i, group + i-1, sizeof(*group)); - } - - // Create space at group[offset], without special assumptions about value_type - // and allocator_type. - void set_aux(size_type offset, base::false_type) { - // This is valid because 0 <= offset <= num_buckets - pointer p = allocate_group(settings.num_buckets + 1); - std::uninitialized_copy(group, group + offset, p); - std::uninitialized_copy(group + offset, group + settings.num_buckets, - p + offset + 1); - free_group(); - group = p; - } - - public: - // This returns a reference to the inserted item (which is a copy of val). - // TODO(austern): Make this exception safe: handle exceptions from - // value_type's copy constructor. - reference set(size_type i, const_reference val) { - size_type offset = pos_to_offset(bitmap, i); // where we'll find (or insert) - if ( bmtest(i) ) { - // Delete the old value, which we're replacing with the new one - group[offset].~value_type(); - } else { - typedef base::integral_constant::value && - base::has_trivial_destructor::value && - base::is_same< - allocator_type, - libc_allocator_with_realloc >::value)> - realloc_and_memmove_ok; // we pretend mv(x,y) == "x.~T(); new(x) T(y)" - set_aux(offset, realloc_and_memmove_ok()); - ++settings.num_buckets; - bmset(i); - } - // This does the actual inserting. Since we made the array using - // malloc, we use "placement new" to just call the constructor. - new(&group[offset]) value_type(val); - return group[offset]; - } - - // We let you see if a bucket is non-empty without retrieving it - bool test(size_type i) const { - return bmtest(i) != 0; - } - bool test(iterator pos) const { - return bmtest(pos.pos) != 0; - } - - private: - // Shrink the array, assuming value_type has trivial copy - // constructor and destructor, and the allocator_type is the default - // libc_allocator_with_alloc. (Really, we want it to have "trivial - // move", because that's what realloc and memmove both do. But - // there's no way to capture that using type_traits, so we pretend - // that move(x, y) is equivalent to ""x.~T(); new(x) T(y);" - // which is pretty much correct, if a bit conservative.) - void erase_aux(size_type offset, base::true_type) { - // This isn't technically necessary, since we know we have a - // trivial destructor, but is a cheap way to get a bit more safety. - group[offset].~value_type(); - // This is equivalent to memmove(), but faster on my Intel P4, - // at lesat with gcc4.1 -O2 / glibc 2.3.6. - assert(settings.num_buckets > 0); - for (size_type i = offset; i < settings.num_buckets-1; ++i) - memcpy(group + i, group + i+1, sizeof(*group)); // hopefully inlined! - group = settings.realloc_or_die(group, settings.num_buckets-1); - } - - // Shrink the array, without any special assumptions about value_type and - // allocator_type. - void erase_aux(size_type offset, base::false_type) { - // This is valid because 0 <= offset < num_buckets. Note the inequality. - pointer p = allocate_group(settings.num_buckets - 1); - std::uninitialized_copy(group, group + offset, p); - std::uninitialized_copy(group + offset + 1, group + settings.num_buckets, - p + offset); - free_group(); - group = p; - } - - public: - // This takes the specified elements out of the group. This is - // "undefining", rather than "clearing". - // TODO(austern): Make this exception safe: handle exceptions from - // value_type's copy constructor. - void erase(size_type i) { - if ( bmtest(i) ) { // trivial to erase empty bucket - size_type offset = pos_to_offset(bitmap,i); // where we'll find (or insert) - if ( settings.num_buckets == 1 ) { - free_group(); - group = NULL; - } else { - typedef base::integral_constant::value && - base::has_trivial_destructor::value && - base::is_same< - allocator_type, - libc_allocator_with_realloc >::value)> - realloc_and_memmove_ok; // pretend mv(x,y) == "x.~T(); new(x) T(y)" - erase_aux(offset, realloc_and_memmove_ok()); - } - --settings.num_buckets; - bmclear(i); - } - } - - void erase(iterator pos) { - erase(pos.pos); - } - - void erase(iterator start_it, iterator end_it) { - // This could be more efficient, but to do so we'd need to make - // bmclear() clear a range of indices. Doesn't seem worth it. - for ( ; start_it != end_it; ++start_it ) - erase(start_it); - } - - - // I/O - // We support reading and writing groups to disk. We don't store - // the actual array contents (which we don't know how to store), - // just the bitmap and size. Meant to be used with table I/O. - - template bool write_metadata(OUTPUT *fp) const { - // we explicitly set to u_int16_t - assert(sizeof(settings.num_buckets) == 2); - if ( !sparsehash_internal::write_bigendian_number(fp, settings.num_buckets, - 2) ) - return false; - if ( !sparsehash_internal::write_data(fp, bitmap, sizeof(bitmap)) ) - return false; - return true; - } - - // Reading destroys the old group contents! Returns true if all was ok. - template bool read_metadata(INPUT *fp) { - clear(); - if ( !sparsehash_internal::read_bigendian_number(fp, &settings.num_buckets, - 2) ) - return false; - if ( !sparsehash_internal::read_data(fp, bitmap, sizeof(bitmap)) ) - return false; - // We'll allocate the space, but we won't fill it: it will be - // left as uninitialized raw memory. - group = allocate_group(settings.num_buckets); - return true; - } - - // Again, only meaningful if value_type is a POD. - template bool read_nopointer_data(INPUT *fp) { - for ( nonempty_iterator it = nonempty_begin(); - it != nonempty_end(); ++it ) { - if ( !sparsehash_internal::read_data(fp, &(*it), sizeof(*it)) ) - return false; - } - return true; - } - - // If your keys and values are simple enough, we can write them - // to disk for you. "simple enough" means POD and no pointers. - // However, we don't try to normalize endianness. - template bool write_nopointer_data(OUTPUT *fp) const { - for ( const_nonempty_iterator it = nonempty_begin(); - it != nonempty_end(); ++it ) { - if ( !sparsehash_internal::write_data(fp, &(*it), sizeof(*it)) ) - return false; - } - return true; - } - - - // Comparisons. We only need to define == and < -- we get - // != > <= >= via relops.h (which we happily included above). - // Note the comparisons are pretty arbitrary: we compare - // values of the first index that isn't equal (using default - // value for empty buckets). - bool operator==(const sparsegroup& x) const { - return ( settings.num_buckets == x.settings.num_buckets && - memcmp(bitmap, x.bitmap, sizeof(bitmap)) == 0 && - std::equal(begin(), end(), x.begin()) ); // from - } - - bool operator<(const sparsegroup& x) const { // also from - return std::lexicographical_compare(begin(), end(), x.begin(), x.end()); - } - bool operator!=(const sparsegroup& x) const { return !(*this == x); } - bool operator<=(const sparsegroup& x) const { return !(x < *this); } - bool operator>(const sparsegroup& x) const { return x < *this; } - bool operator>=(const sparsegroup& x) const { return !(*this < x); } - - private: - template - class alloc_impl : public A { - public: - typedef typename A::pointer pointer; - typedef typename A::size_type size_type; - - // Convert a normal allocator to one that has realloc_or_die() - alloc_impl(const A& a) : A(a) { } - - // realloc_or_die should only be used when using the default - // allocator (libc_allocator_with_realloc). - pointer realloc_or_die(pointer /*ptr*/, size_type /*n*/) { - fprintf(stderr, "realloc_or_die is only supported for " - "libc_allocator_with_realloc\n"); - exit(1); - return NULL; - } - }; - - // A template specialization of alloc_impl for - // libc_allocator_with_realloc that can handle realloc_or_die. - template - class alloc_impl > - : public libc_allocator_with_realloc { - public: - typedef typename libc_allocator_with_realloc::pointer pointer; - typedef typename libc_allocator_with_realloc::size_type size_type; - - alloc_impl(const libc_allocator_with_realloc& a) - : libc_allocator_with_realloc(a) { } - - pointer realloc_or_die(pointer ptr, size_type n) { - pointer retval = this->reallocate(ptr, n); - if (retval == NULL) { - fprintf(stderr, "sparsehash: FATAL ERROR: failed to reallocate " - "%lu elements for ptr %p", static_cast(n), ptr); - exit(1); - } - return retval; - } - }; - - // Package allocator with num_buckets to eliminate memory needed for the - // zero-size allocator. - // If new fields are added to this class, we should add them to - // operator= and swap. - class Settings : public alloc_impl { - public: - Settings(const alloc_impl& a, u_int16_t n = 0) - : alloc_impl(a), num_buckets(n) { } - Settings(const Settings& s) - : alloc_impl(s), num_buckets(s.num_buckets) { } - - u_int16_t num_buckets; // limits GROUP_SIZE to 64K - }; - - // The actual data - pointer group; // (small) array of T's - Settings settings; // allocator and num_buckets - unsigned char bitmap[(GROUP_SIZE-1)/8 + 1]; // fancy math is so we round up -}; - -// We need a global swap as well -template -inline void swap(sparsegroup &x, - sparsegroup &y) { - x.swap(y); -} - -// --------------------------------------------------------------------------- - - -template > -class sparsetable { - private: - typedef typename Alloc::template rebind::other value_alloc_type; - typedef typename Alloc::template rebind< - sparsegroup >::other vector_alloc; - - public: - // Basic types - typedef T value_type; // stolen from stl_vector.h - typedef Alloc allocator_type; - typedef typename value_alloc_type::size_type size_type; - typedef typename value_alloc_type::difference_type difference_type; - typedef typename value_alloc_type::reference reference; - typedef typename value_alloc_type::const_reference const_reference; - typedef typename value_alloc_type::pointer pointer; - typedef typename value_alloc_type::const_pointer const_pointer; - typedef table_iterator > iterator; - typedef const_table_iterator > - const_iterator; - typedef table_element_adaptor > - element_adaptor; - typedef std::reverse_iterator const_reverse_iterator; - typedef std::reverse_iterator reverse_iterator; // from iterator.h - - // These are our special iterators, that go over non-empty buckets in a - // table. These aren't const only because you can change non-empty bcks. - typedef two_d_iterator< std::vector< sparsegroup, - vector_alloc> > - nonempty_iterator; - typedef const_two_d_iterator< std::vector< sparsegroup, - vector_alloc> > - const_nonempty_iterator; - typedef std::reverse_iterator reverse_nonempty_iterator; - typedef std::reverse_iterator const_reverse_nonempty_iterator; - // Another special iterator: it frees memory as it iterates (used to resize) - typedef destructive_two_d_iterator< std::vector< sparsegroup, - vector_alloc> > - destructive_iterator; - - // Iterator functions - iterator begin() { return iterator(this, 0); } - const_iterator begin() const { return const_iterator(this, 0); } - iterator end() { return iterator(this, size()); } - const_iterator end() const { return const_iterator(this, size()); } - reverse_iterator rbegin() { return reverse_iterator(end()); } - const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } - reverse_iterator rend() { return reverse_iterator(begin()); } - const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } - - // Versions for our special non-empty iterator - nonempty_iterator nonempty_begin() { - return nonempty_iterator(groups.begin(), groups.end(), groups.begin()); - } - const_nonempty_iterator nonempty_begin() const { - return const_nonempty_iterator(groups.begin(),groups.end(), groups.begin()); - } - nonempty_iterator nonempty_end() { - return nonempty_iterator(groups.begin(), groups.end(), groups.end()); - } - const_nonempty_iterator nonempty_end() const { - return const_nonempty_iterator(groups.begin(), groups.end(), groups.end()); - } - reverse_nonempty_iterator nonempty_rbegin() { - return reverse_nonempty_iterator(nonempty_end()); - } - const_reverse_nonempty_iterator nonempty_rbegin() const { - return const_reverse_nonempty_iterator(nonempty_end()); - } - reverse_nonempty_iterator nonempty_rend() { - return reverse_nonempty_iterator(nonempty_begin()); - } - const_reverse_nonempty_iterator nonempty_rend() const { - return const_reverse_nonempty_iterator(nonempty_begin()); - } - destructive_iterator destructive_begin() { - return destructive_iterator(groups.begin(), groups.end(), groups.begin()); - } - destructive_iterator destructive_end() { - return destructive_iterator(groups.begin(), groups.end(), groups.end()); - } - - typedef sparsegroup group_type; - typedef std::vector group_vector_type; - - typedef typename group_vector_type::reference GroupsReference; - typedef typename group_vector_type::const_reference GroupsConstReference; - typedef typename group_vector_type::iterator GroupsIterator; - typedef typename group_vector_type::const_iterator GroupsConstIterator; - - // How to deal with the proper group - static size_type num_groups(size_type num) { // how many to hold num buckets - return num == 0 ? 0 : ((num-1) / GROUP_SIZE) + 1; - } - - u_int16_t pos_in_group(size_type i) const { - return static_cast(i % GROUP_SIZE); - } - size_type group_num(size_type i) const { - return i / GROUP_SIZE; - } - GroupsReference which_group(size_type i) { - return groups[group_num(i)]; - } - GroupsConstReference which_group(size_type i) const { - return groups[group_num(i)]; - } - - public: - // Constructors -- default, normal (when you specify size), and copy - explicit sparsetable(size_type sz = 0, Alloc alloc = Alloc()) - : groups(vector_alloc(alloc)), settings(alloc, sz) { - groups.resize(num_groups(sz), group_type(settings)); - } - // We can get away with using the default copy constructor, - // and default destructor, and hence the default operator=. Huzzah! - - // Many STL algorithms use swap instead of copy constructors - void swap(sparsetable& x) { - std::swap(groups, x.groups); // defined in stl_algobase.h - std::swap(settings.table_size, x.settings.table_size); - std::swap(settings.num_buckets, x.settings.num_buckets); - } - - // It's always nice to be able to clear a table without deallocating it - void clear() { - GroupsIterator group; - for ( group = groups.begin(); group != groups.end(); ++group ) { - group->clear(); - } - settings.num_buckets = 0; - } - - // ACCESSOR FUNCTIONS for the things we templatize on, basically - allocator_type get_allocator() const { - return allocator_type(settings); - } - - - // Functions that tell you about size. - // NOTE: empty() is non-intuitive! It does not tell you the number - // of not-empty buckets (use num_nonempty() for that). Instead - // it says whether you've allocated any buckets or not. - size_type size() const { return settings.table_size; } - size_type max_size() const { return settings.max_size(); } - bool empty() const { return settings.table_size == 0; } - // We also may want to know how many *used* buckets there are - size_type num_nonempty() const { return settings.num_buckets; } - - // OK, we'll let you resize one of these puppies - void resize(size_type new_size) { - groups.resize(num_groups(new_size), group_type(settings)); - if ( new_size < settings.table_size) { - // lower num_buckets, clear last group - if ( pos_in_group(new_size) > 0 ) // need to clear inside last group - groups.back().erase(groups.back().begin() + pos_in_group(new_size), - groups.back().end()); - settings.num_buckets = 0; // refigure # of used buckets - GroupsConstIterator group; - for ( group = groups.begin(); group != groups.end(); ++group ) - settings.num_buckets += group->num_nonempty(); - } - settings.table_size = new_size; - } - - - // We let you see if a bucket is non-empty without retrieving it - bool test(size_type i) const { - assert(i < settings.table_size); - return which_group(i).test(pos_in_group(i)); - } - bool test(iterator pos) const { - return which_group(pos.pos).test(pos_in_group(pos.pos)); - } - bool test(const_iterator pos) const { - return which_group(pos.pos).test(pos_in_group(pos.pos)); - } - - // We only return const_references because it's really hard to - // return something settable for empty buckets. Use set() instead. - const_reference get(size_type i) const { - assert(i < settings.table_size); - return which_group(i).get(pos_in_group(i)); - } - - // TODO(csilvers): make protected + friend - // This is used by sparse_hashtable to get an element from the table - // when we know it exists (because the caller has called test(i)). - const_reference unsafe_get(size_type i) const { - assert(i < settings.table_size); - assert(test(i)); - return which_group(i).unsafe_get(pos_in_group(i)); - } - - // TODO(csilvers): make protected + friend element_adaptor - reference mutating_get(size_type i) { // fills bucket i before getting - assert(i < settings.table_size); - typename group_type::size_type old_numbuckets = which_group(i).num_nonempty(); - reference retval = which_group(i).mutating_get(pos_in_group(i)); - settings.num_buckets += which_group(i).num_nonempty() - old_numbuckets; - return retval; - } - - // Syntactic sugar. As in sparsegroup, the non-const version is harder - const_reference operator[](size_type i) const { - return get(i); - } - - element_adaptor operator[](size_type i) { - return element_adaptor(this, i); - } - - // Needed for hashtables, gets as a nonempty_iterator. Crashes for empty bcks - const_nonempty_iterator get_iter(size_type i) const { - assert(test(i)); // how can a nonempty_iterator point to an empty bucket? - return const_nonempty_iterator( - groups.begin(), groups.end(), - groups.begin() + group_num(i), - (groups[group_num(i)].nonempty_begin() + - groups[group_num(i)].pos_to_offset(pos_in_group(i)))); - } - // For nonempty we can return a non-const version - nonempty_iterator get_iter(size_type i) { - assert(test(i)); // how can a nonempty_iterator point to an empty bucket? - return nonempty_iterator( - groups.begin(), groups.end(), - groups.begin() + group_num(i), - (groups[group_num(i)].nonempty_begin() + - groups[group_num(i)].pos_to_offset(pos_in_group(i)))); - } - - // And the reverse transformation. - size_type get_pos(const const_nonempty_iterator it) const { - difference_type current_row = it.row_current - it.row_begin; - difference_type current_col = (it.col_current - - groups[current_row].nonempty_begin()); - return ((current_row * GROUP_SIZE) + - groups[current_row].offset_to_pos(current_col)); - } - - - // This returns a reference to the inserted item (which is a copy of val) - // The trick is to figure out whether we're replacing or inserting anew - reference set(size_type i, const_reference val) { - assert(i < settings.table_size); - typename group_type::size_type old_numbuckets = which_group(i).num_nonempty(); - reference retval = which_group(i).set(pos_in_group(i), val); - settings.num_buckets += which_group(i).num_nonempty() - old_numbuckets; - return retval; - } - - // This takes the specified elements out of the table. This is - // "undefining", rather than "clearing". - void erase(size_type i) { - assert(i < settings.table_size); - typename group_type::size_type old_numbuckets = which_group(i).num_nonempty(); - which_group(i).erase(pos_in_group(i)); - settings.num_buckets += which_group(i).num_nonempty() - old_numbuckets; - } - - void erase(iterator pos) { - erase(pos.pos); - } - - void erase(iterator start_it, iterator end_it) { - // This could be more efficient, but then we'd need to figure - // out if we spanned groups or not. Doesn't seem worth it. - for ( ; start_it != end_it; ++start_it ) - erase(start_it); - } - - - // We support reading and writing tables to disk. We don't store - // the actual array contents (which we don't know how to store), - // just the groups and sizes. Returns true if all went ok. - - private: - // Every time the disk format changes, this should probably change too - typedef unsigned long MagicNumberType; - static const MagicNumberType MAGIC_NUMBER = 0x24687531; - - // Old versions of this code write all data in 32 bits. We need to - // support these files as well as having support for 64-bit systems. - // So we use the following encoding scheme: for values < 2^32-1, we - // store in 4 bytes in big-endian order. For values > 2^32, we - // store 0xFFFFFFF followed by 8 bytes in big-endian order. This - // causes us to mis-read old-version code that stores exactly - // 0xFFFFFFF, but I don't think that is likely to have happened for - // these particular values. - template - static bool write_32_or_64(OUTPUT* fp, IntType value) { - if ( value < 0xFFFFFFFFULL ) { // fits in 4 bytes - if ( !sparsehash_internal::write_bigendian_number(fp, value, 4) ) - return false; - } else { - if ( !sparsehash_internal::write_bigendian_number(fp, 0xFFFFFFFFUL, 4) ) - return false; - if ( !sparsehash_internal::write_bigendian_number(fp, value, 8) ) - return false; - } - return true; - } - - template - static bool read_32_or_64(INPUT* fp, IntType *value) { // reads into value - MagicNumberType first4 = 0; // a convenient 32-bit unsigned type - if ( !sparsehash_internal::read_bigendian_number(fp, &first4, 4) ) - return false; - if ( first4 < 0xFFFFFFFFULL ) { - *value = first4; - } else { - if ( !sparsehash_internal::read_bigendian_number(fp, value, 8) ) - return false; - } - return true; - } - - public: - // read/write_metadata() and read_write/nopointer_data() are DEPRECATED. - // Use serialize() and unserialize(), below, for new code. - - template bool write_metadata(OUTPUT *fp) const { - if ( !write_32_or_64(fp, MAGIC_NUMBER) ) return false; - if ( !write_32_or_64(fp, settings.table_size) ) return false; - if ( !write_32_or_64(fp, settings.num_buckets) ) return false; - - GroupsConstIterator group; - for ( group = groups.begin(); group != groups.end(); ++group ) - if ( group->write_metadata(fp) == false ) return false; - return true; - } - - // Reading destroys the old table contents! Returns true if read ok. - template bool read_metadata(INPUT *fp) { - size_type magic_read = 0; - if ( !read_32_or_64(fp, &magic_read) ) return false; - if ( magic_read != MAGIC_NUMBER ) { - clear(); // just to be consistent - return false; - } - - if ( !read_32_or_64(fp, &settings.table_size) ) return false; - if ( !read_32_or_64(fp, &settings.num_buckets) ) return false; - - resize(settings.table_size); // so the vector's sized ok - GroupsIterator group; - for ( group = groups.begin(); group != groups.end(); ++group ) - if ( group->read_metadata(fp) == false ) return false; - return true; - } - - // This code is identical to that for SparseGroup - // If your keys and values are simple enough, we can write them - // to disk for you. "simple enough" means no pointers. - // However, we don't try to normalize endianness - bool write_nopointer_data(FILE *fp) const { - for ( const_nonempty_iterator it = nonempty_begin(); - it != nonempty_end(); ++it ) { - if ( !fwrite(&*it, sizeof(*it), 1, fp) ) return false; - } - return true; - } - - // When reading, we have to override the potential const-ness of *it - bool read_nopointer_data(FILE *fp) { - for ( nonempty_iterator it = nonempty_begin(); - it != nonempty_end(); ++it ) { - if ( !fread(reinterpret_cast(&(*it)), sizeof(*it), 1, fp) ) - return false; - } - return true; - } - - // INPUT and OUTPUT must be either a FILE, *or* a C++ stream - // (istream, ostream, etc) *or* a class providing - // Read(void*, size_t) and Write(const void*, size_t) - // (respectively), which writes a buffer into a stream - // (which the INPUT/OUTPUT instance presumably owns). - - typedef sparsehash_internal::pod_serializer NopointerSerializer; - - // ValueSerializer: a functor. operator()(OUTPUT*, const value_type&) - template - bool serialize(ValueSerializer serializer, OUTPUT *fp) { - if ( !write_metadata(fp) ) - return false; - for ( const_nonempty_iterator it = nonempty_begin(); - it != nonempty_end(); ++it ) { - if ( !serializer(fp, *it) ) return false; - } - return true; - } - - // ValueSerializer: a functor. operator()(INPUT*, value_type*) - template - bool unserialize(ValueSerializer serializer, INPUT *fp) { - clear(); - if ( !read_metadata(fp) ) - return false; - for ( nonempty_iterator it = nonempty_begin(); - it != nonempty_end(); ++it ) { - if ( !serializer(fp, &*it) ) return false; - } - return true; - } - - // Comparisons. Note the comparisons are pretty arbitrary: we - // compare values of the first index that isn't equal (using default - // value for empty buckets). - bool operator==(const sparsetable& x) const { - return ( settings.table_size == x.settings.table_size && - settings.num_buckets == x.settings.num_buckets && - groups == x.groups ); - } - - bool operator<(const sparsetable& x) const { - return std::lexicographical_compare(begin(), end(), x.begin(), x.end()); - } - bool operator!=(const sparsetable& x) const { return !(*this == x); } - bool operator<=(const sparsetable& x) const { return !(x < *this); } - bool operator>(const sparsetable& x) const { return x < *this; } - bool operator>=(const sparsetable& x) const { return !(*this < x); } - - - private: - // Package allocator with table_size and num_buckets to eliminate memory - // needed for the zero-size allocator. - // If new fields are added to this class, we should add them to - // operator= and swap. - class Settings : public allocator_type { - public: - typedef typename allocator_type::size_type size_type; - - Settings(const allocator_type& a, size_type sz = 0, size_type n = 0) - : allocator_type(a), table_size(sz), num_buckets(n) { } - - Settings(const Settings& s) - : allocator_type(s), - table_size(s.table_size), num_buckets(s.num_buckets) { } - - size_type table_size; // how many buckets they want - size_type num_buckets; // number of non-empty buckets - }; - - // The actual data - group_vector_type groups; // our list of groups - Settings settings; // allocator, table size, buckets -}; - -// We need a global swap as well -template -inline void swap(sparsetable &x, - sparsetable &y) { - x.swap(y); -} - -_END_GOOGLE_NAMESPACE_ - -#endif // UTIL_GTL_SPARSETABLE_H_ diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/template_util.h b/clipper/sparsehash-2.0.3/src/sparsehash/template_util.h deleted file mode 100644 index 6fec3d0..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/template_util.h +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2005 Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// ---- -// -// Template metaprogramming utility functions. -// -// This code is compiled directly on many platforms, including client -// platforms like Windows, Mac, and embedded systems. Before making -// any changes here, make sure that you're not breaking any platforms. -// -// -// The names choosen here reflect those used in tr1 and the boost::mpl -// library, there are similar operations used in the Loki library as -// well. I prefer the boost names for 2 reasons: -// 1. I think that portions of the Boost libraries are more likely to -// be included in the c++ standard. -// 2. It is not impossible that some of the boost libraries will be -// included in our own build in the future. -// Both of these outcomes means that we may be able to directly replace -// some of these with boost equivalents. -// -#ifndef BASE_TEMPLATE_UTIL_H_ -#define BASE_TEMPLATE_UTIL_H_ - -#include -_START_GOOGLE_NAMESPACE_ - -// Types small_ and big_ are guaranteed such that sizeof(small_) < -// sizeof(big_) -typedef char small_; - -struct big_ { - char dummy[2]; -}; - -// Identity metafunction. -template -struct identity_ { - typedef T type; -}; - -// integral_constant, defined in tr1, is a wrapper for an integer -// value. We don't really need this generality; we could get away -// with hardcoding the integer type to bool. We use the fully -// general integer_constant for compatibility with tr1. - -template -struct integral_constant { - static const T value = v; - typedef T value_type; - typedef integral_constant type; -}; - -template const T integral_constant::value; - - -// Abbreviations: true_type and false_type are structs that represent boolean -// true and false values. Also define the boost::mpl versions of those names, -// true_ and false_. -typedef integral_constant true_type; -typedef integral_constant false_type; -typedef true_type true_; -typedef false_type false_; - -// if_ is a templatized conditional statement. -// if_ is a compile time evaluation of cond. -// if_<>::type contains A if cond is true, B otherwise. -template -struct if_{ - typedef A type; -}; - -template -struct if_ { - typedef B type; -}; - - -// type_equals_ is a template type comparator, similar to Loki IsSameType. -// type_equals_::value is true iff "A" is the same type as "B". -// -// New code should prefer base::is_same, defined in base/type_traits.h. -// It is functionally identical, but is_same is the standard spelling. -template -struct type_equals_ : public false_ { -}; - -template -struct type_equals_ : public true_ { -}; - -// and_ is a template && operator. -// and_::value evaluates "A::value && B::value". -template -struct and_ : public integral_constant { -}; - -// or_ is a template || operator. -// or_::value evaluates "A::value || B::value". -template -struct or_ : public integral_constant { -}; - - -_END_GOOGLE_NAMESPACE_ - -#endif // BASE_TEMPLATE_UTIL_H_ diff --git a/clipper/sparsehash-2.0.3/src/sparsehash/type_traits.h b/clipper/sparsehash-2.0.3/src/sparsehash/type_traits.h deleted file mode 100644 index f909cf9..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsehash/type_traits.h +++ /dev/null @@ -1,342 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// ---- -// -// This code is compiled directly on many platforms, including client -// platforms like Windows, Mac, and embedded systems. Before making -// any changes here, make sure that you're not breaking any platforms. -// -// Define a small subset of tr1 type traits. The traits we define are: -// is_integral -// is_floating_point -// is_pointer -// is_enum -// is_reference -// is_pod -// has_trivial_constructor -// has_trivial_copy -// has_trivial_assign -// has_trivial_destructor -// remove_const -// remove_volatile -// remove_cv -// remove_reference -// add_reference -// remove_pointer -// is_same -// is_convertible -// We can add more type traits as required. - -#ifndef BASE_TYPE_TRAITS_H_ -#define BASE_TYPE_TRAITS_H_ - -#include -#include // For pair - -#include // For true_type and false_type - -_START_GOOGLE_NAMESPACE_ - -template struct is_integral; -template struct is_floating_point; -template struct is_pointer; -// MSVC can't compile this correctly, and neither can gcc 3.3.5 (at least) -#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) -// is_enum uses is_convertible, which is not available on MSVC. -template struct is_enum; -#endif -template struct is_reference; -template struct is_pod; -template struct has_trivial_constructor; -template struct has_trivial_copy; -template struct has_trivial_assign; -template struct has_trivial_destructor; -template struct remove_const; -template struct remove_volatile; -template struct remove_cv; -template struct remove_reference; -template struct add_reference; -template struct remove_pointer; -template struct is_same; -#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) -template struct is_convertible; -#endif - -// is_integral is false except for the built-in integer types. A -// cv-qualified type is integral if and only if the underlying type is. -template struct is_integral : false_type { }; -template<> struct is_integral : true_type { }; -template<> struct is_integral : true_type { }; -template<> struct is_integral : true_type { }; -template<> struct is_integral : true_type { }; -#if defined(_MSC_VER) -// wchar_t is not by default a distinct type from unsigned short in -// Microsoft C. -// See http://msdn2.microsoft.com/en-us/library/dh8che7s(VS.80).aspx -template<> struct is_integral<__wchar_t> : true_type { }; -#else -template<> struct is_integral : true_type { }; -#endif -template<> struct is_integral : true_type { }; -template<> struct is_integral : true_type { }; -template<> struct is_integral : true_type { }; -template<> struct is_integral : true_type { }; -template<> struct is_integral : true_type { }; -template<> struct is_integral : true_type { }; -#ifdef HAVE_LONG_LONG -template<> struct is_integral : true_type { }; -template<> struct is_integral : true_type { }; -#endif -template struct is_integral : is_integral { }; -template struct is_integral : is_integral { }; -template struct is_integral : is_integral { }; - -// is_floating_point is false except for the built-in floating-point types. -// A cv-qualified type is integral if and only if the underlying type is. -template struct is_floating_point : false_type { }; -template<> struct is_floating_point : true_type { }; -template<> struct is_floating_point : true_type { }; -template<> struct is_floating_point : true_type { }; -template struct is_floating_point - : is_floating_point { }; -template struct is_floating_point - : is_floating_point { }; -template struct is_floating_point - : is_floating_point { }; - -// is_pointer is false except for pointer types. A cv-qualified type (e.g. -// "int* const", as opposed to "int const*") is cv-qualified if and only if -// the underlying type is. -template struct is_pointer : false_type { }; -template struct is_pointer : true_type { }; -template struct is_pointer : is_pointer { }; -template struct is_pointer : is_pointer { }; -template struct is_pointer : is_pointer { }; - -#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) - -namespace internal { - -template struct is_class_or_union { - template static small_ tester(void (U::*)()); - template static big_ tester(...); - static const bool value = sizeof(tester(0)) == sizeof(small_); -}; - -// is_convertible chokes if the first argument is an array. That's why -// we use add_reference here. -template struct is_enum_impl - : is_convertible::type, int> { }; - -template struct is_enum_impl : false_type { }; - -} // namespace internal - -// Specified by TR1 [4.5.1] primary type categories. - -// Implementation note: -// -// Each type is either void, integral, floating point, array, pointer, -// reference, member object pointer, member function pointer, enum, -// union or class. Out of these, only integral, floating point, reference, -// class and enum types are potentially convertible to int. Therefore, -// if a type is not a reference, integral, floating point or class and -// is convertible to int, it's a enum. Adding cv-qualification to a type -// does not change whether it's an enum. -// -// Is-convertible-to-int check is done only if all other checks pass, -// because it can't be used with some types (e.g. void or classes with -// inaccessible conversion operators). -template struct is_enum - : internal::is_enum_impl< - is_same::value || - is_integral::value || - is_floating_point::value || - is_reference::value || - internal::is_class_or_union::value, - T> { }; - -template struct is_enum : is_enum { }; -template struct is_enum : is_enum { }; -template struct is_enum : is_enum { }; - -#endif - -// is_reference is false except for reference types. -template struct is_reference : false_type {}; -template struct is_reference : true_type {}; - - -// We can't get is_pod right without compiler help, so fail conservatively. -// We will assume it's false except for arithmetic types, enumerations, -// pointers and cv-qualified versions thereof. Note that std::pair -// is not a POD even if T and U are PODs. -template struct is_pod - : integral_constant::value || - is_floating_point::value || -#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) - // is_enum is not available on MSVC. - is_enum::value || -#endif - is_pointer::value)> { }; -template struct is_pod : is_pod { }; -template struct is_pod : is_pod { }; -template struct is_pod : is_pod { }; - - -// We can't get has_trivial_constructor right without compiler help, so -// fail conservatively. We will assume it's false except for: (1) types -// for which is_pod is true. (2) std::pair of types with trivial -// constructors. (3) array of a type with a trivial constructor. -// (4) const versions thereof. -template struct has_trivial_constructor : is_pod { }; -template struct has_trivial_constructor > - : integral_constant::value && - has_trivial_constructor::value)> { }; -template struct has_trivial_constructor - : has_trivial_constructor { }; -template struct has_trivial_constructor - : has_trivial_constructor { }; - -// We can't get has_trivial_copy right without compiler help, so fail -// conservatively. We will assume it's false except for: (1) types -// for which is_pod is true. (2) std::pair of types with trivial copy -// constructors. (3) array of a type with a trivial copy constructor. -// (4) const versions thereof. -template struct has_trivial_copy : is_pod { }; -template struct has_trivial_copy > - : integral_constant::value && - has_trivial_copy::value)> { }; -template struct has_trivial_copy - : has_trivial_copy { }; -template struct has_trivial_copy : has_trivial_copy { }; - -// We can't get has_trivial_assign right without compiler help, so fail -// conservatively. We will assume it's false except for: (1) types -// for which is_pod is true. (2) std::pair of types with trivial copy -// constructors. (3) array of a type with a trivial assign constructor. -template struct has_trivial_assign : is_pod { }; -template struct has_trivial_assign > - : integral_constant::value && - has_trivial_assign::value)> { }; -template struct has_trivial_assign - : has_trivial_assign { }; - -// We can't get has_trivial_destructor right without compiler help, so -// fail conservatively. We will assume it's false except for: (1) types -// for which is_pod is true. (2) std::pair of types with trivial -// destructors. (3) array of a type with a trivial destructor. -// (4) const versions thereof. -template struct has_trivial_destructor : is_pod { }; -template struct has_trivial_destructor > - : integral_constant::value && - has_trivial_destructor::value)> { }; -template struct has_trivial_destructor - : has_trivial_destructor { }; -template struct has_trivial_destructor - : has_trivial_destructor { }; - -// Specified by TR1 [4.7.1] -template struct remove_const { typedef T type; }; -template struct remove_const { typedef T type; }; -template struct remove_volatile { typedef T type; }; -template struct remove_volatile { typedef T type; }; -template struct remove_cv { - typedef typename remove_const::type>::type type; -}; - - -// Specified by TR1 [4.7.2] Reference modifications. -template struct remove_reference { typedef T type; }; -template struct remove_reference { typedef T type; }; - -template struct add_reference { typedef T& type; }; -template struct add_reference { typedef T& type; }; - -// Specified by TR1 [4.7.4] Pointer modifications. -template struct remove_pointer { typedef T type; }; -template struct remove_pointer { typedef T type; }; -template struct remove_pointer { typedef T type; }; -template struct remove_pointer { typedef T type; }; -template struct remove_pointer { - typedef T type; }; - -// Specified by TR1 [4.6] Relationships between types -template struct is_same : public false_type { }; -template struct is_same : public true_type { }; - -// Specified by TR1 [4.6] Relationships between types -#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) -namespace internal { - -// This class is an implementation detail for is_convertible, and you -// don't need to know how it works to use is_convertible. For those -// who care: we declare two different functions, one whose argument is -// of type To and one with a variadic argument list. We give them -// return types of different size, so we can use sizeof to trick the -// compiler into telling us which function it would have chosen if we -// had called it with an argument of type From. See Alexandrescu's -// _Modern C++ Design_ for more details on this sort of trick. - -template -struct ConvertHelper { - static small_ Test(To); - static big_ Test(...); - static From Create(); -}; -} // namespace internal - -// Inherits from true_type if From is convertible to To, false_type otherwise. -template -struct is_convertible - : integral_constant::Test( - internal::ConvertHelper::Create())) - == sizeof(small_)> { -}; -#endif - -_END_GOOGLE_NAMESPACE_ - -// Right now these macros are no-ops, and mostly just document the fact -// these types are PODs, for human use. They may be made more contentful -// later. The typedef is just to make it legal to put a semicolon after -// these macros. -#define DECLARE_POD(TypeName) typedef int Dummy_Type_For_DECLARE_POD -#define DECLARE_NESTED_POD(TypeName) DECLARE_POD(TypeName) -#define PROPAGATE_POD_FROM_TEMPLATE_ARGUMENT(TemplateName) \ - typedef int Dummy_Type_For_PROPAGATE_POD_FROM_TEMPLATE_ARGUMENT -#define ENFORCE_POD(TypeName) typedef int Dummy_Type_For_ENFORCE_POD - -#endif // BASE_TYPE_TRAITS_H_ diff --git a/clipper/sparsehash-2.0.3/src/sparsetable_unittest.cc b/clipper/sparsehash-2.0.3/src/sparsetable_unittest.cc deleted file mode 100644 index 9b6451b..0000000 --- a/clipper/sparsehash-2.0.3/src/sparsetable_unittest.cc +++ /dev/null @@ -1,978 +0,0 @@ -// Copyright (c) 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// -// Since sparsetable is templatized, it's important that we test every -// function in every class in this file -- not just to see if it -// works, but even if it compiles. - -#include -#include -#include -#include -#include // for size_t -#include // defines unlink() on some windows platforms(?) -#ifdef HAVE_UNISTD_H -# include -#endif // for unlink() -#include // for allocator -#include -#include -using std::string; -using std::allocator; -using GOOGLE_NAMESPACE::sparsetable; -using GOOGLE_NAMESPACE::DEFAULT_SPARSEGROUP_SIZE; - -typedef u_int16_t uint16; -string FLAGS_test_tmpdir = "/tmp/"; - -// Many sparsetable operations return a size_t. Rather than have to -// use PRIuS everywhere, we'll just cast to a "big enough" value. -#define UL(x) ( static_cast(x) ) - - -static char outbuf[10240]; // big enough for these tests -static char* out = outbuf; // where to write next -#define LEFT (outbuf + sizeof(outbuf) - out) - -#define TEST(cond) out += snprintf(out, LEFT, #cond "? %s\n", \ - (cond) ? "yes" : "no"); - -inline string AsString(int n) { - const int N = 64; - char buf[N]; - snprintf(buf, N, "%d", n); - return string(buf); -} - -// Test sparsetable with a POD type, int. -void TestInt() { - out += snprintf(out, LEFT, "int test\n"); - sparsetable x(7), y(70), z; - x.set(4, 10); - y.set(12, -12); - y.set(47, -47); - y.set(48, -48); - y.set(49, -49); - - const sparsetable constx(x); - const sparsetable consty(y); - - // ---------------------------------------------------------------------- - // Test the plain iterators - - for ( sparsetable::iterator it = x.begin(); it != x.end(); ++it ) { - out += snprintf(out, LEFT, "x[%lu]: %d\n", UL(it - x.begin()), int(*it)); - } - for ( sparsetable::const_iterator it = x.begin(); it != x.end(); ++it ) { - out += snprintf(out, LEFT, "x[%lu]: %d\n", UL(it - x.begin()), *it); - } - for ( sparsetable::reverse_iterator it = x.rbegin(); it != x.rend(); ++it ) { - out += snprintf(out, LEFT, "x[%lu]: %d\n", UL(x.rend()-1 - it), int(*it)); - } - for ( sparsetable::const_reverse_iterator it = constx.rbegin(); it != constx.rend(); ++it ) { - out += snprintf(out, LEFT, "x[%lu]: %d\n", UL(constx.rend()-1 - it), *it); - } - for ( sparsetable::iterator it = z.begin(); it != z.end(); ++it ) { - out += snprintf(out, LEFT, "z[%lu]: %d\n", UL(it - z.begin()), int(*it)); - } - - { // array version - out += snprintf(out, LEFT, "x[3]: %d\n", int(x[3])); - out += snprintf(out, LEFT, "x[4]: %d\n", int(x[4])); - out += snprintf(out, LEFT, "x[5]: %d\n", int(x[5])); - } - { - sparsetable::iterator it; // non-const version - out += snprintf(out, LEFT, "x[4]: %d\n", int(x.begin()[4])); - it = x.begin() + 4; // should point to the non-zero value - out += snprintf(out, LEFT, "x[4]: %d\n", int(*it)); - it--; - --it; - it += 5; - it -= 2; - it++; - ++it; - it = it - 3; - it = 1 + it; // now at 5 - out += snprintf(out, LEFT, "x[3]: %d\n", int(it[-2])); - out += snprintf(out, LEFT, "x[4]: %d\n", int(it[-1])); - *it = 55; - out += snprintf(out, LEFT, "x[5]: %d\n", int(it[0])); - out += snprintf(out, LEFT, "x[5]: %d\n", int(*it)); - int *x6 = &(it[1]); - *x6 = 66; - out += snprintf(out, LEFT, "x[6]: %d\n", int(*(it + 1))); - // Let's test comparitors as well - TEST(it == it); - TEST(!(it != it)); - TEST(!(it < it)); - TEST(!(it > it)); - TEST(it <= it); - TEST(it >= it); - - sparsetable::iterator it_minus_1 = it - 1; - TEST(!(it == it_minus_1)); - TEST(it != it_minus_1); - TEST(!(it < it_minus_1)); - TEST(it > it_minus_1); - TEST(!(it <= it_minus_1)); - TEST(it >= it_minus_1); - TEST(!(it_minus_1 == it)); - TEST(it_minus_1 != it); - TEST(it_minus_1 < it); - TEST(!(it_minus_1 > it)); - TEST(it_minus_1 <= it); - TEST(!(it_minus_1 >= it)); - - sparsetable::iterator it_plus_1 = it + 1; - TEST(!(it == it_plus_1)); - TEST(it != it_plus_1); - TEST(it < it_plus_1); - TEST(!(it > it_plus_1)); - TEST(it <= it_plus_1); - TEST(!(it >= it_plus_1)); - TEST(!(it_plus_1 == it)); - TEST(it_plus_1 != it); - TEST(!(it_plus_1 < it)); - TEST(it_plus_1 > it); - TEST(!(it_plus_1 <= it)); - TEST(it_plus_1 >= it); - } - { - sparsetable::const_iterator it; // const version - out += snprintf(out, LEFT, "x[4]: %d\n", int(x.begin()[4])); - it = x.begin() + 4; // should point to the non-zero value - out += snprintf(out, LEFT, "x[4]: %d\n", *it); - it--; - --it; - it += 5; - it -= 2; - it++; - ++it; - it = it - 3; - it = 1 + it; // now at 5 - out += snprintf(out, LEFT, "x[3]: %d\n", it[-2]); - out += snprintf(out, LEFT, "x[4]: %d\n", it[-1]); - out += snprintf(out, LEFT, "x[5]: %d\n", *it); - out += snprintf(out, LEFT, "x[6]: %d\n", *(it + 1)); - // Let's test comparitors as well - TEST(it == it); - TEST(!(it != it)); - TEST(!(it < it)); - TEST(!(it > it)); - TEST(it <= it); - TEST(it >= it); - - sparsetable::const_iterator it_minus_1 = it - 1; - TEST(!(it == it_minus_1)); - TEST(it != it_minus_1); - TEST(!(it < it_minus_1)); - TEST(it > it_minus_1); - TEST(!(it <= it_minus_1)); - TEST(it >= it_minus_1); - TEST(!(it_minus_1 == it)); - TEST(it_minus_1 != it); - TEST(it_minus_1 < it); - TEST(!(it_minus_1 > it)); - TEST(it_minus_1 <= it); - TEST(!(it_minus_1 >= it)); - - sparsetable::const_iterator it_plus_1 = it + 1; - TEST(!(it == it_plus_1)); - TEST(it != it_plus_1); - TEST(it < it_plus_1); - TEST(!(it > it_plus_1)); - TEST(it <= it_plus_1); - TEST(!(it >= it_plus_1)); - TEST(!(it_plus_1 == it)); - TEST(it_plus_1 != it); - TEST(!(it_plus_1 < it)); - TEST(it_plus_1 > it); - TEST(!(it_plus_1 <= it)); - TEST(it_plus_1 >= it); - } - - TEST(x.begin() == x.begin() + 1 - 1); - TEST(x.begin() < x.end()); - TEST(z.begin() < z.end()); - TEST(z.begin() <= z.end()); - TEST(z.begin() == z.end()); - - - // ---------------------------------------------------------------------- - // Test the non-empty iterators - - for ( sparsetable::nonempty_iterator it = x.nonempty_begin(); it != x.nonempty_end(); ++it ) { - out += snprintf(out, LEFT, "x[??]: %d\n", *it); - } - for ( sparsetable::const_nonempty_iterator it = y.nonempty_begin(); it != y.nonempty_end(); ++it ) { - out += snprintf(out, LEFT, "y[??]: %d\n", *it); - } - for ( sparsetable::reverse_nonempty_iterator it = y.nonempty_rbegin(); it != y.nonempty_rend(); ++it ) { - out += snprintf(out, LEFT, "y[??]: %d\n", *it); - } - for ( sparsetable::const_reverse_nonempty_iterator it = consty.nonempty_rbegin(); it != consty.nonempty_rend(); ++it ) { - out += snprintf(out, LEFT, "y[??]: %d\n", *it); - } - for ( sparsetable::nonempty_iterator it = z.nonempty_begin(); it != z.nonempty_end(); ++it ) { - out += snprintf(out, LEFT, "z[??]: %d\n", *it); - } - - { - sparsetable::nonempty_iterator it; // non-const version - out += snprintf(out, LEFT, "first non-empty y: %d\n", *y.nonempty_begin()); - out += snprintf(out, LEFT, "first non-empty x: %d\n", *x.nonempty_begin()); - it = x.nonempty_begin(); - ++it; // should be at end - --it; - out += snprintf(out, LEFT, "first non-empty x: %d\n", *it++); - it--; - out += snprintf(out, LEFT, "first non-empty x: %d\n", *it++); - } - { - sparsetable::const_nonempty_iterator it; // non-const version - out += snprintf(out, LEFT, "first non-empty y: %d\n", *y.nonempty_begin()); - out += snprintf(out, LEFT, "first non-empty x: %d\n", *x.nonempty_begin()); - it = x.nonempty_begin(); - ++it; // should be at end - --it; - out += snprintf(out, LEFT, "first non-empty x: %d\n", *it++); - it--; - out += snprintf(out, LEFT, "first non-empty x: %d\n", *it++); - } - - TEST(x.begin() == x.begin() + 1 - 1); - TEST(z.begin() != z.end()); - - // ---------------------------------------------------------------------- - // Test the non-empty iterators get_pos function - - sparsetable gp(100); - for (int i = 0; i < 100; i += 9) { - gp.set(i,i); - } - - for (sparsetable::const_nonempty_iterator - it = gp.nonempty_begin(); it != gp.nonempty_end(); ++it) { - out += snprintf(out, LEFT, - "get_pos() for const nonempty_iterator: %u == %lu\n", - *it, UL(gp.get_pos(it))); - } - - for (sparsetable::nonempty_iterator - it = gp.nonempty_begin(); it != gp.nonempty_end(); ++it) { - out += snprintf(out, LEFT, - "get_pos() for nonempty_iterator: %u == %lu\n", - *it, UL(gp.get_pos(it))); - } - - // ---------------------------------------------------------------------- - // Test sparsetable functions - out += snprintf(out, LEFT, "x has %lu/%lu buckets, " - "y %lu/%lu, z %lu/%lu\n", - UL(x.num_nonempty()), UL(x.size()), - UL(y.num_nonempty()), UL(y.size()), - UL(z.num_nonempty()), UL(z.size())); - - y.resize(48); // should get rid of 48 and 49 - y.resize(70); // 48 and 49 should still be gone - out += snprintf(out, LEFT, "y shrank and grew: it's now %lu/%lu\n", - UL(y.num_nonempty()), UL(y.size())); - out += snprintf(out, LEFT, "y[12] = %d, y.get(12) = %d\n", int(y[12]), y.get(12)); - y.erase(12); - out += snprintf(out, LEFT, "y[12] cleared. y now %lu/%lu. " - "y[12] = %d, y.get(12) = %d\n", - UL(y.num_nonempty()), UL(y.size()), int(y[12]), y.get(12)); - - swap(x, y); - - y.clear(); - TEST(y == z); - - y.resize(70); - for ( int i = 10; i < 40; ++i ) - y[i] = -i; - y.erase(y.begin() + 15, y.begin() + 30); - y.erase(y.begin() + 34); - y.erase(12); - y.resize(38); - y.resize(10000); - y[9898] = -9898; - for ( sparsetable::const_iterator it = y.begin(); it != y.end(); ++it ) { - if ( y.test(it) ) - out += snprintf(out, LEFT, "y[%lu] is set\n", UL(it - y.begin())); - } - out += snprintf(out, LEFT, "That's %lu set buckets\n", UL(y.num_nonempty())); - - out += snprintf(out, LEFT, "Starting from y[32]...\n"); - for ( sparsetable::const_nonempty_iterator it = y.get_iter(32); - it != y.nonempty_end(); ++it ) - out += snprintf(out, LEFT, "y[??] = %d\n", *it); - - out += snprintf(out, LEFT, "From y[32] down...\n"); - for ( sparsetable::nonempty_iterator it = y.get_iter(32); - it != y.nonempty_begin(); ) - out += snprintf(out, LEFT, "y[??] = %d\n", *--it); - - // ---------------------------------------------------------------------- - // Test I/O using deprecated read/write_metadata - string filestr = FLAGS_test_tmpdir + "/.sparsetable.test"; - const char *file = filestr.c_str(); - FILE *fp = fopen(file, "wb"); - if ( fp == NULL ) { - // maybe we can't write to /tmp/. Try the current directory - file = ".sparsetable.test"; - fp = fopen(file, "wb"); - } - if ( fp == NULL ) { - out += snprintf(out, LEFT, "Can't open %s, skipping disk write...\n", file); - } else { - y.write_metadata(fp); // only write meta-information - y.write_nopointer_data(fp); - fclose(fp); - } - fp = fopen(file, "rb"); - if ( fp == NULL ) { - out += snprintf(out, LEFT, "Can't open %s, skipping disk read...\n", file); - } else { - sparsetable y2; - y2.read_metadata(fp); - y2.read_nopointer_data(fp); - fclose(fp); - - for ( sparsetable::const_iterator it = y2.begin(); it != y2.end(); ++it ) { - if ( y2.test(it) ) - out += snprintf(out, LEFT, "y2[%lu] is %d\n", UL(it - y2.begin()), *it); - } - out += snprintf(out, LEFT, "That's %lu set buckets\n", UL(y2.num_nonempty())); - } - unlink(file); - - // ---------------------------------------------------------------------- - // Also test I/O using serialize()/unserialize() - fp = fopen(file, "wb"); - if ( fp == NULL ) { - out += snprintf(out, LEFT, "Can't open %s, skipping disk write...\n", file); - } else { - y.serialize(sparsetable::NopointerSerializer(), fp); - fclose(fp); - } - fp = fopen(file, "rb"); - if ( fp == NULL ) { - out += snprintf(out, LEFT, "Can't open %s, skipping disk read...\n", file); - } else { - sparsetable y2; - y2.unserialize(sparsetable::NopointerSerializer(), fp); - fclose(fp); - - for ( sparsetable::const_iterator it = y2.begin(); it != y2.end(); ++it ) { - if ( y2.test(it) ) - out += snprintf(out, LEFT, "y2[%lu] is %d\n", UL(it - y2.begin()), *it); - } - out += snprintf(out, LEFT, "That's %lu set buckets\n", UL(y2.num_nonempty())); - } - unlink(file); -} - -// Test sparsetable with a non-POD type, std::string -void TestString() { - out += snprintf(out, LEFT, "string test\n"); - sparsetable x(7), y(70), z; - x.set(4, "foo"); - y.set(12, "orange"); - y.set(47, "grape"); - y.set(48, "pear"); - y.set(49, "apple"); - - // ---------------------------------------------------------------------- - // Test the plain iterators - - for ( sparsetable::iterator it = x.begin(); it != x.end(); ++it ) { - out += snprintf(out, LEFT, "x[%lu]: %s\n", - UL(it - x.begin()), static_cast(*it).c_str()); - } - for ( sparsetable::iterator it = z.begin(); it != z.end(); ++it ) { - out += snprintf(out, LEFT, "z[%lu]: %s\n", - UL(it - z.begin()), static_cast(*it).c_str()); - } - - TEST(x.begin() == x.begin() + 1 - 1); - TEST(x.begin() < x.end()); - TEST(z.begin() < z.end()); - TEST(z.begin() <= z.end()); - TEST(z.begin() == z.end()); - - // ---------------------------------------------------------------------- - // Test the non-empty iterators - for ( sparsetable::nonempty_iterator it = x.nonempty_begin(); it != x.nonempty_end(); ++it ) { - out += snprintf(out, LEFT, "x[??]: %s\n", it->c_str()); - } - for ( sparsetable::const_nonempty_iterator it = y.nonempty_begin(); it != y.nonempty_end(); ++it ) { - out += snprintf(out, LEFT, "y[??]: %s\n", it->c_str()); - } - for ( sparsetable::nonempty_iterator it = z.nonempty_begin(); it != z.nonempty_end(); ++it ) { - out += snprintf(out, LEFT, "z[??]: %s\n", it->c_str()); - } - - // ---------------------------------------------------------------------- - // Test sparsetable functions - out += snprintf(out, LEFT, "x has %lu/%lu buckets, y %lu/%lu, z %lu/%lu\n", - UL(x.num_nonempty()), UL(x.size()), - UL(y.num_nonempty()), UL(y.size()), - UL(z.num_nonempty()), UL(z.size())); - - y.resize(48); // should get rid of 48 and 49 - y.resize(70); // 48 and 49 should still be gone - out += snprintf(out, LEFT, "y shrank and grew: it's now %lu/%lu\n", - UL(y.num_nonempty()), UL(y.size())); - out += snprintf(out, LEFT, "y[12] = %s, y.get(12) = %s\n", - static_cast(y[12]).c_str(), y.get(12).c_str()); - y.erase(12); - out += snprintf(out, LEFT, "y[12] cleared. y now %lu/%lu. " - "y[12] = %s, y.get(12) = %s\n", - UL(y.num_nonempty()), UL(y.size()), - static_cast(y[12]).c_str(), - static_cast(y.get(12)).c_str()); - swap(x, y); - - y.clear(); - TEST(y == z); - - y.resize(70); - for ( int i = 10; i < 40; ++i ) - y.set(i, AsString(-i)); - y.erase(y.begin() + 15, y.begin() + 30); - y.erase(y.begin() + 34); - y.erase(12); - y.resize(38); - y.resize(10000); - y.set(9898, AsString(-9898)); - for ( sparsetable::const_iterator it = y.begin(); it != y.end(); ++it ) { - if ( y.test(it) ) - out += snprintf(out, LEFT, "y[%lu] is set\n", UL(it - y.begin())); - } - out += snprintf(out, LEFT, "That's %lu set buckets\n", UL(y.num_nonempty())); - - out += snprintf(out, LEFT, "Starting from y[32]...\n"); - for ( sparsetable::const_nonempty_iterator it = y.get_iter(32); - it != y.nonempty_end(); ++it ) - out += snprintf(out, LEFT, "y[??] = %s\n", it->c_str()); - - out += snprintf(out, LEFT, "From y[32] down...\n"); - for ( sparsetable::nonempty_iterator it = y.get_iter(32); - it != y.nonempty_begin(); ) - out += snprintf(out, LEFT, "y[??] = %s\n", (*--it).c_str()); -} - -// An instrumented allocator that keeps track of all calls to -// allocate/deallocate/construct/destroy. It stores the number of times -// they were called and the values they were called with. Such information is -// stored in the following global variables. - -static size_t sum_allocate_bytes; -static size_t sum_deallocate_bytes; - -void ResetAllocatorCounters() { - sum_allocate_bytes = 0; - sum_deallocate_bytes = 0; -} - -template class instrumented_allocator { - public: - typedef T value_type; - typedef uint16 size_type; - typedef ptrdiff_t difference_type; - - typedef T* pointer; - typedef const T* const_pointer; - typedef T& reference; - typedef const T& const_reference; - - instrumented_allocator() {} - instrumented_allocator(const instrumented_allocator&) {} - ~instrumented_allocator() {} - - pointer address(reference r) const { return &r; } - const_pointer address(const_reference r) const { return &r; } - - pointer allocate(size_type n, const_pointer = 0) { - sum_allocate_bytes += n * sizeof(value_type); - return static_cast(malloc(n * sizeof(value_type))); - } - void deallocate(pointer p, size_type n) { - sum_deallocate_bytes += n * sizeof(value_type); - free(p); - } - - size_type max_size() const { - return static_cast(-1) / sizeof(value_type); - } - - void construct(pointer p, const value_type& val) { - new(p) value_type(val); - } - void destroy(pointer p) { - p->~value_type(); - } - - template - explicit instrumented_allocator(const instrumented_allocator&) {} - - template - struct rebind { - typedef instrumented_allocator other; - }; - - private: - void operator=(const instrumented_allocator&); -}; - -template -inline bool operator==(const instrumented_allocator&, - const instrumented_allocator&) { - return true; -} - -template -inline bool operator!=(const instrumented_allocator&, - const instrumented_allocator&) { - return false; -} - -// Test sparsetable with instrumented_allocator. -void TestAllocator() { - out += snprintf(out, LEFT, "allocator test\n"); - - ResetAllocatorCounters(); - - // POD (int32) with instrumented_allocator. - typedef sparsetable > IntSparseTable; - - IntSparseTable* s1 = new IntSparseTable(10000); - TEST(sum_allocate_bytes > 0); - for (int i = 0; i < 10000; ++i) { - s1->set(i, 0); - } - TEST(sum_allocate_bytes >= 10000 * sizeof(int)); - ResetAllocatorCounters(); - delete s1; - TEST(sum_deallocate_bytes >= 10000 * sizeof(int)); - - IntSparseTable* s2 = new IntSparseTable(1000); - IntSparseTable* s3 = new IntSparseTable(1000); - - for (int i = 0; i < 1000; ++i) { - s2->set(i, 0); - s3->set(i, 0); - } - TEST(sum_allocate_bytes >= 2000 * sizeof(int)); - - ResetAllocatorCounters(); - s3->clear(); - TEST(sum_deallocate_bytes >= 1000 * sizeof(int)); - - ResetAllocatorCounters(); - s2->swap(*s3); // s2 is empty after the swap - s2->clear(); - TEST(sum_deallocate_bytes < 1000 * sizeof(int)); - for (int i = 0; i < s3->size(); ++i) { - s3->erase(i); - } - TEST(sum_deallocate_bytes >= 1000 * sizeof(int)); - delete s2; - delete s3; - - // POD (int) with default allocator. - sparsetable x, y; - for (int s = 1000; s <= 40000; s += 1000) { - x.resize(s); - for (int i = 0; i < s; ++i) { - x.set(i, i + 1); - } - y = x; - for (int i = 0; i < s; ++i) { - y.erase(i); - } - y.swap(x); - } - TEST(x.num_nonempty() == 0); - out += snprintf(out, LEFT, "y[0]: %d\n", int(y[0])); - out += snprintf(out, LEFT, "y[39999]: %d\n", int(y[39999])); - y.clear(); - - // POD (int) with std allocator. - sparsetable > u, v; - for (int s = 1000; s <= 40000; s += 1000) { - u.resize(s); - for (int i = 0; i < s; ++i) { - u.set(i, i + 1); - } - v = u; - for (int i = 0; i < s; ++i) { - v.erase(i); - } - v.swap(u); - } - TEST(u.num_nonempty() == 0); - out += snprintf(out, LEFT, "v[0]: %d\n", int(v[0])); - out += snprintf(out, LEFT, "v[39999]: %d\n", int(v[39999])); - v.clear(); - - // Non-POD (string) with default allocator. - sparsetable a, b; - for (int s = 1000; s <= 40000; s += 1000) { - a.resize(s); - for (int i = 0; i < s; ++i) { - a.set(i, "aa"); - } - b = a; - for (int i = 0; i < s; ++i) { - b.erase(i); - } - b.swap(a); - } - TEST(a.num_nonempty() == 0); - out += snprintf(out, LEFT, "b[0]: %s\n", b.get(0).c_str()); - out += snprintf(out, LEFT, "b[39999]: %s\n", b.get(39999).c_str()); - b.clear(); -} - -// The expected output from all of the above: TestInt(), TestString() and -// TestAllocator(). -static const char g_expected[] = ( - "int test\n" - "x[0]: 0\n" - "x[1]: 0\n" - "x[2]: 0\n" - "x[3]: 0\n" - "x[4]: 10\n" - "x[5]: 0\n" - "x[6]: 0\n" - "x[0]: 0\n" - "x[1]: 0\n" - "x[2]: 0\n" - "x[3]: 0\n" - "x[4]: 10\n" - "x[5]: 0\n" - "x[6]: 0\n" - "x[6]: 0\n" - "x[5]: 0\n" - "x[4]: 10\n" - "x[3]: 0\n" - "x[2]: 0\n" - "x[1]: 0\n" - "x[0]: 0\n" - "x[6]: 0\n" - "x[5]: 0\n" - "x[4]: 10\n" - "x[3]: 0\n" - "x[2]: 0\n" - "x[1]: 0\n" - "x[0]: 0\n" - "x[3]: 0\n" - "x[4]: 10\n" - "x[5]: 0\n" - "x[4]: 10\n" - "x[4]: 10\n" - "x[3]: 0\n" - "x[4]: 10\n" - "x[5]: 55\n" - "x[5]: 55\n" - "x[6]: 66\n" - "it == it? yes\n" - "!(it != it)? yes\n" - "!(it < it)? yes\n" - "!(it > it)? yes\n" - "it <= it? yes\n" - "it >= it? yes\n" - "!(it == it_minus_1)? yes\n" - "it != it_minus_1? yes\n" - "!(it < it_minus_1)? yes\n" - "it > it_minus_1? yes\n" - "!(it <= it_minus_1)? yes\n" - "it >= it_minus_1? yes\n" - "!(it_minus_1 == it)? yes\n" - "it_minus_1 != it? yes\n" - "it_minus_1 < it? yes\n" - "!(it_minus_1 > it)? yes\n" - "it_minus_1 <= it? yes\n" - "!(it_minus_1 >= it)? yes\n" - "!(it == it_plus_1)? yes\n" - "it != it_plus_1? yes\n" - "it < it_plus_1? yes\n" - "!(it > it_plus_1)? yes\n" - "it <= it_plus_1? yes\n" - "!(it >= it_plus_1)? yes\n" - "!(it_plus_1 == it)? yes\n" - "it_plus_1 != it? yes\n" - "!(it_plus_1 < it)? yes\n" - "it_plus_1 > it? yes\n" - "!(it_plus_1 <= it)? yes\n" - "it_plus_1 >= it? yes\n" - "x[4]: 10\n" - "x[4]: 10\n" - "x[3]: 0\n" - "x[4]: 10\n" - "x[5]: 55\n" - "x[6]: 66\n" - "it == it? yes\n" - "!(it != it)? yes\n" - "!(it < it)? yes\n" - "!(it > it)? yes\n" - "it <= it? yes\n" - "it >= it? yes\n" - "!(it == it_minus_1)? yes\n" - "it != it_minus_1? yes\n" - "!(it < it_minus_1)? yes\n" - "it > it_minus_1? yes\n" - "!(it <= it_minus_1)? yes\n" - "it >= it_minus_1? yes\n" - "!(it_minus_1 == it)? yes\n" - "it_minus_1 != it? yes\n" - "it_minus_1 < it? yes\n" - "!(it_minus_1 > it)? yes\n" - "it_minus_1 <= it? yes\n" - "!(it_minus_1 >= it)? yes\n" - "!(it == it_plus_1)? yes\n" - "it != it_plus_1? yes\n" - "it < it_plus_1? yes\n" - "!(it > it_plus_1)? yes\n" - "it <= it_plus_1? yes\n" - "!(it >= it_plus_1)? yes\n" - "!(it_plus_1 == it)? yes\n" - "it_plus_1 != it? yes\n" - "!(it_plus_1 < it)? yes\n" - "it_plus_1 > it? yes\n" - "!(it_plus_1 <= it)? yes\n" - "it_plus_1 >= it? yes\n" - "x.begin() == x.begin() + 1 - 1? yes\n" - "x.begin() < x.end()? yes\n" - "z.begin() < z.end()? no\n" - "z.begin() <= z.end()? yes\n" - "z.begin() == z.end()? yes\n" - "x[??]: 10\n" - "x[??]: 55\n" - "x[??]: 66\n" - "y[??]: -12\n" - "y[??]: -47\n" - "y[??]: -48\n" - "y[??]: -49\n" - "y[??]: -49\n" - "y[??]: -48\n" - "y[??]: -47\n" - "y[??]: -12\n" - "y[??]: -49\n" - "y[??]: -48\n" - "y[??]: -47\n" - "y[??]: -12\n" - "first non-empty y: -12\n" - "first non-empty x: 10\n" - "first non-empty x: 10\n" - "first non-empty x: 10\n" - "first non-empty y: -12\n" - "first non-empty x: 10\n" - "first non-empty x: 10\n" - "first non-empty x: 10\n" - "x.begin() == x.begin() + 1 - 1? yes\n" - "z.begin() != z.end()? no\n" - "get_pos() for const nonempty_iterator: 0 == 0\n" - "get_pos() for const nonempty_iterator: 9 == 9\n" - "get_pos() for const nonempty_iterator: 18 == 18\n" - "get_pos() for const nonempty_iterator: 27 == 27\n" - "get_pos() for const nonempty_iterator: 36 == 36\n" - "get_pos() for const nonempty_iterator: 45 == 45\n" - "get_pos() for const nonempty_iterator: 54 == 54\n" - "get_pos() for const nonempty_iterator: 63 == 63\n" - "get_pos() for const nonempty_iterator: 72 == 72\n" - "get_pos() for const nonempty_iterator: 81 == 81\n" - "get_pos() for const nonempty_iterator: 90 == 90\n" - "get_pos() for const nonempty_iterator: 99 == 99\n" - "get_pos() for nonempty_iterator: 0 == 0\n" - "get_pos() for nonempty_iterator: 9 == 9\n" - "get_pos() for nonempty_iterator: 18 == 18\n" - "get_pos() for nonempty_iterator: 27 == 27\n" - "get_pos() for nonempty_iterator: 36 == 36\n" - "get_pos() for nonempty_iterator: 45 == 45\n" - "get_pos() for nonempty_iterator: 54 == 54\n" - "get_pos() for nonempty_iterator: 63 == 63\n" - "get_pos() for nonempty_iterator: 72 == 72\n" - "get_pos() for nonempty_iterator: 81 == 81\n" - "get_pos() for nonempty_iterator: 90 == 90\n" - "get_pos() for nonempty_iterator: 99 == 99\n" - "x has 3/7 buckets, y 4/70, z 0/0\n" - "y shrank and grew: it's now 2/70\n" - "y[12] = -12, y.get(12) = -12\n" - "y[12] cleared. y now 1/70. y[12] = 0, y.get(12) = 0\n" - "y == z? no\n" - "y[10] is set\n" - "y[11] is set\n" - "y[13] is set\n" - "y[14] is set\n" - "y[30] is set\n" - "y[31] is set\n" - "y[32] is set\n" - "y[33] is set\n" - "y[35] is set\n" - "y[36] is set\n" - "y[37] is set\n" - "y[9898] is set\n" - "That's 12 set buckets\n" - "Starting from y[32]...\n" - "y[??] = -32\n" - "y[??] = -33\n" - "y[??] = -35\n" - "y[??] = -36\n" - "y[??] = -37\n" - "y[??] = -9898\n" - "From y[32] down...\n" - "y[??] = -31\n" - "y[??] = -30\n" - "y[??] = -14\n" - "y[??] = -13\n" - "y[??] = -11\n" - "y[??] = -10\n" - "y2[10] is -10\n" - "y2[11] is -11\n" - "y2[13] is -13\n" - "y2[14] is -14\n" - "y2[30] is -30\n" - "y2[31] is -31\n" - "y2[32] is -32\n" - "y2[33] is -33\n" - "y2[35] is -35\n" - "y2[36] is -36\n" - "y2[37] is -37\n" - "y2[9898] is -9898\n" - "That's 12 set buckets\n" - "y2[10] is -10\n" - "y2[11] is -11\n" - "y2[13] is -13\n" - "y2[14] is -14\n" - "y2[30] is -30\n" - "y2[31] is -31\n" - "y2[32] is -32\n" - "y2[33] is -33\n" - "y2[35] is -35\n" - "y2[36] is -36\n" - "y2[37] is -37\n" - "y2[9898] is -9898\n" - "That's 12 set buckets\n" - "string test\n" - "x[0]: \n" - "x[1]: \n" - "x[2]: \n" - "x[3]: \n" - "x[4]: foo\n" - "x[5]: \n" - "x[6]: \n" - "x.begin() == x.begin() + 1 - 1? yes\n" - "x.begin() < x.end()? yes\n" - "z.begin() < z.end()? no\n" - "z.begin() <= z.end()? yes\n" - "z.begin() == z.end()? yes\n" - "x[??]: foo\n" - "y[??]: orange\n" - "y[??]: grape\n" - "y[??]: pear\n" - "y[??]: apple\n" - "x has 1/7 buckets, y 4/70, z 0/0\n" - "y shrank and grew: it's now 2/70\n" - "y[12] = orange, y.get(12) = orange\n" - "y[12] cleared. y now 1/70. y[12] = , y.get(12) = \n" - "y == z? no\n" - "y[10] is set\n" - "y[11] is set\n" - "y[13] is set\n" - "y[14] is set\n" - "y[30] is set\n" - "y[31] is set\n" - "y[32] is set\n" - "y[33] is set\n" - "y[35] is set\n" - "y[36] is set\n" - "y[37] is set\n" - "y[9898] is set\n" - "That's 12 set buckets\n" - "Starting from y[32]...\n" - "y[??] = -32\n" - "y[??] = -33\n" - "y[??] = -35\n" - "y[??] = -36\n" - "y[??] = -37\n" - "y[??] = -9898\n" - "From y[32] down...\n" - "y[??] = -31\n" - "y[??] = -30\n" - "y[??] = -14\n" - "y[??] = -13\n" - "y[??] = -11\n" - "y[??] = -10\n" - "allocator test\n" - "sum_allocate_bytes > 0? yes\n" - "sum_allocate_bytes >= 10000 * sizeof(int)? yes\n" - "sum_deallocate_bytes >= 10000 * sizeof(int)? yes\n" - "sum_allocate_bytes >= 2000 * sizeof(int)? yes\n" - "sum_deallocate_bytes >= 1000 * sizeof(int)? yes\n" - "sum_deallocate_bytes < 1000 * sizeof(int)? yes\n" - "sum_deallocate_bytes >= 1000 * sizeof(int)? yes\n" - "x.num_nonempty() == 0? yes\n" - "y[0]: 1\n" - "y[39999]: 40000\n" - "u.num_nonempty() == 0? yes\n" - "v[0]: 1\n" - "v[39999]: 40000\n" - "a.num_nonempty() == 0? yes\n" - "b[0]: aa\n" - "b[39999]: aa\n" - ); - -// defined at bottom of file for ease of maintainence -int main(int argc, char **argv) { // though we ignore the args - (void)argc; - (void)argv; - - TestInt(); - TestString(); - TestAllocator(); - - // Finally, check to see if our output (in out) is what it's supposed to be. - const size_t r = sizeof(g_expected) - 1; - if ( r != static_cast(out - outbuf) || // output not the same size - memcmp(outbuf, g_expected, r) ) { // or bytes differed - fprintf(stderr, "TESTS FAILED\n\nEXPECTED:\n\n%s\n\nACTUAL:\n\n%s\n\n", - g_expected, outbuf); - return 1; - } else { - printf("PASS.\n"); - return 0; - } -} diff --git a/clipper/sparsehash-2.0.3/src/template_util_unittest.cc b/clipper/sparsehash-2.0.3/src/template_util_unittest.cc deleted file mode 100644 index ddf40f5..0000000 --- a/clipper/sparsehash-2.0.3/src/template_util_unittest.cc +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright 2005 Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// ---- -// -// These tests are really compile time tests. -// If you try to step through this in a debugger -// you will not see any evaluations, merely that -// value is assigned true or false sequentially. - -#include -#include -#include - -#include "testutil.h" - -using namespace GOOGLE_NAMESPACE; - -namespace { - -TEST(TemplateUtilTest, TestSize) { - EXPECT_GT(sizeof(GOOGLE_NAMESPACE::big_), sizeof(GOOGLE_NAMESPACE::small_)); -} - -TEST(TemplateUtilTest, TestIntegralConstants) { - // test the built-in types. - EXPECT_TRUE(true_type::value); - EXPECT_FALSE(false_type::value); - - typedef integral_constant one_type; - EXPECT_EQ(1, one_type::value); -} - -TEST(TemplateUtilTest, TestTemplateIf) { - typedef if_::type if_true; - EXPECT_TRUE(if_true::value); - - typedef if_::type if_false; - EXPECT_FALSE(if_false::value); -} - -TEST(TemplateUtilTest, TestTemplateTypeEquals) { - // Check that the TemplateTypeEquals works correctly. - bool value = false; - - // Test the same type is true. - value = type_equals_::value; - EXPECT_TRUE(value); - - // Test different types are false. - value = type_equals_::value; - EXPECT_FALSE(value); - - // Test type aliasing. - typedef const int foo; - value = type_equals_::value; - EXPECT_TRUE(value); -} - -TEST(TemplateUtilTest, TestTemplateAndOr) { - // Check that the TemplateTypeEquals works correctly. - bool value = false; - - // Yes && Yes == true. - value = and_::value; - EXPECT_TRUE(value); - // Yes && No == false. - value = and_::value; - EXPECT_FALSE(value); - // No && Yes == false. - value = and_::value; - EXPECT_FALSE(value); - // No && No == false. - value = and_::value; - EXPECT_FALSE(value); - - // Yes || Yes == true. - value = or_::value; - EXPECT_TRUE(value); - // Yes || No == true. - value = or_::value; - EXPECT_TRUE(value); - // No || Yes == true. - value = or_::value; - EXPECT_TRUE(value); - // No || No == false. - value = or_::value; - EXPECT_FALSE(value); -} - -TEST(TemplateUtilTest, TestIdentity) { - EXPECT_TRUE( - (type_equals_::type, int>::value)); - EXPECT_TRUE( - (type_equals_::type, void>::value)); -} - -} // namespace - -#include - -int main(int, char **) { - // All the work is done in the static constructors. If they don't - // die, the tests have all passed. - std::cout << "PASS\n"; - return 0; -} - diff --git a/clipper/sparsehash-2.0.3/src/testutil.h b/clipper/sparsehash-2.0.3/src/testutil.h deleted file mode 100644 index ce7454c..0000000 --- a/clipper/sparsehash-2.0.3/src/testutil.h +++ /dev/null @@ -1,266 +0,0 @@ -// Copyright (c) 2010, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- - -// This macro mimics a unittest framework, but is a bit less flexible -// than most. It requires a superclass to derive from, and does all -// work in global constructors. The tricky part is implementing -// TYPED_TEST. - -#ifndef SPARSEHASH_TEST_UTIL_H_ -#define SPARSEHASH_TEST_UTIL_H_ - -#include -#include "config.h" -#include -#include // for exit -#include // for length_error - -_START_GOOGLE_NAMESPACE_ - -namespace testing { - -#define EXPECT_TRUE(cond) do { \ - if (!(cond)) { \ - ::fputs("Test failed: " #cond "\n", stderr); \ - ::exit(1); \ - } \ -} while (0) - -#define EXPECT_FALSE(a) EXPECT_TRUE(!(a)) -#define EXPECT_EQ(a, b) EXPECT_TRUE((a) == (b)) -#define EXPECT_NE(a, b) EXPECT_TRUE((a) != (b)) -#define EXPECT_LT(a, b) EXPECT_TRUE((a) < (b)) -#define EXPECT_GT(a, b) EXPECT_TRUE((a) > (b)) -#define EXPECT_LE(a, b) EXPECT_TRUE((a) <= (b)) -#define EXPECT_GE(a, b) EXPECT_TRUE((a) >= (b)) - -#define EXPECT_DEATH(cmd, expected_error_string) \ - try { \ - cmd; \ - EXPECT_FALSE("did not see expected error: " #expected_error_string); \ - } catch (const std::length_error&) { \ - /* Good, the cmd failed. */ \ - } - -#define TEST(suitename, testname) \ - class TEST_##suitename##_##testname { \ - public: \ - TEST_##suitename##_##testname() { \ - ::fputs("Running " #suitename "." #testname "\n", stderr); \ - Run(); \ - } \ - void Run(); \ - }; \ - static TEST_##suitename##_##testname \ - test_instance_##suitename##_##testname; \ - void TEST_##suitename##_##testname::Run() - - -template struct TypeList6 { - typedef C1 type1; - typedef C2 type2; - typedef C3 type3; - typedef C4 type4; - typedef C5 type5; - typedef C6 type6; -}; - -// I need to list 18 types here, for code below to compile, though -// only the first 6 are ever used. -#define TYPED_TEST_CASE_6(classname, typelist) \ - typedef typelist::type1 classname##_type1; \ - typedef typelist::type2 classname##_type2; \ - typedef typelist::type3 classname##_type3; \ - typedef typelist::type4 classname##_type4; \ - typedef typelist::type5 classname##_type5; \ - typedef typelist::type6 classname##_type6; \ - static const int classname##_numtypes = 6; \ - typedef typelist::type1 classname##_type7; \ - typedef typelist::type1 classname##_type8; \ - typedef typelist::type1 classname##_type9; \ - typedef typelist::type1 classname##_type10; \ - typedef typelist::type1 classname##_type11; \ - typedef typelist::type1 classname##_type12; \ - typedef typelist::type1 classname##_type13; \ - typedef typelist::type1 classname##_type14; \ - typedef typelist::type1 classname##_type15; \ - typedef typelist::type1 classname##_type16; \ - typedef typelist::type1 classname##_type17; \ - typedef typelist::type1 classname##_type18; - -template struct TypeList18 { - typedef C1 type1; - typedef C2 type2; - typedef C3 type3; - typedef C4 type4; - typedef C5 type5; - typedef C6 type6; - typedef C7 type7; - typedef C8 type8; - typedef C9 type9; - typedef C10 type10; - typedef C11 type11; - typedef C12 type12; - typedef C13 type13; - typedef C14 type14; - typedef C15 type15; - typedef C16 type16; - typedef C17 type17; - typedef C18 type18; -}; - -#define TYPED_TEST_CASE_18(classname, typelist) \ - typedef typelist::type1 classname##_type1; \ - typedef typelist::type2 classname##_type2; \ - typedef typelist::type3 classname##_type3; \ - typedef typelist::type4 classname##_type4; \ - typedef typelist::type5 classname##_type5; \ - typedef typelist::type6 classname##_type6; \ - typedef typelist::type7 classname##_type7; \ - typedef typelist::type8 classname##_type8; \ - typedef typelist::type9 classname##_type9; \ - typedef typelist::type10 classname##_type10; \ - typedef typelist::type11 classname##_type11; \ - typedef typelist::type12 classname##_type12; \ - typedef typelist::type13 classname##_type13; \ - typedef typelist::type14 classname##_type14; \ - typedef typelist::type15 classname##_type15; \ - typedef typelist::type16 classname##_type16; \ - typedef typelist::type17 classname##_type17; \ - typedef typelist::type18 classname##_type18; \ - static const int classname##_numtypes = 18; - -#define TYPED_TEST(superclass, testname) \ - template \ - class TEST_onetype_##superclass##_##testname : \ - public superclass { \ - public: \ - TEST_onetype_##superclass##_##testname() { \ - Run(); \ - } \ - private: \ - void Run(); \ - }; \ - class TEST_typed_##superclass##_##testname { \ - public: \ - explicit TEST_typed_##superclass##_##testname() { \ - if (superclass##_numtypes >= 1) { \ - ::fputs("Running " #superclass "." #testname ".1\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 2) { \ - ::fputs("Running " #superclass "." #testname ".2\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 3) { \ - ::fputs("Running " #superclass "." #testname ".3\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 4) { \ - ::fputs("Running " #superclass "." #testname ".4\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 5) { \ - ::fputs("Running " #superclass "." #testname ".5\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 6) { \ - ::fputs("Running " #superclass "." #testname ".6\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 7) { \ - ::fputs("Running " #superclass "." #testname ".7\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 8) { \ - ::fputs("Running " #superclass "." #testname ".8\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 9) { \ - ::fputs("Running " #superclass "." #testname ".9\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 10) { \ - ::fputs("Running " #superclass "." #testname ".10\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 11) { \ - ::fputs("Running " #superclass "." #testname ".11\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 12) { \ - ::fputs("Running " #superclass "." #testname ".12\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 13) { \ - ::fputs("Running " #superclass "." #testname ".13\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 14) { \ - ::fputs("Running " #superclass "." #testname ".14\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 15) { \ - ::fputs("Running " #superclass "." #testname ".15\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 16) { \ - ::fputs("Running " #superclass "." #testname ".16\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 17) { \ - ::fputs("Running " #superclass "." #testname ".17\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - if (superclass##_numtypes >= 18) { \ - ::fputs("Running " #superclass "." #testname ".18\n", stderr); \ - TEST_onetype_##superclass##_##testname t; \ - } \ - } \ - }; \ - static TEST_typed_##superclass##_##testname \ - test_instance_typed_##superclass##_##testname; \ - template \ - void TEST_onetype_##superclass##_##testname::Run() - -// This is a dummy class just to make converting from internal-google -// to opensourcing easier. -class Test { }; - -} // namespace testing - -_END_GOOGLE_NAMESPACE_ - -#endif // SPARSEHASH_TEST_UTIL_H_ diff --git a/clipper/sparsehash-2.0.3/src/time_hash_map.cc b/clipper/sparsehash-2.0.3/src/time_hash_map.cc deleted file mode 100644 index 635c5ab..0000000 --- a/clipper/sparsehash-2.0.3/src/time_hash_map.cc +++ /dev/null @@ -1,727 +0,0 @@ -// Copyright (c) 2005, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// --- -// Authors: Sanjay Ghemawat and Craig Silverstein - -// Time various hash map implementations -// -// Below, times are per-call. "Memory use" is "bytes in use by -// application" as reported by tcmalloc, compared before and after the -// function call. This does not really report fragmentation, which is -// not bad for the sparse* routines but bad for the dense* ones. -// -// The tests generally yield best-case performance because the -// code uses sequential keys; on the other hand, "map_fetch_random" does -// lookups in a pseudorandom order. Also, "stresshashfunction" is -// a stress test of sorts. It uses keys from an arithmetic sequence, which, -// if combined with a quick-and-dirty hash function, will yield worse -// performance than the otherwise similar "map_predict/grow." -// -// Consider doing the following to get good numbers: -// -// 1. Run the tests on a machine with no X service. Make sure no other -// processes are running. -// 2. Minimize compiled-code differences. Compare results from the same -// binary, if possible, instead of comparing results from two different -// binaries. -// -// See PERFORMANCE for the output of one example run. - -#include -#include -#ifdef HAVE_INTTYPES_H -# include -#endif // for uintptr_t -#include -#include -#include -extern "C" { -#include -#ifdef HAVE_SYS_TIME_H -# include -#endif -#ifdef HAVE_SYS_RESOURCE_H -# include -#endif -#ifdef HAVE_SYS_UTSNAME_H -# include -#endif // for uname() -} - -// The functions that we call on each map, that differ for different types. -// By default each is a noop, but we redefine them for types that need them. - -#include -#include HASH_MAP_H -#include -#include -#include -#include -#include - -using std::map; -using std::swap; -using std::vector; -using GOOGLE_NAMESPACE::dense_hash_map; -using GOOGLE_NAMESPACE::sparse_hash_map; - -static bool FLAGS_test_sparse_hash_map = true; -static bool FLAGS_test_dense_hash_map = true; -static bool FLAGS_test_hash_map = true; -static bool FLAGS_test_map = true; - -static bool FLAGS_test_4_bytes = true; -static bool FLAGS_test_8_bytes = true; -static bool FLAGS_test_16_bytes = true; -static bool FLAGS_test_256_bytes = true; - -#if defined(HAVE_UNORDERED_MAP) -using HASH_NAMESPACE::unordered_map; -#elif defined(HAVE_HASH_MAP) || defined(_MSC_VER) -using HASH_NAMESPACE::hash_map; -#endif - -static const int kDefaultIters = 10000000; - -// A version of each of the hashtable classes we test, that has been -// augumented to provide a common interface. For instance, the -// sparse_hash_map and dense_hash_map versions set empty-key and -// deleted-key (we can do this because all our tests use int-like -// keys), so the users don't have to. The hash_map version adds -// resize(), so users can just call resize() for all tests without -// worrying about whether the map-type supports it or not. - -template -class EasyUseSparseHashMap : public sparse_hash_map { - public: - EasyUseSparseHashMap() { - this->set_deleted_key(-1); - } -}; - -template -class EasyUseDenseHashMap : public dense_hash_map { - public: - EasyUseDenseHashMap() { - this->set_empty_key(-1); - this->set_deleted_key(-2); - } -}; - -// For pointers, we only set the empty key. -template -class EasyUseSparseHashMap : public sparse_hash_map { - public: - EasyUseSparseHashMap() { } -}; - -template -class EasyUseDenseHashMap : public dense_hash_map { - public: - EasyUseDenseHashMap() { - this->set_empty_key((K*)(~0)); - } -}; - -#if defined(HAVE_UNORDERED_MAP) -template -class EasyUseHashMap : public unordered_map { - public: - // resize() is called rehash() in tr1 - void resize(size_t r) { this->rehash(r); } -}; -#elif defined(_MSC_VER) -template -class EasyUseHashMap : public hash_map { - public: - void resize(size_t r) { } -}; -#elif defined(HAVE_HASH_MAP) -template -class EasyUseHashMap : public hash_map { - public: - // Don't need to do anything: hash_map is already easy to use! -}; -#endif - -template -class EasyUseMap : public map { - public: - void resize(size_t) { } // map<> doesn't support resize -}; - - -// Returns the number of hashes that have been done since the last -// call to NumHashesSinceLastCall(). This is shared across all -// HashObject instances, which isn't super-OO, but avoids two issues: -// (1) making HashObject bigger than it ought to be (this is very -// important for our testing), and (2) having to pass around -// HashObject objects everywhere, which is annoying. -static int g_num_hashes; -static int g_num_copies; - -int NumHashesSinceLastCall() { - int retval = g_num_hashes; - g_num_hashes = 0; - return retval; -} -int NumCopiesSinceLastCall() { - int retval = g_num_copies; - g_num_copies = 0; - return retval; -} - -/* - * These are the objects we hash. Size is the size of the object - * (must be > sizeof(int). Hashsize is how many of these bytes we - * use when hashing (must be > sizeof(int) and < Size). - */ -template class HashObject { - public: - typedef HashObject class_type; - HashObject() {} - HashObject(int i) : i_(i) { - memset(buffer_, i & 255, sizeof(buffer_)); // a "random" char - } - HashObject(const HashObject& that) { - operator=(that); - } - void operator=(const HashObject& that) { - g_num_copies++; - this->i_ = that.i_; - memcpy(this->buffer_, that.buffer_, sizeof(this->buffer_)); - } - - size_t Hash() const { - g_num_hashes++; - int hashval = i_; - for (size_t i = 0; i < Hashsize - sizeof(i_); ++i) { - hashval += buffer_[i]; - } - return SPARSEHASH_HASH()(hashval); - } - - bool operator==(const class_type& that) const { return this->i_ == that.i_; } - bool operator< (const class_type& that) const { return this->i_ < that.i_; } - bool operator<=(const class_type& that) const { return this->i_ <= that.i_; } - - private: - int i_; // the key used for hashing - char buffer_[Size - sizeof(int)]; -}; - -// A specialization for the case sizeof(buffer_) == 0 -template<> class HashObject { - public: - typedef HashObject class_type; - HashObject() {} - HashObject(int i) : i_(i) {} - HashObject(const HashObject& that) { - operator=(that); - } - void operator=(const HashObject& that) { - g_num_copies++; - this->i_ = that.i_; - } - - size_t Hash() const { - g_num_hashes++; - return SPARSEHASH_HASH()(i_); - } - - bool operator==(const class_type& that) const { return this->i_ == that.i_; } - bool operator< (const class_type& that) const { return this->i_ < that.i_; } - bool operator<=(const class_type& that) const { return this->i_ <= that.i_; } - - private: - int i_; // the key used for hashing -}; - -_START_GOOGLE_NAMESPACE_ - -// Let the hashtable implementations know it can use an optimized memcpy, -// because the compiler defines both the destructor and copy constructor. - -template -struct has_trivial_copy< HashObject > : true_type { }; - -template -struct has_trivial_destructor< HashObject > : true_type { }; - -_END_GOOGLE_NAMESPACE_ - -class HashFn { - public: - template - size_t operator()(const HashObject& obj) const { - return obj.Hash(); - } - // Do the identity hash for pointers. - template - size_t operator()(const HashObject* obj) const { - return reinterpret_cast(obj); - } - - // Less operator for MSVC's hash containers. - template - bool operator()(const HashObject& a, - const HashObject& b) const { - return a < b; - } - template - bool operator()(const HashObject* a, - const HashObject* b) const { - return a < b; - } - // These two public members are required by msvc. 4 and 8 are defaults. - static const size_t bucket_size = 4; - static const size_t min_buckets = 8; -}; - -/* - * Measure resource usage. - */ - -class Rusage { - public: - /* Start collecting usage */ - Rusage() { Reset(); } - - /* Reset collection */ - void Reset(); - - /* Show usage, in seconds */ - double UserTime(); - - private: -#if defined HAVE_SYS_RESOURCE_H - struct rusage start; -#elif defined HAVE_WINDOWS_H - long long int start; -#else - time_t start_time_t; -#endif -}; - -inline void Rusage::Reset() { -#if defined HAVE_SYS_RESOURCE_H - getrusage(RUSAGE_SELF, &start); -#elif defined HAVE_WINDOWS_H - start = GetTickCount(); -#else - time(&start_time_t); -#endif -} - -inline double Rusage::UserTime() { -#if defined HAVE_SYS_RESOURCE_H - struct rusage u; - - getrusage(RUSAGE_SELF, &u); - - struct timeval result; - result.tv_sec = u.ru_utime.tv_sec - start.ru_utime.tv_sec; - result.tv_usec = u.ru_utime.tv_usec - start.ru_utime.tv_usec; - - return double(result.tv_sec) + double(result.tv_usec) / 1000000.0; -#elif defined HAVE_WINDOWS_H - return double(GetTickCount() - start) / 1000.0; -#else - time_t now; - time(&now); - return now - start_time_t; -#endif -} - -static void print_uname() { -#ifdef HAVE_SYS_UTSNAME_H - struct utsname u; - if (uname(&u) == 0) { - printf("%s %s %s %s %s\n", - u.sysname, u.nodename, u.release, u.version, u.machine); - } -#endif -} - -// Generate stamp for this run -static void stamp_run(int iters) { - time_t now = time(0); - printf("======\n"); - fflush(stdout); - print_uname(); - printf("Average over %d iterations\n", iters); - fflush(stdout); - // don't need asctime_r/gmtime_r: we're not threaded - printf("Current time (GMT): %s", asctime(gmtime(&now))); -} - -// This depends on the malloc implementation for exactly what it does -// -- and thus requires work after the fact to make sense of the -// numbers -- and also is likely thrown off by the memory management -// STL tries to do on its own. - -#ifdef HAVE_GOOGLE_MALLOC_EXTENSION_H -#include - -static size_t CurrentMemoryUsage() { - size_t result; - if (MallocExtension::instance()->GetNumericProperty( - "generic.current_allocated_bytes", - &result)) { - return result; - } else { - return 0; - } -} - -#else /* not HAVE_GOOGLE_MALLOC_EXTENSION_H */ -static size_t CurrentMemoryUsage() { return 0; } - -#endif - -static void report(char const* title, double t, - int iters, - size_t start_memory, size_t end_memory) { - // Construct heap growth report text if applicable - char heap[100] = ""; - if (end_memory > start_memory) { - snprintf(heap, sizeof(heap), "%7.1f MB", - (end_memory - start_memory) / 1048576.0); - } - - printf("%-20s %6.1f ns (%8d hashes, %8d copies)%s\n", - title, (t * 1000000000.0 / iters), - NumHashesSinceLastCall(), NumCopiesSinceLastCall(), - heap); - fflush(stdout); -} - -template -static void time_map_grow(int iters) { - MapType set; - Rusage t; - - const size_t start = CurrentMemoryUsage(); - t.Reset(); - for (int i = 0; i < iters; i++) { - set[i] = i+1; - } - double ut = t.UserTime(); - const size_t finish = CurrentMemoryUsage(); - report("map_grow", ut, iters, start, finish); -} - -template -static void time_map_grow_predicted(int iters) { - MapType set; - Rusage t; - - const size_t start = CurrentMemoryUsage(); - set.resize(iters); - t.Reset(); - for (int i = 0; i < iters; i++) { - set[i] = i+1; - } - double ut = t.UserTime(); - const size_t finish = CurrentMemoryUsage(); - report("map_predict/grow", ut, iters, start, finish); -} - -template -static void time_map_replace(int iters) { - MapType set; - Rusage t; - int i; - - for (i = 0; i < iters; i++) { - set[i] = i+1; - } - - t.Reset(); - for (i = 0; i < iters; i++) { - set[i] = i+1; - } - double ut = t.UserTime(); - - report("map_replace", ut, iters, 0, 0); -} - -template -static void time_map_fetch(int iters, const vector& indices, - char const* title) { - MapType set; - Rusage t; - int r; - int i; - - for (i = 0; i < iters; i++) { - set[i] = i+1; - } - - r = 1; - t.Reset(); - for (i = 0; i < iters; i++) { - r ^= static_cast(set.find(indices[i]) != set.end()); - } - double ut = t.UserTime(); - - srand(r); // keep compiler from optimizing away r (we never call rand()) - report(title, ut, iters, 0, 0); -} - -template -static void time_map_fetch_sequential(int iters) { - vector v(iters); - for (int i = 0; i < iters; i++) { - v[i] = i; - } - time_map_fetch(iters, v, "map_fetch_sequential"); -} - -// Apply a pseudorandom permutation to the given vector. -static void shuffle(vector* v) { - srand(9); - for (int n = v->size(); n >= 2; n--) { - swap((*v)[n - 1], (*v)[static_cast(rand()) % n]); - } -} - -template -static void time_map_fetch_random(int iters) { - vector v(iters); - for (int i = 0; i < iters; i++) { - v[i] = i; - } - shuffle(&v); - time_map_fetch(iters, v, "map_fetch_random"); -} - -template -static void time_map_fetch_empty(int iters) { - MapType set; - Rusage t; - int r; - int i; - - r = 1; - t.Reset(); - for (i = 0; i < iters; i++) { - r ^= static_cast(set.find(i) != set.end()); - } - double ut = t.UserTime(); - - srand(r); // keep compiler from optimizing away r (we never call rand()) - report("map_fetch_empty", ut, iters, 0, 0); -} - -template -static void time_map_remove(int iters) { - MapType set; - Rusage t; - int i; - - for (i = 0; i < iters; i++) { - set[i] = i+1; - } - - t.Reset(); - for (i = 0; i < iters; i++) { - set.erase(i); - } - double ut = t.UserTime(); - - report("map_remove", ut, iters, 0, 0); -} - -template -static void time_map_toggle(int iters) { - MapType set; - Rusage t; - int i; - - const size_t start = CurrentMemoryUsage(); - t.Reset(); - for (i = 0; i < iters; i++) { - set[i] = i+1; - set.erase(i); - } - - double ut = t.UserTime(); - const size_t finish = CurrentMemoryUsage(); - - report("map_toggle", ut, iters, start, finish); -} - -template -static void time_map_iterate(int iters) { - MapType set; - Rusage t; - int r; - int i; - - for (i = 0; i < iters; i++) { - set[i] = i+1; - } - - r = 1; - t.Reset(); - for (typename MapType::const_iterator it = set.begin(), it_end = set.end(); - it != it_end; - ++it) { - r ^= it->second; - } - - double ut = t.UserTime(); - - srand(r); // keep compiler from optimizing away r (we never call rand()) - report("map_iterate", ut, iters, 0, 0); -} - -template -static void stresshashfunction(int desired_insertions, - int map_size, - int stride) { - Rusage t; - int num_insertions = 0; - // One measurement of user time (in seconds) is done for each iteration of - // the outer loop. The times are summed. - double total_seconds = 0; - const int k = desired_insertions / map_size; - MapType set; - for (int o = 0; o < k; o++) { - set.clear(); - set.resize(map_size); - t.Reset(); - const int maxint = (1ull << (sizeof(int) * 8 - 1)) - 1; - // Use n arithmetic sequences. Using just one may lead to overflow - // if stride * map_size > maxint. Compute n by requiring - // stride * map_size/n < maxint, i.e., map_size/(maxint/stride) < n - char* key; // something we can do math on - const int n = map_size / (maxint / stride) + 1; - for (int i = 0; i < n; i++) { - key = NULL; - key += i; - for (int j = 0; j < map_size/n; j++) { - key += stride; - set[reinterpret_cast(key)] - = ++num_insertions; - } - } - total_seconds += t.UserTime(); - } - printf("stresshashfunction map_size=%d stride=%d: %.1fns/insertion\n", - map_size, stride, total_seconds * 1e9 / num_insertions); -} - -template -static void stresshashfunction(int num_inserts) { - static const int kMapSizes[] = {256, 1024}; - for (unsigned i = 0; i < sizeof(kMapSizes) / sizeof(kMapSizes[0]); i++) { - const int map_size = kMapSizes[i]; - for (int stride = 1; stride <= map_size; stride *= map_size) { - stresshashfunction(num_inserts, map_size, stride); - } - } -} - -template -static void measure_map(const char* label, int obj_size, int iters, - bool stress_hash_function) { - printf("\n%s (%d byte objects, %d iterations):\n", label, obj_size, iters); - if (1) time_map_grow(iters); - if (1) time_map_grow_predicted(iters); - if (1) time_map_replace(iters); - if (1) time_map_fetch_random(iters); - if (1) time_map_fetch_sequential(iters); - if (1) time_map_fetch_empty(iters); - if (1) time_map_remove(iters); - if (1) time_map_toggle(iters); - if (1) time_map_iterate(iters); - // This last test is useful only if the map type uses hashing. - // And it's slow, so use fewer iterations. - if (stress_hash_function) { - // Blank line in the output makes clear that what follows isn't part of the - // table of results that we just printed. - puts(""); - stresshashfunction(iters / 4); - } -} - -template -static void test_all_maps(int obj_size, int iters) { - const bool stress_hash_function = obj_size <= 8; - - if (FLAGS_test_sparse_hash_map) - measure_map< EasyUseSparseHashMap, - EasyUseSparseHashMap >( - "SPARSE_HASH_MAP", obj_size, iters, stress_hash_function); - - if (FLAGS_test_dense_hash_map) - measure_map< EasyUseDenseHashMap, - EasyUseDenseHashMap >( - "DENSE_HASH_MAP", obj_size, iters, stress_hash_function); - - if (FLAGS_test_hash_map) - measure_map< EasyUseHashMap, - EasyUseHashMap >( - "STANDARD HASH_MAP", obj_size, iters, stress_hash_function); - - if (FLAGS_test_map) - measure_map< EasyUseMap, - EasyUseMap >( - "STANDARD MAP", obj_size, iters, false); -} - -int main(int argc, char** argv) { - - int iters = kDefaultIters; - if (argc > 1) { // first arg is # of iterations - iters = atoi(argv[1]); - } - - stamp_run(iters); - -#ifndef HAVE_SYS_RESOURCE_H - printf("\n*** WARNING ***: sys/resources.h was not found, so all times\n" - " reported are wall-clock time, not user time\n"); -#endif - - // It would be nice to set these at run-time, but by setting them at - // compile-time, we allow optimizations that make it as fast to use - // a HashObject as it would be to use just a straight int/char - // buffer. To keep memory use similar, we normalize the number of - // iterations based on size. - if (FLAGS_test_4_bytes) test_all_maps< HashObject<4,4> >(4, iters/1); - if (FLAGS_test_8_bytes) test_all_maps< HashObject<8,8> >(8, iters/2); - if (FLAGS_test_16_bytes) test_all_maps< HashObject<16,16> >(16, iters/4); - if (FLAGS_test_256_bytes) test_all_maps< HashObject<256,256> >(256, iters/32); - - return 0; -} diff --git a/clipper/sparsehash-2.0.3/src/type_traits_unittest.cc b/clipper/sparsehash-2.0.3/src/type_traits_unittest.cc deleted file mode 100644 index 9bcc812..0000000 --- a/clipper/sparsehash-2.0.3/src/type_traits_unittest.cc +++ /dev/null @@ -1,636 +0,0 @@ -// Copyright (c) 2006, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// ---- - -#include -#include -#include - -#include // for exit() -#include -#include -#include -#include "testutil.h" - -typedef int int32; -typedef long int64; - -using std::string; -using std::vector; -using std::pair; - -using GOOGLE_NAMESPACE::add_reference; -using GOOGLE_NAMESPACE::has_trivial_assign; -using GOOGLE_NAMESPACE::has_trivial_constructor; -using GOOGLE_NAMESPACE::has_trivial_copy; -using GOOGLE_NAMESPACE::has_trivial_destructor; -#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) -using GOOGLE_NAMESPACE::is_convertible; -using GOOGLE_NAMESPACE::is_enum; -#endif -using GOOGLE_NAMESPACE::is_floating_point; -using GOOGLE_NAMESPACE::is_integral; -using GOOGLE_NAMESPACE::is_pointer; -using GOOGLE_NAMESPACE::is_pod; -using GOOGLE_NAMESPACE::is_reference; -using GOOGLE_NAMESPACE::is_same; -using GOOGLE_NAMESPACE::remove_const; -using GOOGLE_NAMESPACE::remove_cv; -using GOOGLE_NAMESPACE::remove_pointer; -using GOOGLE_NAMESPACE::remove_reference; -using GOOGLE_NAMESPACE::remove_volatile; - - -// This assertion produces errors like "error: invalid use of -// incomplete type 'struct ::AssertTypesEq'" -// when it fails. -template struct AssertTypesEq; -template struct AssertTypesEq {}; -#define COMPILE_ASSERT_TYPES_EQ(T, U) static_cast(AssertTypesEq()) - -// A user-defined POD type. -struct A { - int n_; -}; - -// A user-defined non-POD type with a trivial copy constructor. -class B { - public: - explicit B(int n) : n_(n) { } - private: - int n_; -}; - -// Another user-defined non-POD type with a trivial copy constructor. -// We will explicitly declare C to have a trivial copy constructor -// by specializing has_trivial_copy. -class C { - public: - explicit C(int n) : n_(n) { } - private: - int n_; -}; - -_START_GOOGLE_NAMESPACE_ -template<> struct has_trivial_copy : true_type { }; -_END_GOOGLE_NAMESPACE_ - -// Another user-defined non-POD type with a trivial assignment operator. -// We will explicitly declare C to have a trivial assignment operator -// by specializing has_trivial_assign. -class D { - public: - explicit D(int n) : n_(n) { } - private: - int n_; -}; - -_START_GOOGLE_NAMESPACE_ -template<> struct has_trivial_assign : true_type { }; -_END_GOOGLE_NAMESPACE_ - -// Another user-defined non-POD type with a trivial constructor. -// We will explicitly declare E to have a trivial constructor -// by specializing has_trivial_constructor. -class E { - public: - int n_; -}; - -_START_GOOGLE_NAMESPACE_ -template<> struct has_trivial_constructor : true_type { }; -_END_GOOGLE_NAMESPACE_ - -// Another user-defined non-POD type with a trivial destructor. -// We will explicitly declare E to have a trivial destructor -// by specializing has_trivial_destructor. -class F { - public: - explicit F(int n) : n_(n) { } - private: - int n_; -}; - -_START_GOOGLE_NAMESPACE_ -template<> struct has_trivial_destructor : true_type { }; -_END_GOOGLE_NAMESPACE_ - -enum G {}; - -union H {}; - -class I { - public: - operator int() const; -}; - -class J { - private: - operator int() const; -}; - -namespace { - -// A base class and a derived class that inherits from it, used for -// testing conversion type traits. -class Base { - public: - virtual ~Base() { } -}; - -class Derived : public Base { -}; - -TEST(TypeTraitsTest, TestIsInteger) { - // Verify that is_integral is true for all integer types. - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - - // Verify that is_integral is false for a few non-integer types. - EXPECT_FALSE(is_integral::value); - EXPECT_FALSE(is_integral::value); - EXPECT_FALSE(is_integral::value); - EXPECT_FALSE(is_integral::value); - EXPECT_FALSE(is_integral::value); - EXPECT_FALSE((is_integral >::value)); - - // Verify that cv-qualified integral types are still integral, and - // cv-qualified non-integral types are still non-integral. - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_TRUE(is_integral::value); - EXPECT_FALSE(is_integral::value); - EXPECT_FALSE(is_integral::value); - EXPECT_FALSE(is_integral::value); -} - -TEST(TypeTraitsTest, TestIsFloating) { - // Verify that is_floating_point is true for all floating-point types. - EXPECT_TRUE(is_floating_point::value); - EXPECT_TRUE(is_floating_point::value); - EXPECT_TRUE(is_floating_point::value); - - // Verify that is_floating_point is false for a few non-float types. - EXPECT_FALSE(is_floating_point::value); - EXPECT_FALSE(is_floating_point::value); - EXPECT_FALSE(is_floating_point::value); - EXPECT_FALSE(is_floating_point::value); - EXPECT_FALSE(is_floating_point::value); - EXPECT_FALSE((is_floating_point >::value)); - - // Verify that cv-qualified floating point types are still floating, and - // cv-qualified non-floating types are still non-floating. - EXPECT_TRUE(is_floating_point::value); - EXPECT_TRUE(is_floating_point::value); - EXPECT_TRUE(is_floating_point::value); - EXPECT_FALSE(is_floating_point::value); - EXPECT_FALSE(is_floating_point::value); - EXPECT_FALSE(is_floating_point::value); -} - -TEST(TypeTraitsTest, TestIsPointer) { - // Verify that is_pointer is true for some pointer types. - EXPECT_TRUE(is_pointer::value); - EXPECT_TRUE(is_pointer::value); - EXPECT_TRUE(is_pointer::value); - EXPECT_TRUE(is_pointer::value); - EXPECT_TRUE(is_pointer::value); - - // Verify that is_pointer is false for some non-pointer types. - EXPECT_FALSE(is_pointer::value); - EXPECT_FALSE(is_pointer::value); - EXPECT_FALSE(is_pointer::value); - EXPECT_FALSE(is_pointer >::value); - EXPECT_FALSE(is_pointer::value); - - // A function pointer is a pointer, but a function type, or a function - // reference type, is not. - EXPECT_TRUE(is_pointer::value); - EXPECT_FALSE(is_pointer::value); - EXPECT_FALSE(is_pointer::value); - - // Verify that is_pointer is true for some cv-qualified pointer types, - // and false for some cv-qualified non-pointer types. - EXPECT_TRUE(is_pointer::value); - EXPECT_TRUE(is_pointer::value); - EXPECT_TRUE(is_pointer::value); - EXPECT_FALSE(is_pointer::value); - EXPECT_FALSE(is_pointer >::value); - EXPECT_FALSE(is_pointer::value); -} - -TEST(TypeTraitsTest, TestIsEnum) { -// is_enum isn't supported on MSVC or gcc 3.x -#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) - // Verify that is_enum is true for enum types. - EXPECT_TRUE(is_enum::value); - EXPECT_TRUE(is_enum::value); - EXPECT_TRUE(is_enum::value); - EXPECT_TRUE(is_enum::value); - - // Verify that is_enum is false for a few non-enum types. - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); - EXPECT_FALSE(is_enum::value); -#endif -} - -TEST(TypeTraitsTest, TestIsReference) { - // Verifies that is_reference is true for all reference types. - typedef float& RefFloat; - EXPECT_TRUE(is_reference::value); - EXPECT_TRUE(is_reference::value); - EXPECT_TRUE(is_reference::value); - EXPECT_TRUE(is_reference::value); - EXPECT_TRUE(is_reference::value); - EXPECT_TRUE(is_reference::value); - EXPECT_TRUE(is_reference::value); - EXPECT_TRUE(is_reference::value); - - - // Verifies that is_reference is false for all non-reference types. - EXPECT_FALSE(is_reference::value); - EXPECT_FALSE(is_reference::value); - EXPECT_FALSE(is_reference::value); - EXPECT_FALSE(is_reference::value); - EXPECT_FALSE(is_reference::value); - EXPECT_FALSE(is_reference::value); - EXPECT_FALSE(is_reference::value); -} - -TEST(TypeTraitsTest, TestAddReference) { - COMPILE_ASSERT_TYPES_EQ(int&, add_reference::type); - COMPILE_ASSERT_TYPES_EQ(const int&, add_reference::type); - COMPILE_ASSERT_TYPES_EQ(volatile int&, - add_reference::type); - COMPILE_ASSERT_TYPES_EQ(const volatile int&, - add_reference::type); - COMPILE_ASSERT_TYPES_EQ(int&, add_reference::type); - COMPILE_ASSERT_TYPES_EQ(const int&, add_reference::type); - COMPILE_ASSERT_TYPES_EQ(volatile int&, - add_reference::type); - COMPILE_ASSERT_TYPES_EQ(const volatile int&, - add_reference::type); -} - -TEST(TypeTraitsTest, TestIsPod) { - // Verify that arithmetic types and pointers are marked as PODs. - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); -#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); - EXPECT_TRUE(is_pod::value); -#endif - - // Verify that some non-POD types are not marked as PODs. - EXPECT_FALSE(is_pod::value); - EXPECT_FALSE(is_pod::value); - EXPECT_FALSE((is_pod >::value)); - EXPECT_FALSE(is_pod::value); - EXPECT_FALSE(is_pod::value); - EXPECT_FALSE(is_pod::value); - EXPECT_FALSE(is_pod::value); - EXPECT_FALSE(is_pod::value); - EXPECT_FALSE(is_pod::value); -} - -TEST(TypeTraitsTest, TestHasTrivialConstructor) { - // Verify that arithmetic types and pointers have trivial constructors. - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - EXPECT_TRUE(has_trivial_constructor::value); - - // Verify that pairs and arrays of such types have trivial - // constructors. - typedef int int10[10]; - EXPECT_TRUE((has_trivial_constructor >::value)); - EXPECT_TRUE(has_trivial_constructor::value); - - // Verify that pairs of types without trivial constructors - // are not marked as trivial. - EXPECT_FALSE((has_trivial_constructor >::value)); - EXPECT_FALSE((has_trivial_constructor >::value)); - - // Verify that types without trivial constructors are - // correctly marked as such. - EXPECT_FALSE(has_trivial_constructor::value); - EXPECT_FALSE(has_trivial_constructor >::value); - - // Verify that E, which we have declared to have a trivial - // constructor, is correctly marked as such. - EXPECT_TRUE(has_trivial_constructor::value); -} - -TEST(TypeTraitsTest, TestHasTrivialCopy) { - // Verify that arithmetic types and pointers have trivial copy - // constructors. - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - EXPECT_TRUE(has_trivial_copy::value); - - // Verify that pairs and arrays of such types have trivial - // copy constructors. - typedef int int10[10]; - EXPECT_TRUE((has_trivial_copy >::value)); - EXPECT_TRUE(has_trivial_copy::value); - - // Verify that pairs of types without trivial copy constructors - // are not marked as trivial. - EXPECT_FALSE((has_trivial_copy >::value)); - EXPECT_FALSE((has_trivial_copy >::value)); - - // Verify that types without trivial copy constructors are - // correctly marked as such. - EXPECT_FALSE(has_trivial_copy::value); - EXPECT_FALSE(has_trivial_copy >::value); - - // Verify that C, which we have declared to have a trivial - // copy constructor, is correctly marked as such. - EXPECT_TRUE(has_trivial_copy::value); -} - -TEST(TypeTraitsTest, TestHasTrivialAssign) { - // Verify that arithmetic types and pointers have trivial assignment - // operators. - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - EXPECT_TRUE(has_trivial_assign::value); - - // Verify that pairs and arrays of such types have trivial - // assignment operators. - typedef int int10[10]; - EXPECT_TRUE((has_trivial_assign >::value)); - EXPECT_TRUE(has_trivial_assign::value); - - // Verify that pairs of types without trivial assignment operators - // are not marked as trivial. - EXPECT_FALSE((has_trivial_assign >::value)); - EXPECT_FALSE((has_trivial_assign >::value)); - - // Verify that types without trivial assignment operators are - // correctly marked as such. - EXPECT_FALSE(has_trivial_assign::value); - EXPECT_FALSE(has_trivial_assign >::value); - - // Verify that D, which we have declared to have a trivial - // assignment operator, is correctly marked as such. - EXPECT_TRUE(has_trivial_assign::value); -} - -TEST(TypeTraitsTest, TestHasTrivialDestructor) { - // Verify that arithmetic types and pointers have trivial destructors. - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - EXPECT_TRUE(has_trivial_destructor::value); - - // Verify that pairs and arrays of such types have trivial - // destructors. - typedef int int10[10]; - EXPECT_TRUE((has_trivial_destructor >::value)); - EXPECT_TRUE(has_trivial_destructor::value); - - // Verify that pairs of types without trivial destructors - // are not marked as trivial. - EXPECT_FALSE((has_trivial_destructor >::value)); - EXPECT_FALSE((has_trivial_destructor >::value)); - - // Verify that types without trivial destructors are - // correctly marked as such. - EXPECT_FALSE(has_trivial_destructor::value); - EXPECT_FALSE(has_trivial_destructor >::value); - - // Verify that F, which we have declared to have a trivial - // destructor, is correctly marked as such. - EXPECT_TRUE(has_trivial_destructor::value); -} - -// Tests remove_pointer. -TEST(TypeTraitsTest, TestRemovePointer) { - COMPILE_ASSERT_TYPES_EQ(int, remove_pointer::type); - COMPILE_ASSERT_TYPES_EQ(int, remove_pointer::type); - COMPILE_ASSERT_TYPES_EQ(const int, remove_pointer::type); - COMPILE_ASSERT_TYPES_EQ(int, remove_pointer::type); - COMPILE_ASSERT_TYPES_EQ(int, remove_pointer::type); -} - -TEST(TypeTraitsTest, TestRemoveConst) { - COMPILE_ASSERT_TYPES_EQ(int, remove_const::type); - COMPILE_ASSERT_TYPES_EQ(int, remove_const::type); - COMPILE_ASSERT_TYPES_EQ(int *, remove_const::type); - // TR1 examples. - COMPILE_ASSERT_TYPES_EQ(const int *, remove_const::type); - COMPILE_ASSERT_TYPES_EQ(volatile int, - remove_const::type); -} - -TEST(TypeTraitsTest, TestRemoveVolatile) { - COMPILE_ASSERT_TYPES_EQ(int, remove_volatile::type); - COMPILE_ASSERT_TYPES_EQ(int, remove_volatile::type); - COMPILE_ASSERT_TYPES_EQ(int *, remove_volatile::type); - // TR1 examples. - COMPILE_ASSERT_TYPES_EQ(volatile int *, - remove_volatile::type); - COMPILE_ASSERT_TYPES_EQ(const int, - remove_volatile::type); -} - -TEST(TypeTraitsTest, TestRemoveCV) { - COMPILE_ASSERT_TYPES_EQ(int, remove_cv::type); - COMPILE_ASSERT_TYPES_EQ(int, remove_cv::type); - COMPILE_ASSERT_TYPES_EQ(int, remove_cv::type); - COMPILE_ASSERT_TYPES_EQ(int *, remove_cv::type); - // TR1 examples. - COMPILE_ASSERT_TYPES_EQ(const volatile int *, - remove_cv::type); - COMPILE_ASSERT_TYPES_EQ(int, - remove_cv::type); -} - -TEST(TypeTraitsTest, TestRemoveReference) { - COMPILE_ASSERT_TYPES_EQ(int, remove_reference::type); - COMPILE_ASSERT_TYPES_EQ(int, remove_reference::type); - COMPILE_ASSERT_TYPES_EQ(const int, remove_reference::type); - COMPILE_ASSERT_TYPES_EQ(int*, remove_reference::type); -} - -TEST(TypeTraitsTest, TestIsSame) { - EXPECT_TRUE((is_same::value)); - EXPECT_FALSE((is_same::value)); - EXPECT_FALSE((is_same::value)); - EXPECT_FALSE((is_same::value)); - - EXPECT_TRUE((is_same::value)); - EXPECT_FALSE((is_same::value)); - EXPECT_FALSE((is_same::value)); - - EXPECT_TRUE((is_same::value)); - EXPECT_TRUE((is_same::value)); - EXPECT_FALSE((is_same::value)); - EXPECT_FALSE((is_same::value)); - EXPECT_FALSE((is_same::value)); - EXPECT_FALSE((is_same::value)); - - EXPECT_TRUE((is_same::value)); - EXPECT_TRUE((is_same::value)); - EXPECT_FALSE((is_same::value)); - EXPECT_FALSE((is_same::value)); -} - -TEST(TypeTraitsTest, TestConvertible) { -#if !defined(_MSC_VER) && !(defined(__GNUC__) && __GNUC__ <= 3) - EXPECT_TRUE((is_convertible::value)); - EXPECT_TRUE((is_convertible::value)); - EXPECT_TRUE((is_convertible::value)); - - EXPECT_TRUE((is_convertible::value)); - EXPECT_FALSE((is_convertible::value)); - - EXPECT_TRUE((is_convertible::value)); - EXPECT_FALSE((is_convertible::value)); - EXPECT_TRUE((is_convertible::value)); - EXPECT_FALSE((is_convertible::value)); -#endif -} - -} // namespace - -#include - -int main(int, char **) { - // All the work is done in the static constructors. If they don't - // die, the tests have all passed. - std::cout << "PASS\n"; - return 0; -} - diff --git a/clipper/sparsehash-2.0.3/src/windows/config.h b/clipper/sparsehash-2.0.3/src/windows/config.h deleted file mode 100644 index 2040758..0000000 --- a/clipper/sparsehash-2.0.3/src/windows/config.h +++ /dev/null @@ -1,149 +0,0 @@ -#ifndef GOOGLE_SPARSEHASH_WINDOWS_CONFIG_H_ -#define GOOGLE_SPARSEHASH_WINDOWS_CONFIG_H_ - -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* Namespace for Google classes */ -#define GOOGLE_NAMESPACE ::google - -/* the location of the header defining hash functions */ -#define HASH_FUN_H - -/* the location of or */ -#define HASH_MAP_H - -/* the namespace of the hash<> function */ -#define HASH_NAMESPACE stdext - -/* the location of or */ -#define HASH_SET_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_GOOGLE_MALLOC_EXTENSION_H - -/* define if the compiler has hash_map */ -#define HAVE_HASH_MAP 1 - -/* define if the compiler has hash_set */ -#define HAVE_HASH_SET 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if the system has the type `long long'. */ -#define HAVE_LONG_LONG 1 - -/* Define to 1 if you have the `memcpy' function. */ -#define HAVE_MEMCPY 1 - -/* Define to 1 if you have the `memmove' function. */ -#define HAVE_MEMMOVE 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* define if the compiler implements namespaces */ -#define HAVE_NAMESPACES 1 - -/* Define if you have POSIX threads libraries and header files. */ -#undef HAVE_PTHREAD - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_RESOURCE_H - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_UTSNAME_H - -/* Define to 1 if the system has the type `uint16_t'. */ -#undef HAVE_UINT16_T - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* define if the compiler supports unordered_{map,set} */ -#undef HAVE_UNORDERED_MAP - -/* Define to 1 if the system has the type `u_int16_t'. */ -#undef HAVE_U_INT16_T - -/* Define to 1 if the system has the type `__uint16'. */ -#define HAVE___UINT16 1 - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to necessary symbol if this constant uses a non-standard name on - your system. */ -#undef PTHREAD_CREATE_JOINABLE - -/* The system-provided hash function including the namespace. */ -#define SPARSEHASH_HASH HASH_NAMESPACE::hash_compare - -/* The system-provided hash function, in namespace HASH_NAMESPACE. */ -#define SPARSEHASH_HASH_NO_NAMESPACE hash_compare - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Version number of package */ -#undef VERSION - -/* Stops putting the code inside the Google namespace */ -#define _END_GOOGLE_NAMESPACE_ } - -/* Puts following code inside the Google namespace */ -#define _START_GOOGLE_NAMESPACE_ namespace google { - - -// --------------------------------------------------------------------- -// Extra stuff not found in config.h.in - -#define HAVE_WINDOWS_H 1 // used in time_hash_map - -// This makes sure the definitions in config.h and sparseconfig.h match -// up. If they don't, the compiler will complain about redefinition. -#include - -// TODO(csilvers): include windows/port.h in every relevant source file instead? -#include "windows/port.h" - -#endif /* GOOGLE_SPARSEHASH_WINDOWS_CONFIG_H_ */ diff --git a/clipper/sparsehash-2.0.3/src/windows/google/sparsehash/sparseconfig.h b/clipper/sparsehash-2.0.3/src/windows/google/sparsehash/sparseconfig.h deleted file mode 100644 index 3091559..0000000 --- a/clipper/sparsehash-2.0.3/src/windows/google/sparsehash/sparseconfig.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * NOTE: This file is for internal use only. - * Do not use these #defines in your own program! - */ - -/* Namespace for Google classes */ -#define GOOGLE_NAMESPACE ::google - -/* the location of the header defining hash functions */ -#define HASH_FUN_H - -/* the namespace of the hash<> function */ -#define HASH_NAMESPACE stdext - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if the system has the type `long long'. */ -#define HAVE_LONG_LONG 1 - -/* Define to 1 if you have the `memcpy' function. */ -#define HAVE_MEMCPY 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if the system has the type `uint16_t'. */ -#undef HAVE_UINT16_T - -/* Define to 1 if the system has the type `u_int16_t'. */ -#undef HAVE_U_INT16_T - -/* Define to 1 if the system has the type `__uint16'. */ -#define HAVE___UINT16 1 - -/* The system-provided hash function including the namespace. */ -#define SPARSEHASH_HASH HASH_NAMESPACE::hash_compare - -/* The system-provided hash function, in namespace HASH_NAMESPACE. */ -#define SPARSEHASH_HASH_NO_NAMESPACE hash_compare - -/* Stops putting the code inside the Google namespace */ -#define _END_GOOGLE_NAMESPACE_ } - -/* Puts following code inside the Google namespace */ -#define _START_GOOGLE_NAMESPACE_ namespace google { diff --git a/clipper/sparsehash-2.0.3/src/windows/port.cc b/clipper/sparsehash-2.0.3/src/windows/port.cc deleted file mode 100644 index d46ffb9..0000000 --- a/clipper/sparsehash-2.0.3/src/windows/port.cc +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2007, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * --- - * Author: Craig Silverstein - */ - -#include -#ifndef WIN32 -# error You should only be including windows/port.cc in a windows environment! -#endif - -#include "config.h" -#include // for va_list, va_start, va_end -#include "port.h" - -// Calls the windows _vsnprintf, but always NUL-terminate. -int snprintf(char *str, size_t size, const char *format, ...) { - if (size == 0) // not even room for a \0? - return -1; // not what C99 says to do, but what windows does - str[size-1] = '\0'; - va_list ap; - va_start(ap, format); - const int r = _vsnprintf(str, size-1, format, ap); - va_end(ap); - return r; -} - -std::string TmpFile(const char* basename) { - char tmppath_buffer[1024]; - int tmppath_len = GetTempPathA(sizeof(tmppath_buffer), tmppath_buffer); - if (tmppath_len <= 0 || tmppath_len >= sizeof(tmppath_buffer)) { - return basename; // an error, so just bail on tmppath - } - snprintf(tmppath_buffer + tmppath_len, sizeof(tmppath_buffer) - tmppath_len, - "\\%s", basename); - return tmppath_buffer; -} diff --git a/clipper/sparsehash-2.0.3/src/windows/port.h b/clipper/sparsehash-2.0.3/src/windows/port.h deleted file mode 100644 index 0ce8184..0000000 --- a/clipper/sparsehash-2.0.3/src/windows/port.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (c) 2007, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * --- - * Author: Craig Silverstein - * - * These are some portability typedefs and defines to make it a bit - * easier to compile this code -- in particular, unittests -- under VC++. - * Other portability code is found in windows/sparsehash/internal/sparseconfig.h. - * - * Several of these are taken from glib: - * http://developer.gnome.org/doc/API/glib/glib-windows-compatability-functions.html - */ - -#ifndef SPARSEHASH_WINDOWS_PORT_H_ -#define SPARSEHASH_WINDOWS_PORT_H_ - -#include -#include "config.h" - -#ifdef WIN32 - -#define WIN32_LEAN_AND_MEAN /* We always want minimal includes */ -#include -#include /* because we so often use open/close/etc */ -#include - -// 4996: Yes, we're ok using the "unsafe" functions like _vsnprintf and fopen -// 4127: We use "while (1)" sometimes: yes, we know it's a constant -// 4181: type_traits_test is explicitly testing 'qualifier applied to reference' -#pragma warning(disable:4996 4127 4181) - - -// file I/O -#define unlink _unlink -#define strdup _strdup - -// We can't just use _snprintf as a drop-in replacement, because it -// doesn't always NUL-terminate. :-( -extern int snprintf(char *str, size_t size, const char *format, ...); - -extern std::string TmpFile(const char* basename); // used in hashtable_unittest - -#endif /* WIN32 */ - -#endif /* SPARSEHASH_WINDOWS_PORT_H_ */ diff --git a/clipper/sparsehash-2.0.3/src/windows/sparsehash/internal/sparseconfig.h b/clipper/sparsehash-2.0.3/src/windows/sparsehash/internal/sparseconfig.h deleted file mode 100644 index 3091559..0000000 --- a/clipper/sparsehash-2.0.3/src/windows/sparsehash/internal/sparseconfig.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * NOTE: This file is for internal use only. - * Do not use these #defines in your own program! - */ - -/* Namespace for Google classes */ -#define GOOGLE_NAMESPACE ::google - -/* the location of the header defining hash functions */ -#define HASH_FUN_H - -/* the namespace of the hash<> function */ -#define HASH_NAMESPACE stdext - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if the system has the type `long long'. */ -#define HAVE_LONG_LONG 1 - -/* Define to 1 if you have the `memcpy' function. */ -#define HAVE_MEMCPY 1 - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if the system has the type `uint16_t'. */ -#undef HAVE_UINT16_T - -/* Define to 1 if the system has the type `u_int16_t'. */ -#undef HAVE_U_INT16_T - -/* Define to 1 if the system has the type `__uint16'. */ -#define HAVE___UINT16 1 - -/* The system-provided hash function including the namespace. */ -#define SPARSEHASH_HASH HASH_NAMESPACE::hash_compare - -/* The system-provided hash function, in namespace HASH_NAMESPACE. */ -#define SPARSEHASH_HASH_NO_NAMESPACE hash_compare - -/* Stops putting the code inside the Google namespace */ -#define _END_GOOGLE_NAMESPACE_ } - -/* Puts following code inside the Google namespace */ -#define _START_GOOGLE_NAMESPACE_ namespace google { diff --git a/clipper/sparsehash-2.0.3/vsprojects/hashtable_test/hashtable_test.vcproj b/clipper/sparsehash-2.0.3/vsprojects/hashtable_test/hashtable_test.vcproj deleted file mode 100755 index 94eea19..0000000 --- a/clipper/sparsehash-2.0.3/vsprojects/hashtable_test/hashtable_test.vcproj +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/clipper/sparsehash-2.0.3/vsprojects/libc_allocator_with_realloc_test/libc_allocator_with_realloc_test.vcproj b/clipper/sparsehash-2.0.3/vsprojects/libc_allocator_with_realloc_test/libc_allocator_with_realloc_test.vcproj deleted file mode 100755 index 1d35d04..0000000 --- a/clipper/sparsehash-2.0.3/vsprojects/libc_allocator_with_realloc_test/libc_allocator_with_realloc_test.vcproj +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/clipper/sparsehash-2.0.3/vsprojects/simple_test/simple_test.vcproj b/clipper/sparsehash-2.0.3/vsprojects/simple_test/simple_test.vcproj deleted file mode 100755 index afa0c69..0000000 --- a/clipper/sparsehash-2.0.3/vsprojects/simple_test/simple_test.vcproj +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/clipper/sparsehash-2.0.3/vsprojects/sparsetable_unittest/sparsetable_unittest.vcproj b/clipper/sparsehash-2.0.3/vsprojects/sparsetable_unittest/sparsetable_unittest.vcproj deleted file mode 100755 index ecece4a..0000000 --- a/clipper/sparsehash-2.0.3/vsprojects/sparsetable_unittest/sparsetable_unittest.vcproj +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/clipper/sparsehash-2.0.3/vsprojects/template_util_unittest/template_util_unittest.vcproj b/clipper/sparsehash-2.0.3/vsprojects/template_util_unittest/template_util_unittest.vcproj deleted file mode 100755 index 58a9a1f..0000000 --- a/clipper/sparsehash-2.0.3/vsprojects/template_util_unittest/template_util_unittest.vcproj +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/clipper/sparsehash-2.0.3/vsprojects/time_hash_map/time_hash_map.vcproj b/clipper/sparsehash-2.0.3/vsprojects/time_hash_map/time_hash_map.vcproj deleted file mode 100755 index bf40c4c..0000000 --- a/clipper/sparsehash-2.0.3/vsprojects/time_hash_map/time_hash_map.vcproj +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/clipper/sparsehash-2.0.3/vsprojects/type_traits_unittest/type_traits_unittest.vcproj b/clipper/sparsehash-2.0.3/vsprojects/type_traits_unittest/type_traits_unittest.vcproj deleted file mode 100755 index b74e57d..0000000 --- a/clipper/sparsehash-2.0.3/vsprojects/type_traits_unittest/type_traits_unittest.vcproj +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/clipper/t/in/join/phred.1.fq b/clipper/t/in/join/phred.1.fq deleted file mode 100755 index fca4744..0000000 --- a/clipper/t/in/join/phred.1.fq +++ /dev/null @@ -1,4 +0,0 @@ -@M00517:196:000000000-A7GT8:1:1101:15158:1438 1:N:0:0 -TACGTAGGTCCCGAGCGTTGTCCGGATTTATTGGGCGTAAAGCGAGCGCAGGCGGTTAGATAAGTCTGAAGTTAAAGGCTGTGGCTTAACCATAGTACGCTTTGGAAACTGTTTAACTTGAGTGCAAGAGGGGAGAGTGGAATTCCATGTG -+ -BBBBBFFBFFFFGGGGGGGGGGHGGGGGHHHHGHHHGGGGHHBFCEGGGGGGGGGGGGHHFGGHHGHGBFDGFFHHHHHHHHHHFBGGHHHHHHBHBFD?/?FDFCDGC2F>2DDHH2F22@>ABAAF5BDFFFGGGACEEFGFBAAAEGHHBGEGEGGHHHHH53BEFGHHF1AAEE0BFFEEGGEHEEFEGEHHHGH14BFGHHHFHFEGGG4FHHHGGGGGFG33BGHHHHHHH1GHHHHHGH//FGFHHHH0GDFGG14488;>?'4??EFFFFFFFFCCEE??AEEE?0):??.?;>EEE8?'.4?DECC:C# -@MISEQ06:5:000000000-A2FRR:1:1102:10887:18775 1:N:0:TCCACAGGAGT -TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTTGTTAAGTTGGATGTGAAATCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGACAAGCTAGAGTATGGTAGAGGGTGGTGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAAGGAACACCAGTGGCGAAGGCGACCACCTGGACTGATACTGACACTGAGGTGCGAAAGCGTGGGGAGCAAACA -+ -?????BB?DDDDDDDDGGGGGGHIHFFFHHIIHIIIHHHHHHHHHHHHHHHHFGHHIIHIHIIHHHHHHHHHFFHHHHHHHHHGGGGEEGGGGGGGGGEGGGGGGGEAAEEGGGGGGGGGG?CEGGGGGGGGEEGGGGGGGGGEGGGGGEGGGGGGGGGDE:??CEGGGGGGEGGGGEGGEGGGGGGGG?EGGG<8ACECGGGGGGGGCEEGEGGEGECCGCEEGGG??:?CEGGGEEEEEGGGGGGGEGEGGGG?>GGC?C?E:CGG*:9CEEEEGGG8>8D>DC>8<>828?CECG'8C8:::::1 -@MISEQ06:5:000000000-A2FRR:1:1102:10887:18775 2:N:0:TCCACAGGAGT -ACGGACTACAAGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTTGTCAGTTTTGAATGCAGTTCCCAGGTTGAGCCCGGGGATTTCACATCCAACTTAACAAACCACCTACGCGCGCTTTACGCCCAGTAATTC -+ -?????@@BDDDDDDBBFFFFFFHIIHHHIHHGHIIHIHHHHIIHHHHHHIIIIIIIIIIHHIIIIIIIIIFHHIHIHHHHHIIHHHHHHHHHHEHHHHHHFFHHHHHHHFFEEEFEEFEEEEBEEFFFEFFFFFFFFFFFFEACFFFFFEFEE?EFECEEEEFFFFEEEFFEFFFFF?CCFCEEE8*::CEFFFDDDDDECC?CEEEECA:AACCEA?EC*?8AACCCA;;?D2888?CEA8;AACCE### -@MISEQ06:5:000000000-A2FRR:1:1102:7201:18800 2:N:0:TCCACAGGAGT -ACGGACTACTGGGGTATCTAATCCTGTTTGCTCCCCACGCTTTCGCACCTCAGTGTCAGTATCAGTCCAGGTGGTCGCCTTCGCCACTGGTGTTCCTTCCTATATCTACGCATTTCACCGCTACACAGGAAATTCCACCACCCTCTACCATACTCTAGCTCGACAGTTTTGAATGCAGTTCCCAGGTTGAGCCCGGGGATTTCACATCCAACTTAACGAACCACCTACGCGCGCTTTACGCCCAGTAATTC -+ -?????@@BDDDBDD5+CFFFFFHHHIIIHHFGFGHHIHHHHHIIHEHHHIIIIIIIIIIHIHHIIIHIIIHIHFHHHHHHHIIHHDEHHHFHHHHHHHHHHHHFFFFFFDFEDEFFDEFEBEE@EFFEF,,=AEEAEEEAAEE?EEEEEEFAECEEFECEFEDDED:C??AA?EEFFFECE*:CC?:?AEFE?8>822'81*??EE:?ACEEA?E*0.8.'4A88ACE)4822>8AE:AA?########## diff --git a/clipper/t/in/join/test-ov-a.1.fq b/clipper/t/in/join/test-ov-a.1.fq deleted file mode 100644 index 7afeec4..0000000 --- a/clipper/t/in/join/test-ov-a.1.fq +++ /dev/null @@ -1,400 +0,0 @@ -@HWI-M01378:140129:000000000-A7785:1:1112:20058:10262 3:N:0: TATAGCACGC -GGAAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTTAGCGTTGGTCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCGTGGCGCACCCAATGCATAG -+ -GF8EGGGCE8=:6FFGGGD83=DDGFGGCDDCD:?:EEC+<@*,9CDACFF7;++,@?ECDCDGCCB+*4988AF?FG:699>A75:@8BFDDGGFFFGGFGFGGFGFFFFFFGEFFFF55EGD;51;>;AEBGGFF:?>FA)<7?FDB@>A7C>?BBCACFGGG68AG>CGFCFFG=FAGFFGEFFFCDCEGC9FF?3=EGBDE38???G<:GACAGF?CB96@C*.(<7:798E? -@HWI-M01378:140129:000000000-A7785:1:1112:7453:12346 3:N:0: TATAGCACGC -GTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCA -+ -GGGGGGGGFFF;DCDBFGGGGGGGGGGGGGGGGGFGGEGGGFFFGFFGGG:CGFGGGFGD>FFCFGFFFG>FGFGCFC=4AGFFGC>6B5DCEED0:664()*7D>5,24?F -@HWI-M01378:140129:000000000-A7785:1:1112:24376:13941 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCAT -+ -GGGGGFG9=8DFFFGGDEGGFFGGFDFGFGDGCADAFGGCD@FGDCCFFGGFGFGCGFGCEC>CFG6B>FGFD9FFFG2*3A9FE3BFFADDDCDB5;?3=)A1>:B?F18?2<+=?AF -@HWI-M01378:140129:000000000-A7785:1:1112:10620:14798 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCTCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCA -+ -CEGGGFGA@=E:@9DFF,=@,=EFEGGGDFGGC,9CE8CDAEFGFCFGGGGFF8+4@>:>5@@D>GFAAF51=A469*)*3CFFFBFFFFGC5CC@E02F6;EFGCEF -@HWI-M01378:140129:000000000-A7785:1:1112:26422:14876 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAAT -+ -GGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGFGGGFGGGGGGFGGFGFCGGFGFGGGFGGFFDFDFFFCCCFGFG?FGD6AFFFG@FFCFGGGGGF>?15;);1C>3:?? -@HWI-M01378:140129:000000000-A7785:1:1112:17229:16419 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGFFGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGFGGGFGGFGGCCGFGFGGGFGGDGGGGGFFFGGFGFFGFGFFFGFFGFFFFFCDEEGF:;@F6BGFGGFF266AFDFCFA?40D7CFFFG:EF -@HWI-M01378:140129:000000000-A7785:1:1112:9440:21170 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GFFGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGFFGGGGGGFGG9@:FGGFGFG?C>GDEGFGGGFFCGFFGFGGFGFFFGFFFEAFFFCGD57>A?F3(.A9GDB?F?:F>BC??BFF2FBAFDDG>A?2(C3))9:*4,C?FFF3C? -@HWI-M01378:140129:000000000-A7785:1:1112:13154:23703 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCTACTCAAGCCTTTGTCCGGGGGC -+ -GGGGF;,3EDE:,AEACE=DFCFGGFCE8DADFGGCFEFF,@*@7C:ADFEFGAGGGB@DFFG>F?FFFF>@C+5DAG=FFFFFF*+===*?=EDF -@HWI-M01378:140129:000000000-A7785:1:1113:9219:5995 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAGGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCAAGAAGCCTTGCA -+ -GGGF9=DADADAFFFFF,ADCGFCGGGGGC:E8@EGGFC9CFFGFFGGCCEFGGFGGFGG5C?FCG6=A59FGFGFA>BFFG>FGFFFACC45CDB;11=0)=9@C8??:5?24D6:96<?72*:)43:FA4A*9*44:B13@7C? -@HWI-M01378:140129:000000000-A7785:1:1113:13463:7044 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCA -+ -GGGGGGGGGGGGGGGGGGGGGG=DFCGGGGGGGGGGGGGGGGFGGFGGCGGFGGFFGEGGBFGGGGFF5CFFF@FFFG4AFGFFGFA:CFDD5ECEEFFFFDG>FGFF -@HWI-M01378:140129:000000000-A7785:1:1113:9754:8982 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGGATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCAT -+ -GCFGGDF9FGGGGGGFGGGGGDGGGGFFAFFD,EF8FGGFFDFGGFGGGGGFGGFGGFGGFFFDF5>AFC7BFBGC>D4AAGFFGF>FFFGG5E:B>;1;0;56@E??FF0<BFFGFFGFF6BFGGGGGFEFF@D>EFFGFFF?:GFFFFF<6:=?FBF:F45C?4>FA)>>AFBAGG27?0:8).762403:(4C7F< -@HWI-M01378:140129:000000000-A7785:1:1113:18729:16203 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCACTGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGGGGGGFFDGFCFGGGGG?FGGGGGGGGGFFGGGGGGFGGFGGGFF?CFFGGEGGFFGGGDAAFFGFEBFGFG@FFF>4:A:FFFGDEGGDBF0,=8E1>C?F(,3<8EE3=@FEFGCD;,688,6+@336A8D3@C,5,2@,?C;;C;9,,=CF -@HWI-M01378:140129:000000000-A7785:1:1113:14732:20813 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGGGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCCCCCAATGCATAGCATAGCTAGTGACGGTGTATCCAGAAGCCTT -+ -GGFFGGGGFGGFGFGGGCGGFGGGFGGGGGGGGGFGGGGGGDFGGFGGGGGFGGFGGEGEAGCD:CFF6C*:=:7F>C@FAFFFG4688BCDCG:>5;18;5A,7E;9EG=F95BDFFFDGFGFGGFGBFFGFFGF=@8A?DGE3(67:6EGFFFF>E44<4@AF2.6<<=)6:DAG?,*)4<6DC<CC=7?9@*C>164;D640*3CAFG*/AB/5DE5<90?G(23*,:?)82(,3)6A4@A?AAFAB -@HWI-M01378:140129:000000000-A7785:1:1114:7126:18810 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCACTGCATAGCATAGCTAGTGAAGGTGT -+ -DFGGDGFGFAFGGGGGGGG8DFCDFDBFFGGFGGGGFGGFGGFGFFCFGGABFA**8D=9CEFBFFG4?7@=+:BCCC*94;DEEFF0(8?)-A04C24D -@HWI-M01378:140129:000000000-A7785:1:1114:12409:19488 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGGCTGCTGCCACCAAAAAGAGGATCCTCCAGGTCCAGTCCAAGGTG -+ -GGDFFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGGGGFGFEGGFGGFGGGGGFFFGGF9>FF2 -@HWI-M01378:140129:000000000-A7785:1:1114:9907:23323 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATATCTAGTGAAGGTGTATCAAGA -+ -GGGGGGGGGCFGGGCC?GGFGGFGGCDGCED7A:DFGGGGGFFCFFGGGGGFGGFGCDGGFGFGFGF6A*9FFFGF4*0>AGFFGBEFFFG4CEC>B@:;0(*4EEBBF?F6:23-/5B<)*:>FA3,38D,,=@,DE?==:++3@DAFA+;FDFDACGGFA,8,@*13**5+=;+B67;@? -@HWI-M01378:140129:000000000-A7785:1:1115:22303:4248 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCA -+ -FGGGFAEC>FGGGGGGFDFDFFECDGGFGG@DFGDFGGGGFFFGGFGGFGGFFGFGGFGGDGGGGGAFFGGFGBFGEG:>AGFFFFC?A+:CDE<>;0CDFFDBCEEF4E5>FFAE98CGDGC6(7F0(((,):7?B?:7)6CE>9CGGGF9BFC*AE=*CED();CFFFBECFC -@HWI-M01378:140129:000000000-A7785:1:1115:19291:10393 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTT -+ -GGGGGGGFGGG?FGGGGGGGGFGFG?FF8AGGFFGGC=FFGGFGGFFGFGDEC,0EFEEDFGGG>FF>AFGAGFFGEG=FFGFFGF=EFFDDGE3;06C;;1?(9C>?0?3FAA?2FFAFFFGFBG0.:34494*48??7>? -@HWI-M01378:140129:000000000-A7785:1:1115:26788:11790 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGATGATCGATCCCATCCACTCAAGCCTCTGTC -+ -EF=>;>=8=E9@8;BDB9DD@?FFFGCDFG,?E9DF:D8=:=*@CAC:<+2*=5:EE>*9*=<=*39>0;F+CB496@5AAGFF,;=7@ -@HWI-M01378:140129:000000000-A7785:1:1115:22293:14738 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAG -+ -GGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGF7D=FEGGGGFFGFGFFGGEFFBGGEGGEGGGGGFFFGGFGFFF4>D>6CFFGFFFFFGGGGGFFF=276<9GGFF(407>DGAFBFFAGAB?AA::<<>:DBCDDG7CC?+=FCGFEDFD?F@FFGFFGFCECFGGDGGFF?56=3;;GDCFGFFFGGFFBFGFFBFFGFFG**1=F<):5)(,:=4(1((1*;11:?DAAG)0)9<27>2=4:::26>7FF>A?F -@HWI-M01378:140129:000000000-A7785:1:1115:22345:18846 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAA -+ -FGGGGGGGGGGGGFBFGGFGGGCFDDFGGGGGGGGGGGGGGGFGGFGGFFF7CGCFF*CGDGGGGGFFFGGFGFFGEGFFAFFFGF6EFFG:5CC>>DA03((-CEEFF -@HWI-M01378:140129:000000000-A7785:1:1115:13309:19306 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGG -+ -GGGGGGGGGFGGGGGGGGGGGGFEGFGGGGGFDFGCCFGGAFFCFFC:CGGFFGFGGFGGEFDC7?FA*C*=C@4CA9);@C5*=AEF+B?DGDD -@HWI-M01378:140129:000000000-A7785:1:1115:24515:20126 3:N:0: TATAGCACGC -GTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCA -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGFGGGGGGGGGGFGGFFGFFCEFC@GGFGGAFFGGGFFFGGFF@ACBGFFFGAFFFE0?BFFA44@A30-4?6>FG?G04>>24@ -@HWI-M01378:140129:000000000-A7785:1:1115:15717:20410 3:N:0: TATAGCACGC -GCTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGCATCCAGAAGCCTT -+ -G8EFGGFGGCGGGGGGGGGGGGGGGGCFFGGGGGG8DFGGGGFGGAFGFGGCFGFGGAG>AGGGGGFFFGGFGFFG6FFFFGFFGFF:*-)2.>C?(2)-66?*57>F73F -@HWI-M01378:140129:000000000-A7785:1:1115:20074:21744 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGCACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCTCATCCACTCACGCCTTTGTCCGGGGGCCTGGCTCACCCAATGCATAGCATAGC -+ -G?EDC9,9@6E88;>D9F=E@F,=E8DFGD:9:9F82E,=EGFCC;C9B9:*=96,D*@DEG>F+*+=+<73<.;>AD:*9:?6>9*9F8DGCEG@1;*,8(6)2:A<(8>F4>9)74BA2D -@HWI-M01378:140129:000000000-A7785:1:1115:10327:25119 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGGACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTT -+ -GGFFGFCFGFGGGG,=DFDGGGGGGFGGECDEFFGGFGGFGGFGG?EE<7E5BAACDEGGD>B823B+;**=15A7/0-?AEFFF -@HWI-M01378:140129:000000000-A7785:1:1116:21394:3317 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCACCCCCTCAAGCCTTTGTCCGGGGCCCTG -+ -GFFA>9ECF89BEE9AFFGGGGG,,DBFGFGGFGCFD====FFC7FDG?CF7+AF6C5@C*<FGF),84:@:DDG5)6A?? -@HWI-M01378:140129:000000000-A7785:1:1116:21781:3983 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCGCCCAATGCAT -+ -GGGGGGGFFGGGGGFGGGGGGGEFGGGGCE@=CGGGGGFEFFFGGFGGGGGFGGAGGEGGFGGGCDACFGGFGFGGACBBAGFFGECFFF086::FDE?F?02644C7:49<)*64?24>FA:FFGF -@HWI-M01378:140129:000000000-A7785:1:1116:22704:5419 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGC -+ -GGGFGGGCFGGG;EEGGGG?EC?FGFGF,=FFGGGFEBFFC=FFGFFDFGF7@:+CFDGGFGGGGFF@6;CB,=ACF4BF4??>?6;FFFGDD:>@EFD316E58CFF(34F -@HWI-M01378:140129:000000000-A7785:1:1116:3314:6852 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCCATCAAGCTTTTGTCCGGGGGTCTGGCGCACCCA -+ -GGCFGDFFGC>8=EGGCFFD@F?=FCCFEDD9=C7@DF1CCFFFDFGCFEGFGG?FC?EC5*+?2;BC0*7:5>7,1;7>69*;C6;6>F*2)/)(:53)61EB>C@CDFCFFFGFCFDCGFGF4*AFFGF4CCFG))4=6BF)2;6*)0:<AC -@HWI-M01378:140129:000000000-A7785:1:1116:21249:16016 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGC -+ -GGGGGGGGGGGGGGGGFFFFF?DFGGFF8EFGGGGGGGD@7FFGGFGGGGGFFFFGGEGGEGGD>FFEFGFFGFFGFGFFFGFAFE=CEFGGGGD>>?;58(C5:E2<<:0C -@HWI-M01378:140129:000000000-A7785:1:1116:26580:20568 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGG -+ -GGFGGGDFGGDCFFFGFFGFGGDGGGGFFFGG8EFDFAFGG?6CCFC:C78DFF=FFCBDDFFFGBFFGFFC@;FEFCGDG -@HWI-M01378:140129:000000000-A7785:1:1117:15050:1908 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCTGGGGGCCTGGCGC -+ -GGGFCGGGGGGGGGFFGGGGGGFEGGGGFF:=DGGGGGGFGGBF?FGGFGGEFCFFC>E***2?CGF@CDCFD4*7AGF=*=AFG>*2*=:CFE;@>;1>@9E -@HWI-M01378:140129:000000000-A7785:1:1117:15528:1981 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTAGTGTTACCATTGCCAGCGTTCATCCATCCCATCCACTCACGCCTTTGTCCGGGGGC -+ -8FFG,@,ED39F,,,73@F8D68,6,@,6@:D,6=DGGG+,++2=55BFFCAE5F>8@<;9;D52*=FF***+*128DCEF -@HWI-M01378:140129:000000000-A7785:1:1117:10756:3719 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTG -+ -GGGGGGGGGGGGGGFGGGGGGGGGGGGGFGGGGG7FGGGFGGFFGFGGFGGFGGFGGFGDDDFFFGFEBFGFGDFG?GFFAFFFGFFG?FGDDGEBFF?>D>EBGGB?AA?2::CBD)*35D==*CFFD8>@EFCDGE>9(,6569GF87521((3.4?-:A*28@C -@HWI-M01378:140129:000000000-A7785:1:1117:14612:8918 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCA -+ -GGGGGCFGGGGGGGFCGGGGGGGGGDGFFGFFGDFFCGCFC?D@FFGGAGF@FFACGFGE5>FFFFFA8FFFG>FC*?5@FGAF7>;@CFG7CG:6@DF>?@EBGG>? -@HWI-M01378:140129:000000000-A7785:1:1117:2770:10016 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCCTAGCT -+ -FGGGGGFFGGDGGEFGGGGGGG,DGGFGEGFFGGGGGGGFGFFGGFGGFD7=FGFCCBED>GGFF598=DFFD>FCCGBFFGFFGFEGEFCGFA736)*42CA -@HWI-M01378:140129:000000000-A7785:1:1117:7058:13477 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTGCCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGC -+ -GGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAFGGFGGFGGFGGFGGEGGFGGBGE>CCFFFFCCGGFFB4;69):AFFFGF=GEFDF;;FF6E0CDDAF?2><4<6>433C:3?G?F -@HWI-M01378:140129:000000000-A7785:1:1117:20535:14960 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFGGFGGFGGFGGFGGFGFFGGFFGFFFGFFGCFGFGDFFGFFGFFGFFGCCE3@B<=>?98:EGF?07?GFBFBFFFFBGAFFB9DF>4?>FFFFFG6<2*4(4E2:? -@HWI-M01378:140129:000000000-A7785:1:1117:12925:16162 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTTAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATA -+ -GGGGGGGGGGF8DDBFGGGGGGFF?8EGGFFFAEEFGGGF:?FGGFFGF?BA7+=C759AA9CCFGFFC*;9D>F?*3:69FFAFFFCE=C7?E5>;61)(,*6ED>1(4:GFAF -@HWI-M01378:140129:000000000-A7785:1:1117:16205:24882 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGGCTGCTGCCACCAAAAAGAGGATCCTCCAGGTCCAGTC -+ -FCFFGGFFGGFGCGGGGG6DEF8FFGGGGGE==?6=DD851+;4?F,AFDGFFD*@DCGFFGGFA>A56? -@HWI-M01378:140129:000000000-A7785:1:1118:9968:1647 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCATCGTTGATCCATCCCCTCCACTCACTCCTTTGTCC -+ -8F>D=EFADAFDA=A,9D+8DCD=@8,73D,6,,2=+8==CDFGG<,DEFG?A -@HWI-M01378:140129:000000000-A7785:1:1118:9715:1754 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGG -+ -GGGCCEFGGCFG=8DFGFDGGG?DFGGFGGD=ECFFGFGFGGFDCFGGAGG@FFB79*CA85BFC7+:AA*318C745>)6;?3:9E5):?0? -@HWI-M01378:140129:000000000-A7785:1:1118:8691:1931 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAA -+ -FGGGCGGFGDFFDGGFFGGGF8=DFGGFAAEGGAD8=2@7==FDGFFC9FGCGF?,;5CB5?B+:9C2?GE*BCF4D(2(,=BBE:?B -@HWI-M01378:140129:000000000-A7785:1:1118:23298:2242 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCC -+ -ECF;>CCDEGGFDGCD,C?FD6,=DD,=,@FDDEFDFGDFGGF=?*@<9CEEG?89A**0)*3?8D67>A -@HWI-M01378:140129:000000000-A7785:1:1118:23073:6508 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCACAGCTAGTGAAGGTGTATCCAAAAGCCTTGC -+ -GGGFGGGGGGGGGGEFGGGGGFFGGGGGGGGGGGFGGGGFGGFFGFGGFGGAFFFGGFGFFGFFGGFFFFGFGFFGFGFFFGFFGFEGEFCDGED>@F;AFBGEFGFFFB?GDA@2@2?::FB4?FFFF>+(,?AFF<>*6:2(7?F0@ -@HWI-M01378:140129:000000000-A7785:1:1118:21171:9133 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATACTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGGGGGGGGGGGGFCFFGGGGGGGGGGGGGFGGGGFGGFGGFGGFGGFGFFGGFGFFGFFGGFFFAGFFFFGFGFFFGFFGFFGFFGGGDFD6?FFFB5)78?BFF?GAAFFFFFAAF9>?72@FAFFFFFFFFGGA:BBB?G:?> -@HWI-M01378:140129:000000000-A7785:1:1118:18189:10068 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTT -+ -GGGGGGGGGFGGGGGGGGGGFFGGGGDFGGGGGGFGFFGFGGFGGFGGFGGFGFFFGFGFAFFFCGFFFFGFGFFGFGFFFGFFGFFCCFGDGDDE>F?FF6EEFG?FFFBFAA4)<<6<34.:?--9;>G4(92:ABF7<7:?<7C -@HWI-M01378:140129:000000000-A7785:1:1118:9717:10455 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTACCCAGAAGCCTTGCA -+ -GGGCEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGFGGFGFEGFFGGFGFFGGFGD=FFFGGFFFFGFGFFGFGFFFGFFGBFGFFG:?CD>@<7F<0=>DGFF?F>GFF?7FDFA>69A?>ABGAEBBF))-465(4??BFG:C? -@HWI-M01378:140129:000000000-A7785:1:1118:6493:13149 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGAGGGCCTGGCGCACCCAATGCATAGCATAGCTAGCGAAGGTGTATCCAGAAGCCTTG -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGDFGGGGFGGFGGFGGFGGFGFFGGFGFFGBFGGFEF5CFGFFGFGFFFGFFG=EGFFGGDG4B=;@F;6EDFGF@<@ECDFFDFGGF,@6E=+=,==ECF9F?FC9*7@BFGA88<275@9)C9@F5+9F5511)3;*;))*4-?F@*2/=CCC53;>F -@HWI-M01378:140129:000000000-A7785:1:1118:21261:19014 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -FFGGGGGGGDGGGGGGGGGGGGGGFGGGGGGGFGBFGDCFGGFGGFGFFGGDFFFFFGCG>FGEGB=F9>FDEFGF6CDGG33:DD>@FGDFGBBF7:CABF>FDDFGF?DFGFGGGGGEFFCGGDFGGFGDEFCCFGFGFFGG>C>95BFGGF;AAFFG=FGFGDE4EFFF=EGCADDCE5=:615?BGFDGFF??(04)/.BFGGFFFFGFGFFFEFFB4C@FGE=DF -@HWI-M01378:140129:000000000-A7785:1:1118:24760:20968 3:N:0: AATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTTC -+ -GFGGGGGGGGGGGGGGGGGGG?DDFFFG:AFCGCF:DFGF7=6FGFGGFGFCFFFFGFG>@GFFGGFFFAFFFBFG*0<@AGFFGE4BCCC54CABFFDFF0=;BGFFGGFFFFGFGFFGFGFFFGFFGFFGFFD44CAABF?FF0E@DE?:??>GFF=)9AGF>0487(::C -@HWI-M01378:140129:000000000-A7785:1:1119:12200:9232 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCACGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATCGCTAGTGAAGGTGTATCCA -+ -GGGGGGGGGGGGGGGGGFGGGGCEGGGGGFC+@FFCFGGG8FFEG?FFFGG+:@96EDGG5@CFFGFFFDCFGF4?EGFA9DFFGFCFFF57?C5;A01.=:GFFGFFFF:FAFD)8:9)(/.3;<4BC2C?:CAAFAF -@HWI-M01378:140129:000000000-A7785:1:1119:25522:9543 3:N:0: TATAGCACGC -GATAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCTGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGG -+ -D,FCE;,=DF8@:5E99E1,@68DDF9EFDFFFDGCACCFCGFGFCEAF@EFGF7CCDCD5*;FFGFBFD>AFDFGED2*.>@FGFFFF85CC5C;)(/:?0C1@E.(48?G2):2>>4).*463AA6F:*:FC7=FGGC5F4C30:D:;:D5A3C -@HWI-M01378:140129:000000000-A7785:1:1119:26527:12673 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGGCTGCTGCCACCAAAAAGAGGATCCTCCAGGTCCAGTCCATGGAG -+ -FGGGGGGFGGGFGGGEDE8FGG8DGFFCCGGGGGDEGG7C76*@=AEGGGFFGA>CG6EF5CD66C>AC;FA@*/*) -@HWI-M01378:140129:000000000-A7785:1:1119:25841:13619 3:N:0: TATAGCACGC -GTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGG -+ -6FCFGGG=BDFGA,,@F8?8D8DGGFGGFGGG8:DGGFEGGGFGGFGGFGFFGFFGC9C7FCFFFCCF*;C9EBA==FEFFGF48:9:=59CD -@HWI-M01378:140129:000000000-A7785:1:1119:20076:14454 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGGFGFGFFGGFGGFGGFFGFFFGGAFDFGFFDFFGFFGFFFFFGGGGGFEFFFFFEBEGFFBF?CAFGBFF>>BGFD7)69EBD5@FFFBCBAC7724*FCE6C*=CDGCC9>??FD6?17C -@HWI-M01378:140129:000000000-A7785:1:1119:6516:18986 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGGGGGGGGFGGGGGGGGGDFGGGGGGGGGGGGGGGGGFGGFGGGGGFGFFGGBGGFGGFFGFFFGGFGFFGFGBFEGFFGFCFFFDGGGGF>DFFF@G9FEEFF<7FFF>AFFBF7G>A>CE -@HWI-M01378:140129:000000000-A7785:1:2101:10492:6392 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATCTTTCGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAACCCTTTGTCCGGGGGCCTGGCG -+ -FBEFGGFGGFGFGG9AFF8DFGFGGGGDFFGF,2=,6E=+@D?77EGAFDD9DCFCFDE7AF7CC*++0;9BF4CC+*)**6:CC)0=B+:/:ED33;03AC -@HWI-M01378:140129:000000000-A7785:1:2101:21110:9989 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTCTCCGGGGGCCTGGCGCACCC -+ -GFGFDGGGGGFE8;FFGGGF8DDFGF=ECD,+CFGFGGGGGFAGGFGGFGF+BD?DC*:DB@<=:7188C*=B@4>3ABA4D?C<>*2=:CDECD5:0(95)212CB -@HWI-M01378:140129:000000000-A7785:1:2101:25521:14328 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGC -+ -GGG,EFGGGD;DDFFGGGGGGGFGGGGGGGGGGGGGGEGCEGFGGFGGGGGFFF5DF5CD>GF>FD@9CF5BG*7>ADFF>FFFFF=GGC7DGEDF>70CDG8;DEGCFF899=B86,1==;FEA@9A=2@EGDGGGBFG?9CC+71=;?6D>4@AFF>+3?=5**1>A7DCGB49F4*5**3;C77CC3>;8=5)*2:;FF -@HWI-M01378:140129:000000000-A7785:1:2101:7510:19246 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCACGCCTTTGTCCGGGGG -+ -G<8@D9D8ECEFEF=AD>DCFDF88,,,,63+@2DA:FADGCAGG7@<=?CB:=AC=*3BFF>8BF:3*>:DEF=FF8?75EC -@HWI-M01378:140129:000000000-A7785:1:2101:13482:19637 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCCTAGC -+ -GGGG=DEFEEGGGDGGGGGGGDEGG8EFFF=DFGGGGGGGGGFGGFGECFF+>BF6CFGGB4@8:D4C55:5DFGFA9,1=DD,@FCGGGFGGD+9EFGGDFFFGFAF9FCFFC?CDDAEG5*2B+4B6=278D@?C+CDF4EFG,**5=1*)4B)0)3(8AGG96? -@HWI-M01378:140129:000000000-A7785:1:2102:23669:4942 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGFGFGGGGGGGGGGGFGGFGGGGGFGGGGGFGGFGFDCDFFAFFFGFFGFG=AFGFGGFFFFFDDEGGFFE@C?:EBGGGFFF7FFA9>?FG4)>46?77C+**3:0*4:>F,+@7**49CE3+=@8=5;:)(86;5;>E6DEGA -@HWI-M01378:140129:000000000-A7785:1:2102:20537:10795 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTT -+ -GGGGGGGGGGGGFGDDGGGGGGGGGGGGGGGGGGGGDFCFGGFGGFGGCFGFGGGGGFGGFGGGGGFFFGGFGFFGFGFFFGFGGEFFFFGGGGGFDE@F@3=9GGC5?B?F=AGGFFFBAFAAF72C:AEF:GDAGG>F>DEFFFG@7C28CA8F*=9D?EC+;);AF>9<788=FC*:5)68B7F0)14>E diff --git a/clipper/t/in/join/test-ov-a.2.fq b/clipper/t/in/join/test-ov-a.2.fq deleted file mode 100644 index f7d7513..0000000 --- a/clipper/t/in/join/test-ov-a.2.fq +++ /dev/null @@ -1,400 +0,0 @@ -@HWI-M01378:140129:000000000-A7785:1:1112:20058:10262 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGACCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACACTTTCCAGGGACACATCC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGDFGGGGGGGGGGGGGGFGGFGGGGGGGGFGFFGGGGGCFFGGGGGGGGGGGE9DFG5?:FEGG7FG:DFGGG@FCFGGGGGGGGCF6FGA7CGCE@E8FF6>FGGC1:5/4:?,>G?++=*)(22C>94C<(>3(9:?F -@HWI-M01378:140129:000000000-A7785:1:1112:27324:10852 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG5EGGGGFGFFGFFBFFGGGGGBF3AFFFGFFF7FGGGFFG??F36F?:C:F -@HWI-M01378:140129:000000000-A7785:1:1112:13807:10870 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGCGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCFGGGGGGGGDFGGGGGGF??FGGFGFGGFCGDEFFFGFGGFFFFGGGFFFGBBFF:<27F::7?F? -@HWI-M01378:140129:000000000-A7785:1:1112:12421:11010 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDCFFFGGFGGGGGGGGFFFFGFGGFF67GGGCFFGFFFFFGFFGFFFBBGBBB6FFFGBFGFFFBBGFFF?FF: -@HWI-M01378:140129:000000000-A7785:1:1112:24376:13941 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCCACCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGG6FGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGFGGGGGGGGGDGGGGGGGGGFGGGGDGGGGGGGGGGGFGGGGGGGGGG?FGGGGGGGGGGCFFFFFDGGGGG6FEDEFFGGGGGGGGG=CEDGFC?CFEFFFFGGGGGGGGGGFF?4?FEGGGFGGCCDFFFGFGEFFFDFFGG=:G6:>514>?C6>(((1(4:BFF? -@HWI-M01378:140129:000000000-A7785:1:1112:10620:14798 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCAAGCACAGCCT -+ -GGGFFCFFFFEEE@FFFGGGFGCFAFFGGGGGCEFE=FA?FGFEFCEGGDGG*2C::816FB -@HWI-M01378:140129:000000000-A7785:1:1112:26422:14876 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGC -+ -D@FGFCFFFGGGCDF89>CFFFF::+:/>EFFF5:D:>E:@ -@HWI-M01378:140129:000000000-A7785:1:1112:17229:16419 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAGGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFFGGGGGGGGGGGCGGGCFGGGGGGGGGGGGGGGGGFGGGGGGFGGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFEFFGFFGGFGGGGGGGGFFFFD>ECF@F>GGGGFFGFBFFFGBBGFFFFBCB?:?BF: -@HWI-M01378:140129:000000000-A7785:1:1112:9440:21170 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTAGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGDEGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGFGFFGGFFGGGGGGDEFFFGFFGFF?<><:7?FF -@HWI-M01378:140129:000000000-A7785:1:1112:13154:23703 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGG -+ -GGGGGGGGGGGGGGGGGGGGGGFGGGFGGGGGGGGFGGGGGGGGGGGGGGGGGGFGGGGGGGFGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGCCGGGG9FGGEGGGGGGGGEGGGGGGGGGCFGGGGGGGGGGGGGGGGFGFFFFGCEEDGGGG85=55A;<0*9=7>CG7*2?? -@HWI-M01378:140129:000000000-A7785:1:1113:9219:5995 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCCTGAGGGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGFFFGGGGGGGGGGGGGGGFFGGGGGGGGGGGGEGGGGGGGGGGGGGGGCEGGGGGGGGGGGFGGGGGGGGGGGGGG@FGDFAFGGGGG9FGG:FGGGGEGGGGGGGGCEGGGGGGGGGGG*:FGGDGFFFEFFGGGDFGGGGGGGF9CFEFGGGGGGGGGGGGG:7CBGC6CFGFFGDC55(386F>C<7BA@@BFFGF?::BF< -@HWI-M01378:140129:000000000-A7785:1:1113:18729:16203 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGFDFFFGGEGGEGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGFFGGGGGEGGGFFGCFGGGGGGGGGGGGFFGFFGGFGGFFGGFGFFD0=;FGFFFDGFGGFFGFFFF?F:>GF>BFFGFFF7<@B -@HWI-M01378:140129:000000000-A7785:1:1113:3306:19532 1:N:0: TATAGTACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGACCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACAATCACCAGGGACACATCCGCGAGAACAGCCT -+ -:FGGGGGGG@FGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG?EFGGCFFGCFGGGGGEFFFG5FG;?+@EFFFFFFGGFGG?CEF;DGEFGF)58*>019D -@HWI-M01378:140129:000000000-A7785:1:1114:18985:5310 1:N:0: TATAGCACGC -AGGGCAGAGTCACCATTACCAGGGACCCATCCGCGAGCACAGCCTACATGGAGCTGAGCAGCCTGAGATCTGAAGACACGGCTGTGTATTACTGTGCGAGAGAGCAGTGGCTGGTACTTTTAACCTTTGACTACTGGGGCCAGGGAACCCTGGTCACCGTCTCCTCAGGTAGACCAAGTCTCTGCTACCGTATATAGCACGC -+ -FGGGGGGGGGGGGGGGGGGGGGGGGG,BFGGGGGGFFGGGGGGGGEFCFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGGGGGGGGGFFEEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGFFGFFFGFGGGFFF+:A -@HWI-M01378:140129:000000000-A7785:1:1114:23540:7106 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATCCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGEGGGCDFGGFGGG9?FGGGGCCCFFCADFGFGCFAFFGG:F@F>CFGFFFBGGGGFFGF:FF:DFFGFF@(952<::BFF -@HWI-M01378:140129:000000000-A7785:1:1114:23450:10317 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCCGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATCTTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGCGCACAGCCT -+ -EGGGGGGGFFFCFGGGGGGGFEFFGGGGG@FC=FFFDCFEGCDFEGGGGGCGEF=F@FG9FEFAF<@FGFGC<=BFG9C?DG:EFG6,<;EF8/206CF@7CFFEEF0>CFF:0@F -@HWI-M01378:140129:000000000-A7785:1:1114:7126:18810 1:N:0: TATAGCACGC -TCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGGTACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCTA -+ -GFGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGCFGGGGGFGGGGGGGGGGGGFGGGGGGGGGGGFGGGGGEEGGFCEGGGGGGGGGGGGGGGGGGGGGGGFGFGGGGGGGGGGGGGEGGF?FFGFGGFCFFGGGGGGGFGGFEFFF@:?FGG8=8B@FF@GGFF=BDGEFF:57?FF:CB1*15<>FB0:?F(0: -@HWI-M01378:140129:000000000-A7785:1:1114:12409:19488 1:N:0: TATAGCACGC -AGGGCAGAGTCACCATTACCAGGGACGCATCCGCGAGCACAGCCTACATGGAGCTGAGCAGCCTGAGATCTGAAGACACGGCTGTGTATTACTGTGCGAGAGAGCAGTGGCTGGTACTTTTAACCTTTGACTACTGGGGCCAGGGAACCCTGGTCACCGTCTCCTCAGGTAGACCAAGTCTCTGCTACCGTATATAGCACGC -+ -GGGGGGGGGGGGGGGGGGGGGGGGG@CCFGGGGGG+>FCGGGGGGEF?A9FGGGGGGGGGGGGGG8FGFGGFGGGGGGGGGGGG,BFFFGGGGDFFGEGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGCFFGGGGDFGEGGEGGGGGGGGGGGGGGGGGGGGGGGGFGGGGFCGGCE8FG?CGGGFFGFFCFFFGF7ECF=: -@HWI-M01378:140129:000000000-A7785:1:1114:9907:23323 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGFFGGGGGGGGGGGGGFGFGGGGGGGGGGGGGGGGGGGGGGGGGGGFGFGGGGGGGGGGGGGGGGGGGDCEGGGFGFCFFGGGGGGGGGGGFCFFEFGFGFFFFG?E>>DFGCCC69?AGF?FFFG>0)0:F7:C -@HWI-M01378:140129:000000000-A7785:1:1115:20594:2152 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATACTCACAGAAGTTCCAGGGCAGAGTCAC -+ -:FFGGG8F,@FGCFEFGG*<,6>B:,>,1D@EDE=5==,12*BE?B9CC:C=G>+<*:C;FG4(5++++5CC>52.3171;D>BB:?>? -@HWI-M01378:140129:000000000-A7785:1:1115:21004:5310 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCA -+ -GFGGGGGGGGGGGGGGFGGGGGFGGGGGDGGGGGFGGGGGGGGGGGFGGGGGGFGGGGGEGCE?FGGGCFGGGGGGGGGFCE9FGDFGGGCEGGGGGG9EBFAFGAAFGGCEFE8CFEGGG6?@FEC:FGFEGFGGGG,:ECC9FCCCGFGGEGGGGGGGBC5?EDGFFFF5)2*9?B -@HWI-M01378:140129:000000000-A7785:1:1115:3643:7099 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGACGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -FEFFGEFDGGGGGGGDGGGGGGGGGGA,@CFGGGGGGGGGGGGGGGGGGGGGGGGGGG<AGFF:)7E:0>?BG:7E:<)7>BBBFFFFB -@HWI-M01378:140129:000000000-A7785:1:1115:19291:10393 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTTCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGTAGTTCCAGGGCAGAGTCCCCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGFFFGDECFDDDFFGAFEFEGGFEGFDFEGFFFGGEE;A9FAEE,EFF+F:B=CGGGGGGGGG@FGGGGFG@FG:@>@D?77:D6?EGGFCEC8BCGE=EFF92;,4=<>EF<8F:E+2::9<.+3/31?7A@95)83)3)5+/;8:C7CD>BC?FF0:C:?F<:579@071(.77 -@HWI-M01378:140129:000000000-A7785:1:1115:26788:11790 1:N:0: TATAGCACGC -CTCCCTGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTCTGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAAGACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGC -+ -@FGGGCGGGC,>CFGGGGG?++:<<@F7=FGGFF@EEDF7:@6+@F?>F7CFFBFG14>13C>?G?F -@HWI-M01378:140129:000000000-A7785:1:1115:22293:14738 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGFGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCFGFGGGGGGGGGGGGGGGFEGGGGGGGGGGGGGGGFEFFGGGGGGGGGGGGGFFGGGGGGGGGFGGFGGFFEFFGGGFGGGEFFFFGFGG??>AGFGGFFGF:FFFGFFG?FB9FD>FBFFFF -@HWI-M01378:140129:000000000-A7785:1:1115:3156:15238 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGG9FFGGGGGGGGGGGGGGGGG@DGGGGGGGGCFGGGGGGGGGGGGGGGGGG9FGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGFGG?FGGFFEGGGGGGGGGGGFEGGFGFGGGGGGGGGGFEFCFCBFFGGGGGGFCAGGEEFGFGGCFGGGGFFFFF22CB@>AGGGGBFG?4>:?GFBGFF>(4.9?7:?FB -@HWI-M01378:140129:000000000-A7785:1:1115:27886:16559 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGG -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAFFGGGGGGGGGGGGGCFGGGGGGGGGGGGGGGGGCBCGGGGGGGGGG57C>CFGGFCFGGG*?EEGGFFFGFGDFGGFGCFGD?;CC>FEAGF@CGGFCCGEFFFFFEGGFF7GFGGGGGG:37@DECFGGGGGG7;ECFDECCEDEGEFGG>;;02>CGGGDD??7+;94;F;C;:<*2=:58.4>24C?@C4;FGGCGGFGFF6:56;CFFFFGGFGFFGFFFBFC82C -@HWI-M01378:140129:000000000-A7785:1:1115:15717:20410 1:N:0: TATAGCACGC -TCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATGCACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCTA -+ -GGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGF9FFGGGGGGGGGG?@CGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGDGGGGGGGGGGGGFGGGDGGGGGGGGEEEGGGGEGGGGGFEGGFGGGGGGGFGGFGGCFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFFGGFGGGFGGGG>D@FFAFFFFFFG*>F?BG:?>BFC8750<@9>DCEGCF+AEGEGGFCFGGFGGGGGDFCFGGGGGFBAEDF6241DF55??*::08CGC;FEFFGGC=D+@:8+=54B8(A:E=@GGEFF2AC6FDFCC,=CD*:CEDGFFG;;FGE6CGF -@HWI-M01378:140129:000000000-A7785:1:1116:21394:3317 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCCCAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACA -+ -GGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGEGGFGGGGFFEFFFGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGFFFGGGGGGFFFFFGGGGGDEGGGGGGGGGGFGGGGGECF7B8DCFCEFGDFGFCFGGG?CCFDFF<>FEGGGGGCCEGDFEDC?CEGFGGGEFFGFFGCGGD?FGF+==;DF65CFGGFCCB>;0C?CCFFBAFGFDA?E0(;6?G -@HWI-M01378:140129:000000000-A7785:1:1116:21781:3983 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGCGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGGGGGCEGGGGGGGGGGGGGGGGGGGGFGGEGFGDFFFGGGGGGGGCGGGGGGGGGGGGFFGGGFGGGGGGGGGGGGFFGFFGGFGGGGGFCGEFFFGDGGFFFAFFGGBFGFFF??F?>F?FBFFFFFFFFF? -@HWI-M01378:140129:000000000-A7785:1:1116:19367:5061 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEEFGGGGGG@FGGGGGGGGGGGGGGGGGGGGGGGGGFGGFEGGGGG5DEGGEDGGGGGFGFGGGGGGGGGGFFGE>;>D -@HWI-M01378:140129:000000000-A7785:1:1116:22704:5419 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGAAACATCC -+ -GGGGGGFGGGGFGGFFGGGGGGFFFFGGGGGGFGGCGGGGGGGGGGGGGGGGGGGFFGGGFGFGGFGGGGDGAGGGGGGGFFGFGGGGGGGGFGGGGGGFC6DEFFDGGGEGGGGGGGGGGGGGGGCFGG5FGGGGFAGC37GGGGFGFFF27?>F<2=08.(:F<:C -@HWI-M01378:140129:000000000-A7785:1:1116:3314:6852 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTACGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGC -+ -GGF8F8CDFD9F;1860>8?>A?GGF2):22:?6DB?G<@ -@HWI-M01378:140129:000000000-A7785:1:1116:12883:11398 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGEFEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCFGFGGDGCGGGGGGGGGGGGGGGGGGGGFFGEFGGFGGGGGGGGFFFFGFGGFF?DFGGGFFGF1F:?G?BG?FFFFFFBFFFGF -@HWI-M01378:140129:000000000-A7785:1:1116:4257:14374 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGCCACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGGGGGGGGGGGGGGGGGGGCFG7E8@GGE>FFGCGGGGGGGGGGF?F@FGCE=EGGCCGFFGCAGGGGG=DCFCCFDEFGGFGGGFFECE>546C79@C*)5@DGG9?G03BFFF>DF -@HWI-M01378:140129:000000000-A7785:1:1116:26580:20568 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATGCACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCT -+ -F@FFGGGGGGGGGGGGGGGGGGGGGGGGGGFFEFGGGFGGGFGFGGGGGGGEGGFGGGGGGGF,@,3@ -@HWI-M01378:140129:000000000-A7785:1:1117:15050:1908 1:N:0: TATAGCACGC -TCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCAGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCAC -+ -GGGGGGGGGGGGGGGGGFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDFFGGGGGGGGGGGGGGGGGGGGGFGGGDGGGGFGGGGGGGGGGFGGGGGGGCGDGE@FGGGGGGGGGGGGGGGGGGGFCFCFGFC8F?FGGFGGFGCEGEDGGGGFGGGFGGFFEFGGGGGGECF9EFGGCEEGD?FFEFCEC?CE69@@;F9C97ACCFD>+=1;A -@HWI-M01378:140129:000000000-A7785:1:1117:10756:3719 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGCGDGGEGGEFCGGGGCFFGGFGFGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGFFFFEFGG@CF9FFDGGEF?FGCCDFF?FFGFGF?GB?FFFGBFE?FFBFFBB?FF>1 -@HWI-M01378:140129:000000000-A7785:1:1117:24534:4247 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCTAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACCAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTCCCAGGGACGCATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGGGGGGGGGGGGFGGGGGGGGGGGGDFGGGGDGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGDGEGGGGGGGGGGDGGGGFCFGGGGGGGGGGCE8FCEGGGGFFCGGEGGGDGCGFGGC9CGFC*CFCF:FGCAFE<69=GCGG?:*7::;FFEGD<=33F:@G=?GFF3((/41C?>491>9?FF?3: -@HWI-M01378:140129:000000000-A7785:1:1117:13251:7519 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCCCCATTACCAGG -+ -@EFCGCFGGDFFFEEGGFEGCCFFDFGGGE@C8FGGG?EAEDFGFDFGGGGGGGGGFGGECFGFGFFGGGGFGGFFGGGFGFGGGFGCEDGFEBEFFGGFFGGGA?EAFFGGFFGGFEBCFFEGG@BFCC7@C>>:BEFEFF=DF,@<586?B@8?@:<@:5//7==C,>8>CCCFGGFGGGFFGFFGF9GFEGCD+245/:=FFE99*)8:?BGF???E -@HWI-M01378:140129:000000000-A7785:1:1117:14612:8918 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGG9EGGGGGGGGGGG@FGFGGGGGGGGGGGGGFGDGGGGGGGGGGGGGGGGGGGGGGGGGFFFGGGGGGGGGGGGGGCFGGGGDCEEGGGGGG=,ACFGG7DFGGFAF?>DC=FFGGGFGGFFFFGFFGFFFFFGFGBFGF?F:2CBDG0.32(8;F?BBGF -@HWI-M01378:140129:000000000-A7785:1:1117:2770:10016 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGDGGGGGGGFGGGGGGGGGGGGGGGGFGGGGGGGGF9DFGGCFGGFGGGGGGGFGGGFGFGGGGGGF9FGGGGGGGGGDGDGGGGGGGGGGGGDGDGFCGGEGGGG>FGGGFGGGGGGEGGGG?ECCGDGGGCFG7;BEGCFGFEDFGGFFGFEGDE@DFFGGFGB>032>BBBFFC -@HWI-M01378:140129:000000000-A7785:1:1117:7058:13477 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGCAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGFGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDFGFGGGCEEGG:CFFFEGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFEDGGGDC9FGFFGFFGDEFGGGGGGGFF?FF>EGF@FFF>BF@9?07?FF -@HWI-M01378:140129:000000000-A7785:1:1117:20535:14960 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGDGGGGGGGFGGGGGGGGGGGGGGCFGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGCFGFGGGGGGGGGGFFGFFGGFGFGGGGFGFFFFGC@FFFFBFGFGFBGFFFB?F>:FBFBFFF>:::BGF -@HWI-M01378:140129:000000000-A7785:1:1117:12925:16162 1:N:0: TATAGCACGC -TCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCC -+ -FGGGGGGFGGFGGFGGGGGGGGGGGGGGGGGFGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGFGGGGFGGGCGGFGGGGGGGGGGGGGGGFGGFGGEGGGGFGFGGG6DEGFFGCFGGGG=B7F=FBFDFGGGFEFFCDFG9F=CCFGFGA@CFFGDGDE7>CFGGGGG6,,6>C1*1D8,4<587@,,/7=C7*AFDFFCDA:E?0FF:FF>G -@HWI-M01378:140129:000000000-A7785:1:1118:8691:1931 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGFCFGFFGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGFFGDFFGGGGGGGECCGCEFCFFE6?FGGGGGGGDFCCGGFD@CF587C@GFC+1+?5DFF@GE -@HWI-M01378:140129:000000000-A7785:1:1118:23298:2242 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAAAACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGG -+ -DFGGGGGGGFFGGGG9FGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGCGGGGGGGGFGGGGGGGGGGGGGGGGGG9@FGGGGGGGGGGGFGGGGGGGGGCC=7C><3C -@HWI-M01378:140129:000000000-A7785:1:1118:23073:6508 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTGTGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDFGDFFFGGFGGGGGGGGGGGGGGGGGGGGFGGGGGGFGFFGGGGGGGGFGFFGGFGGGGGGGGFFFDFFGGF=?C?F>F051FFF:GF -@HWI-M01378:140129:000000000-A7785:1:1118:6493:13149 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCCGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCGCTAGCTATGCTATGCATTGGGTGCGCCAGGCCCTCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGAACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGFGGGGGGGGGGGGGGGGFGGGGGGGG?FCFDFGCFGC3>DGGGGDGEF:?FAGGAC?A@FFFAFEBFF1?GF?;:FBF()(.(8?FF -@HWI-M01378:140129:000000000-A7785:1:1118:9182:16529 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFEGEFGGGFGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGEGGGGGGGGGGGGGGGGGCFFF?FGGGFGGGGGGGGGGGGGGGFGFGGGGGGGGGGGGFF?FC?@GGF>CF?@CCFGCGGGGGGGGFFEAGFFGGGGGGGGEFFDGC?GFGBAFGGGFFEB?@FFGGGFFGFBF?0>>?G -@HWI-M01378:140129:000000000-A7785:1:1118:19019:20700 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGC -+ -GFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFFGCGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGFDGGGGGGGGGGGGGGGGGGGGGEGFGFGGGGGGGGCFAFEFGGFFFGGGGGGDFFDFEFC9C?FFGGGAFGF27?FGF?GFF(4;B -@HWI-M01378:140129:000000000-A7785:1:1118:24760:20968 1:N:0: AATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GFGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGFGGGGGGEFFCC?,EFFGGFGDCFGGGCGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGEGGGGCGGGGGGGGFFFC@FFGCFGGC7CECFGGGGGDGGCFDFDFCGGDFECGGGGGFCEFFG@GDCFGFGGFF7?FC>FDD<7BFGGA?EF:FF<<::C6@06273(438CB -@HWI-M01378:140129:000000000-A7785:1:1118:12797:21177 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAGCACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFAFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEEGGGGGGGGGGGGGGGGGGGGGGFFGGGGGFGGGGGGGGGGGGGGGGDE=CEFGGGGGFCFGGFGGFGGFGFFGE3CFFGGGGGF3,=E?ECAGF)97?GAFGFFF??F?:F?FBFFD>B??FC -@HWI-M01378:140129:000000000-A7785:1:1119:12200:9232 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGFGFGGGGGGGGGGGGGGGGGFGGGGDGGGGFFFFGG7DFFGFFGGGGGGGGGGFDGGGGG:CGGGGECEFFFGFGGGGGG?FECFFGF3<<@FGGCGGFD)6?F84CF4A?C?B@FGGGGGGGFFGGGGGFGGGGGEGGGGGGGGFFFFEFGGGGGGEG*=CEC?CBCFGGFFGGGGGGG?FFFGFFGFEGGFG9>FDADFFGCGGF>FA7:*:::??FF62CF?G<>600>>?FFBF? -@HWI-M01378:140129:000000000-A7785:1:1119:19946:11946 1:N:0: TATAGCACGC -GTGGCCAGGGCCACCCTAGGCCTCTGGGGTCCAATGCCCAACAACCCCCGGGCCCTCCCCGGGCTCCGTCTGAGAGGGTCCCAGGGACGTAGGGGGGCGCCAGTTCTTCCCTGGGGTCCTGGCATTGTTGTCACAATGTGACAACTGGTTCGACCCCTTGGGCCA -+ -FGF=:F:EGGGGG:=AFDBAFF@:73,><=F<3=FCE<3+3+511***/2:CFFF+,;7:CG52;A<+CF7C::,@CE8@FGFCFFCFGG7EDCGGFGG?6>FFC?F,4/2>,<:+9*;C?F;F -@HWI-M01378:140129:000000000-A7785:1:1119:25841:13619 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCG -+ -EGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGFCG:EGGGFGGGGGGGDFGGGGGGGGGGGGGGGGDGGGFCG?7DFGGGGGGGGGGGFF?FFGCFGFGCFCEEFFGFEDF@GCCD++5C;9*/4?FF? -@HWI-M01378:140129:000000000-A7785:1:1119:20076:14454 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGFEFGFGFGGGGGGEFDFFEEGFFFAFGGGB?GB?FFBFFFGBF>FFFFFB -@HWI-M01378:140129:000000000-A7785:1:1119:26820:14628 1:N:0: TATAGCACGC -AGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCTACATGGAGCTGAGCAGCCTGAGATCTGAAGACACGGCTGTGTATTACTGTGCGAGAGAGCAGTGGCTGGTACTTTTAACCTTTGACTACTGGGGCCAGGGAACCCTGGTCACCGTCTCCTCAGGTAGACCAAGTCTCTGCTACCGTATATAGCACGC -+ -GGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGEGGGGGGGGGGGGEGGGFGGGGGGFFGGGFGFG<1B>B?:?FF -@HWI-M01378:140129:000000000-A7785:1:1119:21229:17686 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAAAACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCC -+ -DFGGGGGGG8FFGGGEGGGGGGGGGGGGGGGG,BFGFGGFGEGGCEGG?GGGGGC,+3CGF=?CC@AFFE@GGFGGGGGGGGFF?FGFGGF2?AFGGG9,C?:>1(24>FFF>>>E;FFFFF -@HWI-M01378:140129:000000000-A7785:1:1119:6516:18986 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGDGGGGGGGGDEGGGGGGGGGGGGGGGGGGGBFGGGGGFFGFAGF@FGGGGGGDEFFFGCCDFDFBFGGFFFG04:BFGFDGFF>09BBBB?BF? -@HWI-M01378:140129:000000000-A7785:1:1119:11518:19811 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAAAGGTAACACAA -+ -GGGGGDAFFFCGFDD,<=CF@,8??F,,CEFFGFB8ADGGEGGEEC?=+6++@C+5*3DD6@@@FG7@B>?26:>D@><8=?F?,B)*78?F,,5;92:F7EFFGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGF=?CFFGFFGGECGGFCGGGF??FFEG*6,88/:E4:45>?FB?G7?A?>1175((48>5? -@HWI-M01378:140129:000000000-A7785:1:2101:25521:14328 1:N:0: TATAGCACGC -CTCCCAGGTCCAACTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCCCAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFFGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFF9FCGCGGGGGDGGGGGGGGGGGGGGGGCG7>FFGGG9D@FFGGGGDGGFGC?CDGDDGGGGFFGGGGGCFGGGGGFFGEFGFFGFGGCCCC6@()5)+2-593(32(78? -@HWI-M01378:140129:000000000-A7785:1:2101:6147:17939 1:N:0: TATAGTACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATC -+ -GGGGGCGFFGGGGGGGGGGFGGFFFGGGGGGGCFGFGFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFFGGFGGGGGEGGGGGGGGG7CEFFFCC,@FFF;@8@5;FF6,>EGGGGGG>55<8*,01>;>E7412@:FGFCF@6@F6@C<@GGGCGFFD121:*.BDA)4A=:CB28;5(<3:DFF -@HWI-M01378:140129:000000000-A7785:1:2101:7510:19246 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGG -+ -GGGGGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGFGGGGGGCCCF4FCC7AFF?@F4;CFGGGGGG;?2F78CGGGGDC+;@EF=:?FF74CGFB?)9CFFA?G3,70?FFFC -@HWI-M01378:140129:000000000-A7785:1:2101:9133:23948 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGCTCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTACAGGGCAGAGTCACCATTACCAGG -+ -GGGFGFGFGGGGGAFBF=FFGFCGGGGF@EFAABFGGGGFGGGFGCFCECEGGGFGG@FGGCEGGGFF>E,DF;F61>6:,,57*591=CC?EFG;7=EC<@C8F7CCFF8+)/2*6C@+CCECCF04>*)?*).8>?FC@27C -@HWI-M01378:140129:000000000-A7785:1:2102:23669:4942 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGDGGGGGGFG?FGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGG?CFFFFGGGGGGGGGGGFFGGFGGGGGGFCBFFFGFGGFFFFGGGFFFGD4D?FGFFC::;99E0?B?FGF -@HWI-M01378:140129:000000000-A7785:1:2102:18023:6868 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCTCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGFGGGGGGGGGGGGGGGGGGGG,FGGGGGGGGGGGGGGGGGG@FGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFFGFGCGGGGFGGGGGGGGGGGGGGGGGGGGGGGGFFGGFFGFGGGGGGGGGGGGGGFGFFGGGGDGGGGGGGCBFGGGGGGGGGGGGGC.88CFGGGGGGGGEAFFG4B?FFEFFGGGF:C5;6)4:11>F? -@HWI-M01378:140129:000000000-A7785:1:2102:20537:10795 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGCCFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGDFGGFGGGGGGGGGFFGGFGGGGGGGGFFFFGFGGFFFFGGGGBBGGFGFFC,4;1>>;BFFBBFFGF -@HWI-M01378:140129:000000000-A7785:1:2102:11278:14783 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGGGGGGGFFFFFEGGFFFFGGGGFFGGFG?FG>?C?FFFFFFF?:FFB -@HWI-M01378:140129:000000000-A7785:1:2102:15247:16145 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCC -+ -DGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGFGGGGGGGGGGGGC?FGFGFFCGEGGGGGGFGGGGFGGGGGGFGGGGGGGGGF5?EGDGGFGFFFCFGGFGFE=FF99@FGFFGGFGFFCCGGGEFFF5)?EF?BFF>EGFFGD096<624F:>B>BE9?<<>C diff --git a/clipper/t/in/join/test-ov-b.1.fq b/clipper/t/in/join/test-ov-b.1.fq deleted file mode 100644 index f7d7513..0000000 --- a/clipper/t/in/join/test-ov-b.1.fq +++ /dev/null @@ -1,400 +0,0 @@ -@HWI-M01378:140129:000000000-A7785:1:1112:20058:10262 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGACCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACACTTTCCAGGGACACATCC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGDFGGGGGGGGGGGGGGFGGFGGGGGGGGFGFFGGGGGCFFGGGGGGGGGGGE9DFG5?:FEGG7FG:DFGGG@FCFGGGGGGGGCF6FGA7CGCE@E8FF6>FGGC1:5/4:?,>G?++=*)(22C>94C<(>3(9:?F -@HWI-M01378:140129:000000000-A7785:1:1112:27324:10852 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG5EGGGGFGFFGFFBFFGGGGGBF3AFFFGFFF7FGGGFFG??F36F?:C:F -@HWI-M01378:140129:000000000-A7785:1:1112:13807:10870 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGCGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCFGGGGGGGGDFGGGGGGF??FGGFGFGGFCGDEFFFGFGGFFFFGGGFFFGBBFF:<27F::7?F? -@HWI-M01378:140129:000000000-A7785:1:1112:12421:11010 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDCFFFGGFGGGGGGGGFFFFGFGGFF67GGGCFFGFFFFFGFFGFFFBBGBBB6FFFGBFGFFFBBGFFF?FF: -@HWI-M01378:140129:000000000-A7785:1:1112:24376:13941 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCCACCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGG6FGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGFGGGGGGGGGDGGGGGGGGGFGGGGDGGGGGGGGGGGFGGGGGGGGGG?FGGGGGGGGGGCFFFFFDGGGGG6FEDEFFGGGGGGGGG=CEDGFC?CFEFFFFGGGGGGGGGGFF?4?FEGGGFGGCCDFFFGFGEFFFDFFGG=:G6:>514>?C6>(((1(4:BFF? -@HWI-M01378:140129:000000000-A7785:1:1112:10620:14798 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCAAGCACAGCCT -+ -GGGFFCFFFFEEE@FFFGGGFGCFAFFGGGGGCEFE=FA?FGFEFCEGGDGG*2C::816FB -@HWI-M01378:140129:000000000-A7785:1:1112:26422:14876 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGC -+ -D@FGFCFFFGGGCDF89>CFFFF::+:/>EFFF5:D:>E:@ -@HWI-M01378:140129:000000000-A7785:1:1112:17229:16419 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAGGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFFGGGGGGGGGGGCGGGCFGGGGGGGGGGGGGGGGGFGGGGGGFGGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFEFFGFFGGFGGGGGGGGFFFFD>ECF@F>GGGGFFGFBFFFGBBGFFFFBCB?:?BF: -@HWI-M01378:140129:000000000-A7785:1:1112:9440:21170 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTAGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGDEGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGFGFFGGFFGGGGGGDEFFFGFFGFF?<><:7?FF -@HWI-M01378:140129:000000000-A7785:1:1112:13154:23703 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGG -+ -GGGGGGGGGGGGGGGGGGGGGGFGGGFGGGGGGGGFGGGGGGGGGGGGGGGGGGFGGGGGGGFGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGCCGGGG9FGGEGGGGGGGGEGGGGGGGGGCFGGGGGGGGGGGGGGGGFGFFFFGCEEDGGGG85=55A;<0*9=7>CG7*2?? -@HWI-M01378:140129:000000000-A7785:1:1113:9219:5995 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCCTGAGGGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGFFFGGGGGGGGGGGGGGGFFGGGGGGGGGGGGEGGGGGGGGGGGGGGGCEGGGGGGGGGGGFGGGGGGGGGGGGGG@FGDFAFGGGGG9FGG:FGGGGEGGGGGGGGCEGGGGGGGGGGG*:FGGDGFFFEFFGGGDFGGGGGGGF9CFEFGGGGGGGGGGGGG:7CBGC6CFGFFGDC55(386F>C<7BA@@BFFGF?::BF< -@HWI-M01378:140129:000000000-A7785:1:1113:18729:16203 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGFDFFFGGEGGEGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGFFGGGGGEGGGFFGCFGGGGGGGGGGGGFFGFFGGFGGFFGGFGFFD0=;FGFFFDGFGGFFGFFFF?F:>GF>BFFGFFF7<@B -@HWI-M01378:140129:000000000-A7785:1:1113:3306:19532 1:N:0: TATAGTACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGACCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACAATCACCAGGGACACATCCGCGAGAACAGCCT -+ -:FGGGGGGG@FGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG?EFGGCFFGCFGGGGGEFFFG5FG;?+@EFFFFFFGGFGG?CEF;DGEFGF)58*>019D -@HWI-M01378:140129:000000000-A7785:1:1114:18985:5310 1:N:0: TATAGCACGC -AGGGCAGAGTCACCATTACCAGGGACCCATCCGCGAGCACAGCCTACATGGAGCTGAGCAGCCTGAGATCTGAAGACACGGCTGTGTATTACTGTGCGAGAGAGCAGTGGCTGGTACTTTTAACCTTTGACTACTGGGGCCAGGGAACCCTGGTCACCGTCTCCTCAGGTAGACCAAGTCTCTGCTACCGTATATAGCACGC -+ -FGGGGGGGGGGGGGGGGGGGGGGGGG,BFGGGGGGFFGGGGGGGGEFCFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGGGGGGGGGFFEEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGFFGFFFGFGGGFFF+:A -@HWI-M01378:140129:000000000-A7785:1:1114:23540:7106 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATCCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGEGGGCDFGGFGGG9?FGGGGCCCFFCADFGFGCFAFFGG:F@F>CFGFFFBGGGGFFGF:FF:DFFGFF@(952<::BFF -@HWI-M01378:140129:000000000-A7785:1:1114:23450:10317 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCCGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATCTTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGCGCACAGCCT -+ -EGGGGGGGFFFCFGGGGGGGFEFFGGGGG@FC=FFFDCFEGCDFEGGGGGCGEF=F@FG9FEFAF<@FGFGC<=BFG9C?DG:EFG6,<;EF8/206CF@7CFFEEF0>CFF:0@F -@HWI-M01378:140129:000000000-A7785:1:1114:7126:18810 1:N:0: TATAGCACGC -TCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGGTACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCTA -+ -GFGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGCFGGGGGFGGGGGGGGGGGGFGGGGGGGGGGGFGGGGGEEGGFCEGGGGGGGGGGGGGGGGGGGGGGGFGFGGGGGGGGGGGGGEGGF?FFGFGGFCFFGGGGGGGFGGFEFFF@:?FGG8=8B@FF@GGFF=BDGEFF:57?FF:CB1*15<>FB0:?F(0: -@HWI-M01378:140129:000000000-A7785:1:1114:12409:19488 1:N:0: TATAGCACGC -AGGGCAGAGTCACCATTACCAGGGACGCATCCGCGAGCACAGCCTACATGGAGCTGAGCAGCCTGAGATCTGAAGACACGGCTGTGTATTACTGTGCGAGAGAGCAGTGGCTGGTACTTTTAACCTTTGACTACTGGGGCCAGGGAACCCTGGTCACCGTCTCCTCAGGTAGACCAAGTCTCTGCTACCGTATATAGCACGC -+ -GGGGGGGGGGGGGGGGGGGGGGGGG@CCFGGGGGG+>FCGGGGGGEF?A9FGGGGGGGGGGGGGG8FGFGGFGGGGGGGGGGGG,BFFFGGGGDFFGEGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGCFFGGGGDFGEGGEGGGGGGGGGGGGGGGGGGGGGGGGFGGGGFCGGCE8FG?CGGGFFGFFCFFFGF7ECF=: -@HWI-M01378:140129:000000000-A7785:1:1114:9907:23323 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGFFGGGGGGGGGGGGGFGFGGGGGGGGGGGGGGGGGGGGGGGGGGGFGFGGGGGGGGGGGGGGGGGGGDCEGGGFGFCFFGGGGGGGGGGGFCFFEFGFGFFFFG?E>>DFGCCC69?AGF?FFFG>0)0:F7:C -@HWI-M01378:140129:000000000-A7785:1:1115:20594:2152 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATACTCACAGAAGTTCCAGGGCAGAGTCAC -+ -:FFGGG8F,@FGCFEFGG*<,6>B:,>,1D@EDE=5==,12*BE?B9CC:C=G>+<*:C;FG4(5++++5CC>52.3171;D>BB:?>? -@HWI-M01378:140129:000000000-A7785:1:1115:21004:5310 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCA -+ -GFGGGGGGGGGGGGGGFGGGGGFGGGGGDGGGGGFGGGGGGGGGGGFGGGGGGFGGGGGEGCE?FGGGCFGGGGGGGGGFCE9FGDFGGGCEGGGGGG9EBFAFGAAFGGCEFE8CFEGGG6?@FEC:FGFEGFGGGG,:ECC9FCCCGFGGEGGGGGGGBC5?EDGFFFF5)2*9?B -@HWI-M01378:140129:000000000-A7785:1:1115:3643:7099 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGACGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -FEFFGEFDGGGGGGGDGGGGGGGGGGA,@CFGGGGGGGGGGGGGGGGGGGGGGGGGGG<AGFF:)7E:0>?BG:7E:<)7>BBBFFFFB -@HWI-M01378:140129:000000000-A7785:1:1115:19291:10393 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTTCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGTAGTTCCAGGGCAGAGTCCCCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGFFFGDECFDDDFFGAFEFEGGFEGFDFEGFFFGGEE;A9FAEE,EFF+F:B=CGGGGGGGGG@FGGGGFG@FG:@>@D?77:D6?EGGFCEC8BCGE=EFF92;,4=<>EF<8F:E+2::9<.+3/31?7A@95)83)3)5+/;8:C7CD>BC?FF0:C:?F<:579@071(.77 -@HWI-M01378:140129:000000000-A7785:1:1115:26788:11790 1:N:0: TATAGCACGC -CTCCCTGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTCTGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAAGACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGC -+ -@FGGGCGGGC,>CFGGGGG?++:<<@F7=FGGFF@EEDF7:@6+@F?>F7CFFBFG14>13C>?G?F -@HWI-M01378:140129:000000000-A7785:1:1115:22293:14738 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGFGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCFGFGGGGGGGGGGGGGGGFEGGGGGGGGGGGGGGGFEFFGGGGGGGGGGGGGFFGGGGGGGGGFGGFGGFFEFFGGGFGGGEFFFFGFGG??>AGFGGFFGF:FFFGFFG?FB9FD>FBFFFF -@HWI-M01378:140129:000000000-A7785:1:1115:3156:15238 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGG9FFGGGGGGGGGGGGGGGGG@DGGGGGGGGCFGGGGGGGGGGGGGGGGGG9FGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGFGG?FGGFFEGGGGGGGGGGGFEGGFGFGGGGGGGGGGFEFCFCBFFGGGGGGFCAGGEEFGFGGCFGGGGFFFFF22CB@>AGGGGBFG?4>:?GFBGFF>(4.9?7:?FB -@HWI-M01378:140129:000000000-A7785:1:1115:27886:16559 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGG -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAFFGGGGGGGGGGGGGCFGGGGGGGGGGGGGGGGGCBCGGGGGGGGGG57C>CFGGFCFGGG*?EEGGFFFGFGDFGGFGCFGD?;CC>FEAGF@CGGFCCGEFFFFFEGGFF7GFGGGGGG:37@DECFGGGGGG7;ECFDECCEDEGEFGG>;;02>CGGGDD??7+;94;F;C;:<*2=:58.4>24C?@C4;FGGCGGFGFF6:56;CFFFFGGFGFFGFFFBFC82C -@HWI-M01378:140129:000000000-A7785:1:1115:15717:20410 1:N:0: TATAGCACGC -TCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATGCACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCTA -+ -GGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGF9FFGGGGGGGGGG?@CGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGDGGGGGGGGGGGGFGGGDGGGGGGGGEEEGGGGEGGGGGFEGGFGGGGGGGFGGFGGCFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFFGGFGGGFGGGG>D@FFAFFFFFFG*>F?BG:?>BFC8750<@9>DCEGCF+AEGEGGFCFGGFGGGGGDFCFGGGGGFBAEDF6241DF55??*::08CGC;FEFFGGC=D+@:8+=54B8(A:E=@GGEFF2AC6FDFCC,=CD*:CEDGFFG;;FGE6CGF -@HWI-M01378:140129:000000000-A7785:1:1116:21394:3317 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCCCAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACA -+ -GGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGEGGFGGGGFFEFFFGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGFFFGGGGGGFFFFFGGGGGDEGGGGGGGGGGFGGGGGECF7B8DCFCEFGDFGFCFGGG?CCFDFF<>FEGGGGGCCEGDFEDC?CEGFGGGEFFGFFGCGGD?FGF+==;DF65CFGGFCCB>;0C?CCFFBAFGFDA?E0(;6?G -@HWI-M01378:140129:000000000-A7785:1:1116:21781:3983 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGCGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGGGGGCEGGGGGGGGGGGGGGGGGGGGFGGEGFGDFFFGGGGGGGGCGGGGGGGGGGGGFFGGGFGGGGGGGGGGGGFFGFFGGFGGGGGFCGEFFFGDGGFFFAFFGGBFGFFF??F?>F?FBFFFFFFFFF? -@HWI-M01378:140129:000000000-A7785:1:1116:19367:5061 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEEFGGGGGG@FGGGGGGGGGGGGGGGGGGGGGGGGGFGGFEGGGGG5DEGGEDGGGGGFGFGGGGGGGGGGFFGE>;>D -@HWI-M01378:140129:000000000-A7785:1:1116:22704:5419 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGAAACATCC -+ -GGGGGGFGGGGFGGFFGGGGGGFFFFGGGGGGFGGCGGGGGGGGGGGGGGGGGGGFFGGGFGFGGFGGGGDGAGGGGGGGFFGFGGGGGGGGFGGGGGGFC6DEFFDGGGEGGGGGGGGGGGGGGGCFGG5FGGGGFAGC37GGGGFGFFF27?>F<2=08.(:F<:C -@HWI-M01378:140129:000000000-A7785:1:1116:3314:6852 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTACGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGC -+ -GGF8F8CDFD9F;1860>8?>A?GGF2):22:?6DB?G<@ -@HWI-M01378:140129:000000000-A7785:1:1116:12883:11398 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGEFEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCFGFGGDGCGGGGGGGGGGGGGGGGGGGGFFGEFGGFGGGGGGGGFFFFGFGGFF?DFGGGFFGF1F:?G?BG?FFFFFFBFFFGF -@HWI-M01378:140129:000000000-A7785:1:1116:4257:14374 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGCCACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGGGGGGGGGGGGGGGGGGGCFG7E8@GGE>FFGCGGGGGGGGGGF?F@FGCE=EGGCCGFFGCAGGGGG=DCFCCFDEFGGFGGGFFECE>546C79@C*)5@DGG9?G03BFFF>DF -@HWI-M01378:140129:000000000-A7785:1:1116:26580:20568 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATGCACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCT -+ -F@FFGGGGGGGGGGGGGGGGGGGGGGGGGGFFEFGGGFGGGFGFGGGGGGGEGGFGGGGGGGF,@,3@ -@HWI-M01378:140129:000000000-A7785:1:1117:15050:1908 1:N:0: TATAGCACGC -TCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCAGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCAC -+ -GGGGGGGGGGGGGGGGGFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDFFGGGGGGGGGGGGGGGGGGGGGFGGGDGGGGFGGGGGGGGGGFGGGGGGGCGDGE@FGGGGGGGGGGGGGGGGGGGFCFCFGFC8F?FGGFGGFGCEGEDGGGGFGGGFGGFFEFGGGGGGECF9EFGGCEEGD?FFEFCEC?CE69@@;F9C97ACCFD>+=1;A -@HWI-M01378:140129:000000000-A7785:1:1117:10756:3719 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGCGDGGEGGEFCGGGGCFFGGFGFGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGFFFFEFGG@CF9FFDGGEF?FGCCDFF?FFGFGF?GB?FFFGBFE?FFBFFBB?FF>1 -@HWI-M01378:140129:000000000-A7785:1:1117:24534:4247 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCTAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACCAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTCCCAGGGACGCATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGGGGGGGGGGGGFGGGGGGGGGGGGDFGGGGDGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGDGEGGGGGGGGGGDGGGGFCFGGGGGGGGGGCE8FCEGGGGFFCGGEGGGDGCGFGGC9CGFC*CFCF:FGCAFE<69=GCGG?:*7::;FFEGD<=33F:@G=?GFF3((/41C?>491>9?FF?3: -@HWI-M01378:140129:000000000-A7785:1:1117:13251:7519 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCCCCATTACCAGG -+ -@EFCGCFGGDFFFEEGGFEGCCFFDFGGGE@C8FGGG?EAEDFGFDFGGGGGGGGGFGGECFGFGFFGGGGFGGFFGGGFGFGGGFGCEDGFEBEFFGGFFGGGA?EAFFGGFFGGFEBCFFEGG@BFCC7@C>>:BEFEFF=DF,@<586?B@8?@:<@:5//7==C,>8>CCCFGGFGGGFFGFFGF9GFEGCD+245/:=FFE99*)8:?BGF???E -@HWI-M01378:140129:000000000-A7785:1:1117:14612:8918 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGG9EGGGGGGGGGGG@FGFGGGGGGGGGGGGGFGDGGGGGGGGGGGGGGGGGGGGGGGGGFFFGGGGGGGGGGGGGGCFGGGGDCEEGGGGGG=,ACFGG7DFGGFAF?>DC=FFGGGFGGFFFFGFFGFFFFFGFGBFGF?F:2CBDG0.32(8;F?BBGF -@HWI-M01378:140129:000000000-A7785:1:1117:2770:10016 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGDGGGGGGGFGGGGGGGGGGGGGGGGFGGGGGGGGF9DFGGCFGGFGGGGGGGFGGGFGFGGGGGGF9FGGGGGGGGGDGDGGGGGGGGGGGGDGDGFCGGEGGGG>FGGGFGGGGGGEGGGG?ECCGDGGGCFG7;BEGCFGFEDFGGFFGFEGDE@DFFGGFGB>032>BBBFFC -@HWI-M01378:140129:000000000-A7785:1:1117:7058:13477 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGCAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGFGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDFGFGGGCEEGG:CFFFEGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFEDGGGDC9FGFFGFFGDEFGGGGGGGFF?FF>EGF@FFF>BF@9?07?FF -@HWI-M01378:140129:000000000-A7785:1:1117:20535:14960 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGDGGGGGGGFGGGGGGGGGGGGGGCFGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGCFGFGGGGGGGGGGFFGFFGGFGFGGGGFGFFFFGC@FFFFBFGFGFBGFFFB?F>:FBFBFFF>:::BGF -@HWI-M01378:140129:000000000-A7785:1:1117:12925:16162 1:N:0: TATAGCACGC -TCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCC -+ -FGGGGGGFGGFGGFGGGGGGGGGGGGGGGGGFGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGFGGGGFGGGCGGFGGGGGGGGGGGGGGGFGGFGGEGGGGFGFGGG6DEGFFGCFGGGG=B7F=FBFDFGGGFEFFCDFG9F=CCFGFGA@CFFGDGDE7>CFGGGGG6,,6>C1*1D8,4<587@,,/7=C7*AFDFFCDA:E?0FF:FF>G -@HWI-M01378:140129:000000000-A7785:1:1118:8691:1931 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGFCFGFFGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGFFGDFFGGGGGGGECCGCEFCFFE6?FGGGGGGGDFCCGGFD@CF587C@GFC+1+?5DFF@GE -@HWI-M01378:140129:000000000-A7785:1:1118:23298:2242 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAAAACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGG -+ -DFGGGGGGGFFGGGG9FGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGCGGGGGGGGFGGGGGGGGGGGGGGGGGG9@FGGGGGGGGGGGFGGGGGGGGGCC=7C><3C -@HWI-M01378:140129:000000000-A7785:1:1118:23073:6508 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTGTGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDFGDFFFGGFGGGGGGGGGGGGGGGGGGGGFGGGGGGFGFFGGGGGGGGFGFFGGFGGGGGGGGFFFDFFGGF=?C?F>F051FFF:GF -@HWI-M01378:140129:000000000-A7785:1:1118:6493:13149 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCCGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCGCTAGCTATGCTATGCATTGGGTGCGCCAGGCCCTCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGAACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGFGGGGGGGGGGGGGGGGFGGGGGGGG?FCFDFGCFGC3>DGGGGDGEF:?FAGGAC?A@FFFAFEBFF1?GF?;:FBF()(.(8?FF -@HWI-M01378:140129:000000000-A7785:1:1118:9182:16529 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFEGEFGGGFGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGEGGGGGGGGGGGGGGGGGCFFF?FGGGFGGGGGGGGGGGGGGGFGFGGGGGGGGGGGGFF?FC?@GGF>CF?@CCFGCGGGGGGGGFFEAGFFGGGGGGGGEFFDGC?GFGBAFGGGFFEB?@FFGGGFFGFBF?0>>?G -@HWI-M01378:140129:000000000-A7785:1:1118:19019:20700 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGC -+ -GFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFFGCGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGFDGGGGGGGGGGGGGGGGGGGGGEGFGFGGGGGGGGCFAFEFGGFFFGGGGGGDFFDFEFC9C?FFGGGAFGF27?FGF?GFF(4;B -@HWI-M01378:140129:000000000-A7785:1:1118:24760:20968 1:N:0: AATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GFGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGFGGGGGGEFFCC?,EFFGGFGDCFGGGCGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGEGGGGCGGGGGGGGFFFC@FFGCFGGC7CECFGGGGGDGGCFDFDFCGGDFECGGGGGFCEFFG@GDCFGFGGFF7?FC>FDD<7BFGGA?EF:FF<<::C6@06273(438CB -@HWI-M01378:140129:000000000-A7785:1:1118:12797:21177 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAGCACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFAFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEEGGGGGGGGGGGGGGGGGGGGGGFFGGGGGFGGGGGGGGGGGGGGGGDE=CEFGGGGGFCFGGFGGFGGFGFFGE3CFFGGGGGF3,=E?ECAGF)97?GAFGFFF??F?:F?FBFFD>B??FC -@HWI-M01378:140129:000000000-A7785:1:1119:12200:9232 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGFGFGGGGGGGGGGGGGGGGGFGGGGDGGGGFFFFGG7DFFGFFGGGGGGGGGGFDGGGGG:CGGGGECEFFFGFGGGGGG?FECFFGF3<<@FGGCGGFD)6?F84CF4A?C?B@FGGGGGGGFFGGGGGFGGGGGEGGGGGGGGFFFFEFGGGGGGEG*=CEC?CBCFGGFFGGGGGGG?FFFGFFGFEGGFG9>FDADFFGCGGF>FA7:*:::??FF62CF?G<>600>>?FFBF? -@HWI-M01378:140129:000000000-A7785:1:1119:19946:11946 1:N:0: TATAGCACGC -GTGGCCAGGGCCACCCTAGGCCTCTGGGGTCCAATGCCCAACAACCCCCGGGCCCTCCCCGGGCTCCGTCTGAGAGGGTCCCAGGGACGTAGGGGGGCGCCAGTTCTTCCCTGGGGTCCTGGCATTGTTGTCACAATGTGACAACTGGTTCGACCCCTTGGGCCA -+ -FGF=:F:EGGGGG:=AFDBAFF@:73,><=F<3=FCE<3+3+511***/2:CFFF+,;7:CG52;A<+CF7C::,@CE8@FGFCFFCFGG7EDCGGFGG?6>FFC?F,4/2>,<:+9*;C?F;F -@HWI-M01378:140129:000000000-A7785:1:1119:25841:13619 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCG -+ -EGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGFCG:EGGGFGGGGGGGDFGGGGGGGGGGGGGGGGDGGGFCG?7DFGGGGGGGGGGGFF?FFGCFGFGCFCEEFFGFEDF@GCCD++5C;9*/4?FF? -@HWI-M01378:140129:000000000-A7785:1:1119:20076:14454 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGFEFGFGFGGGGGGEFDFFEEGFFFAFGGGB?GB?FFBFFFGBF>FFFFFB -@HWI-M01378:140129:000000000-A7785:1:1119:26820:14628 1:N:0: TATAGCACGC -AGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCTACATGGAGCTGAGCAGCCTGAGATCTGAAGACACGGCTGTGTATTACTGTGCGAGAGAGCAGTGGCTGGTACTTTTAACCTTTGACTACTGGGGCCAGGGAACCCTGGTCACCGTCTCCTCAGGTAGACCAAGTCTCTGCTACCGTATATAGCACGC -+ -GGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGEGGGGGGGGGGGGEGGGFGGGGGGFFGGGFGFG<1B>B?:?FF -@HWI-M01378:140129:000000000-A7785:1:1119:21229:17686 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAAAACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCC -+ -DFGGGGGGG8FFGGGEGGGGGGGGGGGGGGGG,BFGFGGFGEGGCEGG?GGGGGC,+3CGF=?CC@AFFE@GGFGGGGGGGGFF?FGFGGF2?AFGGG9,C?:>1(24>FFF>>>E;FFFFF -@HWI-M01378:140129:000000000-A7785:1:1119:6516:18986 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGDGGGGGGGGDEGGGGGGGGGGGGGGGGGGGBFGGGGGFFGFAGF@FGGGGGGDEFFFGCCDFDFBFGGFFFG04:BFGFDGFF>09BBBB?BF? -@HWI-M01378:140129:000000000-A7785:1:1119:11518:19811 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAAAGGTAACACAA -+ -GGGGGDAFFFCGFDD,<=CF@,8??F,,CEFFGFB8ADGGEGGEEC?=+6++@C+5*3DD6@@@FG7@B>?26:>D@><8=?F?,B)*78?F,,5;92:F7EFFGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGF=?CFFGFFGGECGGFCGGGF??FFEG*6,88/:E4:45>?FB?G7?A?>1175((48>5? -@HWI-M01378:140129:000000000-A7785:1:2101:25521:14328 1:N:0: TATAGCACGC -CTCCCAGGTCCAACTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCCCAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFFGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFF9FCGCGGGGGDGGGGGGGGGGGGGGGGCG7>FFGGG9D@FFGGGGDGGFGC?CDGDDGGGGFFGGGGGCFGGGGGFFGEFGFFGFGGCCCC6@()5)+2-593(32(78? -@HWI-M01378:140129:000000000-A7785:1:2101:6147:17939 1:N:0: TATAGTACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATC -+ -GGGGGCGFFGGGGGGGGGGFGGFFFGGGGGGGCFGFGFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFFGGFGGGGGEGGGGGGGGG7CEFFFCC,@FFF;@8@5;FF6,>EGGGGGG>55<8*,01>;>E7412@:FGFCF@6@F6@C<@GGGCGFFD121:*.BDA)4A=:CB28;5(<3:DFF -@HWI-M01378:140129:000000000-A7785:1:2101:7510:19246 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGG -+ -GGGGGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGFGGGGGGCCCF4FCC7AFF?@F4;CFGGGGGG;?2F78CGGGGDC+;@EF=:?FF74CGFB?)9CFFA?G3,70?FFFC -@HWI-M01378:140129:000000000-A7785:1:2101:9133:23948 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGCTCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTACAGGGCAGAGTCACCATTACCAGG -+ -GGGFGFGFGGGGGAFBF=FFGFCGGGGF@EFAABFGGGGFGGGFGCFCECEGGGFGG@FGGCEGGGFF>E,DF;F61>6:,,57*591=CC?EFG;7=EC<@C8F7CCFF8+)/2*6C@+CCECCF04>*)?*).8>?FC@27C -@HWI-M01378:140129:000000000-A7785:1:2102:23669:4942 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGDGGGGGGFG?FGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGG?CFFFFGGGGGGGGGGGFFGGFGGGGGGFCBFFFGFGGFFFFGGGFFFGD4D?FGFFC::;99E0?B?FGF -@HWI-M01378:140129:000000000-A7785:1:2102:18023:6868 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCTCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGFGGGGGGGGGGGGGGGGGGGG,FGGGGGGGGGGGGGGGGGG@FGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFFGFGCGGGGFGGGGGGGGGGGGGGGGGGGGGGGGFFGGFFGFGGGGGGGGGGGGGGFGFFGGGGDGGGGGGGCBFGGGGGGGGGGGGGC.88CFGGGGGGGGEAFFG4B?FFEFFGGGF:C5;6)4:11>F? -@HWI-M01378:140129:000000000-A7785:1:2102:20537:10795 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGCCFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGDFGGFGGGGGGGGGFFGGFGGGGGGGGFFFFGFGGFFFFGGGGBBGGFGFFC,4;1>>;BFFBBFFGF -@HWI-M01378:140129:000000000-A7785:1:2102:11278:14783 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCCT -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGGGGGGGFFFFFEGGFFFFGGGGFFGGFG?FG>?C?FFFFFFF?:FFB -@HWI-M01378:140129:000000000-A7785:1:2102:15247:16145 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACCAGGGACACATCCGCGAGCACAGCC -+ -DGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGFGGGGGGGGGGGGC?FGFGFFCGEGGGGGGFGGGGFGGGGGGFGGGGGGGGGF5?EGDGGFGFFFCFGGFGFE=FF99@FGFFGGFGFFCCGGGEFFF5)?EF?BFF>EGFFGD096<624F:>B>BE9?<<>C diff --git a/clipper/t/in/join/test-ov-b.2.fq b/clipper/t/in/join/test-ov-b.2.fq deleted file mode 100644 index 7afeec4..0000000 --- a/clipper/t/in/join/test-ov-b.2.fq +++ /dev/null @@ -1,400 +0,0 @@ -@HWI-M01378:140129:000000000-A7785:1:1112:20058:10262 3:N:0: TATAGCACGC -GGAAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTTAGCGTTGGTCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCGTGGCGCACCCAATGCATAG -+ -GF8EGGGCE8=:6FFGGGD83=DDGFGGCDDCD:?:EEC+<@*,9CDACFF7;++,@?ECDCDGCCB+*4988AF?FG:699>A75:@8BFDDGGFFFGGFGFGGFGFFFFFFGEFFFF55EGD;51;>;AEBGGFF:?>FA)<7?FDB@>A7C>?BBCACFGGG68AG>CGFCFFG=FAGFFGEFFFCDCEGC9FF?3=EGBDE38???G<:GACAGF?CB96@C*.(<7:798E? -@HWI-M01378:140129:000000000-A7785:1:1112:7453:12346 3:N:0: TATAGCACGC -GTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCA -+ -GGGGGGGGFFF;DCDBFGGGGGGGGGGGGGGGGGFGGEGGGFFFGFFGGG:CGFGGGFGD>FFCFGFFFG>FGFGCFC=4AGFFGC>6B5DCEED0:664()*7D>5,24?F -@HWI-M01378:140129:000000000-A7785:1:1112:24376:13941 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCAT -+ -GGGGGFG9=8DFFFGGDEGGFFGGFDFGFGDGCADAFGGCD@FGDCCFFGGFGFGCGFGCEC>CFG6B>FGFD9FFFG2*3A9FE3BFFADDDCDB5;?3=)A1>:B?F18?2<+=?AF -@HWI-M01378:140129:000000000-A7785:1:1112:10620:14798 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCTCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCA -+ -CEGGGFGA@=E:@9DFF,=@,=EFEGGGDFGGC,9CE8CDAEFGFCFGGGGFF8+4@>:>5@@D>GFAAF51=A469*)*3CFFFBFFFFGC5CC@E02F6;EFGCEF -@HWI-M01378:140129:000000000-A7785:1:1112:26422:14876 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAAT -+ -GGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGFGGGFGGGGGGFGGFGFCGGFGFGGGFGGFFDFDFFFCCCFGFG?FGD6AFFFG@FFCFGGGGGF>?15;);1C>3:?? -@HWI-M01378:140129:000000000-A7785:1:1112:17229:16419 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGFFGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGFGGGFGGFGGCCGFGFGGGFGGDGGGGGFFFGGFGFFGFGFFFGFFGFFFFFCDEEGF:;@F6BGFGGFF266AFDFCFA?40D7CFFFG:EF -@HWI-M01378:140129:000000000-A7785:1:1112:9440:21170 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GFFGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGFFGGGGGGFGG9@:FGGFGFG?C>GDEGFGGGFFCGFFGFGGFGFFFGFFFEAFFFCGD57>A?F3(.A9GDB?F?:F>BC??BFF2FBAFDDG>A?2(C3))9:*4,C?FFF3C? -@HWI-M01378:140129:000000000-A7785:1:1112:13154:23703 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCTACTCAAGCCTTTGTCCGGGGGC -+ -GGGGF;,3EDE:,AEACE=DFCFGGFCE8DADFGGCFEFF,@*@7C:ADFEFGAGGGB@DFFG>F?FFFF>@C+5DAG=FFFFFF*+===*?=EDF -@HWI-M01378:140129:000000000-A7785:1:1113:9219:5995 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAGGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCAAGAAGCCTTGCA -+ -GGGF9=DADADAFFFFF,ADCGFCGGGGGC:E8@EGGFC9CFFGFFGGCCEFGGFGGFGG5C?FCG6=A59FGFGFA>BFFG>FGFFFACC45CDB;11=0)=9@C8??:5?24D6:96<?72*:)43:FA4A*9*44:B13@7C? -@HWI-M01378:140129:000000000-A7785:1:1113:13463:7044 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCA -+ -GGGGGGGGGGGGGGGGGGGGGG=DFCGGGGGGGGGGGGGGGGFGGFGGCGGFGGFFGEGGBFGGGGFF5CFFF@FFFG4AFGFFGFA:CFDD5ECEEFFFFDG>FGFF -@HWI-M01378:140129:000000000-A7785:1:1113:9754:8982 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGGATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCAT -+ -GCFGGDF9FGGGGGGFGGGGGDGGGGFFAFFD,EF8FGGFFDFGGFGGGGGFGGFGGFGGFFFDF5>AFC7BFBGC>D4AAGFFGF>FFFGG5E:B>;1;0;56@E??FF0<BFFGFFGFF6BFGGGGGFEFF@D>EFFGFFF?:GFFFFF<6:=?FBF:F45C?4>FA)>>AFBAGG27?0:8).762403:(4C7F< -@HWI-M01378:140129:000000000-A7785:1:1113:18729:16203 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCACTGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGGGGGGFFDGFCFGGGGG?FGGGGGGGGGFFGGGGGGFGGFGGGFF?CFFGGEGGFFGGGDAAFFGFEBFGFG@FFF>4:A:FFFGDEGGDBF0,=8E1>C?F(,3<8EE3=@FEFGCD;,688,6+@336A8D3@C,5,2@,?C;;C;9,,=CF -@HWI-M01378:140129:000000000-A7785:1:1113:14732:20813 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGGGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCCCCCAATGCATAGCATAGCTAGTGACGGTGTATCCAGAAGCCTT -+ -GGFFGGGGFGGFGFGGGCGGFGGGFGGGGGGGGGFGGGGGGDFGGFGGGGGFGGFGGEGEAGCD:CFF6C*:=:7F>C@FAFFFG4688BCDCG:>5;18;5A,7E;9EG=F95BDFFFDGFGFGGFGBFFGFFGF=@8A?DGE3(67:6EGFFFF>E44<4@AF2.6<<=)6:DAG?,*)4<6DC<CC=7?9@*C>164;D640*3CAFG*/AB/5DE5<90?G(23*,:?)82(,3)6A4@A?AAFAB -@HWI-M01378:140129:000000000-A7785:1:1114:7126:18810 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCACTGCATAGCATAGCTAGTGAAGGTGT -+ -DFGGDGFGFAFGGGGGGGG8DFCDFDBFFGGFGGGGFGGFGGFGFFCFGGABFA**8D=9CEFBFFG4?7@=+:BCCC*94;DEEFF0(8?)-A04C24D -@HWI-M01378:140129:000000000-A7785:1:1114:12409:19488 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGGCTGCTGCCACCAAAAAGAGGATCCTCCAGGTCCAGTCCAAGGTG -+ -GGDFFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGGGGFGFEGGFGGFGGGGGFFFGGF9>FF2 -@HWI-M01378:140129:000000000-A7785:1:1114:9907:23323 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATATCTAGTGAAGGTGTATCAAGA -+ -GGGGGGGGGCFGGGCC?GGFGGFGGCDGCED7A:DFGGGGGFFCFFGGGGGFGGFGCDGGFGFGFGF6A*9FFFGF4*0>AGFFGBEFFFG4CEC>B@:;0(*4EEBBF?F6:23-/5B<)*:>FA3,38D,,=@,DE?==:++3@DAFA+;FDFDACGGFA,8,@*13**5+=;+B67;@? -@HWI-M01378:140129:000000000-A7785:1:1115:22303:4248 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCA -+ -FGGGFAEC>FGGGGGGFDFDFFECDGGFGG@DFGDFGGGGFFFGGFGGFGGFFGFGGFGGDGGGGGAFFGGFGBFGEG:>AGFFFFC?A+:CDE<>;0CDFFDBCEEF4E5>FFAE98CGDGC6(7F0(((,):7?B?:7)6CE>9CGGGF9BFC*AE=*CED();CFFFBECFC -@HWI-M01378:140129:000000000-A7785:1:1115:19291:10393 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTT -+ -GGGGGGGFGGG?FGGGGGGGGFGFG?FF8AGGFFGGC=FFGGFGGFFGFGDEC,0EFEEDFGGG>FF>AFGAGFFGEG=FFGFFGF=EFFDDGE3;06C;;1?(9C>?0?3FAA?2FFAFFFGFBG0.:34494*48??7>? -@HWI-M01378:140129:000000000-A7785:1:1115:26788:11790 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGATGATCGATCCCATCCACTCAAGCCTCTGTC -+ -EF=>;>=8=E9@8;BDB9DD@?FFFGCDFG,?E9DF:D8=:=*@CAC:<+2*=5:EE>*9*=<=*39>0;F+CB496@5AAGFF,;=7@ -@HWI-M01378:140129:000000000-A7785:1:1115:22293:14738 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAG -+ -GGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGF7D=FEGGGGFFGFGFFGGEFFBGGEGGEGGGGGFFFGGFGFFF4>D>6CFFGFFFFFGGGGGFFF=276<9GGFF(407>DGAFBFFAGAB?AA::<<>:DBCDDG7CC?+=FCGFEDFD?F@FFGFFGFCECFGGDGGFF?56=3;;GDCFGFFFGGFFBFGFFBFFGFFG**1=F<):5)(,:=4(1((1*;11:?DAAG)0)9<27>2=4:::26>7FF>A?F -@HWI-M01378:140129:000000000-A7785:1:1115:22345:18846 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAA -+ -FGGGGGGGGGGGGFBFGGFGGGCFDDFGGGGGGGGGGGGGGGFGGFGGFFF7CGCFF*CGDGGGGGFFFGGFGFFGEGFFAFFFGF6EFFG:5CC>>DA03((-CEEFF -@HWI-M01378:140129:000000000-A7785:1:1115:13309:19306 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGG -+ -GGGGGGGGGFGGGGGGGGGGGGFEGFGGGGGFDFGCCFGGAFFCFFC:CGGFFGFGGFGGEFDC7?FA*C*=C@4CA9);@C5*=AEF+B?DGDD -@HWI-M01378:140129:000000000-A7785:1:1115:24515:20126 3:N:0: TATAGCACGC -GTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCA -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGFGGGGGGGGGGFGGFFGFFCEFC@GGFGGAFFGGGFFFGGFF@ACBGFFFGAFFFE0?BFFA44@A30-4?6>FG?G04>>24@ -@HWI-M01378:140129:000000000-A7785:1:1115:15717:20410 3:N:0: TATAGCACGC -GCTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGCATCCAGAAGCCTT -+ -G8EFGGFGGCGGGGGGGGGGGGGGGGCFFGGGGGG8DFGGGGFGGAFGFGGCFGFGGAG>AGGGGGFFFGGFGFFG6FFFFGFFGFF:*-)2.>C?(2)-66?*57>F73F -@HWI-M01378:140129:000000000-A7785:1:1115:20074:21744 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGCACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCTCATCCACTCACGCCTTTGTCCGGGGGCCTGGCTCACCCAATGCATAGCATAGC -+ -G?EDC9,9@6E88;>D9F=E@F,=E8DFGD:9:9F82E,=EGFCC;C9B9:*=96,D*@DEG>F+*+=+<73<.;>AD:*9:?6>9*9F8DGCEG@1;*,8(6)2:A<(8>F4>9)74BA2D -@HWI-M01378:140129:000000000-A7785:1:1115:10327:25119 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGGACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTT -+ -GGFFGFCFGFGGGG,=DFDGGGGGGFGGECDEFFGGFGGFGGFGG?EE<7E5BAACDEGGD>B823B+;**=15A7/0-?AEFFF -@HWI-M01378:140129:000000000-A7785:1:1116:21394:3317 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCACCCCCTCAAGCCTTTGTCCGGGGCCCTG -+ -GFFA>9ECF89BEE9AFFGGGGG,,DBFGFGGFGCFD====FFC7FDG?CF7+AF6C5@C*<FGF),84:@:DDG5)6A?? -@HWI-M01378:140129:000000000-A7785:1:1116:21781:3983 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCGCCCAATGCAT -+ -GGGGGGGFFGGGGGFGGGGGGGEFGGGGCE@=CGGGGGFEFFFGGFGGGGGFGGAGGEGGFGGGCDACFGGFGFGGACBBAGFFGECFFF086::FDE?F?02644C7:49<)*64?24>FA:FFGF -@HWI-M01378:140129:000000000-A7785:1:1116:22704:5419 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGC -+ -GGGFGGGCFGGG;EEGGGG?EC?FGFGF,=FFGGGFEBFFC=FFGFFDFGF7@:+CFDGGFGGGGFF@6;CB,=ACF4BF4??>?6;FFFGDD:>@EFD316E58CFF(34F -@HWI-M01378:140129:000000000-A7785:1:1116:3314:6852 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCCATCAAGCTTTTGTCCGGGGGTCTGGCGCACCCA -+ -GGCFGDFFGC>8=EGGCFFD@F?=FCCFEDD9=C7@DF1CCFFFDFGCFEGFGG?FC?EC5*+?2;BC0*7:5>7,1;7>69*;C6;6>F*2)/)(:53)61EB>C@CDFCFFFGFCFDCGFGF4*AFFGF4CCFG))4=6BF)2;6*)0:<AC -@HWI-M01378:140129:000000000-A7785:1:1116:21249:16016 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGC -+ -GGGGGGGGGGGGGGGGFFFFF?DFGGFF8EFGGGGGGGD@7FFGGFGGGGGFFFFGGEGGEGGD>FFEFGFFGFFGFGFFFGFAFE=CEFGGGGD>>?;58(C5:E2<<:0C -@HWI-M01378:140129:000000000-A7785:1:1116:26580:20568 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGG -+ -GGFGGGDFGGDCFFFGFFGFGGDGGGGFFFGG8EFDFAFGG?6CCFC:C78DFF=FFCBDDFFFGBFFGFFC@;FEFCGDG -@HWI-M01378:140129:000000000-A7785:1:1117:15050:1908 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCTGGGGGCCTGGCGC -+ -GGGFCGGGGGGGGGFFGGGGGGFEGGGGFF:=DGGGGGGFGGBF?FGGFGGEFCFFC>E***2?CGF@CDCFD4*7AGF=*=AFG>*2*=:CFE;@>;1>@9E -@HWI-M01378:140129:000000000-A7785:1:1117:15528:1981 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTAGTGTTACCATTGCCAGCGTTCATCCATCCCATCCACTCACGCCTTTGTCCGGGGGC -+ -8FFG,@,ED39F,,,73@F8D68,6,@,6@:D,6=DGGG+,++2=55BFFCAE5F>8@<;9;D52*=FF***+*128DCEF -@HWI-M01378:140129:000000000-A7785:1:1117:10756:3719 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTG -+ -GGGGGGGGGGGGGGFGGGGGGGGGGGGGFGGGGG7FGGGFGGFFGFGGFGGFGGFGGFGDDDFFFGFEBFGFGDFG?GFFAFFFGFFG?FGDDGEBFF?>D>EBGGB?AA?2::CBD)*35D==*CFFD8>@EFCDGE>9(,6569GF87521((3.4?-:A*28@C -@HWI-M01378:140129:000000000-A7785:1:1117:14612:8918 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCA -+ -GGGGGCFGGGGGGGFCGGGGGGGGGDGFFGFFGDFFCGCFC?D@FFGGAGF@FFACGFGE5>FFFFFA8FFFG>FC*?5@FGAF7>;@CFG7CG:6@DF>?@EBGG>? -@HWI-M01378:140129:000000000-A7785:1:1117:2770:10016 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCCTAGCT -+ -FGGGGGFFGGDGGEFGGGGGGG,DGGFGEGFFGGGGGGGFGFFGGFGGFD7=FGFCCBED>GGFF598=DFFD>FCCGBFFGFFGFEGEFCGFA736)*42CA -@HWI-M01378:140129:000000000-A7785:1:1117:7058:13477 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTGCCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGC -+ -GGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAFGGFGGFGGFGGFGGEGGFGGBGE>CCFFFFCCGGFFB4;69):AFFFGF=GEFDF;;FF6E0CDDAF?2><4<6>433C:3?G?F -@HWI-M01378:140129:000000000-A7785:1:1117:20535:14960 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFGGFGGFGGFGGFGGFGFFGGFFGFFFGFFGCFGFGDFFGFFGFFGFFGCCE3@B<=>?98:EGF?07?GFBFBFFFFBGAFFB9DF>4?>FFFFFG6<2*4(4E2:? -@HWI-M01378:140129:000000000-A7785:1:1117:12925:16162 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTTAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATA -+ -GGGGGGGGGGF8DDBFGGGGGGFF?8EGGFFFAEEFGGGF:?FGGFFGF?BA7+=C759AA9CCFGFFC*;9D>F?*3:69FFAFFFCE=C7?E5>;61)(,*6ED>1(4:GFAF -@HWI-M01378:140129:000000000-A7785:1:1117:16205:24882 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGGCTGCTGCCACCAAAAAGAGGATCCTCCAGGTCCAGTC -+ -FCFFGGFFGGFGCGGGGG6DEF8FFGGGGGE==?6=DD851+;4?F,AFDGFFD*@DCGFFGGFA>A56? -@HWI-M01378:140129:000000000-A7785:1:1118:9968:1647 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCATCGTTGATCCATCCCCTCCACTCACTCCTTTGTCC -+ -8F>D=EFADAFDA=A,9D+8DCD=@8,73D,6,,2=+8==CDFGG<,DEFG?A -@HWI-M01378:140129:000000000-A7785:1:1118:9715:1754 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGG -+ -GGGCCEFGGCFG=8DFGFDGGG?DFGGFGGD=ECFFGFGFGGFDCFGGAGG@FFB79*CA85BFC7+:AA*318C745>)6;?3:9E5):?0? -@HWI-M01378:140129:000000000-A7785:1:1118:8691:1931 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAA -+ -FGGGCGGFGDFFDGGFFGGGF8=DFGGFAAEGGAD8=2@7==FDGFFC9FGCGF?,;5CB5?B+:9C2?GE*BCF4D(2(,=BBE:?B -@HWI-M01378:140129:000000000-A7785:1:1118:23298:2242 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCC -+ -ECF;>CCDEGGFDGCD,C?FD6,=DD,=,@FDDEFDFGDFGGF=?*@<9CEEG?89A**0)*3?8D67>A -@HWI-M01378:140129:000000000-A7785:1:1118:23073:6508 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCACAGCTAGTGAAGGTGTATCCAAAAGCCTTGC -+ -GGGFGGGGGGGGGGEFGGGGGFFGGGGGGGGGGGFGGGGFGGFFGFGGFGGAFFFGGFGFFGFFGGFFFFGFGFFGFGFFFGFFGFEGEFCDGED>@F;AFBGEFGFFFB?GDA@2@2?::FB4?FFFF>+(,?AFF<>*6:2(7?F0@ -@HWI-M01378:140129:000000000-A7785:1:1118:21171:9133 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATACTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGGGGGGGGGGGGFCFFGGGGGGGGGGGGGFGGGGFGGFGGFGGFGGFGFFGGFGFFGFFGGFFFAGFFFFGFGFFFGFFGFFGFFGGGDFD6?FFFB5)78?BFF?GAAFFFFFAAF9>?72@FAFFFFFFFFGGA:BBB?G:?> -@HWI-M01378:140129:000000000-A7785:1:1118:18189:10068 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTT -+ -GGGGGGGGGFGGGGGGGGGGFFGGGGDFGGGGGGFGFFGFGGFGGFGGFGGFGFFFGFGFAFFFCGFFFFGFGFFGFGFFFGFFGFFCCFGDGDDE>F?FF6EEFG?FFFBFAA4)<<6<34.:?--9;>G4(92:ABF7<7:?<7C -@HWI-M01378:140129:000000000-A7785:1:1118:9717:10455 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTACCCAGAAGCCTTGCA -+ -GGGCEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGFGGFGFEGFFGGFGFFGGFGD=FFFGGFFFFGFGFFGFGFFFGFFGBFGFFG:?CD>@<7F<0=>DGFF?F>GFF?7FDFA>69A?>ABGAEBBF))-465(4??BFG:C? -@HWI-M01378:140129:000000000-A7785:1:1118:6493:13149 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGAGGGCCTGGCGCACCCAATGCATAGCATAGCTAGCGAAGGTGTATCCAGAAGCCTTG -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGDFGGGGFGGFGGFGGFGGFGFFGGFGFFGBFGGFEF5CFGFFGFGFFFGFFG=EGFFGGDG4B=;@F;6EDFGF@<@ECDFFDFGGF,@6E=+=,==ECF9F?FC9*7@BFGA88<275@9)C9@F5+9F5511)3;*;))*4-?F@*2/=CCC53;>F -@HWI-M01378:140129:000000000-A7785:1:1118:21261:19014 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -FFGGGGGGGDGGGGGGGGGGGGGGFGGGGGGGFGBFGDCFGGFGGFGFFGGDFFFFFGCG>FGEGB=F9>FDEFGF6CDGG33:DD>@FGDFGBBF7:CABF>FDDFGF?DFGFGGGGGEFFCGGDFGGFGDEFCCFGFGFFGG>C>95BFGGF;AAFFG=FGFGDE4EFFF=EGCADDCE5=:615?BGFDGFF??(04)/.BFGGFFFFGFGFFFEFFB4C@FGE=DF -@HWI-M01378:140129:000000000-A7785:1:1118:24760:20968 3:N:0: AATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTTC -+ -GFGGGGGGGGGGGGGGGGGGG?DDFFFG:AFCGCF:DFGF7=6FGFGGFGFCFFFFGFG>@GFFGGFFFAFFFBFG*0<@AGFFGE4BCCC54CABFFDFF0=;BGFFGGFFFFGFGFFGFGFFFGFFGFFGFFD44CAABF?FF0E@DE?:??>GFF=)9AGF>0487(::C -@HWI-M01378:140129:000000000-A7785:1:1119:12200:9232 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCACGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATCGCTAGTGAAGGTGTATCCA -+ -GGGGGGGGGGGGGGGGGFGGGGCEGGGGGFC+@FFCFGGG8FFEG?FFFGG+:@96EDGG5@CFFGFFFDCFGF4?EGFA9DFFGFCFFF57?C5;A01.=:GFFGFFFF:FAFD)8:9)(/.3;<4BC2C?:CAAFAF -@HWI-M01378:140129:000000000-A7785:1:1119:25522:9543 3:N:0: TATAGCACGC -GATAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCTGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGG -+ -D,FCE;,=DF8@:5E99E1,@68DDF9EFDFFFDGCACCFCGFGFCEAF@EFGF7CCDCD5*;FFGFBFD>AFDFGED2*.>@FGFFFF85CC5C;)(/:?0C1@E.(48?G2):2>>4).*463AA6F:*:FC7=FGGC5F4C30:D:;:D5A3C -@HWI-M01378:140129:000000000-A7785:1:1119:26527:12673 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGGCTGCTGCCACCAAAAAGAGGATCCTCCAGGTCCAGTCCATGGAG -+ -FGGGGGGFGGGFGGGEDE8FGG8DGFFCCGGGGGDEGG7C76*@=AEGGGFFGA>CG6EF5CD66C>AC;FA@*/*) -@HWI-M01378:140129:000000000-A7785:1:1119:25841:13619 3:N:0: TATAGCACGC -GTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGG -+ -6FCFGGG=BDFGA,,@F8?8D8DGGFGGFGGG8:DGGFEGGGFGGFGGFGFFGFFGC9C7FCFFFCCF*;C9EBA==FEFFGF48:9:=59CD -@HWI-M01378:140129:000000000-A7785:1:1119:20076:14454 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGGFGFGFFGGFGGFGGFFGFFFGGAFDFGFFDFFGFFGFFFFFGGGGGFEFFFFFEBEGFFBF?CAFGBFF>>BGFD7)69EBD5@FFFBCBAC7724*FCE6C*=CDGCC9>??FD6?17C -@HWI-M01378:140129:000000000-A7785:1:1119:6516:18986 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGGGGGGGGFGGGGGGGGGDFGGGGGGGGGGGGGGGGGFGGFGGGGGFGFFGGBGGFGGFFGFFFGGFGFFGFGBFEGFFGFCFFFDGGGGF>DFFF@G9FEEFF<7FFF>AFFBF7G>A>CE -@HWI-M01378:140129:000000000-A7785:1:2101:10492:6392 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATCTTTCGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAACCCTTTGTCCGGGGGCCTGGCG -+ -FBEFGGFGGFGFGG9AFF8DFGFGGGGDFFGF,2=,6E=+@D?77EGAFDD9DCFCFDE7AF7CC*++0;9BF4CC+*)**6:CC)0=B+:/:ED33;03AC -@HWI-M01378:140129:000000000-A7785:1:2101:21110:9989 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTCTCCGGGGGCCTGGCGCACCC -+ -GFGFDGGGGGFE8;FFGGGF8DDFGF=ECD,+CFGFGGGGGFAGGFGGFGF+BD?DC*:DB@<=:7188C*=B@4>3ABA4D?C<>*2=:CDECD5:0(95)212CB -@HWI-M01378:140129:000000000-A7785:1:2101:25521:14328 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGC -+ -GGG,EFGGGD;DDFFGGGGGGGFGGGGGGGGGGGGGGEGCEGFGGFGGGGGFFF5DF5CD>GF>FD@9CF5BG*7>ADFF>FFFFF=GGC7DGEDF>70CDG8;DEGCFF899=B86,1==;FEA@9A=2@EGDGGGBFG?9CC+71=;?6D>4@AFF>+3?=5**1>A7DCGB49F4*5**3;C77CC3>;8=5)*2:;FF -@HWI-M01378:140129:000000000-A7785:1:2101:7510:19246 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCACGCCTTTGTCCGGGGG -+ -G<8@D9D8ECEFEF=AD>DCFDF88,,,,63+@2DA:FADGCAGG7@<=?CB:=AC=*3BFF>8BF:3*>:DEF=FF8?75EC -@HWI-M01378:140129:000000000-A7785:1:2101:13482:19637 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCCTAGC -+ -GGGG=DEFEEGGGDGGGGGGGDEGG8EFFF=DFGGGGGGGGGFGGFGECFF+>BF6CFGGB4@8:D4C55:5DFGFA9,1=DD,@FCGGGFGGD+9EFGGDFFFGFAF9FCFFC?CDDAEG5*2B+4B6=278D@?C+CDF4EFG,**5=1*)4B)0)3(8AGG96? -@HWI-M01378:140129:000000000-A7785:1:2102:23669:4942 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCA -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGFGFGGGGGGGGGGGFGGFGGGGGFGGGGGFGGFGFDCDFFAFFFGFFGFG=AFGFGGFFFFFDDEGGFFE@C?:EBGGGFFF7FFA9>?FG4)>46?77C+**3:0*4:>F,+@7**49CE3+=@8=5;:)(86;5;>E6DEGA -@HWI-M01378:140129:000000000-A7785:1:2102:20537:10795 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTT -+ -GGGGGGGGGGGGFGDDGGGGGGGGGGGGGGGGGGGGDFCFGGFGGFGGCFGFGGGGGFGGFGGGGGFFFGGFGFFGFGFFFGFGGEFFFFGGGGGFDE@F@3=9GGC5?B?F=AGGFFFBAFAAF72C:AEF:GDAGG>F>DEFFFG@7C28CA8F*=9D?EC+;);AF>9<788=FC*:5)68B7F0)14>E diff --git a/clipper/t/in/mcf/adap.fa b/clipper/t/in/mcf/adap.fa deleted file mode 100644 index 234d404..0000000 --- a/clipper/t/in/mcf/adap.fa +++ /dev/null @@ -1,2 +0,0 @@ ->3p_for_test -CATGATTGATGGTGCCTACAG diff --git a/clipper/t/in/mcf/count.fq b/clipper/t/in/mcf/count.fq deleted file mode 100644 index 09c927d..0000000 --- a/clipper/t/in/mcf/count.fq +++ /dev/null @@ -1,4 +0,0 @@ -@readname -ATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATCG -+ -############################################################ diff --git a/clipper/t/in/mcf/test-mcf-dup.fq b/clipper/t/in/mcf/test-mcf-dup.fq deleted file mode 100644 index baffc42..0000000 --- a/clipper/t/in/mcf/test-mcf-dup.fq +++ /dev/null @@ -1,24 +0,0 @@ -@1 READ A -ATATGCTACGTTTGTGACCTAGTCCCGTAC -+ -hhhhh]]hhhhhhhhhhhhhhhhhhhhhhh -@2 DUPREADA -ATATGCTACGTTTGTGACCTAGTCCCGTAC -+ -hhhhh]]hhhhhhhhhhhhhhhhhhhhhhh -@3 READB -TATAGCCTCTAGCTTGACTCTAGCTAGTCC -+ -hhhhh]]hhhhhhhhhhhhhhhhhhhhhhh -@4 NOTDUPREADB = OFFBY1 -TATAGACTCTAGCTTGACTCTAGCTAGTCC -+ -hhhhh]]hhhhhhhhhhhhhhhhhhhhhhh -@3 READB-DUP -TATAGCCTCTAGCTTGACTCTAGCTAGTCC -+ -hhhhh]]hhhhhhhhhhhhhhhhhhhhhhh -@4 NOTDUPREADC = OFFBY3 -TACAGCCTCTAGCGTGACTCTAGCCAGTCC -+ -hhhhh]]hhhhhhhhhhhhhhhhhhhhhhh diff --git a/clipper/t/in/mcf/test.fa b/clipper/t/in/mcf/test.fa deleted file mode 100644 index 96aaef9..0000000 --- a/clipper/t/in/mcf/test.fa +++ /dev/null @@ -1,2 +0,0 @@ ->clip me -AGTCCCGTAC diff --git a/clipper/t/in/mcf/test1.fq b/clipper/t/in/mcf/test1.fq deleted file mode 100644 index aac6b1f..0000000 --- a/clipper/t/in/mcf/test1.fq +++ /dev/null @@ -1,32 +0,0 @@ -@1 CLIP IS AGTCCCGTAC AT END -ATATGCTACGTTTGTGACCTAGTCCCGTAC -+ -hhhhh]]hhhhhhhhhhhhh]hhffgffaa -@2 CLIP AGTCCCGTAC + AAAA's -ATGTTCGTATATGAGCAGTCCCGTACAAAA -+ -hhbhh^^hhhhhhhhhhhhh]hhfffffaa -@3 CLIP JUST AGTCC if nmin >= 5 -TATAGCCTCTAGCTTGACTCTAGCTAGTCC -+ -hhhh]]hhhhhhhhhhhhh]hhfffffaaa -@4 CLIP AG at end if nmin >= 2 -ATCTATCTTAGTCATCTTATCTACTATCAG -+ -hhhhhdchhhhhhhhhhh]hhfggfaabbA -@5 CLIP AGT at END if nmin >= 3 -ATATACTTATCTACTTATCTATCTTAAAGT -+ -hhhhh]bhddhhhhhhhhhh]hhffffgaA -@6 CLIP NOTHING, even though some at front, because mismatch pct too high -AGTCCTTGGTCTTATCTACTTATCTATCTT -+ -hhhhh]bhddhhhhhhhhhh]hhffffgaA -@7 CLIP WHOLE SEQENCE -AGTCCATTACCTTATCTACTTATCTATCTT -+ -hhhhh]bhddhhhhhhhhhh]hhffffgaA -@8 CLIP HOMOPOLYMER -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAT -+ -hhhhh]bhddhhhhhhhhhh]hhffffgaA diff --git a/clipper/t/in/mcf/test2.fq b/clipper/t/in/mcf/test2.fq deleted file mode 100644 index c325699..0000000 --- a/clipper/t/in/mcf/test2.fq +++ /dev/null @@ -1,200 +0,0 @@ -@SQ SN:chr1 LN:197195432 -@SQ SN:chr2 LN:181748087 -@SQ SN:chr3 LN:159599783 -@SQ SN:chr4 LN:155630120 -@SQ SN:chr5 LN:152537259 -@SQ SN:chr6 LN:149517037 -@SQ SN:chr7 LN:152524553 -@SQ SN:chr8 LN:131738871 -@SQ SN:chr9 LN:124076172 -@SQ SN:chr10 LN:129993255 -@SQ SN:chr11 LN:121843856 -@SQ SN:chr12 LN:121257530 -@SQ SN:chr13 LN:120284312 -@SQ SN:chr14 LN:125194864 -@SQ SN:chr15 LN:103494974 -@SQ SN:chr16 LN:98319150 -@SQ SN:chr17 LN:95272651 -@SQ SN:chr18 LN:90772031 -@SQ SN:chr19 LN:61342430 -@SQ SN:chrX LN:166650296 -@SQ SN:chrY LN:15902555 -@SQ SN:chrM LN:16299 -S09811_20110217:7:76:4056:16318#0 0 chr11 96202407 37 20M * 0 0 CTGGGGCTCGATGTGAATAT gggeggfggd_ffffgggdf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4057:17177#0 16 chr10 52137256 37 21M * 0 0 CGCACGCTCTCTTTAGCAGTG gggggggeggfgdfgggfgfg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4058:2349#0 16 chr13 47249557 23 20M * 0 0 CTCGTGGGACAGAAGGGCCA gc]gggggg^gfgggggggg XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4059:13223#0 16 chr5 143059900 37 21M * 0 0 CCTCCCCTGTGCCTTTAACAC gg]gggggggffffffedebe XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4060:9150#0 16 chr3 151828548 37 20M * 0 0 CTGAAGCTCGGGAACTGCTG hhhhhhhfhhhhhhhhhhfh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4061:8709#0 16 chr13 19650485 23 20M * 0 0 TGACACTGCTCTAGAGACTC _d_fbffcaaaacca`Y`^b XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4061:19889#0 16 chr10 70700480 23 21M * 0 0 GTGGGGTCGGGTACCAAAAGG hcccddeKedehhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4061:9770#0 16 chr14 6011936 0 21M * 0 0 CCCTGTGCCACCCGCTGACTG fdffffcff]fgggggggggg XT:A:R NM:i:0 X0:i:2 X1:i:3 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4062:2563#0 0 chr18 23469183 37 20M * 0 0 CCGCAGCCCACCCGAAATCG gggggggggfgggcfgfgff XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4062:5377#0 0 chr10 80599401 37 21M * 0 0 CGAGGTAAGCTGCCCGGGCTG cRRRR``V`V]XcaWYRYYYV XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4062:9100#0 16 chr12 73437039 23 21M * 0 0 AGTCTCCCTCCTCCCAGTAAC fffcccfd]ff[gdfgg_gcg XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4063:2936#0 0 chr11 97651237 0 20M * 0 0 GACAGTAGTGGCGCACGCCT f\cfffff]fafdffaa]fd XT:A:R NM:i:0 X0:i:5 X1:i:227 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4063:1613#0 16 chr9 121206381 37 21M * 0 0 GTTGATACCCCAAGACCACAG hhhhhhghhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4064:16927#0 16 chr11 94871188 37 21M * 0 0 TCCCTAGCGCTGAGACTCCCG ggggggggggfgggggggggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4064:6040#0 0 chr5 127723648 37 21M * 0 0 GCTGTTATTGCGGTGGCCGTT ggggggggfggegggfdfddf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4065:11333#0 16 chr9 50538551 16 21M * 0 0 AGAAGAGGATGTTGAGTACCC hhhhhhhhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:5 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4065:16759#0 16 chr5 114280587 20 21M * 0 0 GCTGGGTGGGCAGTGTGATGG hhhhhhhhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:2 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4066:8863#0 16 chr8 94360875 37 20M * 0 0 AGCTGCCTTCCTTCTGGCTC ggggg_fggggegggfffff XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4068:6400#0 16 chr5 99681540 37 20M * 0 0 CTGTTGGGAGCGCGGCAGCC hfhhhhhfhhhhhhhhhchh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4069:9059#0 0 chr15 99330435 23 20M * 0 0 TGAGGGCTGGCTGCAGGAGG fdfeffffffdfffffdcff XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4069:13594#0 16 chr3 35477535 23 21M * 0 0 AAAAGACACTTCAACTGTGAA [aab]^^ddddffffdcdfff XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4071:18297#0 0 chr7 148274281 37 21M * 0 0 TTGGCAAGTGTGAGGACAAGG b^\^`_\^X`Z\V`\bdcbdc XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4072:13754#0 0 chr11 54699731 37 22M * 0 0 GTTGATGATCCAACAATGAGTG hhhhhhhehhhhhghhhhhheh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4073:2169#0 0 chr16 20724703 37 21M * 0 0 CCTGACCTCCACAGGAGGGAA dddY^fffffdcWdYUaa[M\ XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4074:19233#0 0 chr13 100873621 37 21M * 0 0 GAATCCACTGCAGGCACATCT d_dddWc[_c``b]bH]PPZ\ XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4074:12653#0 16 chr8 81263572 37 21M * 0 0 GCCCCACTGCTTTTGGGGCTG hhghhhhhhhhhhghhhhghf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4076:18440#0 16 chr9 108410677 18 20M * 0 0 GGAATGGATCTTTTTTCCCC gggfffffcccfdfffafea XT:A:U NM:i:0 X0:i:1 X1:i:3 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4076:18510#0 16 chr4 42748605 0 21M * 0 0 TCACTCCTCCTCCACTTCCAG ffffffffffffffffggggg XT:A:R NM:i:0 X0:i:2 X1:i:8 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4077:10812#0 16 chr19 42279347 37 21M * 0 0 GCAGCTGGGTTGAACACCTGG hghhfhffffdfffac_ddff XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4078:13686#0 16 chr15 74349658 37 21M * 0 0 CTTGAGCCATGGAGGGGCTGC hhhgghhhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4078:13193#0 16 chr14 62653609 23 21M * 0 0 TGTGTGCAGCATCAGACACCA cgghhhhhghghhhhhggghh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4078:1453#0 16 chr2 91485967 37 21M * 0 0 CATTGCTCACACACAAAGGGC hhhhhhhhhhhhghhhhhhhg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4079:17592#0 0 chr15 62932853 37 21M * 0 0 CAGCTGGTCCTTACCCTAAAG ffff_edaedfffffafdffg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4079:9300#0 0 chr9 37192232 37 21M * 0 0 CGCTCCCCAGCACGTTCCCCT Yfdfafdfffff[ffggggge XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4079:3959#0 0 chr4 15809164 37 21M * 0 0 CGAAAGAAGGCTGGATTGGTA ffdafadfcfcffffggeggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4079:6367#0 16 chr1 184838147 20 21M * 0 0 GCCCCACCCCCTCTCCTTGCC _]ffcb__edea^Wee^[eee XT:A:U NM:i:0 X0:i:1 X1:i:2 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4079:12296#0 16 chr19 15864165 20 21M * 0 0 TAGGGAAGAGACAGCAAAGCC fhhhhhhhhhhhhhhhhhhgh XT:A:U NM:i:0 X0:i:1 X1:i:2 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4080:7354#0 0 chr5 113277527 37 32M * 0 0 GGAGTGGGGAGGGGGCAGGAGGGTCCTGGGAA ffcfcffffchhhhhhhgheffcUfcfffdgf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:32 -S09811_20110217:7:76:4080:2736#0 16 chr5 53263621 37 21M * 0 0 AGAGAGGTTTGGTTTGACTTG df_^aa`cVfcbbdd]e`Ycd XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4081:1306#0 0 chr11 96316788 37 21M * 0 0 CCATTTCTCTACCTGGACCTT ff[ddfca[afcccf[_adaf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4081:3011#0 0 chr10 50645615 37 24M * 0 0 TTGTGGGGGTAGAATTTGGGGACC f_dafff]ffcfffff_ddfdcfa XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:24 -S09811_20110217:7:76:4081:18745#0 16 chr1 121733365 37 21M * 0 0 AAGTCGATCGGGTAGTCTGGC edcaafgggggggfgfgfggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4082:7015#0 0 chr4 128404794 0 21M * 0 0 GCCCCGCCCTCGCCCCGCCCC _YYYY[QQQQ`a[[[QQQQXX XT:A:R NM:i:0 X0:i:3 X1:i:50 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4082:13951#0 16 chr15 41885060 0 23M * 0 0 ACACACACACACACACTCTCTCC BBBBBBBBBBBBBBBBBBBBBBB XT:A:R NM:i:0 X0:i:15 X1:i:1278 XM:i:0 XO:i:0 XG:i:0 MD:Z:23 -S09811_20110217:7:76:4082:14898#0 16 chr1 127402049 37 21M * 0 0 CCATCAGTCAAAAAAGCCCAG cadf]cg\c`g^fffdfff`a XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4083:8630#0 0 chr13 40415640 23 20M * 0 0 TGTGCTCACAGAGAAGTCAG cWdY[bbZdb`c_a`dfYdf XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4083:15648#0 16 chr18 67275748 37 21M * 0 0 CTTGAAGCAGCCACTAGGTGG \]Z\\OWdffffeffffffff XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4084:10416#0 0 chr1 184884945 16 20M * 0 0 GCAGCTTTGGTGCCTGGAGC fhhghhhhcehhhhhdhfah XT:A:U NM:i:0 X0:i:1 X1:i:5 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4084:6000#0 0 chr10 110182200 37 21M * 0 0 GCGTGGGTCGGTCCCCCACAA gggggggfgggggggggggfc XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4086:8764#0 16 chr8 73986870 37 21M * 0 0 TGGGGGCTCTGGGCCTCCATC hhhhhhh_fhfhhhhhgchhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4086:10128#0 0 chr17 23863431 37 21M * 0 0 CGTTCACGGGCGGTTCCCCTT gggggggegc^fcffggdgff XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4087:14148#0 4 * 0 0 * * 0 0 GTTGCCTAGCATCCTGGTGGGAGTCAACAAGTCA ffffffdfffeggfgfcfffgcggeggggdfffa -S09811_20110217:7:76:4087:14669#0 0 chr11 74584160 23 21M * 0 0 GGCTCCATCACATAGCTGCAT ggagggfggfgffgafcgfgg XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4087:14796#0 0 chr12 95660162 37 21M * 0 0 CAGGAGATTTGCAGTCACACT hhhhfgghhhhhhhhhhfhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4087:20791#0 16 chr17 39982533 37 20M * 0 0 GTCTTCTCTCGCCGGCTTCG gggggfdff\gggggggggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4087:20204#0 16 chr9 106558585 37 21M * 0 0 TCCCCAGGGTTCCCAGCCCAG adfffffffff__geggcggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4088:10338#0 16 chr16 4559176 37 21M * 0 0 TTACAAACGTCGCGACTCGCC fcdchhhghghhghahhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4089:15021#0 0 chr12 29385575 37 21M * 0 0 TGGAGGGCTGCCAGTCGCTCT ggggggfggfggggggfgggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4090:15839#0 16 chr8 34762935 37 22M * 0 0 TGGTTATTGCCTCACAACGGCA hhhhhghhghhghhhhhghhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4090:18938#0 0 chr4 135121514 37 21M * 0 0 TGCCAATCAAGGCTCTTCTAG hhea_ffhcghhfhhhghdgh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4090:5545#0 16 chr15 75873696 0 21M * 0 0 TACACTCGCAGGCAAAACGCC \bd]cddddcdaaaaaZZ\\_ XT:A:R NM:i:2 X0:i:5 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:5A12A2 -S09811_20110217:7:76:4091:4690#0 0 chr6 119422362 37 22M * 0 0 GAAAGGGAATGAGCTCCACTCA gegggfffffggaagfffffgg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4091:9879#0 16 chr7 56501996 23 21M * 0 0 GAGAAGAATTGCCAGAGGCAG fcdfggffffafc^fcffffd XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4093:7858#0 0 chr16 29564428 23 21M * 0 0 GTGGAAGCTGTTACTTAGCAC hhhhhghhhhghghhhdhehh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4094:14415#0 16 chr5 15691151 37 33M * 0 0 TACAAGGATGACTGAACCCAAGCAGAAACATGG Rffhhhhhhhhhhhhhhhhhhghhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:33 -S09811_20110217:7:76:4094:1186#0 4 * 0 0 * * 0 0 CGCGGCGCCTCGCCTCGGCCGGCGC fffcaaffffgf_gcgaagdgggaf -S09811_20110217:7:76:4095:20263#0 0 chr2 26997948 37 20M * 0 0 GCACGCGCGACTCCAGCCTA d[daS]dd[WaY^XWccdW[ XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4095:11848#0 16 chr3 9629464 37 22M * 0 0 TTCTTGCTTCCTGCTCAAAAAC hhhhhhhhhhhhhhhhhhhheh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4095:2650#0 0 chr4 48059466 37 21M * 0 0 GCGGAGACTGGCTTTCAAAGG ffffdfafaffffffffffdd XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4095:13254#0 16 chr5 54077924 37 21M * 0 0 GGTGAGAAAGATGCATGGCCT hhhhghhhh\hfchhafffff XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4096:11180#0 0 chr7 48153625 37 21M * 0 0 GCGCTGGACGCTCAGTTCTTG ggggggggggggggggggggf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4097:10146#0 16 chr11 45665489 37 21M * 0 0 TGGCGGCGCCGTGGCTGTGGC ffgggegfggcdfgggggggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4097:1516#0 16 chr16 8830767 37 21M * 0 0 AGCTCTACAAAGGTGAGGCCG gggfgggfggfgggggggcgg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4097:19865#0 16 chr11 67779143 15 21M * 0 0 CCTGGTCTTCATGGTAACTGG hhhhhhh^hhhhhhhhhhhhh XT:A:U NM:i:1 X0:i:1 X1:i:7 XM:i:1 XO:i:0 XG:i:0 MD:Z:7G13 -S09811_20110217:7:76:4099:2447#0 16 chr14 4231675 0 21M * 0 0 CTTGGTTCACACTGAGAGAGC hhhhghhhhhhhghhhhhhhh XT:A:R NM:i:0 X0:i:51 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4100:6156#0 16 chr10 45055550 37 21M * 0 0 CTCCGCGAACGGGGAGCGGGC \W\Y]WZYc\\aa]Y`^]\ca XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4103:11599#0 16 chr7 3198700 37 20M * 0 0 ACCCGGATTAGCTCACACAG egfggggggggggggggfgg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4104:18002#0 0 chr18 21465381 37 22M * 0 0 TGTAGAAGAATGGTTGAGTGTG gggggggggggggggfffdfcf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4104:10821#0 16 chr7 134852378 37 21M * 0 0 GCAGCTGTGCGGCTGGACGCG hhhhgghhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4106:11008#0 0 chr15 10015934 23 21M * 0 0 TAACACCAATTGGTGTGCCCT gfggggggggfffaf`fcffg XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4106:5526#0 16 chr6 83425897 15 20M * 0 0 TCTTCTTTCTCAGCTCTCAG hcghhhhhhhhhhhfgghhh XT:A:U NM:i:0 X0:i:1 X1:i:6 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4107:13329#0 16 chr19 23210290 25 21M * 0 0 GGTCAGGAACCCTCCCTCGTG ggggfgggeegggffdfcggg XT:A:U NM:i:2 X0:i:1 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:2C3C14 -S09811_20110217:7:76:4107:13663#0 0 chr1 59440146 37 21M * 0 0 GCTGAACATGAGGAACAGATT hhfhfghehhghhgghcgagh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4108:15831#0 16 chr1 96186789 0 36M * 0 0 CTCTTTCTCCACATCATTGCCAGCATCTGCTGTCAC gdhhhghfhhfhhehhh_ghhehhghghhhhfffdf XT:A:R NM:i:0 X0:i:23 X1:i:2890 XM:i:0 XO:i:0 XG:i:0 MD:Z:36 -S09811_20110217:7:76:4108:2574#0 0 chr1 74145227 37 22M * 0 0 CTAGAGCCCGGTAACTTCTGAA hhhhhhhhhhhhhhghhghghh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4108:11646#0 4 * 0 0 * * 0 0 GTCGCCCTTGATGACGCCCGA gagggggggggggggggggcg -S09811_20110217:7:76:4110:4823#0 16 chr6 36447214 0 21M * 0 0 CCTGTGTGGGCCGGGGACAGC \_cfffaa_^^\__\_^aa^a XT:A:R NM:i:0 X0:i:3726 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4111:1865#0 16 chr2 156688798 37 21M * 0 0 TGGCCGCCGATTGGCTGCGTG fgfggccggggggggggggeg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4112:11354#0 16 chr16 6015357 37 21M * 0 0 TCTTTCCTGTGGCGTGTTGCA hhggfhfgffgcgggdhdggh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4112:20769#0 16 chr1 13416601 37 21M * 0 0 GCTTTGCTAACTGGCTGTTGG ggggfggcggggcfgggfgcg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4112:17621#0 0 chr14 37923248 37 22M * 0 0 GAGTCTCACGCCTAGGGAGGAA gceggff_ffffafafaffcgg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4113:9951#0 0 chr19 3686548 37 20M * 0 0 CCGCGGCCCAAGACGACGCG ggggfggggggcgfaggadg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4113:8009#0 0 chr5 54389167 37 21M * 0 0 CTTGGGTTTCGTCACATGTAA ghhhhghhhhhehhhhhhhgh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4113:9273#0 0 chr11 100139512 23 20M * 0 0 GAAGCTGGGTCAGCATCCTG hehghfhhfhhghhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4113:12405#0 16 chr2 131335665 37 22M * 0 0 TTGGCGGTGGCTGGCAGACTTC hhhhdhhhhhhhfhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4114:2280#0 0 chr2 25096592 37 22M * 0 0 GGAAGGGTGGGCTGGTTCACTC hhhhhhhdhghhhhgghhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4114:5399#0 0 chr6 89210719 37 21M * 0 0 GCACTGCTGAGCTCCCGCTGA c_a_c]ac^S____[^^ca^Q XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4116:19690#0 0 chr17 89491525 0 20M * 0 0 GCCACAGCCCCCTCCCTTTA hhhhhhfhhhTT[ETTV][[ XT:A:R NM:i:0 X0:i:2 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4117:5032#0 16 chr2 26997882 37 21M * 0 0 AGAGACTCTCTGCCAGCTGCG gcggggdgggggggggggggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4117:15452#0 0 chr13 103709381 37 22M * 0 0 GAACTGCAGATGACGTGAGCCA ggggaggcdgd]fddbbcfffg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4118:20937#0 16 chr12 81620331 37 21M * 0 0 TTGTGAGTACGCTCTGCGCAC cWa[XYfb`abf_`ff]ddbe XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4119:14274#0 0 chr8 98220568 17 20M * 0 0 TGTGCGCGCACAAGAGAGAG hhhhhghdhhhfhhhhghhh XT:A:U NM:i:0 X0:i:1 X1:i:4 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4119:17557#0 16 chr5 118964628 37 21M * 0 0 GCGAGAACACTTGAGTCAACC gggfggffffcfffffdffff XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4119:15719#0 0 chr17 23754228 37 21M * 0 0 GCACCAGGTGCCACTCCATCA ffcd]cc]ccddaaacacaYa XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4120:1095#0 16 chr10 49303053 37 21M * 0 0 TAAGCAGAGCCTCTGAGGCAG ghhhhhhhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4120:14798#0 0 chr18 21288213 37 21M * 0 0 TGCTGGGTGGGCTGCCCAGGA hhhhhhfhhhhhhhhhhhhhg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4121:16994#0 16 chr11 86557627 0 22M * 0 0 AAAGACTGGTGAGGCAGCGGTC hhhhhhhhhhhhhhhhhfhhhh XT:A:R NM:i:2 X0:i:2 X1:i:0 XM:i:2 XO:i:0 XG:i:0 MD:Z:4G12A4 -S09811_20110217:7:76:4122:9797#0 0 chr7 134119280 16 20M * 0 0 GGAAAGAAGGTTGGGAAGAG hhhhhfhfhhhhhgghhhgh XT:A:U NM:i:0 X0:i:1 X1:i:5 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4122:18958#0 16 chr5 98722031 37 28M * 0 0 TCGGAGACCCGAAGCCTATGAGCGCATC cdfgggegffgggggggggggggggggf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:28 -S09811_20110217:7:76:4123:15653#0 0 chr8 127473531 37 20M * 0 0 GAGGCCGCGGAGGGCACAAC gggcefggd_fffcfgfagg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4124:18816#0 16 chr2 115678318 23 21M * 0 0 AGTCTTTACCCTGAGGCTTTG hhhghhhghhhhhhhhhhhgh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4124:9551#0 16 chr7 132706867 37 23M * 0 0 GCTGCTCTGAGGAGCTGGAGGTA hhhhfhhhhhhhhhhhhfhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:23 -S09811_20110217:7:76:4125:9911#0 16 chr5 57509284 37 21M * 0 0 GAACAAATTGGTGGATGCATT hhhhhhhhhdhfhhhdgghhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4126:13627#0 16 chr4 138529013 37 21M * 0 0 TTGGTGGCTTAGGTGGCGGTG fgfhhhhghfhhhhhhghhhg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4127:2385#0 0 chr2 31007793 23 21M * 0 0 CGCCCCCTTCCAGAGCACCTC hhhhhhhhhhhhhchhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4127:14086#0 0 chr6 8366141 37 22M * 0 0 GGGCCATGTCACACCTGATTTT gcgfggggggcffffgfagggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4127:1202#0 16 chr10 79017962 37 21M * 0 0 CGGAGATCTATAGCCTGGGTC cggefggfgfdgggfgeggcg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4128:8130#0 16 chr14 115439600 37 29M * 0 0 TCCGAGCCCAGCACGCGCCCCGTCGCACG BBBBBBBBBBaSac[[aPYLcccc_SRcc XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:29 -S09811_20110217:7:76:4128:6585#0 16 chr7 20063181 23 21M * 0 0 CATTTCTGAGTAGGCAGATCC hhhhhhhhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4128:18193#0 0 chr5 99465685 17 20M * 0 0 CCCCTGAGCCCCCAGCCCCA hhhhhffghhhhhhhhhhhf XT:A:U NM:i:0 X0:i:1 X1:i:4 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4129:3296#0 0 chr2 91097000 37 20M * 0 0 GTGGCCCGGACCCGGGAGTG hhhhhhhfhfhhhghhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4130:6365#0 16 chr10 104675545 0 21M * 0 0 GAACCGAACGCCGGGTTAAGG hhfhhhhghhhhhhehfhhhh XT:A:R NM:i:0 X0:i:4 X1:i:5 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4131:15879#0 16 chr5 6564178 0 21M * 0 0 GGACTCTCACTCTTTGCTCTA hhghghhhghghhhhhhhhhh XT:A:R NM:i:0 X0:i:1191 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4132:8884#0 16 chr1 142142367 37 21M * 0 0 GGAAAGTGCCTAGCCATCACG fcddfdY[_ffegefgggggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4132:19126#0 0 chr15 41254561 37 21M * 0 0 TGTGATGTGATGCATACACCA gehhhhhhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4132:2322#0 0 chr4 144694292 37 21M * 0 0 TTTACACAGGACACAGGGGGA ggfgggccggffa]aadaad_ XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4134:5895#0 0 chr15 78502922 37 21M * 0 0 CTGCAGCGGGTGGTGGGAGCT ggggggggggcffcfffcfdf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4135:16662#0 0 chr5 28154876 23 21M * 0 0 GGAAGGGGGTGCAGTTAATGG hhhhhhhhhghhhhhhhhhfh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4135:12173#0 0 chr6 121252668 37 22M * 0 0 CCCTGTGGGCTTCCCACCAGTG hhhhhhhhhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4137:11392#0 0 chr5 130323446 37 20M * 0 0 GAGGTCAGGTTGGATCCCTA hhhhhhhhhghhghhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4138:1397#0 16 chr8 73011208 18 20M * 0 0 CGCAGCCATGGCTGAAGATG f_f]dfffdfcd``cdaacc XT:A:U NM:i:0 X0:i:1 X1:i:3 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4138:19656#0 16 chr19 48565060 37 22M * 0 0 GCAGGGATAACTGAACCTACAG cfTWYTTZJU^Zdffffcfcdf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4140:8157#0 16 chr6 131162611 0 21M * 0 0 CTGTCTCTTGTGAGGCTATTC hhhhhhhhhhhhhhhhhhhhh XT:A:R NM:i:0 X0:i:316 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4143:14172#0 0 chr9 68577324 23 21M * 0 0 CCTGGGTGACATAGAGATCCA hhhhhhhhhhhhhhhhghhhh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4143:2611#0 0 chr10 13581724 37 21M * 0 0 CAAGTAGTGATGCACCAGTGG ffffffffffgggfgffcfff XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4145:13512#0 16 chr17 34974392 23 21M * 0 0 AAGCCTTTGCACAAACTCCCC ggggggffdfccffcfcffff XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4145:1804#0 16 chr5 108153882 37 21M * 0 0 AAACCTGAGCCCTGCAGGAGG hhhhhhhghhghhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4145:18667#0 0 chr16 91899872 37 21M * 0 0 GCTGGAGTGGATCCAAGCCCA daca^cdadda^a^afcfffc XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4147:14396#0 0 chr11 6428660 37 21M * 0 0 CCTGTGCCCTGATGACGGAAG hhhhhhhhhhhhhhhhhhhgh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4147:10729#0 0 chr7 121986142 37 21M * 0 0 CCTCTACCCCTCTCCCAGAGG hhdh`ghhhhfhghfghhhgh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4148:18299#0 0 chr1 120277085 37 21M * 0 0 GCGCTTGCTAGGTAAGTAAAG hhhhhhhhhhhghghgfhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4148:3976#0 0 chr14 26306322 37 20M * 0 0 CAAAGCAATCCATGCAGTGG gdggceggagggggggeggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4149:19347#0 0 chr9 20807321 37 21M * 0 0 TCATCAGCCACCGCCGCGAGC hhhhhhhhghchghhgggfhg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4150:14212#0 16 chr12 83486402 37 21M * 0 0 ATGTCAGATTGAACCTGAGAA hghhhhhhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4150:14295#0 0 chr8 110526042 37 21M * 0 0 GGGAATGTTAATGGGCACCCT hhhhhhhhhghhfhghhhhhf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4150:15287#0 0 chr6 125330344 37 21M * 0 0 GCACTCGCCCTCCCAAGTGCT b^\^]`Xb^^cccccccQ_a\ XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4150:1371#0 16 chr2 90235298 0 21M * 0 0 CTCCCCACCTGGCACTGTCCC hghhhhdhhhhhhgfghghhh XT:A:R NM:i:0 X0:i:5 X1:i:4 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4151:8075#0 16 chr8 87655472 0 20M * 0 0 AGAGACAGACACGAAACGAC ffdfafffdfcfffffcfaf XT:A:R NM:i:0 X0:i:61 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4151:14450#0 0 chr5 104072953 0 21M * 0 0 AGTTGACAAGGGGTCAACTGT hhhhhhhhhhhhhhhhhhhhh XT:A:R NM:i:0 X0:i:23 X1:i:1865 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4152:17800#0 0 chr17 79755009 37 21M * 0 0 TGCAGCCGGCTCCCCTTGCAA hghhhhghhhgheggehfhgg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4153:20509#0 16 chrX 48108344 0 20M * 0 0 CAGAGGCAAGCAGATCTCTG ggggggcgggggggagggcg XT:A:R NM:i:0 X0:i:629 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4154:2902#0 0 chr17 39982224 37 21M * 0 0 GAGTGCCGAGGTGGGTACCCT dffffdffcd]`ee]_ce]ef XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4155:16166#0 16 chr3 10939533 23 21M * 0 0 ATTACAGCACCGGGCACCTTG hffffffffffffffcfffff XT:A:U NM:i:1 X0:i:1 X1:i:1 XM:i:1 XO:i:0 XG:i:0 MD:Z:2G18 -S09811_20110217:7:76:4156:5280#0 16 chr11 5737647 37 21M * 0 0 CGCAAGGTAGATGGCCACATC ]ddddadRWccZabR]Z_\X` XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4158:17318#0 16 chr16 37539830 37 20M * 0 0 GAACGCCTAATTCCTGCGAC hhhhhhhhhhhhgghhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4159:15220#0 16 chr7 3933251 37 21M * 0 0 ACTGTGACATCTGTAGGCTCC hhffhhhhgehhhhhhgfhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4159:14652#0 16 chr11 82704111 37 21M * 0 0 GCGCCCTAGGCCCGCCCCCTC aecfgacffccccXccfdfdf XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4159:8297#0 16 chr11 76659954 23 21M * 0 0 GTGTTGAGCAGGCGGACCAGG hhhhhgghhhhhhfhhfhhgh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4161:6427#0 0 chr3 60304918 20 21M * 0 0 CTGCTTCTGCTGCTGCAGGCC ffdfffffffffffffafffd XT:A:U NM:i:0 X0:i:1 X1:i:2 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4161:1685#0 0 chr1 159482966 37 22M * 0 0 CTCTGACCCTGGGGTCCACTAT ggggggggggggggfggggedg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4161:10296#0 16 chrX 131543262 37 21M * 0 0 GTGGGACAGGTCCAAGCTCAG f`aaa\Kdb_Uffffdggggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4161:10632#0 0 chr9 45820653 37 21M * 0 0 TTTTCAATGCCTGTTCCCCAG gggggdgggggggggggggcc XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4162:16607#0 16 chr11 74749998 0 21M * 0 0 GGAATTGAACTCAGGACCTCT hghghhhhhghhhhhedhhhd XT:A:R NM:i:0 X0:i:15092 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4162:6913#0 16 chr1 92684508 23 20M * 0 0 CCAGAGGACCAGTTCTGCCA hhhhhhhhhhhfhgfhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4162:14683#0 16 chr9 88333349 37 21M * 0 0 ACCACGAAGGCTGCGTGGTCC hhhhhhhhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4162:7728#0 0 chr2 80479175 23 21M * 0 0 CTGTGGCCGGTGACATCTGGG cc^ccc_cccLVWQPLUVYZc XT:A:U NM:i:0 X0:i:1 X1:i:1 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4163:18078#0 16 chr17 46290451 37 21M * 0 0 ACTGCCAGCCTAGTCGTCCTG agaagggggggfggggggggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4164:4911#0 16 chr18 24499200 37 21M * 0 0 AGAAAGCCCCCAGGAGCCAGC gghhhghhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4165:13217#0 0 chr11 17158026 37 21M * 0 0 GTGGCAGTGTTAGCCCTTTTG ]Z\YYTZ_NUca_\cfcfcff XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4165:4616#0 0 chr17 88655538 37 21M * 0 0 CAGCGACATTCCCAGGATTCC _^d^bffffffcfffg^gggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4166:12650#0 16 chr13 8870251 37 20M * 0 0 CCCGGCGACCCGAACTGGCG ffdfffff\fffcdadgggg XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:20 -S09811_20110217:7:76:4166:2623#0 0 chr19 57906825 0 21M * 0 0 TGTCACTCCTTGATTGGCTGC gfggggggggggdggadfaff XT:A:R NM:i:0 X0:i:384 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4167:13070#0 0 chr6 13788876 37 22M * 0 0 GCCCCAAATCAGGCTTTTGTTC hhhhhhhghhhgehchhhfhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:22 -S09811_20110217:7:76:4168:14902#0 0 chr10 79899202 37 35M * 0 0 GAGCCTCACCTAGAATCCCCCAGTGAGGGGGCTGG ggggggggggggggggggggfff]ffffcfffffc XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:35 -S09811_20110217:7:76:4168:15851#0 16 chr19 26553578 37 21M * 0 0 CCAGATTACCCAGAAGTTTCA fafffdcaebbffd_fdf_fe XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4168:7850#0 0 chr11 97391198 37 21M * 0 0 CCCACGCAACTTCACTCCAGC hhhhhhhhhhhhhhhhhhhhh XT:A:U NM:i:0 X0:i:1 X1:i:0 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4169:9126#0 16 chr5 18358473 0 21M * 0 0 TTAGAGGGTGCGCCAGAGAAC hghgfhhgfghhghhhhhhgh XT:A:R NM:i:0 X0:i:1579 XM:i:0 XO:i:0 XG:i:0 MD:Z:21 -S09811_20110217:7:76:4170:18336#0 16 chr11 3077150 37 22M * 0 0 AGTGGACATTCACAGCTGGACA ghfhfhhbafffhhddbfYfYf XT:A:U NM:i:1 X0:i:1 X1:i:0 XM:i:1 XO:i:0 XG:i:0 MD:Z:16C5 diff --git a/clipper/t/in/mcf/test3.fq b/clipper/t/in/mcf/test3.fq deleted file mode 100644 index 8812777..0000000 --- a/clipper/t/in/mcf/test3.fq +++ /dev/null @@ -1,28 +0,0 @@ -@1 CLIP IS AGTCCCGTAC AT BEGINNING -AGTCCCGTACATATGCTACGTTTGTGACCT -+ -hhhhh]]hhhhhhhhhhhhh]hhffgffaa -@2 CLIP AGTCCCGTAC + AAAA's -AAAAAGTCCCGTACATGTTCGTATATGAGC -+ -hhbhh^^hhhhhhhhhhhhh]hhfffffaa -@3 CLIP JUST AGTCC if nmin >= 5 -CGTACTATAGCCTCTAGCTTGACTCTAGCT -+ -hhhh]]hhhhhhhhhhhhh]hhfffffaaa -@4 CLIP AC at begin if nmin >= 2 -ACCTATCTTAGTCATCTTATCTACTATCAG -+ -hhhhhdchhhhhhhhhhh]hhfggfaabbA -@5 CLIP TAG at BEGIN if nmin >= 3 -TACATATACTTATCTACTTATCTATCTTAA -+ -hhhhh]bhddhhhhhhhhhh]hhffffgaA -@6 CLIP NOTHING, even though some at front, because mismatch pct too high -AGTCCTTGGTCTTATCTACTTATCTATCTT -+ -hhhhh]bhddhhhhhhhhhh]hhffffgaA -@6 CLIP WHOLE SEQENCE -AGTCCATTACCTTATCTACTAGTCCCGGAC -+ -hhhhh]bhddhhhhhhhhhh]hhffffgaA diff --git a/clipper/t/in/mcf/test4.fq1 b/clipper/t/in/mcf/test4.fq1 deleted file mode 100644 index decbeda..0000000 --- a/clipper/t/in/mcf/test4.fq1 +++ /dev/null @@ -1,5 +0,0 @@ -@EA-GAII-02:7:1:19703:1174#0/1 -ATGATGATGATGATGTTGTGCCCACCACTCCAAGACAGTGCCCACTGATCCAAGATGGCACNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN -+ -gg]cdggggggfggcffafdgggg_ggfffggfgggdf[cBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB -@EA-GAII-02:7:1:1142:1178#0/1 diff --git a/clipper/t/in/mcf/test4.fq2 b/clipper/t/in/mcf/test4.fq2 deleted file mode 100644 index 39e6280..0000000 --- a/clipper/t/in/mcf/test4.fq2 +++ /dev/null @@ -1,5 +0,0 @@ -@EA-GAII-02:7:1:19703:1174#0/3 -ATGATGATGATGATATGTGATGATGATGATGTGATGATGATGATGAGTGTGATGATGTGTGTGTGTGTGTGTGTGANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN -+ -hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB -@EA-GAII-02:7:1:1142:1178#0/3 diff --git a/clipper/t/in/mcf/test5.fq b/clipper/t/in/mcf/test5.fq deleted file mode 100644 index 9ec8acf..0000000 --- a/clipper/t/in/mcf/test5.fq +++ /dev/null @@ -1,16 +0,0 @@ -@1 -CATGATTGATGGTGCCTACAGATCAGCTAGGCATCGATATATCGATCGGCTAGAGATATACGATCGAT -+ -hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh -@2 -CATGATTGATGGTGCCTACAGATCAGCTAGGCATCGATATATCGATCGGCTAGAGATATACGATCGAG -+ -hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh -@3 -CATGATTGATGGTGCCTACAGATCAGCTAGGCATCGATATATCGATCGGCTAGAGATATACGATCGAG -+ -hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh -@4 -CATGATTGATGGTGCCTACAGATCAGCTAGGCATCGATATATCGATCGGCTAGAGATATACGATCGAC -+ -hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh diff --git a/clipper/t/in/multx/master-barcodes.txt b/clipper/t/in/multx/master-barcodes.txt deleted file mode 100755 index 9b70aef..0000000 --- a/clipper/t/in/multx/master-barcodes.txt +++ /dev/null @@ -1,862 +0,0 @@ -id seq style -D701 ATTACTCG Nextera1 -D702 TCCGGAGA Nextera1 -D703 CGCTCATT Nextera1 -D704 GAGATTCC Nextera1 -D705 ATTCAGAA Nextera1 -D706 GAATTCGT Nextera1 -D707 CTGAAGCT Nextera1 -D708 TAATGCGC Nextera1 -D709 CGGCTATG Nextera1 -D710 TCCGCGAA Nextera1 -D711 TCTCGCGC Nextera1 -D712 AGCGATAG Nextera1 -LB1 ATCACG TruSeq -LB2 CGATGT TruSeq -LB3 TTAGGC TruSeq -LB4 TGACCA TruSeq -LB5 ACAGTG TruSeq -LB6 GCCAAT TruSeq -LB7 CAGATC TruSeq -LB8 ACTTGA TruSeq -LB9 GATCAG TruSeq -LB10 TAGCTT TruSeq -LB11 GGCTAC TruSeq -LB12 CTTGTA TruSeq -LB13 AGTCAA TruSeq -LB14 AGTTCC TruSeq -LB15 ATGTCA TruSeq -LB16 CCGTCC TruSeq -LB17 GTAGAG TruSeq -LB18 GTCCGC TruSeq -LB19 GTGAAA TruSeq -LB20 GTGGCC TruSeq -LB21 GTTTCG TruSeq -LB22 CGTACG TruSeq -LB23 GAGTGG TruSeq -LB24 GGTAGC TruSeq -LB25 ACTGAT TruSeq -LB26 ATGAGC TruSeq -LB27 ATTCCT TruSeq -LB28 CAAAAG TruSeq -LB29 CAACTA TruSeq -LB30 CACCGG TruSeq -LB31 CACGAT TruSeq -LB32 CACTCA TruSeq -LB33 CAGGCG TruSeq -LB34 CATGGC TruSeq -LB35 CATTTT TruSeq -LB36 CCAACA TruSeq -LB37 CGGAAT TruSeq -LB38 CTAGCT TruSeq -LB39 CTATAC TruSeq -LB40 CTCAGA TruSeq -LB41 GACGAC TruSeq -LB42 TAATCG TruSeq -LB43 TACAGC TruSeq -LB44 TATAAT TruSeq -LB45 TCATTC TruSeq -LB46 TCCCGA TruSeq -LB47 TCGAAG TruSeq -LB48 TCGGCA TruSeq -SSXT1 ATCACG SureSelect_XT -SSXT2 CGATGT SureSelect_XT -SSXT3 TTAGGC SureSelect_XT -SSXT4 TGACCA SureSelect_XT -SSXT5 ACAGTG SureSelect_XT -SSXT6 GCCAAT SureSelect_XT -SSXT7 CAGATC SureSelect_XT -SSXT8 ACTTGA SureSelect_XT -SSXT9 GATCAG SureSelect_XT -SSXT10 TAGCTT SureSelect_XT -SSXT11 GGCTAC SureSelect_XT -SSXT12 CTTGTA SureSelect_XT -SSXT13 AAACAT SureSelect_XT -SSXT14 CAAAAG SureSelect_XT -SSXT15 GAAACC SureSelect_XT -SSXT16 AAAGCA SureSelect_XT -LI2 CCTTCT Craig -LI3 GATCGT Craig -LI4 GCATGT Craig -LI5 AACCAT Craig -LI6 CCCCCT Craig -LI8 TCGATT Craig -LI9 TGCATT Craig -LI10 CAACCT Craig -LI11 GGTTGT Craig -LI13 AGCTAT Craig -LI15 ACACAT Craig -LI16 AATTAT Craig -LI20 ATCACG Craig -LI21 CGATGT Craig -LI22 TTAGGC Craig -LI23 TGACCA Craig -LI24 ACAGTG Craig -LI25 GCCAAT Craig -LI26 CAGATC Craig -LI27 ACTTGA Craig -LI28 GATCAG Craig -LI29 TAGCTT Craig -LI30 GGCTAC Craig -LI31 CTTGTA Craig -LI61 ATCACG Illumina -LI62 CGATGT Illumina -LI63 TTAGGC Illumina -LI64 TGACCA Illumina -LI65 ACAGTG Illumina -LI66 GCCAAT Illumina -LI67 CAGATC Illumina -LI68 ACTTGA Illumina -LI69 GATCAG Illumina -LI70 TAGCTT Illumina -LI71 GGCTAC Illumina -LI72 CTTGTA Illumina -LI41 ATCACG Illumina-IDT -LI42 CGATGT Illumina-IDT -LI43 TTAGGC Illumina-IDT -LI44 TGACCA Illumina-IDT -LI45 ACAGTG Illumina-IDT -LI46 GCCAAT Illumina-IDT -LI47 CAGATC Illumina-IDT -LI48 ACTTGA Illumina-IDT -LI49 GATCAG Illumina-IDT -LI50 TAGCTT Illumina-IDT -LI51 GGCTAC Illumina-IDT -LI52 CTTGTA Illumina-IDT -A01_01 TAGCTTGT Fluidigm -B01_02 CGATGTTT Fluidigm -C01_03 GCCAATGT Fluidigm -D01_04 ACAGTGGT Fluidigm -E01_05 ATCACGTT Fluidigm -F01_06 GATCAGCG Fluidigm -G01_07 CAGATCTG Fluidigm -H01_08 TTAGGCAT Fluidigm -A02_09 GGCTACAG Fluidigm -B02_10 CTTGTACT Fluidigm -C02_11 ACTTGATG Fluidigm -D02_12 TGACCACT Fluidigm -E02_13 TGGTTGTT Fluidigm -F02_14 TCTCGGTT Fluidigm -G02_15 TAAGCGTT Fluidigm -H02_16 TCCGTCTT Fluidigm -A03_17 TGTACCTT Fluidigm -B03_18 TTCTGTGT Fluidigm -C03_19 TCTGCTGT Fluidigm -D03_20 TTGGAGGT Fluidigm -E03_21 TCGAGCGT Fluidigm -F03_22 TGATACGT Fluidigm -G03_23 TGCATAGT Fluidigm -H03_24 TTGACTCT Fluidigm -A04_25 TGCGATCT Fluidigm -B04_26 TTCCTGCT Fluidigm -C04_27 TAGTGACT Fluidigm -D04_28 TACAGGAT Fluidigm -E04_29 TCCTCAAT Fluidigm -F04_30 TGTGGTTG Fluidigm -G04_31 TAGTCTTG Fluidigm -H04_32 TTCCATTG Fluidigm -A05_33 TCGAAGTG Fluidigm -B05_34 TAACGCTG Fluidigm -C05_35 TTGGTATG Fluidigm -D05_36 TGAACTGG Fluidigm -E05_37 TACTTCGG Fluidigm -F05_38 TCTCACGG Fluidigm -G05_39 TCAGGAGG Fluidigm -H05_40 TAAGTTCG Fluidigm -A06_41 TCCAGTCG Fluidigm -B06_42 TGTATGCG Fluidigm -C06_43 TCATTGAG Fluidigm -D06_44 TGGCTCAG Fluidigm -E06_45 TATGCCAG Fluidigm -F06_46 TCAGATTC Fluidigm -G06_47 TACTAGTC Fluidigm -H06_48 TTCAGCTC Fluidigm -A07_49 TGTCTATC Fluidigm -B07_50 TATGTGGC Fluidigm -C07_51 TTACTCGC Fluidigm -D07_52 TCGTTAGC Fluidigm -E07_53 TACCGAGC Fluidigm -F07_54 TGTTCTCC Fluidigm -G07_55 TTCGCACC Fluidigm -H07_56 TTGCGTAC Fluidigm -A08_57 TCTACGAC Fluidigm -B08_58 TGACAGAC Fluidigm -C08_59 TAGAACAC Fluidigm -D08_60 TCATCCTA Fluidigm -E08_61 TGCTGATA Fluidigm -F08_62 TAGACGGA Fluidigm -G08_63 TGTGAAGA Fluidigm -H08_64 TCTCTTCA Fluidigm -A09_65 TTGTTCCA Fluidigm -B09_66 TGAAGCCA Fluidigm -C09_67 TACCACCA Fluidigm -D09_68 TGCGTGAA Fluidigm -E09_69 GGTGAGTT Fluidigm -F09_70 GATCTCTT Fluidigm -G09_71 GTGTCCTT Fluidigm -H09_72 GACGGATT Fluidigm -A10_73 GCAACATT Fluidigm -B10_74 GGTCGTGT Fluidigm -C10_75 GAATCTGT Fluidigm -D10_76 GTACATCT Fluidigm -E10_77 GAGGTGCT Fluidigm -F10_78 GCATGGCT Fluidigm -G10_79 GTTAGCCT Fluidigm -H10_80 GTCGCTAT Fluidigm -A11_81 GGAATGAT Fluidigm -B11_82 GAGCCAAT Fluidigm -C11_83 GCTCCTTG Fluidigm -D11_84 GTAAGGTG Fluidigm -E11_85 GAGGATGG Fluidigm -F11_86 GTTGTCGG Fluidigm -G11_87 GGATTAGG Fluidigm -H11_88 GATAGAGG Fluidigm -A12_89 GTGTGTCG Fluidigm -B12_90 GCAATCCG Fluidigm -C12_91 GACCTTAG Fluidigm -D12_92 GCCTGTTC Fluidigm -E12_93 GCACTGTC Fluidigm -F12_94 GCTAACTC Fluidigm -G12_95 GATTCATC Fluidigm -H12_96 GTCTTGGC Fluidigm -FLD0001 GTATCGTCGT FLD_BiDirectional -FLD0002 GTGTATGCGT FLD_BiDirectional -FLD0003 TGCTCGTAGT FLD_BiDirectional -FLD0004 GTCGTCGTCT FLD_BiDirectional -FLD0005 GTGCGTGTGT FLD_BiDirectional -FLD0006 GCGTCGTGTA FLD_BiDirectional -FLD0007 GTCGTGTACT FLD_BiDirectional -FLD0008 GATGTAGCGT FLD_BiDirectional -FLD0009 GAGTGATCGT FLD_BiDirectional -FLD0010 CGCTATCAGT FLD_BiDirectional -FLD0011 CGCTGTAGTC FLD_BiDirectional -FLD0012 GCTAGTGAGT FLD_BiDirectional -FLD0013 GAGCTAGTGA FLD_BiDirectional -FLD0014 CGTGCTGTCA FLD_BiDirectional -FLD0015 GATCGTCTCT FLD_BiDirectional -FLD0016 GTGCTGTCGT FLD_BiDirectional -FLD0017 TGAGCGTGCT FLD_BiDirectional -FLD0018 CATGTCGTCA FLD_BiDirectional -FLD0019 TCAGTGTCTC FLD_BiDirectional -FLD0020 GTGCTCATGT FLD_BiDirectional -FLD0021 CGTATCTCGA FLD_BiDirectional -FLD0022 GTCATGCGTC FLD_BiDirectional -FLD0023 CTATGCGATC FLD_BiDirectional -FLD0024 TGCTATGCTG FLD_BiDirectional -FLD0025 TGTGTGCATG FLD_BiDirectional -FLD0026 GAGTGTCACT FLD_BiDirectional -FLD0027 CTAGTCTCGT FLD_BiDirectional -FLD0028 GAGTGCATCT FLD_BiDirectional -FLD0029 TGCGTAGTCG FLD_BiDirectional -FLD0030 CTGTGTCGTC FLD_BiDirectional -FLD0031 CTGTAGTGCG FLD_BiDirectional -FLD0032 GTGCGCTAGT FLD_BiDirectional -FLD0033 TGTGCTCGCA FLD_BiDirectional -FLD0034 GATGCGAGCT FLD_BiDirectional -FLD0035 CTGTACGTGA FLD_BiDirectional -FLD0036 GCGATGATGA FLD_BiDirectional -FLD0037 TGTCGAGTCA FLD_BiDirectional -FLD0038 GTCTACTGTC FLD_BiDirectional -FLD0039 CAGTCAGAGT FLD_BiDirectional -FLD0040 CGCAGTCTAT FLD_BiDirectional -FLD0041 GTATGAGCAC FLD_BiDirectional -FLD0042 CGAGTGCTGT FLD_BiDirectional -FLD0043 TATAGCACGC FLD_BiDirectional -FLD0044 TCATGCGCGA FLD_BiDirectional -FLD0045 TATGCGCTGC FLD_BiDirectional -FLD0046 TCTCTGTGCA FLD_BiDirectional -FLD0047 CTATCGCGTG FLD_BiDirectional -FLD0048 TACGCTGCTG FLD_BiDirectional -FLD0049 CTGCATGATC FLD_BiDirectional -FLD0050 CGCGTATCAT FLD_BiDirectional -FLD0051 GTATCTCTCG FLD_BiDirectional -FLD0052 GCTCATATGC FLD_BiDirectional -FLD0053 CACTATGTCG FLD_BiDirectional -FLD0054 TAGCGCGTAG FLD_BiDirectional -FLD0055 CGTCACAGTA FLD_BiDirectional -FLD0056 TCGCGTGAGA FLD_BiDirectional -FLD0057 TACATCGCTG FLD_BiDirectional -FLD0058 GTGAGAGACA FLD_BiDirectional -FLD0059 GACTGTACGT FLD_BiDirectional -FLD0060 GCACGTAGCT FLD_BiDirectional -FLD0061 TCACGCTATG FLD_BiDirectional -FLD0062 CGTACTACGT FLD_BiDirectional -FLD0063 CAGCTGAGTA FLD_BiDirectional -FLD0064 GAGATCAGTC FLD_BiDirectional -FLD0065 TACTGAGCTG FLD_BiDirectional -FLD0066 TAGTAGCGCG FLD_BiDirectional -FLD0067 GACGTCTGCT FLD_BiDirectional -FLD0068 GTACTCGCGA FLD_BiDirectional -FLD0069 TCTGAGCGCA FLD_BiDirectional -FLD0070 TAGACGTGCT FLD_BiDirectional -FLD0071 GTGACTCGTC FLD_BiDirectional -FLD0072 TCGAGTAGCG FLD_BiDirectional -FLD0073 CGTATGATGT FLD_BiDirectional -FLD0074 TAGTCTGTCA FLD_BiDirectional -FLD0075 TGTCTCTATC FLD_BiDirectional -FLD0076 CTAGAGTATC FLD_BiDirectional -FLD0077 TATCATGTGC FLD_BiDirectional -FLD0078 CATGAGTGTA FLD_BiDirectional -FLD0079 TGTCGTCATA FLD_BiDirectional -FLD0080 TATCTCATGC FLD_BiDirectional -FLD0081 TGTGTCACTA FLD_BiDirectional -FLD0082 TATCGATGCT FLD_BiDirectional -FLD0083 TAGAGTCTGT FLD_BiDirectional -FLD0084 CATGCATCAT FLD_BiDirectional -FLD0085 TGATCAGTCA FLD_BiDirectional -FLD0086 CGTCTATGAT FLD_BiDirectional -FLD0087 GTGATACTGA FLD_BiDirectional -FLD0088 CTAGATCTGA FLD_BiDirectional -FLD0089 TATCAGTCTG FLD_BiDirectional -FLD0090 TCAGATGCTA FLD_BiDirectional -FLD0091 TATGTACGTG FLD_BiDirectional -FLD0092 CTATACAGTG FLD_BiDirectional -FLD0093 TGATACTCTG FLD_BiDirectional -FLD0094 TCAGCGATAT FLD_BiDirectional -FLD0095 CTACTGATGA FLD_BiDirectional -FLD0096 GTAGTACACA FLD_BiDirectional -FLD0097 TGCTACATCA FLD_BiDirectional -FLD0098 AGTGTGTCTA FLD_BiDirectional -FLD0099 TCATATCGCG FLD_BiDirectional -FLD0100 TACGTATAGC FLD_BiDirectional -FLD0101 CAGCTATAGC FLD_BiDirectional -FLD0102 TCGATGCGCT FLD_BiDirectional -FLD0103 GCACGCGTAT FLD_BiDirectional -FLD0104 GCAGTATGCG FLD_BiDirectional -FLD0105 TGATAGAGAG FLD_BiDirectional -FLD0106 GCTACTAGCG FLD_BiDirectional -FLD0107 TGCGAGACGT FLD_BiDirectional -FLD0108 CGATGACAGA FLD_BiDirectional -FLD0109 GACTCATGCT FLD_BiDirectional -FLD0110 GTCTGATACG FLD_BiDirectional -FLD0111 ACTAGCTGTC FLD_BiDirectional -FLD0112 GCGTAGACGA FLD_BiDirectional -FLD0113 CTCAGCAGTG FLD_BiDirectional -FLD0114 CAGTCTACAT FLD_BiDirectional -FLD0115 TACTGCAGCG FLD_BiDirectional -FLD0116 TACACAGTAG FLD_BiDirectional -FLD0117 CACATACAGT FLD_BiDirectional -FLD0118 CACAGTGATG FLD_BiDirectional -FLD0119 CGAGCTAGCA FLD_BiDirectional -FLD0120 GAGACTATGC FLD_BiDirectional -FLD0121 CAGAGCTAGT FLD_BiDirectional -FLD0122 CGCAGAGCAT FLD_BiDirectional -FLD0123 TGTACAGCGA FLD_BiDirectional -FLD0124 ACGTCAGTAT FLD_BiDirectional -FLD0125 TCACAGCATA FLD_BiDirectional -FLD0126 ACTGCGTGTC FLD_BiDirectional -FLD0127 CGATCGACTG FLD_BiDirectional -FLD0128 GCGAGATGTA FLD_BiDirectional -FLD0129 CTGATGCAGA FLD_BiDirectional -FLD0130 GTGACGTACG FLD_BiDirectional -FLD0131 CGACGCTGAT FLD_BiDirectional -FLD0132 CTACGATCAG FLD_BiDirectional -FLD0133 GCACTAGACA FLD_BiDirectional -FLD0134 CTAGCAGATG FLD_BiDirectional -FLD0135 CATGATACGC FLD_BiDirectional -FLD0136 GCAGCTGTCA FLD_BiDirectional -FLD0137 ACGTATCATC FLD_BiDirectional -FLD0138 AGTATCGTAC FLD_BiDirectional -FLD0139 GATACACTGA FLD_BiDirectional -FLD0140 GACTAGTCAG FLD_BiDirectional -FLD0141 GATGACTACG FLD_BiDirectional -FLD0142 CAGAGAGTCA FLD_BiDirectional -FLD0143 TCGATCGACA FLD_BiDirectional -FLD0144 ACTGATGTAG FLD_BiDirectional -FLD0145 ACTCGATAGT FLD_BiDirectional -FLD0146 GACGATCGCA FLD_BiDirectional -FLD0147 TCATCATGCG FLD_BiDirectional -FLD0148 ACATGTCTGA FLD_BiDirectional -FLD0149 AGTCATCGCA FLD_BiDirectional -FLD0150 TAGCATACAG FLD_BiDirectional -FLD0151 AGAGTCGCGT FLD_BiDirectional -FLD0152 TCTACGACAT FLD_BiDirectional -FLD0153 CACGAGATGA FLD_BiDirectional -FLD0154 ACGCACATAT FLD_BiDirectional -FLD0155 ACGTGCTCTG FLD_BiDirectional -FLD0156 ACGATCACAT FLD_BiDirectional -FLD0157 AGTGTACTCA FLD_BiDirectional -FLD0158 TGATGTATGT FLD_BiDirectional -FLD0159 GATATATGTC FLD_BiDirectional -FLD0160 TAGTACTAGA FLD_BiDirectional -FLD0161 TATAGAGATC FLD_BiDirectional -FLD0162 TCGATATCTA FLD_BiDirectional -FLD0163 TACATGATAG FLD_BiDirectional -FLD0164 TGAGATCATA FLD_BiDirectional -FLD0165 CTACATACTA FLD_BiDirectional -FLD0166 ATCAGTGTAT FLD_BiDirectional -FLD0167 ATCATATCTC FLD_BiDirectional -FLD0168 AGTAGATCAT FLD_BiDirectional -FLD0169 ACATAGTATC FLD_BiDirectional -FLD0170 ATGTATAGTC FLD_BiDirectional -FLD0171 ACAGTCATAT FLD_BiDirectional -FLD0172 ACATATACGT FLD_BiDirectional -FLD0173 AGCATCTATA FLD_BiDirectional -FLD0174 AGACTATATC FLD_BiDirectional -FLD0175 CAGCATCTAG FLD_BiDirectional -FLD0176 CGAGACGACA FLD_BiDirectional -FLD0177 ATCACTCATA FLD_BiDirectional -FLD0178 AGCTCTGTGA FLD_BiDirectional -FLD0179 ATGTCATGCT FLD_BiDirectional -FLD0180 GCTGACAGAG FLD_BiDirectional -FLD0181 ATACAGTCTC FLD_BiDirectional -FLD0182 CATAGACGTG FLD_BiDirectional -FLD0183 AGAGATATCA FLD_BiDirectional -FLD0184 ATGCTGCGCT FLD_BiDirectional -FLD0185 AGTCAGACGC FLD_BiDirectional -FLD0186 ACGATACACT FLD_BiDirectional -FLD0187 AGCGAGTATG FLD_BiDirectional -FLD0188 ATCGCTACAT FLD_BiDirectional -FLD0189 ATGCTAGAGA FLD_BiDirectional -FLD0190 AGCAGTACTC FLD_BiDirectional -FLD0191 ATCTAGATCA FLD_BiDirectional -FLD0192 ATCGCATAGA FLD_BiDirectional -FLD0193 TTGTTGCTGT FLD_BiDirectional -FLD0194 GTGTGGTTGT FLD_BiDirectional -FLD0195 TAGGTGGAAT FLD_BiDirectional -FLD0196 TGTAGGTGGA FLD_BiDirectional -FLD0197 TTAGTGGTGA FLD_BiDirectional -FLD0198 GTGAAGGTAA FLD_BiDirectional -FLD0199 TGTTGTGGTA FLD_BiDirectional -FLD0200 GTTGATGAGT FLD_BiDirectional -FLD0201 GGTCAGTGTA FLD_BiDirectional -FLD0202 GTAATGGAGT FLD_BiDirectional -FLD0203 CTCGTTATTC FLD_BiDirectional -FLD0204 GGAAGTAAGG FLD_BiDirectional -FLD0205 CGGTGTGTGT FLD_BiDirectional -FLD0206 CGTCTTCTTA FLD_BiDirectional -FLD0207 TGTGAATCTC FLD_BiDirectional -FLD0208 CTAATCGTGT FLD_BiDirectional -FLD0209 CTCTTAGTTC FLD_BiDirectional -FLD0210 GGATAGGATC FLD_BiDirectional -FLD0211 GGTGTCTTGT FLD_BiDirectional -FLD0212 GATGGTTGTA FLD_BiDirectional -FLD0213 CCTCGTTGTT FLD_BiDirectional -FLD0214 GGTTGGAGTT FLD_BiDirectional -FLD0215 TGGTGTCCGT FLD_BiDirectional -FLD0216 CGTTAGCGTA FLD_BiDirectional -FLD0217 TACTAGGATC FLD_BiDirectional -FLD0218 GTCTCAATGT FLD_BiDirectional -FLD0219 GATGAGGTAT FLD_BiDirectional -FLD0220 GGTGTTAGTG FLD_BiDirectional -FLD0221 CATTCTCTGA FLD_BiDirectional -FLD0222 CATCTGGAGT FLD_BiDirectional -FLD0223 GAATGGAAGA FLD_BiDirectional -FLD0224 GGCTGTGATC FLD_BiDirectional -FLD0225 TGGTGCTGGA FLD_BiDirectional -FLD0226 TATGGTAAGG FLD_BiDirectional -FLD0227 GTTCGATTGT FLD_BiDirectional -FLD0228 GGTAGAATGA FLD_BiDirectional -FLD0229 TTCTCATCGT FLD_BiDirectional -FLD0230 CTCAATCGTA FLD_BiDirectional -FLD0231 CGCTAATGTA FLD_BiDirectional -FLD0232 GCGTCTGAAT FLD_BiDirectional -FLD0233 TTCTGTTGCC FLD_BiDirectional -FLD0234 TTGTCCTTGC FLD_BiDirectional -FLD0235 CCTGTGTAGA FLD_BiDirectional -FLD0236 GATAAGAAGG FLD_BiDirectional -FLD0237 CAGGTCACAT FLD_BiDirectional -FLD0238 GCCATGTCAT FLD_BiDirectional -FLD0239 TCTGCCTATA FLD_BiDirectional -FLD0240 CTTAGTTCGC FLD_BiDirectional -FLD0241 CGTAATGAGC FLD_BiDirectional -FLD0242 TTGCTTAGTC FLD_BiDirectional -FLD0243 TCTTGTTCAC FLD_BiDirectional -FLD0244 GTGGCTTCGT FLD_BiDirectional -FLD0245 TGTTCGATAG FLD_BiDirectional -FLD0246 TCATTCAGTG FLD_BiDirectional -FLD0247 GTGGAGAGCT FLD_BiDirectional -FLD0248 GTAGAAGTGG FLD_BiDirectional -FLD0249 TGGAGCATGT FLD_BiDirectional -FLD0250 GAAGGAGATA FLD_BiDirectional -FLD0251 CGAATGTATG FLD_BiDirectional -FLD0252 TCGTGAATGA FLD_BiDirectional -FLD0253 GAATAGCTGA FLD_BiDirectional -FLD0254 TTGTCACATC FLD_BiDirectional -FLD0255 CTGGAGGCTA FLD_BiDirectional -FLD0256 TGTCAGCTTA FLD_BiDirectional -FLD0257 GTTCTTCGTA FLD_BiDirectional -FLD0258 TTACACGTTC FLD_BiDirectional -FLD0259 GTAGCCAGTA FLD_BiDirectional -FLD0260 TGAGAAGGTA FLD_BiDirectional -FLD0261 CCATATGATC FLD_BiDirectional -FLD0262 CGATCCTATA FLD_BiDirectional -FLD0263 TGACTAGCTT FLD_BiDirectional -FLD0264 TAACTCTGCT FLD_BiDirectional -FLD0265 TCGAATGTGC FLD_BiDirectional -FLD0266 TCGCTGAACA FLD_BiDirectional -FLD0267 GCGTTATTGC FLD_BiDirectional -FLD0268 GAACTATCAC FLD_BiDirectional -FLD0269 TCGAGGTACT FLD_BiDirectional -FLD0270 TGCGGATGGT FLD_BiDirectional -FLD0271 TTCGAGCTAT FLD_BiDirectional -FLD0272 GGTCTGGTGT FLD_BiDirectional -FLD0273 CTAAGTCATG FLD_BiDirectional -FLD0274 TTGCAGATCA FLD_BiDirectional -FLD0275 CTGCGAATGT FLD_BiDirectional -FLD0276 CTGTTCTAGC FLD_BiDirectional -FLD0277 CACTTGTGTG FLD_BiDirectional -FLD0278 TGGATGACAT FLD_BiDirectional -FLD0279 GATCCTGAGC FLD_BiDirectional -FLD0280 GTCGGTCTGA FLD_BiDirectional -FLD0281 TGTTACGATC FLD_BiDirectional -FLD0282 GTCTTGGCTC FLD_BiDirectional -FLD0283 GGTCGTGCAT FLD_BiDirectional -FLD0284 CAGGCTCAGT FLD_BiDirectional -FLD0285 TAGCTTCACT FLD_BiDirectional -FLD0286 CAGATGTCCT FLD_BiDirectional -FLD0287 TTACGCAGTG FLD_BiDirectional -FLD0288 TTCGTTCCTG FLD_BiDirectional -FLD0289 CACTGCTTGA FLD_BiDirectional -FLD0290 TCTAGCGTGG FLD_BiDirectional -FLD0291 GCATAATCGC FLD_BiDirectional -FLD0292 GTCGTAACAC FLD_BiDirectional -FLD0293 GAGATTGCTA FLD_BiDirectional -FLD0294 GGACAGATGG FLD_BiDirectional -FLD0295 CTTACGTTGC FLD_BiDirectional -FLD0296 GTGTTCGGTC FLD_BiDirectional -FLD0297 CTCAAGAAGC FLD_BiDirectional -FLD0298 TCTCGGATAG FLD_BiDirectional -FLD0299 CTCTGGACGA FLD_BiDirectional -FLD0300 CGAGCATTGT FLD_BiDirectional -FLD0301 CCAAGAAGAA FLD_BiDirectional -FLD0302 TCCTTGTTCT FLD_BiDirectional -FLD0303 GTAACGATGT FLD_BiDirectional -FLD0304 TGGACTCAGA FLD_BiDirectional -FLD0305 GGCATCATGC FLD_BiDirectional -FLD0306 GTATAACGCT FLD_BiDirectional -FLD0307 GCAGATAAGT FLD_BiDirectional -FLD0308 GTCGGCTCTA FLD_BiDirectional -FLD0309 TTCGATAGCA FLD_BiDirectional -FLD0310 GTCTAGCAGG FLD_BiDirectional -FLD0311 GGAACACAGG FLD_BiDirectional -FLD0312 TGGTTCGCTG FLD_BiDirectional -FLD0313 CACATTAGCG FLD_BiDirectional -FLD0314 GAAGCGCACT FLD_BiDirectional -FLD0315 GCATGCCAGT FLD_BiDirectional -FLD0316 GGAGACTGTA FLD_BiDirectional -FLD0317 TCGAACTGCA FLD_BiDirectional -FLD0318 GAGAGGACAT FLD_BiDirectional -FLD0319 GAGCACGGAA FLD_BiDirectional -FLD0320 GCTCTAACAT FLD_BiDirectional -FLD0321 TGCTGGCTTG FLD_BiDirectional -FLD0322 TGCATGGAGC FLD_BiDirectional -FLD0323 GTACTAAGAG FLD_BiDirectional -FLD0324 GAAGTCAAGC FLD_BiDirectional -FLD0325 GCGCATTATG FLD_BiDirectional -FLD0326 GTCCAGACAT FLD_BiDirectional -FLD0327 GAGACCTCTA FLD_BiDirectional -FLD0328 TTGCACTCAG FLD_BiDirectional -FLD0329 TGCGGCGATA FLD_BiDirectional -FLD0330 AGTTGCTAGT FLD_BiDirectional -FLD0331 AGGATTGAGG FLD_BiDirectional -FLD0332 CCAGAACAGA FLD_BiDirectional -FLD0333 CGTCAAGCAT FLD_BiDirectional -FLD0334 TTGTCGAGAC FLD_BiDirectional -FLD0335 GACAGGTGAC FLD_BiDirectional -FLD0336 CTGACAAGTG FLD_BiDirectional -FLD0337 CACGAAGAGC FLD_BiDirectional -FLD0338 CATACCTGAT FLD_BiDirectional -FLD0339 GACGTGCTTC FLD_BiDirectional -FLD0340 ATTGTGGAGT FLD_BiDirectional -FLD0341 TCTGGTCTCA FLD_BiDirectional -FLD0342 AGGTAAGAGG FLD_BiDirectional -FLD0343 TCCTGACAGA FLD_BiDirectional -FLD0344 GCACTGTTGC FLD_BiDirectional -FLD0345 ACCATGAGTC FLD_BiDirectional -FLD0346 AATGCAGTGT FLD_BiDirectional -FLD0347 ATATGGTGGA FLD_BiDirectional -FLD0348 ACTCAGTTAC FLD_BiDirectional -FLD0349 AAGTGCGATG FLD_BiDirectional -FLD0350 CCACAGAGTG FLD_BiDirectional -FLD0351 AGTGGTGATC FLD_BiDirectional -FLD0352 ACTTCTTAGC FLD_BiDirectional -FLD0353 GCCACATATA FLD_BiDirectional -FLD0354 ACGCAGGAGT FLD_BiDirectional -FLD0355 AATATGCTGC FLD_BiDirectional -FLD0356 AAGCGTAGAA FLD_BiDirectional -FLD0357 GACAGCAAGC FLD_BiDirectional -FLD0358 CTGACCGAGA FLD_BiDirectional -FLD0359 CGCGACTTGT FLD_BiDirectional -FLD0360 CATCAACATG FLD_BiDirectional -FLD0361 TGGCTACGCT FLD_BiDirectional -FLD0362 ACGCGGACTA FLD_BiDirectional -FLD0363 AGAGGTCGGA FLD_BiDirectional -FLD0364 AATCGAGCGT FLD_BiDirectional -FLD0365 AAGTACACTC FLD_BiDirectional -FLD0366 AGCTGAATGA FLD_BiDirectional -FLD0367 ATGCCTATCA FLD_BiDirectional -FLD0368 ACTGTAGGAC FLD_BiDirectional -FLD0369 ATAGCCGTGT FLD_BiDirectional -FLD0370 TCACGACGAA FLD_BiDirectional -FLD0371 ATCTGTCCAT FLD_BiDirectional -FLD0372 ACTTAGAGAG FLD_BiDirectional -FLD0373 AGTGGCAGGT FLD_BiDirectional -FLD0374 ATGAGGTCGT FLD_BiDirectional -FLD0375 AGGAGAAGGA FLD_BiDirectional -FLD0376 ACAACTGCAA FLD_BiDirectional -FLD0377 ATTAGCGAGT FLD_BiDirectional -FLD0378 ACAACGAACA FLD_BiDirectional -FLD0379 AGAGCGCCAA FLD_BiDirectional -FLD0380 AGGTAGCTCA FLD_BiDirectional -FLD0381 AACGCCAAGA FLD_BiDirectional -FLD0382 AAGGTATGAG FLD_BiDirectional -FLD0383 ATGGAGCACT FLD_BiDirectional -FLD0384 ACGGTGCTAG FLD_BiDirectional -NGOBC1 AAGGGA NuGen_Ovation -NGOBC2 CCTTCA NuGen_Ovation -NGOBC3 GGACCC NuGen_Ovation -NGOBC4 TTCAGC NuGen_Ovation -NGOBC5 AAGACG NuGen_Ovation -NGOBC6 CCTCGG NuGen_Ovation -NGOBC7 GGATGT NuGen_Ovation -NGOBC8 TTCGCT NuGen_Ovation -NGOBC9 ACACGA NuGen_Ovation -NGOBC10 CACACA NuGen_Ovation -NGOBC11 GTGTTA NuGen_Ovation -NGOBC12 TGTGAA NuGen_Ovation -NGOBC13 ACAAAC NuGen_Ovation -NGOBC14 CACCTC NuGen_Ovation -NGOBC15 GTGGCC NuGen_Ovation -NGOBC16 TGTTGC NuGen_Ovation -ION1 CTAAGGTAAC IonXpress -ION2 TAAGGAGAAC IonXpress -ION3 AAGAGGATTC IonXpress -ION4 TACCAAGATC IonXpress -ION5 CAGAAGGAAC IonXpress -ION6 CTGCAAGTTC IonXpress -ION7 TTCGTGATTC IonXpress -ION8 TTCCGATAAC IonXpress -ION9 TGAGCGGAAC IonXpress -ION10 CTGACCGAAC IonXpress -ION11 TCCTCGAATC IonXpress -ION12 TAGGTGGTTC IonXpress -ION13 TCTAACGGAC IonXpress -ION14 TTGGAGTGTC IonXpress -ION15 TCTAGAGGTC IonXpress -ION16 TCTGGATGAC IonXpress -ION17 TCTATTCGTC IonXpress -ION18 AGGCAATTGC IonXpress -ION19 TTAGTCGGAC IonXpress -ION20 CAGATCCATC IonXpress -ION21 TCGCAATTAC IonXpress -ION22 TTCGAGACGC IonXpress -ION23 TGCCACGAAC IonXpress -ION24 AACCTCATTC IonXpress -ION25 CCTGAGATAC IonXpress -ION26 TTACAACCTC IonXpress -ION27 AACCATCCGC IonXpress -ION28 ATCCGGAATC IonXpress -ION29 TCGACCACTC IonXpress -ION30 CGAGGTTATC IonXpress -ION31 TCCAAGCTGC IonXpress -ION32 TCTTACACAC IonXpress -ION33 TTCTCATTGAAC IonXpress -ION34 TCGCATCGTTC IonXpress -ION35 TAAGCCATTGTC IonXpress -ION36 AAGGAATCGTC IonXpress -ION37 CTTGAGAATGTC IonXpress -ION38 TGGAGGACGGAC IonXpress -ION39 TAACAATCGGC IonXpress -ION40 CTGACATAATC IonXpress -ION41 TTCCACTTCGC IonXpress -ION42 AGCACGAATC IonXpress -ION43 CTTGACACCGC IonXpress -ION44 TTGGAGGCCAGC IonXpress -ION45 TGGAGCTTCCTC IonXpress -ION46 TCAGTCCGAAC IonXpress -ION47 TAAGGCAACCAC IonXpress -ION48 TTCTAAGAGAC IonXpress -ION49 TCCTAACATAAC IonXpress -ION50 CGGACAATGGC IonXpress -ION51 TTGAGCCTATTC IonXpress -ION52 CCGCATGGAAC IonXpress -ION53 CTGGCAATCCTC IonXpress -ION54 CCGGAGAATCGC IonXpress -ION55 TCCACCTCCTC IonXpress -ION56 CAGCATTAATTC IonXpress -ION57 TCTGGCAACGGC IonXpress -ION58 TCCTAGAACAC IonXpress -ION59 TCCTTGATGTTC IonXpress -ION60 TCTAGCTCTTC IonXpress -ION61 TCACTCGGATC IonXpress -ION62 TTCCTGCTTCAC IonXpress -ION63 CCTTAGAGTTC IonXpress -ION64 CTGAGTTCCGAC IonXpress -ION65 TCCTGGCACATC IonXpress -ION66 CCGCAATCATC IonXpress -ION67 TTCCTACCAGTC IonXpress -ION68 TCAAGAAGTTC IonXpress -ION69 TTCAATTGGC IonXpress -ION70 CCTACTGGTC IonXpress -ION71 TGAGGCTCCGAC IonXpress -ION72 CGAAGGCCACAC IonXpress -ION73 TCTGCCTGTC IonXpress -ION74 CGATCGGTTC IonXpress -ION75 TCAGGAATAC IonXpress -ION76 CGGAAGAACCTC IonXpress -ION77 CGAAGCGATTC IonXpress -ION78 CAGCCAATTCTC IonXpress -ION79 CCTGGTTGTC IonXpress -ION80 TCGAAGGCAGGC IonXpress -ION81 CCTGCCATTCGC IonXpress -ION82 TTGGCATCTC IonXpress -ION83 CTAGGACATTC IonXpress -ION84 CTTCCATAAC IonXpress -ION85 CCAGCCTCAAC IonXpress -ION86 CTTGGTTATTC IonXpress -ION87 TTGGCTGGAC IonXpress -ION88 CCGAACACTTC IonXpress -ION89 TCCTGAATCTC IonXpress -ION90 CTAACCACGGC IonXpress -ION91 CGGAAGGATGC IonXpress -ION92 CTAGGAACCGC IonXpress -ION93 CTTGTCCAATC IonXpress -ION94 TCCGACAAGC IonXpress -ION95 CGGACAGATC IonXpress -ION96 TTAAGCGGTC IonXpress -NGEBC1 AACCAG NuGen_Encore -NGEBC2 TGGTGA NuGen_Encore -NGEBC3 AGTGAG NuGen_Encore -NGEBC4 GCACTA NuGen_Encore -NGEBC5 ACCTCA NuGen_Encore -NGEBC6 GTGCTT NuGen_Encore -NGEBC7 AAGCCT NuGen_Encore -NGEBC8 GTCGTA NuGen_Encore -NGEBC9 AAGAGG NuGen_Encore -NGEBC10 GGAGAA NuGen_Encore -NGEBC11 AGCATG NuGen_Encore -NGEBC12 GAGTCA NuGen_Encore -NGEBC13 CGTAGA NuGen_Encore -NGEBC14 TCAGAG NuGen_Encore -NGEBC15 CACAGT NuGen_Encore -NGEBC16 TTGGCA NuGen_Encore -N701 TAAGGCGA Nextera_XT1 -N702 CGTACTAG Nextera_XT1 -N703 AGGCAGAA Nextera_XT1 -N704 TCCTGAGC Nextera_XT1 -N705 GGACTCCT Nextera_XT1 -N706 TAGGCATG Nextera_XT1 -N707 CTCTCTAC Nextera_XT1 -N708 CAGAGAGG Nextera_XT1 -N709 GCTACGCT Nextera_XT1 -N710 CGAGGCTG Nextera_XT1 -N711 AAGAGGCA Nextera_XT1 -N712 GTAGAGGA Nextera_XT1 -A701 ATCACGAC Nextera_TSACP1 -A702 ACAGTGGT Nextera_TSACP1 -A703 CAGATCCA Nextera_TSACP1 -A704 ACAAACGG Nextera_TSACP1 -A705 ACCCAGCA Nextera_TSACP1 -A706 AACCCCTC Nextera_TSACP1 -A707 CCCAACCT Nextera_TSACP1 -A708 CACCACAC Nextera_TSACP1 -A709 GAAACCCA Nextera_TSACP1 -A710 TGTGACCA Nextera_TSACP1 -A711 AGGGTCAA Nextera_TSACP1 -A712 AGGAGTGG Nextera_TSACP1 -SSXT96-1 AACGTGAT SureSelect_XT_96_barcodes -SSXT96-2 AAACATCG SureSelect_XT_96_barcodes -SSXT96-3 ATGCCTAA SureSelect_XT_96_barcodes -SSXT96-4 AGTGGTCA SureSelect_XT_96_barcodes -SSXT96-5 ACCACTGT SureSelect_XT_96_barcodes -SSXT96-6 ACATTGGC SureSelect_XT_96_barcodes -SSXT96-7 CAGATCTG SureSelect_XT_96_barcodes -SSXT96-8 CATCAAGT SureSelect_XT_96_barcodes -SSXT96-9 CGCTGATC SureSelect_XT_96_barcodes -SSXT96-10 ACAAGCTA SureSelect_XT_96_barcodes -SSXT96-11 CTGTAGCC SureSelect_XT_96_barcodes -SSXT96-12 AGTACAAG SureSelect_XT_96_barcodes -SSXT96-13 AACAACCA SureSelect_XT_96_barcodes -SSXT96-14 AACCGAGA SureSelect_XT_96_barcodes -SSXT96-15 AACGCTTA SureSelect_XT_96_barcodes -SSXT96-16 AAGACGGA SureSelect_XT_96_barcodes -SSXT96-17 AAGGTACA SureSelect_XT_96_barcodes -SSXT96-18 ACACAGAA SureSelect_XT_96_barcodes -SSXT96-19 ACAGCAGA SureSelect_XT_96_barcodes -SSXT96-20 ACCTCCAA SureSelect_XT_96_barcodes -SSXT96-21 ACGCTCGA SureSelect_XT_96_barcodes -SSXT96-22 ACGTATCA SureSelect_XT_96_barcodes -SSXT96-23 ACTATGCA SureSelect_XT_96_barcodes -SSXT96-24 AGAGTCAA SureSelect_XT_96_barcodes -SSXT96-25 AGATCGCA SureSelect_XT_96_barcodes -SSXT96-26 AGCAGGAA SureSelect_XT_96_barcodes -SSXT96-27 AGTCACTA SureSelect_XT_96_barcodes -SSXT96-28 ATCCTGTA SureSelect_XT_96_barcodes -SSXT96-29 ATTGAGGA SureSelect_XT_96_barcodes -SSXT96-30 CAACCACA SureSelect_XT_96_barcodes -SSXT96-31 CAAGACTA SureSelect_XT_96_barcodes -SSXT96-32 CAATGGAA SureSelect_XT_96_barcodes -SSXT96-33 CACTTCGA SureSelect_XT_96_barcodes -SSXT96-34 CAGCGTTA SureSelect_XT_96_barcodes -SSXT96-35 CATACCAA SureSelect_XT_96_barcodes -SSXT96-36 CCAGTTCA SureSelect_XT_96_barcodes -SSXT96-37 CCGAAGTA SureSelect_XT_96_barcodes -SSXT96-38 CCGTGAGA SureSelect_XT_96_barcodes -SSXT96-39 CCTCCTGA SureSelect_XT_96_barcodes -SSXT96-40 CGAACTTA SureSelect_XT_96_barcodes -SSXT96-41 CGACTGGA SureSelect_XT_96_barcodes -SSXT96-42 CGCATACA SureSelect_XT_96_barcodes -SSXT96-43 CTCAATGA SureSelect_XT_96_barcodes -SSXT96-44 CTGAGCCA SureSelect_XT_96_barcodes -SSXT96-45 CTGGCATA SureSelect_XT_96_barcodes -SSXT96-46 GAATCTGA SureSelect_XT_96_barcodes -SSXT96-47 GACTAGTA SureSelect_XT_96_barcodes -SSXT96-48 GAGCTGAA SureSelect_XT_96_barcodes -SSXT96-49 GATAGACA SureSelect_XT_96_barcodes -SSXT96-50 GCCACATA SureSelect_XT_96_barcodes -SSXT96-51 GCGAGTAA SureSelect_XT_96_barcodes -SSXT96-52 GCTAACGA SureSelect_XT_96_barcodes -SSXT96-53 GCTCGGTA SureSelect_XT_96_barcodes -SSXT96-54 GGAGAACA SureSelect_XT_96_barcodes -SSXT96-55 GGTGCGAA SureSelect_XT_96_barcodes -SSXT96-56 GTACGCAA SureSelect_XT_96_barcodes -SSXT96-57 GTCGTAGA SureSelect_XT_96_barcodes -SSXT96-58 GTCTGTCA SureSelect_XT_96_barcodes -SSXT96-59 GTGTTCTA SureSelect_XT_96_barcodes -SSXT96-60 TAGGATGA SureSelect_XT_96_barcodes -SSXT96-61 TATCAGCA SureSelect_XT_96_barcodes -SSXT96-62 TCCGTCTA SureSelect_XT_96_barcodes -SSXT96-63 TCTTCACA SureSelect_XT_96_barcodes -SSXT96-64 TGAAGAGA SureSelect_XT_96_barcodes -SSXT96-65 TGGAACAA SureSelect_XT_96_barcodes -SSXT96-66 TGGCTTCA SureSelect_XT_96_barcodes -SSXT96-67 TGGTGGTA SureSelect_XT_96_barcodes -SSXT96-68 TTCACGCA SureSelect_XT_96_barcodes -SSXT96-69 AACTCACC SureSelect_XT_96_barcodes -SSXT96-70 AAGAGATC SureSelect_XT_96_barcodes -SSXT96-71 AAGGACAC SureSelect_XT_96_barcodes -SSXT96-72 AATCCGTC SureSelect_XT_96_barcodes -SSXT96-73 AATGTTGC SureSelect_XT_96_barcodes -SSXT96-74 ACACGACC SureSelect_XT_96_barcodes -SSXT96-75 ACAGATTC SureSelect_XT_96_barcodes -SSXT96-76 AGATGTAC SureSelect_XT_96_barcodes -SSXT96-77 AGCACCTC SureSelect_XT_96_barcodes -SSXT96-78 AGCCATGC SureSelect_XT_96_barcodes -SSXT96-79 AGGCTAAC SureSelect_XT_96_barcodes -SSXT96-80 ATAGCGAC SureSelect_XT_96_barcodes -SSXT96-81 ATCATTCC SureSelect_XT_96_barcodes -SSXT96-82 ATTGGCTC SureSelect_XT_96_barcodes -SSXT96-83 CAAGGAGC SureSelect_XT_96_barcodes -SSXT96-84 CACCTTAC SureSelect_XT_96_barcodes -SSXT96-85 CCATCCTC SureSelect_XT_96_barcodes -SSXT96-86 CCGACAAC SureSelect_XT_96_barcodes -SSXT96-87 CCTAATCC SureSelect_XT_96_barcodes -SSXT96-88 CCTCTATC SureSelect_XT_96_barcodes -SSXT96-89 CGACACAC SureSelect_XT_96_barcodes -SSXT96-90 CGGATTGC SureSelect_XT_96_barcodes -SSXT96-91 CTAAGGTC SureSelect_XT_96_barcodes -SSXT96-92 GAACAGGC SureSelect_XT_96_barcodes -SSXT96-93 GACAGTGC SureSelect_XT_96_barcodes -SSXT96-94 GAGTTAGC SureSelect_XT_96_barcodes -SSXT96-95 GATGAATC SureSelect_XT_96_barcodes -SSXT96-96 GCCAAGAC SureSelect_XT_96_barcodes -NGOTEBC1 CACGTCTANNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC2 AGCTAGTGNNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC3 ACTATCGCNNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC4 GCGTATCANNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC5 ACTCTCCANNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC6 CGTCCATTNNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC7 AGCCGTAANNNNNN Nugen_Ovation_Target_Enrichment -NGOTEBC8 GAGTAGAGNNNNNN Nugen_Ovation_Target_Enrichment - diff --git a/clipper/t/in/multx/mxtest-h_1.fastq b/clipper/t/in/multx/mxtest-h_1.fastq deleted file mode 100644 index 27f1e4b..0000000 --- a/clipper/t/in/multx/mxtest-h_1.fastq +++ /dev/null @@ -1,1000 +0,0 @@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1230:2118 1:N:0::ACAGNNN -GTATNGAATTATTTTTCTCTGAATAATTTTTAGGAGTTCTTTTATTCTAGACATCAATCATTTGTCAGTTTTNTA -+ -@@@F#2=BFHAHDHHIGIIIIGIFFDFHIIIIIIDC9B@B?FHCDHEFH4EGEEHI8BFC### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1196:2124 1:N:0::GCCANNN -GCAAACCACTATATATTGCTTGTATCTATCAGCTTCTGGTCAGATACATTTTGTCTATGGAACCTTTCCAACNCA -+ -@<@BDE?BBFHHGIDGIBIFHGICHHICFDHE@FHH>GE@@CFDHC??DGIJ@GAEIGGA?BB6=CFBBFH#### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1211:2126 1:N:0::GCCANNN -ACACCCAAAGACATCTCTCAACTTGGAGAGTAATTCAGTCCTCAACATCTCCTGAAAGATCGGAAGAGCACANGT -+ -8??AADDD??D:CE@E?CE?BDHHGGCCA>EHDD#### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1179:2187 1:N:0::ACAGNNN -GGTTCAAGTGTATTTTCTGTAACAGANNNNTATTTGGAATGTTTTTCTTTTCCCCTTATAAATTGTAATTCCNGA -+ -<@@DFDDDDH?FDGGIGGGDHEHGFCHA: -@HWI-ST1131:111228:C0B0NACXX:2:1101:1387:2124 1:N:0::TGACCAA -GGGAGGGGGTGATCTAAAACACTCTTTACGCCGGCTTCTATTGACTTGGGTTAATCGTGTGACCGCGGTGGCTGG -+ -B@CDDFFFH@FFHJJJJJJJIIJJJJJJGIIJJJGHFFFFFFFCEEECED?BBDEDDB?AACD:555>5@DBDDB -@HWI-ST1131:111228:C0B0NACXX:2:1101:1323:2146 1:N:0::TGACCAA -CCCAGCCTTTGCTGTAGCACACACATATATCACTGAACCTGTTTGAAATAAAGTTTTTTTTCTTTTTCATGATTC -+ -CCCFFFFFHHHFHJHIJIJJIIIJJJIIJJFIJIJHIJJJJIIEIG?FGHIEDFGHIJJIH>EHFFFDDFEEC>@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1422:2148 1:N:0::TGACCAA -GGAAGGTGGAGTGGGTTTGGGGCTAGGTTTAGCACCGCAAGGGAAAGATGAAAAATTATAACCAAGCATAATATA -+ -B@@FFFBDHFHDHIJGIJJJIIIIJII?GHIJIJJJJJIIIJJHGGGFIIIHHGHHFFFFFFECDEDDCDDDCDA -@HWI-ST1131:111228:C0B0NACXX:2:1101:1344:2152 1:N:0::CGATGTA -TCCAGCCTGTCACGCCTCCTCCACTGCTGATATCTCCATTTTCACTGTTGGGCTCTTTTACAGGGGTCTTTCGAA -+ -@@@9C339):?B*9DG9)9BF@C<FFFHJJJGIIIJJJIIJ@EAGHGIGIJJJDHII>GHHGGIJAHGGGHEHGID@FFHIFG;FGCCHA -@HWI-ST1131:111228:C0B0NACXX:2:1101:1342:2181 1:N:0::CGATGTA -CAACCCAATGGACAGCTCACTGCTCTTTAACAGTCAAGCCTCTGTTGTTTTAGTCAATCTCACTTTCTTAGCCAA -+ -CCCFFFFFHHHGHIJJGIJJJIJJJJJJEHGJIJJIIGGIGGIJHGIGHIIFHGGGHHIIJGGDHIIJIIEGGHA -@HWI-ST1131:111228:C0B0NACXX:2:1101:1326:2195 1:N:0::TGACCAA -ACTTTGTGTTTGAGAGCACACCCGTCTATGTAGCAAAATAGTGGGACGATTTATAGGTAGAGGCGACAAACCTAC -+ -?@@1ADA+AC>C?:+2?DA?DF98(7'7@;)=77C@D>C############## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1404:2198 1:N:0::TGACCAA -GTGGAGGACTTTTTATAGTGCGTTATACGTATTTTCTTAGAAACATCGTGCATGTGCATTGTTAAACACAACGTT -+ -CBCFFFFFHHHHHJHIHJHIIIHIJIEHICGHIJJJIJJJEG>FIIJIHHIHIJGIIHHIJJJIAEGIGIECHE> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1365:2202 1:N:0::TGACCAA -TACTTCCGACTTCCTCCCTGTGAAAATGTGGATTTGCAGAGACCCAATGGTCTGTGATCATTGAAAAAGAGGAAA -+ -C@CFFFFFHHHGFGIJJJJIIJHIJJHJGHIIIJJJIJIJJGHIJEGGHIIIIIIIIIGIJIGCHIJIEEEHE@3 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1497:2206 1:N:3586::ACAGTGA -AGTATGGCCCGGGGGATCCGTTAGCTATCGTTCGCGAGAAAGTTAGTAGACACACAGGACCCAGGCGTGCAAGTT -+ -@@;?DDD=DBFDA@F<@BEF;B1B@C@F3;@E2-''33335;AB5@A############################ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1311:2219 1:N:0::ACAGTGA -TTTGTGTTTGATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT -+ -???DD3BDDD8,C@EIEEIDADD/'','3;:::5::1::::&638::-<<<558<8?873<7>>>9>> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1395:2221 1:N:0::TGACCAA -TCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAGACTACGAAAGTGGCT -+ -@CCDDDDFHHDDBHIIJIJIIDGGBGGIFIFFHIGIGIJJJEIIJIFDCGHIG>=BEIHBGEGIGIFEGHGB??DG@BFCDCC::?C@AC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1456:2233 1:N:0::CGATGTA -CGTTCTGGTAAAAAGCTGGAAGATGGCCCTAAATTCTTGAAGTCTGGTGATGCTGCCATTGTTGATATGGTTCCT -+ -CC@FFFFFHHGGGGIJJJJIJJGIIIIJJJJJGHIJJJIGGIJJJJJFHIIIJIJIJDHHJGIJJICHIJJJIJA -@HWI-ST1131:111228:C0B0NACXX:2:1101:1298:2234 1:N:0::ACAGTGN -ACCACTTGTATTTGGTCTCCAAGGTCCCAGTAACTTTACCAGTGTCTGTATTAGATGAACCGGACGTTGTAAATT -+ -;?:+=BDDDDDDE9EEFIIEE@*:?@DDCAE4?D?D*BD4BD;D############# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1327:2242 1:N:0::CGATGTA -TGTGTTTGACTATATTTTTAACTATAGATGGTCCCTAACTTACAATGGTTCAAATTATGATTCTTCAACTTTATG -+ -@@@DDDDFFFHFHCGGGBEHIEH9CCFHIIJ3CFD@HHE>EGIG@GH>>GGHGICGGH<@F@FGIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:1426:2246 1:N:0::CGATGTA -CAGTTAAATTTACAAGGGGATTTAGAGGGTTCTGTGGGCAAATTTAAAGTTGAACTAAGATTCTATCTTGGACAA -+ -CCCFFFFFHHHHHIIIIJJGHJJIJGHIJEGIJJJJJJJIGGGIJJIGIGHGHHIIIGIIGIJGIIJJJIFEHHC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1287:2250 1:N:0::TGACCNN -AATGGAAGCAAGCAAAACTAAATTATTTTCTAGGTGCTGTAATATTTCATTTGATAAGGTAGCAAAAGGATAGGA -+ -@@@7D8DDCH?DB;GGE>FHHGII9FHGGEFHDBG@FHGH@CCCFGIGGGGHIABBDHI?F3?<88B;CCFIA@@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1637:2116 1:N:0::GCCAATA -AGGANAAAACCTTGTAGAGAGAGTAAAAAATTTAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAG -+ -@@@D#2ADBFFFFIIIIIIIIIIFGH@FHH@HHI@HCDHI@DGGGHFGGGEGIGIIII>)?BFCHIGCHHIBHIA:CGHIIG4 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1719:2132 1:N:0::CGATGTA -GGCAAAGGGAGATGGTGGCAAAAAGGTTTAGATGCAGGAGAACAGTAAGATGGATGGTTCCGGCCAGAGTCGATG -+ -CCCFFFFFHGHFHIICFIJJJJJJJICGHIJJJJJJJJJJIGGGIFIEHGGIIIJJJGGGHJJGHBEFD>CDBBD -@HWI-ST1131:111228:C0B0NACXX:2:1101:1530:2132 1:N:0::ACAGTGA -GCCTACCATGGTGACCACGGGTGACGGGGAATCAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCAC -+ -@@CF?DBDFHFHHBHEHIIIIF>FECGHIEBGIIGIIIFIGGGHIHAHGHFBD@ADDDCDCDDDDDB?B;@DC:: -@HWI-ST1131:111228:C0B0NACXX:2:1101:1501:2136 1:N:0::TGACCAA -CTCAGGGTTTGTTATAATTTTTTATTTTTATGGGCTTTGGTGAGGGAGGTAGGTGGTAGTTTGTGTTTAATATTT -+ -@@CDDDF?FHDFFIIJIEHJJJJIIGEIJIGH@AH@FIJGDHIGJJGEHC@AACGIACC7AAE>E@@DBCDCEDE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1556:2139 1:N:0::ACAGTGA -GTGTGTAGTCTAAGGTCAAACAGTGTTTGTCCCCTTTTATAAATTCACAATGTGTAATAGCATGTTCAAAACTCT -+ -CBCFFFFFHHHHHJJHHHHJJGJGJIIIIIJJJJJIJJIJHFIIJJJJJJIIGIIIJJJJJJIIHIJIGIIIIII -@HWI-ST1131:111228:C0B0NACXX:2:1101:1641:2143 1:N:0::TGACCAA -TGAAAAATGTTTAATACACTATTGGATTTTTTATTTCCTTTTTTTGATTCAGCTTATACCCGGGCTGAAAACCTC -+ -CCCFFFFFHHHHHJJJJJIJGIJJJ@FHIJJJGIJJJJIJJJJJJJIIJJJJJJJGIGIHIHHFFDCEDDDDDDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1689:2148 1:N:0::ACAGTGA -GAATATATGAATAAAAATTTCATAAAACTATATTAAGCAGATGAGAATCTGGCAAAAATATAAGGGCTGTGTAAT -+ -CCCFFFFFHHHHHJIJJIIJJIJJJIJJJJJIJJJGIJJIJEHIJJJJJJIIJJJJJJIIIIJJIJIEGGGHIIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:1668:2150 1:N:0::ACAGTGA -AAATTGGGAAGAGTAGAAAACTTCAGGAAATGTATTTGTTCCAGAGATTTCTGAAAATGACTCAAATAATATATA -+ -@@CFDD>DFHHGH4CBFHDGHEHFGEEHFIIIIC9EGIGEFFGIBGIIJICEHHIIIHIIG@GCFFHJEGGIIJG -@HWI-ST1131:111228:C0B0NACXX:2:1101:1597:2151 1:N:0::GCCAATA -GTCTTGTGCACTTAGCAGCAGGGGCCACAGTTCTCCCATAAATTCTCGAGCATTTTTTCCATTCAAAAATCCAGA -+ -<@@ADABBBBFHDBF;3@# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1509:2166 1:N:0::ACAGTGA -TCTTGAGTAATTGCCTGTTGGGTTGGTGTCATCCTGACTTGGGCCGGAGAGTGGTGAGCTAACTATTCGTACTCC -+ -;8?DA;BAFH?BHIEHACCA@;A??BC< -@HWI-ST1131:111228:C0B0NACXX:2:1101:1740:2167 1:N:0::TGACCAA -GTTAGAACTAAATACAAAAATCTAACTTCTCACTGGCTCCAGTTTCCTACCTATGTTGAGTATTTTTGCGTTGCA -+ -CB@FFFFFHHHHHJJJJJJJJJJJJJJJIJJJJJIIIJJJEIFHIJIJJIJJEGGGFGHI@FFGIDGBGHHIBEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1591:2169 1:N:0::CGATGTA -TTTATTTAACTTGTGGAACAAAAATAAACCAGATTAACCACAACCATGCCTTACTTTATCAAATGTATAAGAAGT -+ -CCCDFFFDHHHHHEHIICGEFGI@GEHIJJEHIJIGIJJJJIJIJGJIJJFHCGGIJEGIJGECGHIIIEGIDH7 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1529:2172 1:N:0::GCCAATA -GATGAGAGCAAAGTATATCACACTGAATGCCATGTTCAATAATTAAGGGCAGGAGGAGACAATCCTATTTTTCTG -+ -@@@?BDDFGHGFHFCGHHIGIGIIIFIGIIIIIIIIIGIICBFHHHIGHIIIIIIIFHEGHAHIIIIIGIIHHHE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1710:2174 1:N:0::GCCAATA -TGATTTCAAATGCTAATTTATATATGTCTTAATTTTCATGTTGCTGTAAAACTTCAATTTTCTCAAAACCTCAAA -+ -;;?1;4,22=AD?,AE>:,?CDICF>HBHH,A?*@B@EHA4?C9<9?B??**0**0*9BD9?C>3=3 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1571:2181 1:N:0::TGACCAA -CTAGGTAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGCTTTTAGGCCACTATGGGTGTTAAATTTT -+ -@@@FFFDFFHGFFGDBGIIIIFGIIJHGIJEGHIHIIJJID;GGIJGCGIIH>GGCCHIJII@E7=BDEDBCACC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1520:2197 1:N:0::CGATGTA -ATGTCTGGTGCTTTCTATCACCTCTTCTAATCTTTTAATGTATTTGTTTGCAATTTTGGGGTAAGACTTTTTTAT -+ -BCCFFFFFFHFHFIIJGIJGIJIJFJJJEGHGHIGIIJJJEFIIJIHIIIJE@HIJIJGIIAFFGGGHGIIJFFE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1669:2200 1:N:0::CACAGTG -AATAAAGGGTATAGGAGTTTACAACTCAAAACAATTCATAAAACCTATCAGATACATACGATAAATCACACCGAG -+ -@@@FFFFFHFDHHIJJJJIIJIGIJJIGIIJJJIJJJJJJHGIIIJJJJJJJJJIIJJJJJIJJJJJIJJJJHHF -@HWI-ST1131:111228:C0B0NACXX:2:1101:1710:2200 1:N:0::ACAGTGA -ATAAAAATGATGAAAAAAGAACCGCCCTTTCATGTATTAAAATGGTTTATTATCTAAACAAGTTAAAAGTATATT -+ -CCCFFFFFHHHHHJJJGIJJIJGGHGIHIJJJIJIIJJJJJIIIIFGIIIJIIGEHJJJJJHEHEEHEF>BEDEF -@HWI-ST1131:111228:C0B0NACXX:2:1101:1550:2201 1:N:0::CGATGTA -TTGTGTTTGAGCTAGGGATACATAGTTGAATATATAGTACAAGATGCCTTGGAGTGTCAGATAGTTTCATATAAA -+ -CCCFFFFFHGHHHJJJIIIJIJIJJIIIJIIIJJJJIHIIJJJJJIIIJJJFGIDGIIEIGIIIF>DFHGIIII@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1602:2205 1:N:0::ACAGTGA -ATTGATTTCATGTAATCTTTGATGTACTTCTTGTAGGCTTCTTTTGTGAAACTTGTTTCCTGCAGGTGATGGTTC -+ -BCCFFFFFHGGHHJJJIJJJJHJJJCHGJIFIIFHIIJJJIJIIJJEGGIIGIJGBGHIIIGHDFC8BBCGD@GH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1687:2216 1:N:0::TGACCAA -TCCCTGCCTGCCATTACGGTCATCTGTGTGCCAGCAAAACTGGGAACCTCAGAACCATCTGGATTGCTGGGGCCC -+ -CC@FFFFFHHHHHJIJJJIIIDHIIJJJJJ?FHIIJIJJJJJJJJIJJJJJJIJJFIIJJIIJBHHIJFF??BF@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1577:2220 1:N:0::CGATGTA -GGGTTGGCCCGTGTTTAGGAGACTCGAAAAATGTTTCACAGGAATCTTTGGAGACAAAAGAAGAAAAACCAGAAG -+ -CCCFFFFFHHGFFFFHFGG@C;GECG=GHGECGDF>GEHIJBGEGBFHHIJ=@7;C>GAEH9>@;;BDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1738:2228 1:N:0::CGATGTA -GAAAGGCCCACATATGGAGAAGTAAAGGATGGTGCTTTGGATGTAAAAAGACAACACAAGTGCCCAGGCCCCACA -+ -@@@DFFBDDFHHHIJJGGIHGIHIHJIJFGFGEFEEHIJIGBGGGIJGBADHGGHGIGAC=CDEGEGH?=EBFCB -@HWI-ST1131:111228:C0B0NACXX:2:1101:1558:2230 1:N:0::CGATGTA -GATTGGGATTTATCGATTACAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCCCCTCACGAAGAAAAACAACAAA -+ -@;?DDEF?FFF?FEG?FGEGD?F3A?FAAFHEHIBHGD<@FHCIDG>GC=?;=? -@HWI-ST1131:111228:C0B0NACXX:2:1101:1598:2243 1:N:0::CGATGTA -TAATGATGACTTGTTGGTTGATTGTAGATATTGGGCTGTTAATTGTCAGTTCAGTGTTTTAATCTGACGCAGGCT -+ -@CCFFFADFHHHFIIIIC@@EEHFCHDEHDEHHGGHIGIEHGHIIIIIHFGHC@?DGB>CDFF@FHHIJ;@FHIIBHICCHEEBBDDEFCCC>C35>CCDDACCD3>@>>C; -@HWI-ST1131:111228:C0B0NACXX:2:1101:1648:2247 1:N:0::GCCAATA -TGTGTTCTGATAAAGTTATACATAAATTGAAATTTGATATATCAATTATACCATACTAAGCAAACACTGCATTTA -+ -???D=A:BDADB?9C4<,3<:?>@CC########### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1983:2124 1:N:0::TGACCAA -GTTGTCACCATCTCTCCTTTACTATAGTCTGTTAAGAGTTGACAGGCCCACCTATGGTCCCCAGAATCTCAACAT -+ -?@@ADDADBCDHDEGGHEHEEGG@@HHECDHHIIEEGIBCGGA@7?3@CCC@:@@;>(--5>3;@C>AC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1908:2135 1:N:0::ACAGTGA -GAAGGATGGAAGATGAACAGCTTCCCAGGACAGTCTGCTGCCTTTAGTGCTTCCATGCCAGCCTGGATGACAGGA -+ -;?@DDDDDFHHHG@?GG@DGIIICDDEHE?=FHH9?FBFE>?DBDHIGDHGHEIGEHIGHCCCHIIGEEADAHF> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1992:2141 1:N:0::TGACCAA -GCAAGGGGATTTAGAGGGTTCTGTGGGCAAATTTAAAGTTGAACTAAGATTCTATCTTGGACAACCAGCTATCAC -+ -@@@DDFFFAHHHFIEHIIGHHHGIGCHHIJFIIJJIIJIJJGHIJICFHJGIJJJJEGEIJJJIIGHEEHHHFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:1807:2144 1:N:0::TGACCAA -AACTTTTAAATAGAGTATTACCATCAAGAGTATAATTATGAAAAGCAACATTTCATAATTATACTCTTGATGGTA -+ -CCCFFFFFGHHHHJ@GHHIIJIIJGCGHIGGHIICHGGJGHBEHIGGJJEBCIJIJJHIJJGJJGIJCHIJGA@@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1939:2156 1:N:0::GCCAATA -AATTTGTATTCAGTCTAAATTTGTTTTTCATGGTTTTTATGTGTGGTAGTACTAGTTCAGTGAAAATCACAACAA -+ -@@@FFFFDHHFDADFHIIDHGHCGH9*99EDBGHIGEHI@BFFGA;C;B@=GHI@F?G>DGAFHHHIIG3D6DH@DDAF@DH?HG@F3=@AEC;A?==)7? -@HWI-ST1131:111228:C0B0NACXX:2:1101:1788:2159 1:N:0::GCCAATA -TGTGGGTATAATACTAAGTTGAGATGATAAGATCGGAAGAGCACACGTCTGAACTCCAGTAACGCCAATATCTCA -+ -@@?DDDABFF',;;.?BC# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1861:2165 1:N:0::CGATGTA -CACACGCTCTAGTGGTGGTGCTGTCTGAACTGGAGCCCACAGTAACCGCATGTGCCGGTTTTTGTTTCTTTGTCC -+ -CCCFFFFFHHFHHJJHIJIGIJJIJJJJIJJIIJJJJJIJGIIIJJJJJIJJHJJJJGBBDDDD>CDDDDDDDD@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1988:2168 1:N:0::CGATGTA -AGGGCAGGAATGAGAAATACTGCTTTGATGCTTTATCTTTTTACCATATTAGTCATGATTTAAATTGATTTTTAA -+ -CCCFFFFFHHHHHJJJJJJJJJJJIJJIJIJJJJIJJIJJJJJIIJJGHIGHHIJJIGIIIJJJJJIGGHIJIJI -@HWI-ST1131:111228:C0B0NACXX:2:1101:1803:2170 1:N:0::ACAGTGA -TCGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTACTGCTAAACCCCGATCAACCTCACCACCTCTTGCTCA -+ -CCCFFFFFGGHHGJIJIIIIIJJJJJJJJJJJIJGIIJJJJJJJJJJJJIIGGIJGJIIHHHGHFFFFECCEEED -@HWI-ST1131:111228:C0B0NACXX:2:1101:1962:2173 1:N:0::TGACCAA -TTATAGTAAGTATCTATTAAAAATGTGTGTTCTCAAGTCCAGCAGAACTTAAAAGTAAATAAAAATAAAAATGAG -+ -<@8B?BB=4=D??*):??409?GGE990*89*=BFC:=F### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1935:2181 1:N:0::TGACCAA -TGTGATGATTATTGACAATTGGTTCATTTTTATATGTGTTGACCGTTATGCCTATAAATAAGCCTCCTATAGACA -+ -CC@FDFFFHHGHHJGIGJIIJJIGGEGIJJJGIIIJIIJGICGIIHIJJHIGGGEIHIJIEIGBFHHIJGIIJIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:1885:2183 1:N:0::GCCAATA -TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTACTTGAAAAAATTTTTTTATA -+ -?@@FFFFDHHHHHJGBDA?BB7BBDDD0@BD@@BBDDDDDB6BDDDDDBD@######################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1905:2186 1:N:0::GCCAATA -ACGTGCGTGCAGAGCAGCAGGAAGTGAAGACACGTGCATTCCTGCCTTCCGTGAAGGAGTGCCCCGTTCAAGAGG -+ -<@@DDDDDF?=?:AB3EFEE=GFFI?*???BDBDEEED@C -@HWI-ST1131:111228:C0B0NACXX:2:1101:1785:2217 1:N:0::ACAGTGA -CTTGCTACCATATACATATAATATTCAATTATAGCTGCTTTATAAAGCCAAATTACAATATTAACTTGAAACATT -+ -CCCFFFFFHHHHHIJJJIIGJJJJJJIJIJJJJIJJJJJJJJIIJ@HIJJGHIJJIJJIJJIJGIIJIIIEHEII -@HWI-ST1131:111228:C0B0NACXX:2:1101:1880:2219 1:N:0::CGATGTA -CGGCGGGGGAGGTGGGGAACTTTGCTCCTGCCTACTCACTGCTCATTGCGGCCTACCTGGCCTCCCAGCTGCCTC -+ -???D?@DDA65<;>/;;=??AA##################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1872:2229 1:N:0::GCCAATA -CGGACTGACCCATGTTCAACTGCTGTTCACATGGAACCCTTCTCCACTTCGGACTTCAAAGTTCTCGTTTGAATA -+ -@CCDDDDAAHDDHIEFEHIII9CEHIIIBEBFGABBHGHIGHIIIIDDFHIFGIGIHGHIG8@GGHG;;AHCBED -@HWI-ST1131:111228:C0B0NACXX:2:1101:1977:2232 1:N:0::ACAGTGA -ACAGATGCCTTAAACTTAGTATGCCCAAAACTTATCGGTTCCCCTAGCTCAGTGAATGCCTGTATCCTTCACCAA -+ -CCCFFFDFHHHHHJJIIJJHHIJJIJIGIJIIJJGEIIFGIIIIJIJJIJJIDHHGGIIIJIFHIIJJJGHGGI= -@HWI-ST1131:111228:C0B0NACXX:2:1101:1911:2235 1:N:0::ACAGTGA -TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTCTCGTATCCACTCTTTTTT -+ -@C@F=AADDAHDDGIHEC;BDBBBDBB@BBDD63938BBDD@B07:8@BB######################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1814:2236 1:N:0::GCCAATA -ATCTCATGGACATTAAAAGGATAATAAAGGAACACTATAAACAACTCTATGCCCACAAATTTGATAGCCTAGATA -+ -CCCFFFFFHHHGHJJJJJJJIJJJJJJJJJJJJJJJJJJJJJJJJJIJJJIJIJJIJJJJJJJJIJIIGIJJIGH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1785:2245 1:N:0::TGACCAA -TGGGTGTTAAATTTTTTACTCTCTCTACAAGGTTTTTTCCTAGTGTCCAAAGAGCTGTTCCTATTTGGACTAACA -+ -@<;D4@=;FDF,AE>>FFHFFCAEFFFEFFEEF<96)@DB4?BDD*98B8B)@3CA;C@4@)).=3?;A=@@DB: -@HWI-ST1131:111228:C0B0NACXX:2:1101:1754:2247 1:N:0::CGATGTA -TTTTGAGGAAGTCTTTAAGTGCCATAATCAACTGCCATTTCAAAGAATATAGATGGTTTTGAAAAGTTCATGCTG -+ -CCCFFFFFHHHFHIJJIJJHIGIJJJJIJJJIJJIJJJJJJIJJGIJJJJJJJJJJHIJJJJJI=HDHHIJIIJJ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1939:2247 1:N:0::CGATGTA -CCAAGGCCACCACACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATTTATTACCTCAGAAGTTTT -+ -CCCFFFFFHHHHHJJJJGHJJIIIJGIIIJJHIGIJJJJIIIGJJJGJGFCGIJJIBHHGHHHGFFFFECC>@>A -@HWI-ST1131:111228:C0B0NACXX:2:1101:2216:2123 1:N:0::ACAGTGA -GAACTCAGGAGGTGGAGGTTGCAGTGAGCCAAGATGGTACCATTGCACTCCAGCTTGGGTGACAGAGCGAGACTC -+ -CCCFFFFFHFDFFIGGIJGHIIHIEHFGGIIIGIGIJBGBGDHIJGIIJJGHGIHIIIEDE=DG>EHHHFFCCAC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2139:2128 1:N:0::CGATGTA -ATTGGTGCGGGGGCTTTGTATGATTATGGGCGTTGATTAGTAGTAGTTACTGGTTGAACATTGTTTGTTGGTGTA -+ -@@CDFDDEHGGHGGGIJIHIEEDHICEHHGEFC<><>?9>:2>@CDECDDDB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2154:2148 1:N:0::ACAGTGA -GGTAACTTTGTGTTTGATACAATTTTATTACAGGATTTGGAATATGAATAAATGGGTTCAAGTGCAGGACTTACC -+ -CC@FFFFFHHHHHJJJJJIJJIJJJJJIJJJJJJJJJJJJJJIGIJJJIJIIJJJJDGHIIIFHIJJJIGIJIIJ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2185:2150 1:N:0::GCCAATA -ATAATCCCCTTGTAAATTTAACTGTTAGTCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAG -+ -CCCFFFFFHGHHHIJJIJJJJIJIIJJJIIJJJJIIJIGIIGIIJIJJIIJJIGIHIHGGGGGGIGHFFHHHFHD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2024:2150 1:N:0::ACAGTGA -GATCTAAAACATACAGTAAATTATATGTAACATATATATAATTGTATATGTATAAAATTCATCAGTTGATGATAA -+ -C@@FFFFFHHHDHIJJGGHGGJIJGIJHIJGGHIIJIJJJIJJIGHIJJJIFGHIIGIGJEGIIBGEDGGGGIIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2064:2154 1:N:0::ACAGTGA -CGCAGGGGAGCGCAGCTACTCGTATACCCTTGACCGAAGACCGGTCCTCCTCTATCGGGGATGGTCGTCCTCTTC -+ -@CCFFFFFHH>FAGGGIIIIIIIIIGHAGIIBFFHIIIGIIIGEBDDEEDDDCDDDDDDDBDDD>CBDD@BA>A> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2103:2159 1:N:0::CGATGTA -GTGACCACCATACCGGGTTTGAGAACACCAGTCTCCACTCGGCCAACAGGAACAGTACCAATACCACCAATTTTG -+ -@CCFFFFFHHHDHIJJGEGCEFGIIJJJJIJHIJJJJIJIHIIGIBHGJIGIGHHEEEE>CCFFFFEDDACCCCD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2081:2166 1:N:0::TGACCAA -AGGTTAGTGCATACTTCTCCCTTCCACATTTATACTAACCTCAGCTCCGTGGGCTACGAAGCTCGTTCTTCAAAT -+ -@@CBDEFDHAFHHJIIJJIJIIJIIIJJEHIJJJJJIJIIJIIJJJJJJHIHIIIIHJIIJJ@DHBEHFFD@3;; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2046:2171 1:N:0::ACAGTGA -GGCAAATCGGTCGTCCGACCTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGCAG -+ -@@@DDDDDFFCFFFGI?>>AABA>ABBAA>?##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2174:2171 1:N:0::CGATGTA -TTGACTGTTCTCAATGAGTATTTTAATCTTGCTCTTGTGCCTTTAGCTTCCTTACAATCTTCTTTCATCTTCTTC -+ -CCCFFFFFHHGGHJIJIJHHIJJJIIJJJJJJJJJJJEHIJIJJJJJJJJJIIIGIGIFJJIIJJJIIIIJGH:= -@HWI-ST1131:111228:C0B0NACXX:2:1101:2024:2176 1:N:0::ACAGTGA -GGGGGATCTACTAGTTATCTTCTTGTTAAAAAAATTCTGGCATATACTGTCTGTTCAATATTATAGTACTTTGAA -+ -CCCFFFFFHHHHHIIIIIJJJIJJJJJJJJJIGGIGJJJJJIJJJIJGJHIJJHJJHIJIIIJJEHHIHHHGGFH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2242:2179 1:N:0::CGATGTA -GGGAAGATTTATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTT -+ -CCCFFFFFHHHGHJJDGIIIIIJJJJJJIJJIJJJJJJJIJIGFGIJJJIIH?EEDFFFFEECEDACCCDDEDC@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2143:2180 1:N:0::ACAGTGA -CCCTCAAACACAAAGTTAAAAAATGTAAGTCTCCAAAAGACCTACAAAGCTACATAAAAATTTATAGTTTTGGGT -+ -CCCFFFFFHHHHHJIGIJJIJJJJJFIJJJJIJJJIJGIGGGIJJJJJJIJJJJJJJJJJJIJIJJJCGGGHHH; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2210:2187 1:N:0::CGATGTA -ATGGGTGTTAAATTTTTTACTCTCTCTACAAGGTTTTTTCCTAGTGTCCAAAGAGCTGTTCCTCTTTGGACTAAC -+ -CCCFFDFFHHHFHJJJJJJJIJJJJJJJJJJJJFHIFIJJIJJJ9BFHIJIJJJJIGIEHJJIHHHGGHEEFFEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2117:2202 1:N:0::CGATGTA -GAGGGTTCGCCAGCCTTGTCTTGAGCCATCAGTGTGGCAGGGGAGCACAGGGGGGTAGGTGGAGACACTGCGGAG -+ -CCCFFFFFHGHHHIIIIIHIJJJJJJJJJJIJIJIIIIGJIJJ6AAHG@>@EF'5050?(3<2<>8<<:3>@99@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2097:2206 1:N:0::ACAGTGA -AGTGTTTGAGTCAAGTTAAGCCGCAGGCTCCACTCCTGGTGGTGCCCTTCCGTCAATTCCTTTAAGTTTCAGCTT -+ -;?=D=ABDDBAFBHGIEGGA@@G6C?A@BGEGEGEGEEH?DD7B>3=BF@35.=;;@)=?E:;?@@);@D>@@@> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2196:2206 1:N:0::TGACCAA -GTAGTTAAGTATGCAGAAAAACAAACAAGACGTTTTGATGAAGGAAAATTAAAAGCTGGCCAAAGTGTAATTGGT -+ -?@@D=BBDFADA:BDFFIEII1CGFFEIFFIF?FGIIBGECA>F?BBFFEEFICGCFFFEIE;@ECE@>=AE### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2154:2207 1:N:0::CGATGTA -CCTGATGCTTACTACTATTTGAAGGATGATTGGGACCAGGTGATGGACTTCTCTGGCTACTTGAGCGCTGAAGAC -+ -??E99BBGAEF?BFDB::9DDFGIII=FE@BF37=7 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2138:2213 1:N:0::ACAGTGA -AGAGGGTAAGAGATGGGTAGAAGAGTATGCCTCTGAAAATTTTATTAGTTTATTCTTGTGGAGAATACCAAGAAA -+ -@@@DD8+A?FFGEIE?<DB:CBGGBF<18?CD8CCFG>EHDFGFG4?BDHII?:?00?FFG@EGCGEEIEHCDEEEEGFHEECEEBC?DFDE>>;A -@HWI-ST1131:111228:C0B0NACXX:2:1101:2011:2239 1:N:0::GCCAATA -CTTTGTGTTTGAGTCTCGTTCGTTATCGGAATTAACCAGACAAATCGCTCCACCAACTAAGAACGGCCATGCACC -+ -8?AFFFIFIEE:?)5=>?BAB#### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2038:2248 1:N:0::CGATGTA -ACTGTTTGCATTAATAAATTAAAGCTCCATAGGGTCTTCTCGTCTTGCTGTGTCATGCCCGCCTCTTCACGGGCA -+ -CCCDDFFFHGHHHJIFIGIIHIIJIHJIGGEGGIGGIIJJIGGHIIJJIIHIHIHGHIIGGGIIIC@DCGCHFE> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2265:2123 1:N:0::ACAGTGA -CACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTACTGCTAAATCCACCTTCGACCCTTAAGT -+ -CCCFFFDFHHHHHJJJJIGGIJJHHHIIFGIJJJJJJIJJIHGFHIIHIJJJIJIJIJJIIIFHGHFFDEDCCCC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2303:2133 1:N:0::ACAGTGA -TCAGTGCTCTATCACCTGCATGGGGAGGGATGGAGCAGGGCAGTAACTTCAGTCTTACACTAGCTATAGCAAACA -+ -@@@FBDDFGHHHHIEEAGGDHEGBGEEDHE;DDGGIJIIJFAFCGIGEHIFGC@=EHGDHIHHGDHDECDBBD@A -@HWI-ST1131:111228:C0B0NACXX:2:1101:2468:2138 1:N:0::ACAGTGA -ATGATCAGGCTTCCTAGATAAACAGCTTGAGGGGTTTTGCTTTTTAAAAGCCATTTATTGATCTGTTGTCAGTCT -+ -@CCFFFFFHHHHHJJIJFGIJJGIJJJJJIJJJJDHIJIIIIJJIEIGID8EHGIIIJJIIIGHIHIIHFCHEHF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2326:2139 1:N:0::ACAGTGA -AATTAAGGAGTTTTGTAACTGAATAGTGGAACTCAGAAAGACATCCTATTCAGAAGGATCTCTCATGATAATAGT -+ -@C@FFFFFHHHHHJJJJJJJJIJJJJHHIJJJIJE?@D;CBA;;@;>?;>@C9985EGGGEE@GH@BH??AEGHGCAFBBG:CBGIDHBFB9?9B09?DGAHEDH=@C8@GFA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2479:2162 1:N:0::CGATGTA -AGCTGAGGAAAGCTTCAGGGAAGAGATGACATTTAAGCTGGATTACAAAAAATAGGTTTTTTGTTTAAAATAAAA -+ -CC@FFFFFHGHGGIEIGIJIGGIII@HHGIGIJJIIJIJGJFHGHJJIIDHGHIJJFDHGIHHHFEEFFBC@CCC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2353:2165 1:N:0::CGATGTA -AAAAGAATAAAATACAGTGTTGGATCCCTTTCTCCTGTTTCTGCAAGTGTCCTGAAAAAGACTGAACAAAAGGAA -+ -@@@DDDDBHHD?FIII><:CFE?HBEGGEGHIIGG9?1?DHHHIFHG?D?BGG@E@?4BGFGGDGEHH@FD7@CC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2329:2169 1:N:0::GCCAATA -GGGGCCACAGTAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGA -+ -?@@DBDDDFFADDHGHIIDHAHGIE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2493:2177 1:N:0::GTCAATA -CTGTGAGGAGTTCAGTTATATGTTTGGGATTTTTTAGGTAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTG -+ -CCCFFFFFHHFFHGIAFGJIGJHGIJIJIJJIJJJIJIFEGDGIJDFHIJEIJBGIIGIIHFDHHGFFDCCFACD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2356:2185 1:N:0::GCCAATA -TATTATGCTTGGTTATAATTTTTCATCTTTCCCTTGCGGTACTATATCTATTGCGCCAGGTTTCAATTTCTATCG -+ -@@@FDFFDFFFFHG@GGIHGJJIGCGHBHI>HGGGGGGFFF@FDHA>? -@HWI-ST1131:111228:C0B0NACXX:2:1101:2404:2187 1:N:0::CGATGTA -GTGGGTGGGGGTCTCGCTATGTTGTCCAGGCTGGTATTGAACCCTGGCTAAGGTGATCCTCCCGCCTCAGCCTCC -+ -CBCFFFFFHHHFHIJHIJJJIJJJJJJJJJJJJJFGHIJJJJIJJHHHHHFFF?CCEDECEDDDDDDDDDCACCB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2280:2193 1:N:0::TGACCAA -TGGGTATAAGTCTTTCACTTCCTGGGTTAAATTTATTTTTAGGTATTTTTTTTTCTTTTAGATGCTGTTATAAAT -+ -@CCFBDFFGHHHHJJJJJJJJJJJJJGHIIJJJJGJJJJJJJJDGIJJJJJJJJJJJJHHHGHHFFFFFFFEEED -@HWI-ST1131:111228:C0B0NACXX:2:1101:2343:2195 1:N:0::CGATGTA -AGATCGGAAGAGCACACGTCTGAACTCCAGTCACCGATGTATCTCGTATGCCGTCTTCTGCTTGAAATTATATAG -+ -8E;@B1A2C++*1?@EE*:*1:CDBF94F>FHDH@BFG?D9BBHGHH@9FE1=@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2377:2200 1:N:0::TGACCAA -GTCTCCCTCACTTATGAAGCTTAGTTTGGCTGGATATGAAATTCTGGGTTGAAAATTCTTTTCTTTAAGAATGTT -+ -@@@FFFFFHHHHHIJIJBIGGJJJCB>HIIGJJCAFHHGHGIJIGIEIGFGHGIIFGIIGEGEGGGGGGEHIHJ# -@HWI-ST1131:111228:C0B0NACXX:2:1101:2356:2207 1:N:0::GCAAATA -GAGTTGGGATCAAGTGGATTGAGGAGGCGGTGCTGTGTGACAATGTTTCGTTTGCCTCAGACAGGTATGTCTTCG -+ -;:=DDDDD?BFB3?CECBGHJCEEHE>FCH9FGG'8&)8?A################################# -@HWI-ST1131:111228:C0B0NACXX:2:1101:2460:2222 1:N:0::CGATGTA -AAGAGAAGCCCTTTTTTTAAAAACAAAAACAAAAAGAAAAAAACAAGAATTTTGGTATATATGTAGATATATATA -+ -@@CFDFFFGHHHHJJJGGHIJJJJIJJJJJJJJJJIJJJJJGIHHECDDCDBCCDCEEEDEFECCDEEDEDEDEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2344:2226 1:N:0::ACAGTGA -TGTTTGAGGCCATCATCATGAAGGACGTGCCCGACTGGAAGGTGGGGGAGTCTGTGTAGATCGGAAGAGCACACG -+ -@@CDDDDFHHHDHIDHHGIIIEIJIGIGHJJIJEHGHI>GIDCCG;;>;@CD@(@6CFG@CA=CDHD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2315:2240 1:N:0::CGATGTA -CCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGAACCCTC -+ -CCCFFFFFHFHHGIGHIJJJJIJJ>FGHIJJJJJJIIJJJIIHJJHIJJIJIJJJGIJHGIGGIJIJJGHHCDFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2410:2243 1:N:0::CGATGTA -AGGCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACCCACTACCTAAAAAATCCC -+ -@CCFFFFFGHFHHCIJIJJJIIJJJCHIJJIIJJIGGGHIHGHEGDHIIIIGGJIIIIJIGIJEHEEEEEDCE>; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2441:2249 1:N:0::GCCAATA -GACTCTTTGTAATCTACTCTGTCATCTGGTTTCCCCATCCTAGTAAATAACAACTAGGAAGTAGCCATGAAATGC -+ -CCCFFFFFHHHHHJJJJJIIJIJJJJJIJEHIJIIJJJIJJIJIIJJGJJJJJJJIJJJJJHGHIHIJJIJIIJB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2634:2122 1:N:0::CGATGTA -CTAATTTTATGTGTTAACTTGACTGGGCTAAGGGATTTCCAGATAGCTGGTAAAACATTATTTCTGAGTGTGTTT -+ -@CCFFFFDDBFFFHJHJEGHEHGHG?9=@EFBB>GFHCHCBDEHICHJI -@HWI-ST1131:111228:C0B0NACXX:2:1101:2683:2140 1:N:0::TGACCAA -GGATTGGTCCAATTGGGTGTGAGGAGTTCAGTTATATGTTTGGGATTTTTTAGGTAGTGGGTGTTGAGCTTGAAC -+ -CCCFFFFFHHHHHJJJJFHHHHIIHHEGIGHGIJJJIJHIJJJJEHHJIJJGGI@GHDHII4AEHEBCEECCEDA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2708:2142 1:N:0::ACAGTGA -AGGCCTCCACTCCAAATAAATCACAGTCAAAATAAATGAAGAGCTCAAGATGACATCAGTCCCATTTGTCTTAAG -+ -@@@1BDDDHFBC?DDGIGIII4AEDHHHGGGGIIIH@G>FEBEGIGBGFEG=G?FC@?FAD@FHGIIBD>CBBF:CEGHGGG>7 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2611:2155 1:N:0::GCCAATA -CCACCAGGCTCGGTAGGTTTGTCGCCTCTACCTATAAATCTTCCCACTATTTTGCTACATAGACGGGTGTGCTCT -+ -CCCFFFFFHHHHHEHGI@HHCDFHIIGGDDEHGHIIJJIIGIIIIIIGIJJJJGIGIJIJFGIHHGE######## -@HWI-ST1131:111228:C0B0NACXX:2:1101:2639:2169 1:N:0::GCCAATA -TGGGTGGCTCAGTGGAATCCATTTTGTTAACACCGACAATTAGTTGTTTCACACCCAGTGTGTAAGCCAGAAGGG -+ -@CCFFFFDHGHH?GIIJJJIIIJJJIJJJIJJJJIGIIJIJJJJIJJJJJJIJJJJJJGEHHHHGCDBDDCCCB: -@HWI-ST1131:111228:C0B0NACXX:2:1101:2738:2172 1:N:0::GCCAATA -GAAGGTTAAGGTGACTGTAGCGATTTCTTTAAATAAGACAGCAATGAAGTTTGCCGCATTGACTCTTCCTGTCAC -+ -@@CFFDDDHHFDFHIHJFIHGGEEGGHIJJIJJJJIJIJJJIJJJJJJHGHGIGIJJGGIJIIJJGGCEFEHHGC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2518:2172 1:N:0::ACAGTGA -TCTTGATTAATGAAAACATTCTTGGCAAATGCTTTCGCTCTGGTCCGTCTTGCGCCGGTCCAAGAATTTCACCTC -+ -CCCFFFFFHHHHHJJJJIJJJJJJJGJIJJJJJJIGGIJJJJJHIIIIJJIGIEBGIJBHFFFFCCEDEAACDDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2720:2172 1:N:0::CGATGTA -AATAACCAAATACACAACAGGCCAGGAAATAACATTTTCAGAAATGGCCTTCTAACTGGTTTTCCTAATTCTAAC -+ -?+8=B;DDFCB?DHGHEIIIH@7?ACBACEDGD)7@;;D?## -@HWI-ST1131:111228:C0B0NACXX:2:1101:2542:2175 1:N:0::GCCAATA -GATGGTGGCTGCTTTTAGGCCTACTATGGGTGTTAAATTTTTTACTCCCTCAAACACAAAGTTTTTTCCTAGTGT -+ -?B2)=BB3@ADDD9@@CDCDD;6@;@66> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2569:2179 1:N:0::TGACCAA -CAAGGATGGTTTTGGGACTAGAGGCTCAGTGGTGGGTGAGATCCCTGCAGAACCCACCAACCAGAACGTGGTTTG -+ -@@@DFDDFHFHHHGGGGGGEF@GECGGGIIGGHGII)8?D>GCDHIIGGIFGGHIICEHHEDEF;;@>5=?;=?8 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2591:2180 1:N:0::ACAGTGA -TCTTCTCATTGAACAAATTTTGCATTTTTGGTAAACTCACAGGTTTGGCTGCCAATAATAGAAGTGCCGCATTTC -+ -@CCFFFFDDDFHHIIIIJJJIJJJJJJIIGI;CEGEHEEHIGIBFHCBGHIGIC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2748:2190 1:N:0::CGATGTA -TAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGCTTTTAGGCCTACTATGGGTGTTAAATTTTTTAC -+ -@@CFDFF@FDDH?HHIEIJIJIIIIIJJJCIGHGGBGHGGHIHHIJGIIJIJ@HG@CGEG);=CHAEDFFDFBD> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2670:2192 1:N:0::GCCAATA -AGAAATTTACTAGTGCAGCAACCATTTAAATTAAATGTTTGTTAACATAATAGTGATGGCATTTTCTCCTCCCCC -+ -CCCFFFFFFDHHHFGIIIIIIIIIGGFEHF8;AC>AC;>CC;>A3;@CCCCBB=<@?@CCA@AC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2518:2205 1:N:7682::CGATGTA -GATCCGTTAGCTATCGTTCGCGAGAAAGTTAGTAGACACACAGGACCCAGGCGTGCAAGTCAATTTCAGCTGACT -+ -CCCFFFFFGHHHHJJJJJJIIGGHIIIJHGGIFIIGJJJJJJIIIGIIJIIGHBDBDCECCECDEDDEDCDDDDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2572:2207 1:N:0::GCCAATA -ATAAGGGGAGAGGGTCAGTCAACCATCTTAGATATGGGAACTTAAGGGGACTTCATGGCCCTGCGGGAAAAAAGC -+ -@@CFFFADHHFFFIAEGEHHGIEGGGHBHIFEEHGIEHHG;GCFHEHIIBGEHEDEHBHGEHHEDEDDBDC?;9A -@HWI-ST1131:111228:C0B0NACXX:2:1101:2740:2214 1:N:0::GCCAATA -GGTCGGGGGGCTGGAATTACCGCGGCTGCTGGCACCAGACTTGCCCTCCAATGGATCCTCGTTAAAGGATTTAAA -+ -@@@ADDDDDBBBBBBCC8@@@@B30:38BC>@<<3+8<>8>C>A83>9@@>3:9>@B(822>:>(+:>:@C -@HWI-ST1131:111228:C0B0NACXX:2:1101:2644:2220 1:N:5122::CGATGTA -ACTGGATGCATCTGCAGGATATCGCGGCCGCGTCTTCAGAGGGGGATAGCATGACCTCACGCCTTCTATAAAAGC -+ -CCCFFFFFHHHGHJJJJIIGHGIGDGIBHIIIFHGIGEGHHHHFDBDCDDDEDCDDDDDDDDDDDDCDECDDDDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2572:2228 1:N:0::GCCAATA -CTATTCATTTCATTCCTAACTAATTTTAAGTGATGTTGATGTTGCAGGACTGGAGACCATGCTTTGAAAACCAAT -+ -C@CFFFFFHGGHHIGIIJJIJJJJEGIDHJHHHIJIJJFIJAHIIIJJIJJIJGIIJJJJJGIIGIEEHGIJG@3 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2694:2228 1:N:0::TGACCAA -GTGGTTTGTTAGGTACTGTTTGCATTAATAAATTAAAGCTCCATAGGGTCTTCTCGTCTTGCTGTGTCATGCCCG -+ -@@@FDFFFFHGHGAEHGIHIJFIGJIIJJJJJJJJIGIIIJJGIJJIJBGHIIJJJHGIIIJIJGG>FGIJJJIB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2629:2230 1:N:0::TGACCAA -GGTGATAGATTGGTCCAATTGGGTGGGAGGAGTTCAGTTATATGTTTGGGATTTTTTAGGGAGTTGGTGTTGAGC -+ -:??D=:4B::DDAAA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2541:2237 1:N:0::TGACCAA -ATAACTTTGTGTTTGAGGACGGTACAGGACCGGTCGACTAGCCAGTCCACAGCCAGGATCAAGGAGATATGGTCG -+ -CC@FFFFFHFFHHIIJJJJIJJCGIIJJIJJJIHIJJJJJJIJJJIJHHHHHFFFFDDEEDCCCDDDCCDCDC@? -@HWI-ST1131:111228:C0B0NACXX:2:1101:2512:2238 1:N:0::ACAGTGA -TTTAGGTAACTTTGTGTTTGAGGGCCTTATTTCTCTTGTCCTTTCGTACAGGGAGGAATTTGAAGTAGATAGAAA -+ -CCCFFFDFHHHHHJIIIIIJJJJJIIJJJIJJJJJJJJJJJJJJJJIJJJJJJJJJIJJIIGA@G@EHHFFGDEH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2572:2245 1:N:0::GCCAATA -TTCTCCCTAGAGCTTTCTTGCTAATGTGCCTATATCCTCTTACTTTAGCTATATTCCTTATACAAAGGAGCATCA -+ -@CCFFFFFFHHFGIIIGIJIIIJJJIJJDHIHIIEIIIJJIGGGIIJIEIJEGIIGIJIIIJGG@FEHGEIGII> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2664:2246 1:N:0::ACAGTGA -ACATCCGCGCTTCATGATGAAAGGCCTCAACCAGTTAGGCATGGAAGGAACATACCTCAAAATAGTAAGGGCCAT -+ -CCCFFFFFHHHHHJJJIJJJIIIJJIJJJJJJJJHIJJJJJJJJJJJJJJIJIIIIJJJHHHHHHEFFFFE@CBA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2598:2246 1:N:0::CGATGTA -ACAGCCAGGGACATGTAGGCAACACGAGCAGGCACAGCGCGGCCACCACTGTCCACACGCTCACACAAGCCAGGC -+ -@@CFFFFFHHHGHJFBFEHIJJJJIJGIJJIGIIJIGGIIGGHHFFECDEDCDCDDDDBDDBDDCCDDDDDDBDB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2751:2116 1:N:0::TGACCAA -AAGANGAGGACCGGTCTTCGGTCAAGGGTATACGAGTAGCTGCGCTCCCCTGCTAGAACCTCCAAACAAGCTCTC -+ -CCCF#4ADHGHHHJFHJJJJJHIJJJJJDFHIJJJIHHIJJJJJJIJJHHHFFFFFFEEAEEDDDDDDDDDDDDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2972:2117 1:N:0::CGATGTA -GCTCNAGGATTTGACCTTTGCAAGAAGAATGACTCAGCTGGCCTTGATATGGTGTGGTCCACCAGACCTGATTCC -+ -BCCF#2ADDHHDFIIJJJJGEHIIJIIJJJJJJJJJIIIGJEIIIJJJJJIJHIIIJCHIGGGJGGIIIGHHGHD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2858:2117 1:N:0::ACAGTGA -TATTNCTTGAGATGAATATTTAATTCACACATTTTTATTTCTTTTTGTTTAGTAGCTTAAGAGTATAAAGCTGAG -+ -CC@F#4BDHHHHHJJIJJJJJIIJJIJJIJGJJJJJJJJJJJJIJJJHIJJJHIIJJJJJIJJHIHIIIJIJGHH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2819:2125 1:N:0::TGACCAA -GTCGGTGAGGAGTACTTAGGCTTGGAGGGTGGTCCCCCCATGTTCAGACAGGATTTCACGTGTCCCGCCCTACTC -+ -@@@FFDDAHBBD:ACEH>HGGIIIIEBD@F7D?FGEIGGG@G@@@ACEGEEFEDDFEDDCCCEC@@;?B=?CBCC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2877:2125 1:N:0::CGATGTA -AGCTTGAACGCTTTCTTAATTTGTGGCTGCTTTTAGGCCTACTATGGGTGTTAAATTTTTTACTCTCTCTACAAG -+ -8=8DDDDBFB?DHEGBFHCHIH>E>1;AEHHCHIC??3BF;)?B<<@;*7?;CGEGHFHE:?;B@EBD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2783:2126 1:N:0::CGATGTA -TTGTGTTTGATTGGTAGATATTGGGCTGTTAATTGTCAGTTCAGTGTTTTAATCTGACGCAGGCTTATGCGGAGG -+ -@CCDDFFFHGHHHJGHIIIIIJIJJJIJHJIJJJIHIIJIIJJJGHEIGIIJJIJJIIJIJJIJIJJIJJHGEFA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2924:2127 1:N:0::ACAGTGA -TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT -+ -CCCFFFFFHHHHHJJJFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBDDDDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2833:2134 1:N:0::TGACCAA -GGTGGTTTTTCTCTGGTGTCATTGTTTATTATCCTTCTTGGTAGACTCATCTGCTTTCTGTCTGTTCCAGAAATT -+ -@@@DFADEHHGGFHGEH>CE@HADEHEHIIHGIGFEGGIBCFFD@BFHHGIIHGHGHGHBFBHCHGBFF;==CFG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2979:2137 1:N:0::GCCAATA -CCCCCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAGACTACGAAAGTG -+ -BCCFFFFFHHHGHIJJIJJJIJJJJJJJJIJJJGIJJIIIJJJJJJJJJHGIEIGIIJIJIIHHHHHHHFFFCAC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2847:2145 1:N:0::TGACCAA -GCTGTCTTCCTAGATTCACTGAATCCACTTCTGTGTAGCACCTGGGTCAGCTGTCAATTAATGCTAGTCCTCAGG -+ -@@@D=BDDFFDDFGIIIIIIIIH?FFIIIIIIFEFFGIIFFFFIIFDGGIIIIGIIGEF@FGIIDIGFIIIIIDB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2811:2145 1:N:0::ACAGTGA -TCAAGCCTTATTGAAGAGATAGGAACTCTTGGTTGGGATAAGGAAGAGACTTCCACCTTAGGATAGTGTTGCCTG -+ -@@CFFFFFGFFFHIJEEGGCIGI:CFEADHIJFHAHGICHIEHEIGEGGGCA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2885:2146 1:N:0::TGACCAA -TCTGTGGGCAAATTTAAAGTTGAACTAAGATTCTATCTTGGACAACCAGCTATCACCAGGCTCGTTAGGAGATCG -+ -CCCFDFFFGHHHHJJJJIJIJJJJJJJJJJJJJJJIJJJIJGGHJJJJJJJJIIJJJJGHIGIJHIFHHHFFEEE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2770:2150 1:N:0::CGATGTA -TGTGAGGCCCCGCTTTCACGGTCTGTATTCGTACTGAAAATCAAGATCAAGCGAGCTTTTGCCCTTCTGCTCCAC -+ -@@?DDFADFDHHFGHIJJIJJIJIIDFIIGIBFGIIGGIGGGHCFC@CEGIAGAEGIGBHCHIGJIJJCGGHGEGHHIIGFHHIB=A################# -@HWI-ST1131:111228:C0B0NACXX:2:1101:2995:2162 1:N:0::CGATGTA -TGTCAGGCAGGAAAGGAGAGAAAAACATGAAATAGATGAGACAAATAGGCAAAAATAAGAGTTTTAAACCCAAAC -+ -@CCFFFFFGHHHHIJIGGIGJJIJJJIEHGJJJGIIIJIIJJJJJIJJJIIJJIIJJJIJIGGIIJHHHHFEFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2943:2165 1:N:0::CGATGTA -AAACACCCACTACCTAAAAAATCCCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTATCACCCTA -+ -CCCFFFFFHHHHHJJJJJJJJJJJJIJJJJJJJJJJJJJJJIJJJIJJJJJJJJJIIJIJJHEHHHFFFFFFEDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2869:2177 1:N:0::GCCAATA -AGGGCCAAAATGGATCTCTAATGAAATATATGTGACTTTATCTTAATGAGCATGCCCTTAATCCTATCATGTAAG -+ -BC@FFFFFHHDHFGHIIIIIIHHEIIGHFFHGFHIIJJIJIJJJJJIGHIGIGEHIJEHHIGIGGGIIIIIIGIC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2816:2183 1:N:0::TGACCAA -TAAAAGAGATATTCTTTCACTATAGTGAATTTAAGGGTGACTTAGAAACCTTACAGCCTGGCGATGATGTGGAAT -+ -CCCFFFFFHHHHHJGIIJIJIGGGECFHIIIGHIJIG:EHIEIIIJJJIIIIHHIJHIGIHIGGHHIICCGIHHH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2957:2184 1:N:0::CGATGTA -GATCGGAAGAGCACACGTCTGAACTCCAGTCACCGATGTATATCGTATGCCGTCTTCTGCTTAGAAAAAAAAGAA -+ -@@@DDDDDDDF3CFHA?AAAFHGGCHGE<*?CCDBFFGDE<*9BB############################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:2848:2194 1:N:0::CGATGTA -AACTGTTAGTCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATTTAACAC -+ -@CCFDFBDFFHHHJJIJJGIIJJJJIJJJJJJJIJJJJJJIIJIGIGIIIJIJJIIIJGH=CEEHHFFFFDCACE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2791:2198 1:N:0::ACAGTGA -TGTGCGTGTGTGTGTGTGTGTGTGTGCGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGGGTGTGT -+ -=1:?1AADCFCDFEGBGF+C;FG;):*)11:8BG?B9?0?9?DC2C(==@CA(.6==AFD6@;?@@######### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2825:2198 1:N:0::CGATGTA -GGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATTTAACACCCATAGTAGGCCTAAAAGCAGCCACCAATT -+ -?@@DFDFDFDHDDIIIE?CGGBECGBBEEHI@EDCC## -@HWI-ST1131:111228:C0B0NACXX:2:1101:2812:2220 1:N:0::ACAGTGA -AACTGCCACACGCAAAAAAGAAAACCAAAGTGGTCCACAAAACATTCTCCTTTCCTTCTGAAGGTTTTACGATGC -+ -CCCFFFFFHHHHGIJJJJJJIJJJJJJJJIGHIHHIIJJJJJJJIEIIIIJIJJJJHHHHHEFF?CF@EEDDDDB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2962:2221 1:N:0::TGACCAA -CTACTATTCGTTTTTGCTTTATATATTCTGGCTATGTTATTCAAATGTGGGATTGTTACGTCTTGCTGACGTGTA -+ -CCCFFFFFHHHHHIJJJJJJJIJJJJJJJJJJJIJJIIJIJJJJJJJDHIJIJ;FFIIJJGIGGHIIJJJJGG7? -@HWI-ST1131:111228:C0B0NACXX:2:1101:2786:2222 1:N:0::TGACCAA -ATGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCT -+ -C@@FDDDFHHHHHJFHHGAFHJII9EFHHIIIGJJJBFGGIEIIGEHIIGHJIIIJJJGII)=CHIJJECEEHE: -@HWI-ST1131:111228:C0B0NACXX:2:1101:2758:2223 1:N:0::CGATGTA -CTCAGTTTTCCCAGAAAGAGGATAACATCTTAGTAACTTAGATATTGAAGTAGTTGTGATTATTTAAAGCAAGTC -+ -CCCFFFFFGHHGFHGIHJIGEHGGHIJFIJIGI>ADHGIGIJFIIIIIABFIGICGHIGCHGEIIJGGIBGGH4@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2870:2228 1:N:0::TGACCAA -GCGAGGGGTAGGGGAGGGAGAGATCACATGGGGCCATGACAGCGGTTTTGAACTTTATCCTGAAGACTTGATGTG -+ -BBCFFFFFGEIFDIE??FB9=8F@8@;==@E3?>.7=B?@@D7>A>?;35:>(((>@,:? -@HWI-ST1131:111228:C0B0NACXX:2:1101:2897:2238 1:N:0::GCAAATA -CTGTCTGATGATTATTTCTTTCTACAACTGGCTCTTCCACCACATTTATACTATTATTTTGCATAATCTCTTGCA -+ -?@@BDDDDE;C++B15&05@-52@;9@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:3190:2131 1:N:0::ACAGTGA -CTAGAATCGGATGGTCTTTGTAACTGATTCTGGACATATGCATCATTGATGTTGCAGTGTTGAAACTACAAGAGC -+ -CCCFFFFFHHFBHIADGHIADFHDFEGCHEDBHBHIHIGGHGIGGIEIHIIGHIIIIDFBFGGHIGIIIIIGHGG -@HWI-ST1131:111228:C0B0NACXX:2:1101:3159:2138 1:N:0::CGATGTA -CTTTGTGTTTGATTATTGTTAAAAATTGATTTGGTTATCTGAGTTCAGCGAGTGGCCGTCATGTGACCATGACTT -+ -@C@FFEFAFFHHHJJJGIJJEGIJJIJIGIJJJJGIIIJJF9DCABGIJ>HBHIJIJJBHDDGHDGHHHHHGFBD -@HWI-ST1131:111228:C0B0NACXX:2:1101:3003:2143 1:N:0::TGACCAA -GAGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTATAGGTAGAGGCG -+ -@@@FDFFFHHHFHJIIGHEDHIJEHE9FFHE;FGIIJIJJGGIGHIIIHHH9BDGBEFHDGAEGIIGDEHH@EF< -@HWI-ST1131:111228:C0B0NACXX:2:1101:3023:2146 1:N:0::TGACCAA -AATCACCCCCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAGACTACGA -+ -@@CFFFEFFHDFFGIIGGHIJCDGECHIBDFEIGHCHHGAHBFIIHII@CHGCH=DHCDGCEEAEBDEEFDCCAC -@HWI-ST1131:111228:C0B0NACXX:2:1101:3234:2154 1:N:0::CGATGTA -CACATCTGGCCCACTCTGACTGACGAAGAATGGATCAAGGTCGAGGTGCAGCTCAAGGATCTGATCTTGGCTGAC -+ -CCCFFFFFHFHHHJJJIJIIJJJJJIJIIJJJJIHGIJJJGGIGIE@CHGIIIIIBEEIIHGHHGHHFFFFFDED -@HWI-ST1131:111228:C0B0NACXX:2:1101:3133:2155 1:N:0::ACAGTGA -TGTGTTTGATTTTTTTTTTTTTTCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT -+ -BCBFDEFFHHHHHJJJJJJJJJJ=DHIJHFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBB@####### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3044:2155 1:N:0::CGATGTA -AAAGTTGAGGTCGTGTCATTACCTTGCTGCGCAAACATGGAAAAATTCATTTGGAAGACATACAACTCAAGTGAT -+ -@@CFFFDDHHAFHCGEHGHGIHGIIGIGIHIJJJJJJGHHGGIJJIIEHJHGGCGGIJIJIIHFGGHHF@D@CC; -@HWI-ST1131:111228:C0B0NACXX:2:1101:3164:2162 1:N:0::CGATGTA -TAGGGGGGGGCGGGCTGAATGCAATGGAGTGTGCATTACATTTGGAAAAAAATGTGAATCAGTCACTACTGGAAC -+ -CCCFFFFDDDDDDDDDDDDDDDDDDDDCD8?CCCEEEDDDEEEEDCDDDDBDDDCDDDEDDDDDDDDDDDDDCAC -@HWI-ST1131:111228:C0B0NACXX:2:1101:3054:2170 1:N:0::GGCAATA -TGTTTGAGGGGCTCAGTTATATGTTTGGGATTTTTTAGGTAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGT -+ -1==DD=?DFFFD>FG>FF>BFEB=F;D9C4?DBCEBDDFF((<@FC=)=)7@CEFEDB?@?3>;A###### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3111:2178 1:N:0::CGATGTA -GAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATC -+ -BCCFFFFFBFFHGIJJIJEIIFHHJIJIJJIIJBHJJIJIJJIJJIJJIJJJJIJGGGHIJIEHIGHDEGGGJ@A -@HWI-ST1131:111228:C0B0NACXX:2:1101:3228:2178 1:N:0::ACAGTGA -ACACAAATTGTGCAATTATTTTCATTTAAATTTACTGAGAATCCCACAAAAGTGATCACTTTAAAGATACAGAAA -+ -BCCFFFFFHHFHHJIIJJJJJIIJIJJIJJJJJJJJJJJIJIIJIJIFJGIJEGIIJJJIIIGJGIIJEGGGIJI -@HWI-ST1131:111228:C0B0NACXX:2:1101:3021:2180 1:N:0::ACAGTGA -ATGTTGGTGGAGCGATTTGTCTGGTTAATTCCGATAACGAACGAGACTCTGGCATGCTAACTAGTTACGCGACCC -+ -@@@D?BBDHDFHFA1@DHE@GGHIGIFIG@=).=;=CEHEC@;;?>@6;A=/96?;B -@HWI-ST1131:111228:C0B0NACXX:2:1101:3009:2183 1:N:0::CGATGTA -ATATCACTGAAGCCTGGACTATCTTCAAAGCCCGACTGGCACAAAATGACATATTAATGTAGTATCTCATTTCCT -+ -CCCFFDBEHDFGHGBHGFGIGIJGIGIIFHHGGEFD6DGEGIIJDHGGGGGFHCHGHG@=@E@;DH:=?>CEEAE -@HWI-ST1131:111228:C0B0NACXX:2:1101:3074:2186 1:N:0::ACAGTGA -AAGATCAGTTTTAAAAATGTAATTGGGATGTAAATTCTGTCTCTAAAATACCTTATGTTATGTTTAGCCATCAGA -+ -CCCFFFFFHHHHHJJJJJJGHJJJJJJIGJHIIJJJJJJHIJIIJJJJJJJIJJJIIIJIIJIIIIJIIJJIJJG -@HWI-ST1131:111228:C0B0NACXX:2:1101:3179:2188 1:N:0::GCCAATA -TGTGAGGAATAGTCATGCTATGGAGAACAGCTACACAACACACATAACCAGAGGACTCAAACACAGCAGCTAATG -+ -@@@DFFFDHFHHDGGHHIJIIIEIIJIJJJJGGIGIIIGJJJJJJJFIJIIDGGGGGIGGGGIGJJHHHHGFFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3046:2190 1:N:0::CGATGTA -GGAAAAAACCTTGTAGAGAGAGTAAAAAATTTAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGC -+ -@C@FFDFFHHHHHFHGIJIIIDAEAHIIJGJJIJJJJJIIGEHFHGEIIJIDHEGIIHJGHFHDEDDDFECEEEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:3244:2190 1:N:0::GCCAATA -CTGAGCTAATACAGTCTATACTTATTTCTTCCCTACCTGTTTCACATCCGTAAGATTTAGGATATACATTTTTTG -+ -@@@DADA>FHHD4AFB1)0?GH4/?4<@CFGFCB4)/@;@4 -@HWI-ST1131:111228:C0B0NACXX:2:1101:3219:2193 1:N:0::CGATGGA -AAGTCCAAGAGTCCAAAAGCTGAAGAAGTTGGAGTCTGACATTCTTGGGCAGGAAGCATCCAGCATGGGAGAAAG -+ -@@@DD?DBCAD2A;HDHHGABC+A<*:?:?*?9FHHIIIEB3B)9@F;DCHIF37=)8@4=6=?##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3197:2198 1:N:0::ACAGTGA -TGTTTGCGTCTGTTTTACTGTCTGCTTATTGTTTGATGTTAATTTATCTCCCTCAGCAAGATAAGCTCTCATAGA -+ -?=@DADDD?@8C?EFB:E@A?BBCFDDEDDBA# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1211:2126 3:N:0::GCCANNN -TTCANNNNNTGNTGAGGTCTGAATTACTCTCCCAGTTGAGAGTTGTCTTTGGGTGTAGTTCGGAAGTGCGTCGTN -+ -@B?A#####22#322<++3<2+ACHH4?FGHGDHGGHC??BD?0BDF>DHIEGGIHIGDHIGH#### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1356:2120 3:N:0::GCCAATA -TTGTNNNNNNANGATGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAATGA -+ -BCCD######3#2@@FF?FEE9AB3E3)7;7?;;;;(;@# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1276:2152 3:N:0::GCCAANN -TAGANNACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGGGATTAGATACCCCACTN -+ -@@BD##2=CFHFAHGBEIHIJIHGGIIGCEGHIIGGHJJJIJ@GIHGEEHGFGEGGIIIIGIGEGIGEHFEEFF# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1326:2167 3:N:0::CGATGTA -TAGGNTGATAGATTGGTCCAATTGGGGGTGAGGGGTTCAGTTTTATGTTTGGGATTTTTTAGGTAGTGGGAGTTA -+ -==;B#+22+BBDDD##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1395:2221 3:N:0::TGACCAA -GTAGTGGGGTATCTAATCCCAGTTTGGGTCTTAGCTATTGTGTGTTCAGATATGTTAAAGCCACTTTCGTAGTCT -+ -?@BD?DDDHCHHDEGGHGIDEGAFDHIJCCFBEH9@BDFIBFHII;DHABBGGHIIJDFH@=@F@DHIGHHHCHD -@HWI-ST1131:111228:C0B0NACXX:2:1101:1348:2222 3:N:0::CGATGTA -CCTAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAATAAAGTATAGGCGA -+ -@@CFFDDDHDHH?EHGGGHJGEIIJIIIIGG@ADDF>GIGFHJICGGIIIBFHGIHHCGIIJ@HHFEEGHFFFF> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1275:2229 3:N:0::CGATGNN -CTGATGGGGGTAACGTAGTGAGCAACTCTTCCTCTTGCTTCTCCTTAATGTTTTTCTTGTGCCTCTTTTCCTTGN -+ -@@@FDE>DHF@FHGICF@8CFHCHIGGIIGBG>HHGHGIJFDFGEGBBCH@@FHHGEGHJGA7ACHGFF@DCC## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1456:2233 3:N:0::CGATGTA -TTGGCACCCACCGCAACTGTCTGTCTCATATCACGAACAGCAAAGCGACCCAAAGGTGGATAGTCTGAGAAGCTC -+ -CCCFFFFFHGHHHJJJJJJJJJIIJJJJJJJJIJJIGIJJIGGCHJJJJJEHEEFF@BDCEEEEEEDDDDDDDDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1298:2234 3:N:0::ACAGTGN -ACGTTGAAAAATAACATTAGAGTAATAAAGGGGGATGCCCAGAAGTAAGGGGATAATAATGAAGATGTATAATTN -+ -########################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1327:2242 3:N:0::CGATGTA -AATGTTATATGGATGCTCCTCGACTTACAGTGGGCTATGTTCCAGTAAGCCCATCATAAAGTTGAAGAATCATAA -+ -?@BAFDDFGHFD## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1426:2246 3:N:0::CGATGTA -TAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAAT -+ -@BCFDDEFGHHHHJJJJJJIJJIJGIJJIJJBGHIJJFIJIIJJGHIJJHHHGHFFFDFFFCEEEEEEDDDDCDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:1287:2250 3:N:0::TGACCNN -CACAATTTGAAACCAAAAAGCTGTATGCAGGAGCTATTCTTGACGTTTGTGGATGAAAATTGGGAAGGTTCCCTN -+ -:?@D:A?;F?C?EEE>=?))7? -@HWI-ST1131:111228:C0B0NACXX:2:1101:1719:2132 3:N:0::CGATGTA -CTCTNNNCCCANTTTCCTCTCTTTCCTCTCAAATCCTAGAAAATACATATGGTGGGGAAGCTAAGGAAATTTCTA -+ -BB@F###22AF#2AEEEG@DEHGIFFHAHEGGIIEEDEHGGHGIEHIIIJJDHIIIFEEGHBECEHEECDEFBD> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1530:2132 3:N:0::ACAGTGA -GTAANNNGCGCNCCTGCTGCCTTCCTTGGATGTGGTAGCCGTTTCTCAGGCTCCCTCTCCGGAATCGAACCCTGA -+ -C@@F###22AD#2ACGF;>>>?AC= -@HWI-ST1131:111228:C0B0NACXX:2:1101:1501:2136 3:N:0::TGACCAA -GGTANNNTAAGTTACACATGTTCAAAAGTTAACACAGACCTATCTGAAAAGTAACTAAGTTACAAAACAATGCCC -+ -@BBFGGGIIHHIEH=@EGIIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:1597:2151 3:N:0::GCCAATA -GAGCNNAGTAAATTTGGAGGTTATAAAGCCTTGGATAACAAAAAGAGTAACGGAAATCCTTGGGTTTGAAGATGT -+ -??8A##+22A+2CGFE@CBG3AFH@FHAFH9EHGIIIJJJIJJIJCHHHGGGGI -@HWI-ST1131:111228:C0B0NACXX:2:1101:1529:2172 3:N:0::GCCAATA -TATGATCATGTCAATTTTGGCCAGTTCAGTTCCAGGAGTGACTGTAACAGATGCAGAAAAATAGGATTGTCTCCT -+ -B@CFDFFDHGHAFIJJJJHFEHIIGHHIJGIEGIGIDGCDGEHGHIJIJJIHGHIJJIIII>HIJCGHIEGIJIC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1710:2174 3:N:0::GCCAATA -TGCGGTGTGGGGTTTTTTTTTTTTTTTATTTTTTTTATTTTTCATTAGAATTTTCGAAGGTAGGTTGTGGGGGTT -+ -########################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1571:2181 3:N:0::TGACCAA -TATAGGGTGATAGTTTAGGTAACTTTGTGTTTGAGAGAGTAAAAAATTTAACACCCATAGTGGCCTAAAAGCAGC -+ -@@@@DDD=CFHHFHIIEGEAFEGEIJI4EAEGEGIJJGHDFEHIEIEFHIFGGGIIIIJDFHHGIJGAHHGFFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:1520:2197 3:N:0::CGATGTA -ATAGCCACAGTATAACTTCACATGTTCATTAAAAAGGCAAATTGACCGCTAAAACTTCAAAGAAAAAGTACTCAT -+ -CCCFFFFFHHHHHGIIJJIEIJIJIJIDHIEIEI>CDD8@CDECDC>CACACCCDD8@DC@CA@ACA>CDCDCADA:A?CCDDCDCCC> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1710:2200 3:N:0::ACAGTGA -AAAAAAGAACCGCCCTTTGTGTTTGAAATGGTTTATTATCTCTACAATATACTTTTAACTTGTTTAGATAATAAA -+ -@@CFDFFFHGGHFIJJJJJIIIHIJIJJIFHDAGHIJJJJJI9BGGGIIJFHIIIIIJJJJHHHHGG@DDFFFEE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1550:2201 3:N:0::CGATGTA -GGTGGCCAATCATCAGCTAGAAAGAAAGTGCTTAGCAGGGCTTGAAAACACCAAAACTCTGAGACCACTGACCTT -+ -@@@FFDFFHHHHHJJIJJJIJJJJJJJJHIIJIJJJIJGIBHIJHIIIIIIIGIJJIHIJGGHIIIHFHFHFFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:1602:2205 3:N:0::ACAGTGA -ATTGATTTCATGTAATCATTGATGACTCGCTCATTGGTGGAAATGCCTCCGCTGAAGGCCCCGAGGGCGAAGGTA -+ -@CCFDFFFGGHHHIIIGIIJJJJJDIJJJDGI1FGGGEGIHIJJJJJJJJHIJIIJJJJJIJIEEDDDDDDBDC: -@HWI-ST1131:111228:C0B0NACXX:2:1101:1687:2216 3:N:0::TGACCAA -TGGGGGGATGGGGTCTTCATCCTCTTCCTCCAGGAAGGATGCCTCTGGGATATGGCTGAAGGCCTCTGGGTGCTG -+ -B@CFFFD?BBDDD@BDD>ACDDCACDDDDDDDDDDDDDDDDBCCCCCD?AACDDDDDD@>@C0ACD<;7@> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1577:2220 3:N:0::CGATGTA -AGCTGCTGTTTGTTCAGAAATCTCAGTTTGAGCATTCAATTTTACAGGTGTAGTATTATCAGAAAGACTAATATC -+ -?B@FDFDFFHHHHIGIJJJJIJJIIJIIGIIJIJJEGFEEGHIGHGII?DDGGDGHBIIHJJJJJIHIIJJC@HE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1520:2227 3:N:0::CGATGTA -ACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGAA -+ -@@CFFAFFHGHDHIJJJGJBHHJFEHGHI:CFDEHBHIJJFII@BBDGAHGFDFHIHGIIJIIGIIEAHEHFFFD -@HWI-ST1131:111228:C0B0NACXX:2:1101:1738:2228 3:N:0::CGATGTA -ATTGGGTCATCATTCATCCTGATGCAGCCTGAGAGATTCGTTCCTGGGCTGGGGCCACTTGTGGGGCCTGGGCAC -+ -??BDAFFEDH>FHIGEF@AAHIIJDDHFBDDHGGGIIF9GFEH@CFIEHCF<8CDCHIHJHIIIIHIGHGDDGHHFFHGG>FAHIGIG>EHECCH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1503:2246 3:N:0::GCCAATA -GTAGAGCCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAGCCAAA -+ -B?@BD;B;FHDDBEC@CEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1648:2247 3:N:0::GCCAATA -CAACTGGACAGGTCTTTGCTACTGTGCTAATTAGATCATACAGGCTGAAGACAATGATAGAGGAATGTGGCAATA -+ -@<@?DBD?D?F?+2AGB@:C@?EHHHIGD9BE>B4DABD?BA?????DEGCEG:CGGEE27=).=6@==@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1765:2117 3:N:0::CGATGTA -AACANNNNNNNNTAGAGGGTTCTGTGGGCAAATTTAAAGTTGAACTAAGATTCTATCTTGGACAACCAGCTATCA -+ -?B?D########22<+A>@?CBF@CACFHEIGHEG@GE@?AACEHFDD;;@>CCBCC>7?B=ACC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1851:2128 3:N:0::CGATGTA -CAAGNNNNCAGNAAGAACAGGACTCCAGAGCGATAAACACTCGCTGGAGAGGGAGACGCAGGAAGCGATGAAAGA -+ -CCCF####3>C#3AGHIJIJJFJJJJIJIJIJIJIJJIJIJJIIJJJGHFCHIFHFFFDCCDBDDDD@BDCDDDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1954:2130 3:N:0::GCCAATA -CAGGNNNNGAGNAAGCAAAAAAACAAATCAAATCTGAATTAGATTCAGATTTTGTATTTGATTTATTTTTTGGTT -+ -@B@F####222#+2+++2CFHI:):D)*00?9?########################################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1777:2133 3:N:0::TGACCAA -AAATNNNCAAANTTAGAAGAAAATTGGAAGATAGAAACAAGATAGAAAATGAAAATATTGTCAAGAGTTTCAGAT -+ -B@@F###23CF#2AEFBBHGGIDEIGIEGHG>AGEHJD@EGHIGIHIIFIHGEGIJJJJJGIJIJIICGHGECEH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1933:2134 3:N:0::GCCAATA -GATTNNNTAGGNAACTTGTGTTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGCTTTTAGGCCTACTATGGGTGT -+ -@CC<###22AC#2CHHHE377 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1992:2141 3:N:0::TGACCAA -CCAGNNGAGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTATAGGTA -+ -CC@F##22AFHFHJJJIGGIGHHJGIJJJJIGIJJJJGJJEHIGIHFIGGGECHFECFGIJBGGEEGD;AEBE@? -@HWI-ST1131:111228:C0B0NACXX:2:1101:1807:2144 3:N:0::TGACCAA -TAGANNGGCTAAGAAACTGAGGTACTAAGGGGTGAGGCTGAAAATGAGAAGAACTAGATCAATAAGGGGACTACC -+ -@E;BACH9*:*C?*)*1?>4?F>GEHDFHIJ<*BEAFGEFHGADGFIIEIICEA##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1952:2158 3:N:0::TGACCAA -ACGCNNGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATC -+ -;?@D##22GBGD4?G4BGGE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1788:2159 3:N:0::GCCAATA -TATCNNCTCAACTTAGTATTATACCCACAAGATCGGAAGAGCGTCGTGAGGGGGAAGAGTGTAGATCTCGGTGGT -+ -8B?D##22:7?############################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1861:2165 3:N:0::CGATGTA -GAGGNGAGACTCGGGTGATAGCGTGCGATGGCGGCGGGGGAGCTCTTGGCCACCCAAAAGTGTATATAAACTTGG -+ -C@CF#2ADHHHHHJIAFHIJJJJIJIIHIJJIJJIHDDDD-708CAC3@>>3(@C:A -@HWI-ST1131:111228:C0B0NACXX:2:1101:1988:2168 3:N:0::CGATGTA -GAATTGTGTTAATAACTGTTTGGCAGTGTGTACTTTGTTTTTGTGAGTCATGTCTCATGAAATTTATTGGAATGT -+ -BB@FFFADFHHGDGIJJJIJIIIJIJIHEHBHGHIIIGIIJJBHJIGFHFEGIGEIJIJGHJJIEGHIIIJIHII -@HWI-ST1131:111228:C0B0NACXX:2:1101:1803:2170 3:N:0::ACAGTGA -AACGTGGGTACTTGCGCTTACTTTGTAGCCTTCATCAGGGTTTGCTGAAGATGGCGGTATATAGGCTGAGCAAGA -+ -BCCFDFFFFHHHHJIIIIJJJJJJIHIJJJJJJIJJJJJIHIIJJJJJIJFGHIJJHEDFEFFEEEEEBDD@?C9 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1962:2173 3:N:0::TGACCAA -CTTTGTGGTTGATTTGTTTCTCAATAATTCTCATTCTCTCTTTAAAAACAAACAACGAAGACAAAAATCTTTCTG -+ -8=;44AD1DB+2A9C?C:F,?;BG@1BBA8@F@A######### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1935:2181 3:N:0::TGACCAA -GTTTTTAGTGTTTTTCATTTTCAGATGGTCAAACATGGAAGTCTATATTGAAAACACTGGCTGGCTTTTACAACT -+ -BBBFFFFFFHHHHJJJJIJJJJJJJJJJIJIJJJIJJIJGHHIJJIJJJJHHGIJJJJIIGIIFGGIIJ:)@EGE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1885:2183 3:N:0::GCCAATA -GTGTTATGAGTATGTACAAATGTTATTTCCTGTAAAATATTTTCATTTTTTAAAATGTTACTTTCTAGATAGAAA -+ -@@@FFDFFDHHDHIGHIGHGHI@DJHJIHIHGEBEHHGDIGIJEIIHGIIBDFDGHGHCFGDABBGIGIJEIJEICDG: -@HWI-ST1131:111228:C0B0NACXX:2:1101:1896:2204 3:N:0::CGATGTA -ACTTTGTGTTTGAGATGGCCCTAAATTCTTGAAGTCTGGTGATGCTGCCATTGTTGATATGGTTCCTGGCAAGCC -+ -?@@FFFDDFFHHDIGGHHIIGJJJGIIIIIHIGG>GIIIHGEHGIDFGGIFGHIIJIJCEGIGGIJEEHGIEIJH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1965:2207 3:N:0::CGATGTA -GTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTT -+ -B@@FFFFFHHGGHJGIJI>FIBJI@HHJIGHIGGIDHGEFEHGHG@DHGIHHIJJ@HGIICGIIGIGIJDGGE=; -@HWI-ST1131:111228:C0B0NACXX:2:1101:1785:2217 3:N:0::ACAGTGA -TCCCTTGTGTTTGAGTGGTGTGTTATTGTGTGTATAGCAAGTAGACATGGTTTACTCATTAACTATCTGAAATTT -+ -CCCFFFFDHHHHGHIGHI?GGHHGHIGIIIIIHIIIIFEHIGHIJJJJIIGFHIHJGJJJIJIJJJGGGGGIJIH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1880:2219 3:N:0::CGATGTA -GGTGGGAGGCAGGAGCTAAAGTTAGAGAAAAAACGGAGAGCTCCGGAAGAATGTAGGATGGGGCTCCTAGGAGTT -+ -@GAFDDAAFD9BGGDHH7B5@E=CD?C2A##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1977:2232 3:N:0::ACAGTGA -TGTAAAATATTTGTTGATTAAATATCTGGGGGAAGAGCTCAGTAAATAAATAAAGGTGTGAGTGATGGTCCTCAG -+ -CC@FFFFFGHHHHHBHDIGIJJJIJIIJIIJJIJHHIIHHIJ?GHHIIGJDHIIJJEFFGEH;CEHIIHECEFFC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1911:2235 3:N:0::ACAGTGA -AAATTTGTGTTTGACAGGGGATGAAATACATGAATAAAGAGAGGCATCAGCTCCAAAAAAAAAAAAAAAAAAAAA -+ -@B@FFFBADFFHHEHJJJIJEHH@BHGHEGH@DGD>HIIIJIIIIIGGIHEHIIIBF=FGADBDDDDBDBDD@BB -@HWI-ST1131:111228:C0B0NACXX:2:1101:1814:2236 3:N:0::GCCAATA -TTCAGTGTTTCGAATAGATATAGGCCTCTTCATTTTGTCTATTTTTGTGTCAGATTTGACAGATTATCTTTTTTA -+ -BCCFFDDDHHHHHIJJJHHJHIJJIJJJJJJJJJJJIHJJJJJJJJJJJIIIBGIJIJIJJJIIIJJHHJJIJJE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1785:2245 3:N:0::TGACCAA -TGCAAGGAGAGCCAAAGCTAAGACCCCCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACACGTCT -+ -B;+=:ADD++1+2?FE@@?0?@?)089/A?=;5;5=??@BBA -@HWI-ST1131:111228:C0B0NACXX:2:1101:1754:2247 3:N:0::CGATGTA -TGAATGATTGAAGATAGTGGGAAAAGAAGGAAAAACAAAGCGAGAAAAAAAAAAGAAAGTTTCAGAATTTTGAAC -+ -B@@DDADBHHBF?C9E4,AGH=FGG################################################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1939:2247 3:N:0::CGATGTA -CAGGTGATTGATACTCCTGATGCGAGTAATACGGATGTGTTTAGGAGTGGGACTTCTAGGGGATTTAGCGGGGTG -+ -@@CFDDFFHHHHHJJGIJJGIJJJFGFHIIGHJI;FGHHHHIIIFFHDFGFHIJJJJIBHGIAEEFHHFFDCD09 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2216:2123 3:N:0::ACAGTGA -CTTTNNNNNTGNTTTTTTTTTTTTTAGAGACAGAGTCTCGCTCTGTCACCCAAGCTGGGGTGCAATGGTACCATC -+ -CCCF#####23#2AEHIIJJJJJG6@).7)=BDB;;6>>31,5=(5>95><8A28>AC(&&)2@@:>C####### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2139:2128 3:N:0::CGATGTA -CGCANNNNCAANCAATGTTCAACCAGTAACTACTACTAATCAACGCCCATAATCATACAAAGCCCCCGCACCAAT -+ -@CEEE3; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2064:2154 3:N:0::ACAGTGA -TGGCNNGCTAGGCGGGGGTCCCCCTCCTCCCTCACCGCTCCATGTGCGGTCCTCCCCGAGCTGCGCGCGCGGTCG -+ -@@@D##22CDBHDIJE########################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2103:2159 3:N:0::CGATGTA -AGGGNNGGAAAGTCACCCGTAAGGATGGCAATGCCAGTGGAACCACGCTGCTTGAGGCTCTGGACTGCATCCTAC -+ -CCCF##2=CFFGHGGGIGIHHIJJFGGEGIIJIEGGGFGHIIJJIJIGIIGGGJGGIFFHH>EDDFFEDEE@CCC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2081:2166 3:N:0::TGACCAA -GGTCNTTGCATCTGTCGCGGTGTGTATCTTTTGGGGGTTCAGCGCCACCAGCGACTTGGGCCTCATTCATCGCGC -+ -@CBF#2=BFDBHHJBDHDFG8E:CFDIIJJJIEIJJI;;@CGGHHBDDEDDDDB@BBDCDDDDDB@AEEH=@B8A/>A>A:@A -@HWI-ST1131:111228:C0B0NACXX:2:1101:2174:2171 3:N:0::CGATGTA -GGGGGACATAGAAGGGAAAAAATATTGGCAGTGCGGACTGTGAATTTCAGTTTTCTAAGTGCTACATCTAATCAG -+ -BCCFFFFFHHGHHJJIFEGGGHGHIJJIIJJGHGIIGHIJIIIIJIIJJJIGGEHHHFHEFFFFFEEEEECEECD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2024:2176 3:N:0::ACAGTGA -GTGGTACAGTAAAATTAGTTAAGATATATGAACCAGAAAACAAGAATAAAAGAAAAAGAATATAGAAGAGATATT -+ -BB@FDFFFGHGGHJIIIJHIGJIJCHIIJJIIJJJJIJJJIJJJJJIJJJHGIJJJJJJJJJJIJJIJJJFIJII -@HWI-ST1131:111228:C0B0NACXX:2:1101:2242:2179 3:N:0::CGATGTA -TTGAGGGGGATGTTTTCATGTTACTTATACTAACATTAGTTCTTCTATAGGGTGATAGATTGGTCCAATTGGGTG -+ -@CCDFFFFHHFHHHIJIJJJJJIJJJJGJJJGJJJJJJIIJJIIIGIJJJIIFFHHIJHBHIDIIGHGEEHFFDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2143:2180 3:N:0::ACAGTGA -GGCATCCACTTAGCTAACTATTGGACTTGGACTGATTATATTCTGGGCGGTAAAATCAGGATAAGCAGCAGATTA -+ -@@BFFFFFHHHHHJJJJJJJJIJJJIGIIJIJFIIIJJJIJGIJJIJIJJIHIJJJJJHHHHHFFFCEEEEEEEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2210:2187 3:N:0::CGATGTA -TATTGCGCCAGGTTTCAATTTCTATCGCCTATACTTTATTTGGGTAAATGGTTTGGCTAAGGTTGTCTGGTAGTA -+ -CCCFFFFFHGGHFHGJJJJJJIIGJIJJJJJJIJJIIJJJJJJJHIIIJJHHIJJJJJIHIJGIJGFHHHDEEFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2117:2202 3:N:0::CGATGTA -TTTAGGCTAGATGTTAACAGAGACCCCCTTCTCCTCAAACACAAATGCTCAGGGTCACTGAACCACTGCTTCTCT -+ -BCCFFFFFHGFDHGJJJIJGIIJICHIIIJJJIJJJJJIIIIJGIIJJHIDFHGCFHIIJJJGHIGHHGGHHFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2097:2206 3:N:0::ACAGTGA -TGTGTTTGATTGTAGATATTGGGCTGTTCATTGTCAGTTCAGTGTTTTAATCTGACGCAGGCTTATGCGGAGGAG -+ -B8=A42AAFH<:A,A,,<:I?B3CG@2<+<+F)7B###### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2196:2206 3:N:0::TGACCAA -TGATTCCTTGCCTGGCTGGCTCCTTTATTAGTGCCCATCTGCAGACTAATTGTGGTCTGGTCAAAAGGTTTGTCA -+ -??=CFAEHIFCHF4?41??D;>FF@3E?111:?GD9*90?F@@E?DF;BC############### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2138:2213 3:N:0::ACAGTGA -GTCAGTAATTCCTTATTGTTTATTCTCCTCTTACAAAAAGACACTTGGGACAAATAAATACAAAATGGCATATAT -+ -@@@FFDADHH>ADHAGGEHIJBHIDFBBDAHI9DBCBF@GG@HIGGGHGI -@HWI-ST1131:111228:C0B0NACXX:2:1101:2089:2219 3:N:0::TGACCAA -TTGGGGGAAAATTTAGAAATATAATTGACAGGATTATTGGAAATTTGTTATAATGAATGAAACATTTTGTCATAT -+ -??BDD1)BF9CF9C)0*?@GEDGG<@DHGIHIB<4<84=C;=7C;CEEEGG;CEEHA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2026:2222 3:N:0::GCCAATA -GAGGGAAGTTACGCTTATTTTTTTTTTGTCTTTTGTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTGGGAGGG -+ -@@BFFFFFHHFHHJJJJJJJJJJJJJ@'()8CH9.BDHIJHFDDDDDDDDBDDDDDB@7;757@BB######### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2184:2225 3:N:0::ACAGTGA -GAGGTTGGGAAACTTGCCATATTATTAAAACATATAAAAGTATAAAGTCTTCTGTAGTGGCATACATGGTAAATA -+ -CCCFFFFDHHHHGIIIFHIICHIGIIIGEIJJJJJJJEIG@FHIGHIIIDFHIJJGGIIIIIJGIIJJIGGA;DG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2239:2229 3:N:0::ACAGTGA -GGGGCTATGTAATCAACACTGTCCTTTTACTAATGGTTGCCCATCATTCTAGGCTTTATCAACTCCTTTATCACC -+ -CCCFFFFFHHHHHIIJGEGHHHIJJHJIIIJJJJIIGIIJJJJJIJIJJJIHIIJJJJJJJHGHJJJJJJJEIJJ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2076:2229 3:N:0::GCCAATA -GCAAAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAG -+ -?3:EGI9+AEHG>AB;?ADDDDDCCCCCDC5@:><@@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2112:2236 3:N:0::GCCAATA -TCTCTGTCTTTTAATTAGAACATTTAGTCCATTTTCATTAATAGCACCACTGATGTATTTTTGTTTAGGTCTGCC -+ -@@@DDDE>FGGF9EH@>C@CD;?@CC@CA1-;>;;>C@BD3;35?< -@HWI-ST1131:111228:C0B0NACXX:2:1101:2038:2248 3:N:0::CGATGTA -GCTTTGGCTGGTGAAGTCTTAGCATGTACTGCTCGGAGGTTGGGTTCTGCTCCGAGGTCGCCCCAACCGAAATTT -+ -CCCFFFFDHHF?CBHICBHGHHGC>BAEE@C9EBGGFGB8BGB@BBCGCGDGEBGHH'==BCDB?@B?B###### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2265:2123 3:N:0::ACAGTGA -TTTGNNNNNGANGTGGCAAGAAATGGGCTACATTTTCTACCCCAGAAAACTACGATAGCCCTTATGAAACTTAAG -+ -?@BF#####22#22AFHIJJJJJIIIIJJJJJIJJJIJIJIJJIIJIJJJGGHIJJIJGGIHHGGFH@DFFFFEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2303:2133 3:N:0::ACAGTGA -CTGGNNNAGTANAGTATTTTACCTCTTTAATATATCAGCATGCCATATTACACATACTACTTACTTGTACTCATC -+ -@@<#2DDEECIGG?BBBFHIJCA7BA=4=FHCACE4 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2451:2154 3:N:0::TGACCAA -GTTTNNGACCCCCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGA -+ -B:+A##222ACF@18@?CFGGGIHI?@?BD;?D>F=FHG@=CF9===@)7=A=D?53',5=;;ADD@(5>?(>A# -@HWI-ST1131:111228:C0B0NACXX:2:1101:2292:2154 3:N:0::GCCAATA -CTTTNNATAATTCATGAGGTGAGTAGCTAGAGCATATCATAGAAAGCTCATCACAGCATTGGACAGGGCCTTGTC -+ -CCCF##2=CFHHHJJJIJIHGIJGHIJIIIJIJJIJIJIJJJIJJJGIJJGIJJIIIIIJIJJJJJJJJIJHHHH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2253:2161 3:N:0::ACAGTGA -GAGGNNCAGTAACTTTTAATGGAAACAAACAACACAATACATTTTTATGTATGGCATAAAAATTGGCATGTTAAA -+ -8+14##222C;CAGEHII=?AA? -@HWI-ST1131:111228:C0B0NACXX:2:1101:2479:2162 3:N:0::CGATGTA -TTCANGGCTGTCCTGTGCAGTGTAGGATGTTTAGCAGCATCTCTGGACTCTGCCTGTCAGATGTCAGTGGCACCT -+ -@@CF#2ADHFBHHJIDHHIJAGBHHIEGGDDHHIHI@DGGADHGGGIJJJCIIIIJGHGIIIGGIIGCHGBDG;C -@HWI-ST1131:111228:C0B0NACXX:2:1101:2353:2165 3:N:0::CGATGTA -ACTTNCAGAAACAGGAGAAAGGGATCCAACACTGTATTTTTTTCTTTTCTTTTTAGGTGTGTCCTTTTCATATTC -+ -B>; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2329:2169 3:N:0::GCCAATA -CTGCAATAATGAAGGGCAAGATGAAGTGAAAGGTAAAGAATCGTGTGAGGGTGGGACTGTCTACTGAGTAGCCTC -+ -@@FFEG@FHEGGBGA@HA@)=;BB@B -@HWI-ST1131:111228:C0B0NACXX:2:1101:2434:2170 3:N:0::GCCAATA -CAGTGGATTTGGTTCATCAGGAGGACTGACAAATGGTAGTGGTCGATATATCTCTGCAGCACCTGGAGCAGAAGC -+ -@CCFFFFDHHHHFHIIJJIJIGIJJIJJJJJJJJJJCHHHHJFFHIIJJJGIJJJJJJIIJJIIIGCHFHFFFE@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2308:2177 3:N:0::GCCAATA -GACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGA -+ -CCCFFFFFHHHFHJJJJJJIDGGIIIHGIIDGHIIIIJJEHIJIIJEIJIHHIGIIIJJIJJJIJJJGHHEHFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2493:2177 3:N:0::GTCAATA -GACCCACGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAG -+ -CCCFFFDFGHHHHJIJIGDIJIJJJJJJIJJGGHEIBHJIIJIEHGHIJBBECEEFFCEEFFDCEEACDCBDDDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2356:2185 3:N:0::GCCAATA -CCTAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAATAAAGTATAGGCGA -+ -;@@DDF??FFHD:;+<1CCDGCABDGDEGCEE>CGHDGCHFHEG@FHGJIIF;CHIGGHG9D@EAHEHGEB3?BC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2404:2187 3:N:0::CGATGTA -GCCTGGGATACATTTCAAGACCCGGAGTGGATGCCTAAAACCGCAGATAGTACAGAACCCTACACACTATGCTTT -+ -CCCFFFFFHHHHHJJJJJIJJJJJJGIDFGGGIIJIJJGIJGHGJJIJJJIHIGHIHHHGFFFFECDDEDDADED -@HWI-ST1131:111228:C0B0NACXX:2:1101:2280:2193 3:N:0::TGACCAA -GTTTCATGTATGTATAGAACATATCTTGTGTTTGAGTGGCTGAGAGAATTTTTGCATTTCCACCCAAAAGCCCTC -+ -BBBFFFFFFHHGHJGGGGICHGHGAIJ>FF?FH>DEE911:EDF*:?G@CC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2377:2200 3:N:0::TGACCAA -ATATATGGGACTATGTGAAAAGACCAAATCTACGTCTGATTGGTGTACCTGAAAGTGATGGGGAGAATGGAACCA -+ -;@@FFFFFGHHHHJIHGIIJIJGGHIIHICHIFA8C>FGEGCFDA?FHHGFHHHI?FF>G>DC7AHHHIJJIIEIIIFIJIIEHIEHFIIIJJIGCGHJFIJJIGGCD@CCEDGGIHHDE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2395:2222 3:N:0::ACAGTGA -TTGTGTTTGAGGGTCTTGGAAGCTTGACTACCCTACGTTCTCCTACAAATGGACCTTGAGAGCTTGTTTGGAGGT -+ -BC@DFEDFHHHDAGFHDIGHJJFIGIGIGIJEGHEIIGGIFIJGIIIGBFFGGIIJJIGIC@DEGGHHHHFBDF; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2460:2222 3:N:0::CGATGTA -GGCTCACGCCTGTAAAACCAGCACTTTTTGTTTTAGTCAGAGGCTTGTCACGGCGGGGTCCCACCCCCCCGGCCA -+ -B@;DD>?#################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2344:2226 3:N:0::ACAGTGA -ACACAGACTCCCCCACCTTCCAGTCGGGCACGTCCTTCATGATGATGGCCTCAAACAAGATCGGAAGAGCGTCGT -+ -B@BFDDFFGHDFHIFJIIEHIBGAGGIHEAF@0?FGCGGGIEHGEGBGAGAC@EHIHEHDHFEBAACAACB>?B8 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2432:2228 3:N:0::GCCAATA -AGGGAGGTTGAGGCTGCAGTGAATTATGATCACACTACTGCACCCCATCTGGAACAACAGAGCGAGACCCTGTCT -+ -=@@FDFFFFH@9B?FFGHGGGGGGGEG;A>FG@BDEHIIGGGEIJJEFHIJIIGIJIIICEHGGDFFGHIJGGGIH@EHEGGHIJ=AEE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2541:2143 3:N:0::TGACCAA -AGGGNNGGGGAGAGAAAAAAAAAGGCTGCCTCTCTTCATACAATGGGTCTCTTTACCCTTCCTATTTCTCCCTCC -+ -=B@F####################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2728:2143 3:N:0::ACAGTGA -TTTTNNTTTTTTTTTTTTTTTTTTGGGTTTGAAAATTTTTTTTTCAAAAAAAAATTTTTTTTTAAATAAAACAAA -+ -CCCF##2=DFFHHJJJJIJJHFDD################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2658:2145 3:N:0::TGACCAA -GGTANNAGGTACTTTTGACATTCAGTTTTGCTATATAGAAACAGAATGAATAAATGAACTTTTTTCTTTTTTCTT -+ -B+=D##22<G4:A?,,,3:2A@?B*883B;F######## -@HWI-ST1131:111228:C0B0NACXX:2:1101:2584:2147 3:N:0::TGATCAA -CATTNNCATTTTTTGGACTGCTAGTTTTTCTATTTAAATATTTGCCTTCATGTTAGGAATGTACTATGTGAACAT -+ -CCCF##22CFHHHJJJHIJGJJIGGIJJJJFIJIJJJJJJJJIIIIJJIJFGFHIIJJJJJGIJJJJJJJFGFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2638:2148 3:N:0::TGACCAA -GCTGNNTTTAGATGTTATTTAAAGTCTTGGGACTGAGTAAGATTACTTAAAGACAGCGTAGCTCAACAAGGGACT -+ -<@BF##22AFFHDHFFIIIIJJEGFIIJIGHIIJJGI?DHHIEIJFIEHGHIJIJIJGB;AGCEEHGHIHFHHFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2611:2155 3:N:0::GCCAATA -TTGTNNTTGACGCGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTAT -+ -CCBF##2=DHHHHIJJJJJJJJIJJJGIGJJJJJJIJGIBFHJJJIJJHHHHHHHFFFFFCDCEEDDDDBCDDDE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2639:2169 3:N:0::GCCAATA -TTTATCAAAAACATGATTACAGGGACATCTCAGGCTGACTGTGCTGTCCTGATTGTTGCTGCTGGTGTTGGTGAA -+ -CCCFFFFFHH?HFGIGIIEGIGHIIIGIJIIJJJDIIGJIIDGGGGHGGGDFGHIIJJGIJJJGI8@=DHJ?EHA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2738:2172 3:N:0::GCCAATA -TTTTCTTTAAATAAGACAGCACTGCATGCTACGGAGAAATCTTTCGTGACAGGAAGAGTCAATGCGGCAAACTTC -+ -@CCFDFFFHHHGHJGGIJJFBHIJGIGIEGIIIIIIGIJJGJEIJIGHIGFHIEIIJI@FGGIGGIHHDACEACC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2518:2172 3:N:0::ACAGTGA -GGGAAAGGGTATAAGTGGCGATATAGCGGGAAGAGTCTGGGGGACAGGAGGGAGAGGTAGAGAGGGTGGGGGCAG -+ -########################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2720:2172 3:N:0::CGATGTA -ATGCTGTTAGAATGCTTGGGCCATGTCAACATGTTGTATTGCTACAGAATAAGAAAGAGAAATATTTAGTTTATA -+ -:=8?;+2AFAFF############################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2542:2175 3:N:0::GCCAATA -GCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAG -+ -?<CH3F@+AAFE3??1?FGF9B49*000?*??6B44BE#################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2569:2179 3:N:0::TGACCAA -TGATGAACTGGGCTTATGTGAGAATGTCTATATTTTCATAACACAGCCCCAGAATCTTTCTCTCAGTTACAGCCT -+ -@CCDDD?EHGGDHIE@FHAICHDHAG@DIIF@GGAGIE@HGIIDGC?DGHGGIIICGIGEHJJIHGCGGHIIFGG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2591:2180 3:N:0::ACAGTGA -GTTTTAGTGTGTGTGTGTGTGTGTGGGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTATTATATATAC -+ -81??DBDACFHADGAAFE@@(().7(;>D>@D6 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2653:2183 3:N:0::CGATGTA -ATAGACGGGTGGGCTCTTTTAGGTGTTCTTAGGGAGGTCGGCTGGGTTCGGGGGGCTTATCGTTGGGTCTCCCTG -+ -?@@DDFA?D0<)<+++1CFH49*1:?D################################################ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2748:2190 3:N:0::CGATGTA -AAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAAT -+ -@@@DDFDDHHHHGIGIJJIGIIGIGJIG6??A8??88>CACC@C:AC:>> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2518:2205 3:N:7682::CGATGTA -TCTGCAGGATATCGCGGCCGCTCTAAACGTGGTAAATTGTTAACTCCGAGCTAGACTTCAGGTGGCCGTATTTAT -+ -CCCFFFFFGHHHGJIIIGIEFEHIJIJIIFGICFHIJJJJJJJIIICC<9?ACECCEEDDDC>@BDDB@6?CDEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2572:2207 3:N:0::GCCAATA -TTAAGAGATGACTTCGGGTGGGGGAAACCAACCCACCCCTTAATTTTGGTTCAAACCTTTTTCAGCCTCCCCCCC -+ -?@@FFFD;4A?766;6>3;>ABBC/8<5+8(9:(:3::ACACCC3:C>CCCA> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2644:2220 3:N:5122::CGATGTA -ACTAGTATGGCCCGGGGGATCCTAGAGACCATTCGCGATTCCATGAGACTCCAAGGGTTCTGCACAACTTATGCA -+ -CCCFFFFFHHHGHDHJJJGGGIJDII@GHJD>FHIIEBDEFEEEAECEDDDDCDDDD(9?CC>CCCDDDCC@C@> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2572:2228 3:N:0::GCCAATA -CGATGAATGTGTAGTGGCATGGTTAAAGCAATGGGTTTATAAACTCTGAAGGAGTCCTTCACCATTTTTTTCTCA -+ -@BBBB=:ADCDCDB@58@B;@CCCCDB;@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2826:2161 3:N:0::ACAGTGA -CCGANNGGGGGGGCGGGGGGGGGGGGGCGTGTTGAGCTCTGCACCCGAACATAGAGGCGGGCCCCCCCCGACCGC -+ -=?BD####################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2995:2162 3:N:0::CGATGTA -TGGCNGTGAAAAACAGTGTATTTAAAGAAATACACTAAAACCAATAATTATGTTTTGTTGAAGAGATTTGAGTTC -+ -B@CF#2=DHHHHHGHHEHFFHIJJJJIJJJIJIJJIJJJIIJGHGIGJIIGHDGIIIHJJIGIHGGIIIIGHGHH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2943:2165 3:N:0::CGATGTA -CAGGNTTATGCGGAGGAGAATGTTTTCATGTTACTTATACTAACATTAGTTCTTCTATAGGGTGATAGATTGGTC -+ -CCCF#2BDHHHHHIJIIJJJJJJIIJJIJJGIJJJJJJJIIJJJJJJJJHFGIJJJGJGIJJCGHGGHHHHHFFE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2869:2177 3:N:0::GCCAATA -CTTGTCAAAACACCTGATAAATACATAGGCCAAAATGGATCTCTAATGAAATATATGTGACTTTATCTTACATGA -+ -CCCFFFFFHHHHHJJJIJJJJJJJJJJHIIIJJJJIGEHCGGFHEIJ@EIFFHIIIIHIIIJJJGIIIIHIJJJG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2816:2183 3:N:0::TGACCAA -GTTGCTCGCTCTAATTTGTCACGTCGGTCTGTTGAAATATTAAACCTAACATGGTCACCTTCCAGCAGGGTCACC -+ -CCCFFFFFGHGHFIIJJJHEHIIHGHJGHHIJFJJJJJJJJIIJHIJIIJIIIIFHHJGIJJGIHGHGHF?@AED -@HWI-ST1131:111228:C0B0NACXX:2:1101:2957:2184 3:N:0::CGATGTA -GGGGTACTGGCGGAGGCGAGTGGGGAGAGGTGAGTGATAGTAAGAGGTGAACCTCAGCAGGGAAAAAAATTGTGA -+ -1+=?####################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2848:2194 3:N:0::CGATGTA -TATGCGGAGGAGAATGTTTTCATGTTACTTATACTAACATTAGTTCTTATATAGGGTGATAGATTGGTCCAATTG -+ -@CCFFFFFHHHHHJJJJIIIFFHHIJIIJJJJJJDIIIIIJJIHGIJJIJIGJJJJCGIJJIGIGHIJIHHHGDF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2791:2198 3:N:0::ACAGTGA -CGCAATCACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC -+ -@@@ADDFDHAH;6CEG?;FGB;?BDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2825:2198 3:N:0::CGATGTA -ATTGGTCCAATTGTGTTTGAGGGCTGTTAATTGTCAGTTCAGTGTTTTAATCTGACGCAGGCTTATGCGGAGGAG -+ -?DG+C>9*@4:*??FD?9??F?BBFHE?44B@GHIIJJGIIJIE:?DFHIIHHGIJDGHGIIGIJIIIGEIIIIBHC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2870:2228 3:N:0::TGACCAA -TTACCTCTTAAATATCTCTGTTCCCTTCTAAGTTGTTTGCTGTGTTTTCTTCAGAGCAAGAAGGTTATATTTTTT -+ -CCCFFFFFHHHHHJJJIJJJJIJJJJIJIJJJIIJJJJJIIJHHHIIJJJHIJJJIJJIIIIIJGHIJJIJIJIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2989:2233 3:N:5634::ACAGTGA -ACTAGTATGGCCCGGGGGATCCGTTAGCTATCGTTCGCGAGAAAGTTAGTAGACACACAGGACCCAGGCGTGCAA -+ -?@@FDADB<;+2CG?@F@F6)(@AH@F;C7C;AHB:;;@(59<5?A?A?(2?######### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2897:2238 3:N:0::GCAAATA -ATAATGGAACTTACAGACACAGAACTGATTTTATACACCCGCAAACGTGACTCAGTAAAATGGCACTACCTCTGC -+ -B;??D;DDBDDHD:AA<@DFCC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2799:2240 3:N:0::ACAGTGA -TTACATTCGATAGTGTTACTGATAACAAACCTACTTAAGAGATATGTTGCTTTTTACTTAAGGGATAGTGTTGAT -+ -@<@DDFDFHHDHHCF@GGGI>DHJIIGJJGHGGHHIIFEGGD>FIIJIII>GHIIIGGIGFEHGAGDHIHFHJIC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2765:2245 3:N:0::GCCAATA -AAGCAAGTGGTGGTTTTAAAATCTGTTATTTCTTTTCTTCCAGTCATAAACTTTGAGGAAGGTATCTCATTTTTA -+ -BB@FFFFBFFCFHFIIJIJGGGGHIIJJIIJJIIJJJJJJIJJIJJJJJJIJIIJIIJHDGIFGIIIJJDHIJID -@HWI-ST1131:111228:C0B0NACXX:2:1101:3034:2128 3:N:0::TGACCAA -CCATNNNNGGGNCTACCTCCAAAATTGCCACCTCCAGGTCCTCCTCCATACCCATTATAGCCATCCCCAAATCCA -+ -@CCF####32A#2AGHIJJJJJJIJJJJJJJJJJJJJJGHIJDGHIIIJJHGIIGIJJJJJIJIJJHHHHFFFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3140:2129 3:N:0::ACAGTGA -CCTTNNNNTACNTACATTGTTCCAACATGCCAGAGGCTGTTCACCTTGGAGACCTGCTGCGGATATGGGTACGGC -+ -@@CF####22A#2)6A##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3023:2146 3:N:0::TGACCAA -TGGTNNTGTTCCGTCTTTGGGTCTTAGCTATTGTGTGTTCAGATATGTTAAAGCCACTTTCGTAGTCTATTTTGT -+ -@BGHGFBDFCG@HIE@CG67C@EHGIHHFHF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3234:2154 3:N:0::CGATGTA -CCATNNCTGCTGCCAGTGCGAGTCTGTGTTGCCGTCAGCTGCGATTGTTCCTTGGTCTGCTTCTCGATCTCAGCG -+ -CCCF##2=CHHGHJJJIIIIHJFGIIGGGIJIJJGHIIJIJIJGGIJJJIFHHIGGGHHHHHHFFDEECEEDEED -@HWI-ST1131:111228:C0B0NACXX:2:1101:3133:2155 3:N:0::ACAGTGA -TTGTNNTTGATGGCCAGTTTAAAACTTATGCTATCTGCGGGGCCATTCGTAGGATGGGTGAGTCAGATGATTCCA -+ -@BCB##2=CFHHHJJJIHIJJJJIJJJIJGJJJGIJGIIIIIJJHFEHHB@DFFCEDD>?BDCCDCCCDCDDEFC -@HWI-ST1131:111228:C0B0NACXX:2:1101:3044:2155 3:N:0::CGATGTA -ATAGNNGGCTTTGGATTCAGAAAAGGTGGACCAGATGACAGAGGTGATTGGTTCTTCTAAAGCTGAACATCATAA -+ -@@@D##2=CFHHGJJJJCHIGHJIJJ9FCEGIJJGIIGIJIJJI6,,5=28<@DD89(:>@CD@:4:>3 -@HWI-ST1131:111228:C0B0NACXX:2:1101:3054:2170 3:N:0::GGCAATA -TGTGGGACGTTTATATTTAAAATCATATTTTGTGGTTGTTAAGTATATTGGAATGATTGAATTTGATTAGCTTTG -+ -########################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3111:2178 3:N:0::CGATGTA -GAGCCTGGGGGGAAAAGGGGTGGTTTAAAATTTTCTTTTGGAAAACACGCATCACCAGGGTCAAAACAAAAAACC -+ -=?BDFB##################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3228:2178 3:N:0::ACAGTGA -TATTTGTATCTATTTTTAGATGACTTCAAACCTGCTTCTATTGACACTTCTTCTGAAGGATACCTTGAGGTTGGT -+ -CCCFFFFFHHHHHJJJIJJIJJIJJJJJJJJJIJJGJGGIGGIEIHIIIJIHIJIIJJJJJJJJJIJBHI@FHI; -@HWI-ST1131:111228:C0B0NACXX:2:1101:3021:2180 3:N:0::ACAGTGA -AACGGGTTACCCGCGCCTGCCGGCGTAGGGTAGGCACACGCTGAGCCAGTCAGTGTAGCGCGCGTGCAGCCCCGG -+ -@@@C:?@8C:@<6A;;(B@55)=CHH>B################################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:3009:2183 3:N:0::CGATGTA -CTTTGTGTTTGATTATGGTATATATACAATTTTCAACACATAATTATTGCATCTAAGCAACAGATACAGAGAAAA -+ -?7??D2ABAFDFDIGEBGCIJFGGCHGGEHHBCHIEHII?C9DB@FHGIFFCFII>GIG@HHIFEHGEGHJIGDF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3074:2186 3:N:0::ACAGTGA -CTTGAGTGATGGGTACATGGTGGTTTACTAAATGCTATTTCTGAATACATTTCAAAATGTTCATAATAAAAGTTA -+ -@CCFFFDDGHHHHEGIIJJJHHIGHIIIGGIJIJJJJJJJJIJJJJJJJJHGIJJJJJIIIJJJJJJJJJIIFHG -@HWI-ST1131:111228:C0B0NACXX:2:1101:3179:2188 3:N:0::GCCAATA -AGGTGATCCGCCCTCCTTGGCCTCCCAAAGTGCTGGAATTACAGGCATGAGCCATGGCACCCTACTTTGATTTAG -+ -@@B=DDBDHHFGGIJJBHHGEHDHIGIJII:CEIHG@DGHIIJEHDIGIJIDGIJIDHIIGIIDHEHFFFFFFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3046:2190 3:N:0::CGATGTA -AGGAGGTCAGTTATATGTTTGGGATTTTTTAGGTAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGC -+ -BC@DFFDDHHFHFIJJJIIIJJJFGIGJJJIBH?FDDEGI?DFEGCHIBHHIHIFECEEHHHEEHFECDF<@AA@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:3244:2190 3:N:0::GCCAATA -TTTGTGTTTGAGGGGGGTTGATTTACATCTGGCACAACTTAGTCTTTGTTCCAATCATTTTAGAAGTCTCAATTT -+ -@@@FDDFDHFABF=G:9)078@@CC8>>CC8@@AAC@BDCCCC>3+38@C9A@@CCDCDDDD<@A:>AA>:>4>> -@HWI-ST1131:111228:C0B0NACXX:2:1101:3219:2193 3:N:0::CGATGGA -GAGGGATGCAAAGTATTGTTCCTAGTGTGACTGTGAGGGAGCGGCAAAGGGAGATTAACATTTGAGTCAGTGGAG -+ -+1+++8A;CBCFAG,AA:=CECHFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3168:2201 3:N:0::ACAGTGA -GCGAGCGGGTGGTAAACTCCATCTAAGGCTAAATACCGGCACGAGACCGATAGTCAACAAGTACCGTAAGGGAAA -+ -?;BDFFDAF)FE>?B::DGGCDAGFGHGEG5?208381<2 diff --git a/clipper/t/in/multx/mxtest_1.fastq b/clipper/t/in/multx/mxtest_1.fastq deleted file mode 100644 index fd94dae..0000000 --- a/clipper/t/in/multx/mxtest_1.fastq +++ /dev/null @@ -1,1000 +0,0 @@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1230:2118 1:N:0: -GTATNGAATTATTTTTCTCTGAATAATTTTTAGGAGTTCTTTTATTCTAGACATCAATCATTTGTCAGTTTTNTA -+ -@@@F#2=BFHAHDHHIGIIIIGIFFDFHIIIIIIDC9B@B?FHCDHEFH4EGEEHI8BFC### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1196:2124 1:N:0: -GCAAACCACTATATATTGCTTGTATCTATCAGCTTCTGGTCAGATACATTTTGTCTATGGAACCTTTCCAACNCA -+ -@<@BDE?BBFHHGIDGIBIFHGICHHICFDHE@FHH>GE@@CFDHC??DGIJ@GAEIGGA?BB6=CFBBFH#### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1211:2126 1:N:0: -ACACCCAAAGACATCTCTCAACTTGGAGAGTAATTCAGTCCTCAACATCTCCTGAAAGATCGGAAGAGCACANGT -+ -8??AADDD??D:CE@E?CE?BDHHGGCCA>EHDD#### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1179:2187 1:N:0: -GGTTCAAGTGTATTTTCTGTAACAGANNNNTATTTGGAATGTTTTTCTTTTCCCCTTATAAATTGTAATTCCNGA -+ -<@@DFDDDDH?FDGGIGGGDHEHGFCHA: -@HWI-ST1131:111228:C0B0NACXX:2:1101:1387:2124 1:N:0: -GGGAGGGGGTGATCTAAAACACTCTTTACGCCGGCTTCTATTGACTTGGGTTAATCGTGTGACCGCGGTGGCTGG -+ -B@CDDFFFH@FFHJJJJJJJIIJJJJJJGIIJJJGHFFFFFFFCEEECED?BBDEDDB?AACD:555>5@DBDDB -@HWI-ST1131:111228:C0B0NACXX:2:1101:1323:2146 1:N:0: -CCCAGCCTTTGCTGTAGCACACACATATATCACTGAACCTGTTTGAAATAAAGTTTTTTTTCTTTTTCATGATTC -+ -CCCFFFFFHHHFHJHIJIJJIIIJJJIIJJFIJIJHIJJJJIIEIG?FGHIEDFGHIJJIH>EHFFFDDFEEC>@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1422:2148 1:N:0: -GGAAGGTGGAGTGGGTTTGGGGCTAGGTTTAGCACCGCAAGGGAAAGATGAAAAATTATAACCAAGCATAATATA -+ -B@@FFFBDHFHDHIJGIJJJIIIIJII?GHIJIJJJJJIIIJJHGGGFIIIHHGHHFFFFFFECDEDDCDDDCDA -@HWI-ST1131:111228:C0B0NACXX:2:1101:1344:2152 1:N:0: -TCCAGCCTGTCACGCCTCCTCCACTGCTGATATCTCCATTTTCACTGTTGGGCTCTTTTACAGGGGTCTTTCGAA -+ -@@@9C339):?B*9DG9)9BF@C<FFFHJJJGIIIJJJIIJ@EAGHGIGIJJJDHII>GHHGGIJAHGGGHEHGID@FFHIFG;FGCCHA -@HWI-ST1131:111228:C0B0NACXX:2:1101:1342:2181 1:N:0: -CAACCCAATGGACAGCTCACTGCTCTTTAACAGTCAAGCCTCTGTTGTTTTAGTCAATCTCACTTTCTTAGCCAA -+ -CCCFFFFFHHHGHIJJGIJJJIJJJJJJEHGJIJJIIGGIGGIJHGIGHIIFHGGGHHIIJGGDHIIJIIEGGHA -@HWI-ST1131:111228:C0B0NACXX:2:1101:1326:2195 1:N:0: -ACTTTGTGTTTGAGAGCACACCCGTCTATGTAGCAAAATAGTGGGACGATTTATAGGTAGAGGCGACAAACCTAC -+ -?@@1ADA+AC>C?:+2?DA?DF98(7'7@;)=77C@D>C############## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1404:2198 1:N:0: -GTGGAGGACTTTTTATAGTGCGTTATACGTATTTTCTTAGAAACATCGTGCATGTGCATTGTTAAACACAACGTT -+ -CBCFFFFFHHHHHJHIHJHIIIHIJIEHICGHIJJJIJJJEG>FIIJIHHIHIJGIIHHIJJJIAEGIGIECHE> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1365:2202 1:N:0: -TACTTCCGACTTCCTCCCTGTGAAAATGTGGATTTGCAGAGACCCAATGGTCTGTGATCATTGAAAAAGAGGAAA -+ -C@CFFFFFHHHGFGIJJJJIIJHIJJHJGHIIIJJJIJIJJGHIJEGGHIIIIIIIIIGIJIGCHIJIEEEHE@3 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1497:2206 1:N:3586: -AGTATGGCCCGGGGGATCCGTTAGCTATCGTTCGCGAGAAAGTTAGTAGACACACAGGACCCAGGCGTGCAAGTT -+ -@@;?DDD=DBFDA@F<@BEF;B1B@C@F3;@E2-''33335;AB5@A############################ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1311:2219 1:N:0: -TTTGTGTTTGATTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT -+ -???DD3BDDD8,C@EIEEIDADD/'','3;:::5::1::::&638::-<<<558<8?873<7>>>9>> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1395:2221 1:N:0: -TCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAGACTACGAAAGTGGCT -+ -@CCDDDDFHHDDBHIIJIJIIDGGBGGIFIFFHIGIGIJJJEIIJIFDCGHIG>=BEIHBGEGIGIFEGHGB??DG@BFCDCC::?C@AC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1456:2233 1:N:0: -CGTTCTGGTAAAAAGCTGGAAGATGGCCCTAAATTCTTGAAGTCTGGTGATGCTGCCATTGTTGATATGGTTCCT -+ -CC@FFFFFHHGGGGIJJJJIJJGIIIIJJJJJGHIJJJIGGIJJJJJFHIIIJIJIJDHHJGIJJICHIJJJIJA -@HWI-ST1131:111228:C0B0NACXX:2:1101:1298:2234 1:N:0: -ACCACTTGTATTTGGTCTCCAAGGTCCCAGTAACTTTACCAGTGTCTGTATTAGATGAACCGGACGTTGTAAATT -+ -;?:+=BDDDDDDE9EEFIIEE@*:?@DDCAE4?D?D*BD4BD;D############# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1327:2242 1:N:0: -TGTGTTTGACTATATTTTTAACTATAGATGGTCCCTAACTTACAATGGTTCAAATTATGATTCTTCAACTTTATG -+ -@@@DDDDFFFHFHCGGGBEHIEH9CCFHIIJ3CFD@HHE>EGIG@GH>>GGHGICGGH<@F@FGIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:1426:2246 1:N:0: -CAGTTAAATTTACAAGGGGATTTAGAGGGTTCTGTGGGCAAATTTAAAGTTGAACTAAGATTCTATCTTGGACAA -+ -CCCFFFFFHHHHHIIIIJJGHJJIJGHIJEGIJJJJJJJIGGGIJJIGIGHGHHIIIGIIGIJGIIJJJIFEHHC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1287:2250 1:N:0: -AATGGAAGCAAGCAAAACTAAATTATTTTCTAGGTGCTGTAATATTTCATTTGATAAGGTAGCAAAAGGATAGGA -+ -@@@7D8DDCH?DB;GGE>FHHGII9FHGGEFHDBG@FHGH@CCCFGIGGGGHIABBDHI?F3?<88B;CCFIA@@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1637:2116 1:N:0: -AGGANAAAACCTTGTAGAGAGAGTAAAAAATTTAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAG -+ -@@@D#2ADBFFFFIIIIIIIIIIFGH@FHH@HHI@HCDHI@DGGGHFGGGEGIGIIII>)?BFCHIGCHHIBHIA:CGHIIG4 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1719:2132 1:N:0: -GGCAAAGGGAGATGGTGGCAAAAAGGTTTAGATGCAGGAGAACAGTAAGATGGATGGTTCCGGCCAGAGTCGATG -+ -CCCFFFFFHGHFHIICFIJJJJJJJICGHIJJJJJJJJJJIGGGIFIEHGGIIIJJJGGGHJJGHBEFD>CDBBD -@HWI-ST1131:111228:C0B0NACXX:2:1101:1530:2132 1:N:0: -GCCTACCATGGTGACCACGGGTGACGGGGAATCAGGGTTCGATTCCGGAGAGGGAGCCTGAGAAACGGCTACCAC -+ -@@CF?DBDFHFHHBHEHIIIIF>FECGHIEBGIIGIIIFIGGGHIHAHGHFBD@ADDDCDCDDDDDB?B;@DC:: -@HWI-ST1131:111228:C0B0NACXX:2:1101:1501:2136 1:N:0: -CTCAGGGTTTGTTATAATTTTTTATTTTTATGGGCTTTGGTGAGGGAGGTAGGTGGTAGTTTGTGTTTAATATTT -+ -@@CDDDF?FHDFFIIJIEHJJJJIIGEIJIGH@AH@FIJGDHIGJJGEHC@AACGIACC7AAE>E@@DBCDCEDE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1556:2139 1:N:0: -GTGTGTAGTCTAAGGTCAAACAGTGTTTGTCCCCTTTTATAAATTCACAATGTGTAATAGCATGTTCAAAACTCT -+ -CBCFFFFFHHHHHJJHHHHJJGJGJIIIIIJJJJJIJJIJHFIIJJJJJJIIGIIIJJJJJJIIHIJIGIIIIII -@HWI-ST1131:111228:C0B0NACXX:2:1101:1641:2143 1:N:0: -TGAAAAATGTTTAATACACTATTGGATTTTTTATTTCCTTTTTTTGATTCAGCTTATACCCGGGCTGAAAACCTC -+ -CCCFFFFFHHHHHJJJJJIJGIJJJ@FHIJJJGIJJJJIJJJJJJJIIJJJJJJJGIGIHIHHFFDCEDDDDDDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1689:2148 1:N:0: -GAATATATGAATAAAAATTTCATAAAACTATATTAAGCAGATGAGAATCTGGCAAAAATATAAGGGCTGTGTAAT -+ -CCCFFFFFHHHHHJIJJIIJJIJJJIJJJJJIJJJGIJJIJEHIJJJJJJIIJJJJJJIIIIJJIJIEGGGHIIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:1668:2150 1:N:0: -AAATTGGGAAGAGTAGAAAACTTCAGGAAATGTATTTGTTCCAGAGATTTCTGAAAATGACTCAAATAATATATA -+ -@@CFDD>DFHHGH4CBFHDGHEHFGEEHFIIIIC9EGIGEFFGIBGIIJICEHHIIIHIIG@GCFFHJEGGIIJG -@HWI-ST1131:111228:C0B0NACXX:2:1101:1597:2151 1:N:0: -GTCTTGTGCACTTAGCAGCAGGGGCCACAGTTCTCCCATAAATTCTCGAGCATTTTTTCCATTCAAAAATCCAGA -+ -<@@ADABBBBFHDBF;3@# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1509:2166 1:N:0: -TCTTGAGTAATTGCCTGTTGGGTTGGTGTCATCCTGACTTGGGCCGGAGAGTGGTGAGCTAACTATTCGTACTCC -+ -;8?DA;BAFH?BHIEHACCA@;A??BC< -@HWI-ST1131:111228:C0B0NACXX:2:1101:1740:2167 1:N:0: -GTTAGAACTAAATACAAAAATCTAACTTCTCACTGGCTCCAGTTTCCTACCTATGTTGAGTATTTTTGCGTTGCA -+ -CB@FFFFFHHHHHJJJJJJJJJJJJJJJIJJJJJIIIJJJEIFHIJIJJIJJEGGGFGHI@FFGIDGBGHHIBEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1591:2169 1:N:0: -TTTATTTAACTTGTGGAACAAAAATAAACCAGATTAACCACAACCATGCCTTACTTTATCAAATGTATAAGAAGT -+ -CCCDFFFDHHHHHEHIICGEFGI@GEHIJJEHIJIGIJJJJIJIJGJIJJFHCGGIJEGIJGECGHIIIEGIDH7 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1529:2172 1:N:0: -GATGAGAGCAAAGTATATCACACTGAATGCCATGTTCAATAATTAAGGGCAGGAGGAGACAATCCTATTTTTCTG -+ -@@@?BDDFGHGFHFCGHHIGIGIIIFIGIIIIIIIIIGIICBFHHHIGHIIIIIIIFHEGHAHIIIIIGIIHHHE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1710:2174 1:N:0: -TGATTTCAAATGCTAATTTATATATGTCTTAATTTTCATGTTGCTGTAAAACTTCAATTTTCTCAAAACCTCAAA -+ -;;?1;4,22=AD?,AE>:,?CDICF>HBHH,A?*@B@EHA4?C9<9?B??**0**0*9BD9?C>3=3 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1571:2181 1:N:0: -CTAGGTAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGCTTTTAGGCCACTATGGGTGTTAAATTTT -+ -@@@FFFDFFHGFFGDBGIIIIFGIIJHGIJEGHIHIIJJID;GGIJGCGIIH>GGCCHIJII@E7=BDEDBCACC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1520:2197 1:N:0: -ATGTCTGGTGCTTTCTATCACCTCTTCTAATCTTTTAATGTATTTGTTTGCAATTTTGGGGTAAGACTTTTTTAT -+ -BCCFFFFFFHFHFIIJGIJGIJIJFJJJEGHGHIGIIJJJEFIIJIHIIIJE@HIJIJGIIAFFGGGHGIIJFFE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1669:2200 1:N:0: -AATAAAGGGTATAGGAGTTTACAACTCAAAACAATTCATAAAACCTATCAGATACATACGATAAATCACACCGAG -+ -@@@FFFFFHFDHHIJJJJIIJIGIJJIGIIJJJIJJJJJJHGIIIJJJJJJJJJIIJJJJJIJJJJJIJJJJHHF -@HWI-ST1131:111228:C0B0NACXX:2:1101:1710:2200 1:N:0: -ATAAAAATGATGAAAAAAGAACCGCCCTTTCATGTATTAAAATGGTTTATTATCTAAACAAGTTAAAAGTATATT -+ -CCCFFFFFHHHHHJJJGIJJIJGGHGIHIJJJIJIIJJJJJIIIIFGIIIJIIGEHJJJJJHEHEEHEF>BEDEF -@HWI-ST1131:111228:C0B0NACXX:2:1101:1550:2201 1:N:0: -TTGTGTTTGAGCTAGGGATACATAGTTGAATATATAGTACAAGATGCCTTGGAGTGTCAGATAGTTTCATATAAA -+ -CCCFFFFFHGHHHJJJIIIJIJIJJIIIJIIIJJJJIHIIJJJJJIIIJJJFGIDGIIEIGIIIF>DFHGIIII@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1602:2205 1:N:0: -ATTGATTTCATGTAATCTTTGATGTACTTCTTGTAGGCTTCTTTTGTGAAACTTGTTTCCTGCAGGTGATGGTTC -+ -BCCFFFFFHGGHHJJJIJJJJHJJJCHGJIFIIFHIIJJJIJIIJJEGGIIGIJGBGHIIIGHDFC8BBCGD@GH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1687:2216 1:N:0: -TCCCTGCCTGCCATTACGGTCATCTGTGTGCCAGCAAAACTGGGAACCTCAGAACCATCTGGATTGCTGGGGCCC -+ -CC@FFFFFHHHHHJIJJJIIIDHIIJJJJJ?FHIIJIJJJJJJJJIJJJJJJIJJFIIJJIIJBHHIJFF??BF@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1577:2220 1:N:0: -GGGTTGGCCCGTGTTTAGGAGACTCGAAAAATGTTTCACAGGAATCTTTGGAGACAAAAGAAGAAAAACCAGAAG -+ -CCCFFFFFHHGFFFFHFGG@C;GECG=GHGECGDF>GEHIJBGEGBFHHIJ=@7;C>GAEH9>@;;BDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1738:2228 1:N:0: -GAAAGGCCCACATATGGAGAAGTAAAGGATGGTGCTTTGGATGTAAAAAGACAACACAAGTGCCCAGGCCCCACA -+ -@@@DFFBDDFHHHIJJGGIHGIHIHJIJFGFGEFEEHIJIGBGGGIJGBADHGGHGIGAC=CDEGEGH?=EBFCB -@HWI-ST1131:111228:C0B0NACXX:2:1101:1558:2230 1:N:0: -GATTGGGATTTATCGATTACAGAAGCCGGCGTAAAGAGTGTTTTAGATCACCCCCTCACGAAGAAAAACAACAAA -+ -@;?DDEF?FFF?FEG?FGEGD?F3A?FAAFHEHIBHGD<@FHCIDG>GC=?;=? -@HWI-ST1131:111228:C0B0NACXX:2:1101:1598:2243 1:N:0: -TAATGATGACTTGTTGGTTGATTGTAGATATTGGGCTGTTAATTGTCAGTTCAGTGTTTTAATCTGACGCAGGCT -+ -@CCFFFADFHHHFIIIIC@@EEHFCHDEHDEHHGGHIGIEHGHIIIIIHFGHC@?DGB>CDFF@FHHIJ;@FHIIBHICCHEEBBDDEFCCC>C35>CCDDACCD3>@>>C; -@HWI-ST1131:111228:C0B0NACXX:2:1101:1648:2247 1:N:0: -TGTGTTCTGATAAAGTTATACATAAATTGAAATTTGATATATCAATTATACCATACTAAGCAAACACTGCATTTA -+ -???D=A:BDADB?9C4<,3<:?>@CC########### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1983:2124 1:N:0: -GTTGTCACCATCTCTCCTTTACTATAGTCTGTTAAGAGTTGACAGGCCCACCTATGGTCCCCAGAATCTCAACAT -+ -?@@ADDADBCDHDEGGHEHEEGG@@HHECDHHIIEEGIBCGGA@7?3@CCC@:@@;>(--5>3;@C>AC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1908:2135 1:N:0: -GAAGGATGGAAGATGAACAGCTTCCCAGGACAGTCTGCTGCCTTTAGTGCTTCCATGCCAGCCTGGATGACAGGA -+ -;?@DDDDDFHHHG@?GG@DGIIICDDEHE?=FHH9?FBFE>?DBDHIGDHGHEIGEHIGHCCCHIIGEEADAHF> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1992:2141 1:N:0: -GCAAGGGGATTTAGAGGGTTCTGTGGGCAAATTTAAAGTTGAACTAAGATTCTATCTTGGACAACCAGCTATCAC -+ -@@@DDFFFAHHHFIEHIIGHHHGIGCHHIJFIIJJIIJIJJGHIJICFHJGIJJJJEGEIJJJIIGHEEHHHFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:1807:2144 1:N:0: -AACTTTTAAATAGAGTATTACCATCAAGAGTATAATTATGAAAAGCAACATTTCATAATTATACTCTTGATGGTA -+ -CCCFFFFFGHHHHJ@GHHIIJIIJGCGHIGGHIICHGGJGHBEHIGGJJEBCIJIJJHIJJGJJGIJCHIJGA@@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1939:2156 1:N:0: -AATTTGTATTCAGTCTAAATTTGTTTTTCATGGTTTTTATGTGTGGTAGTACTAGTTCAGTGAAAATCACAACAA -+ -@@@FFFFDHHFDADFHIIDHGHCGH9*99EDBGHIGEHI@BFFGA;C;B@=GHI@F?G>DGAFHHHIIG3D6DH@DDAF@DH?HG@F3=@AEC;A?==)7? -@HWI-ST1131:111228:C0B0NACXX:2:1101:1788:2159 1:N:0: -TGTGGGTATAATACTAAGTTGAGATGATAAGATCGGAAGAGCACACGTCTGAACTCCAGTAACGCCAATATCTCA -+ -@@?DDDABFF',;;.?BC# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1861:2165 1:N:0: -CACACGCTCTAGTGGTGGTGCTGTCTGAACTGGAGCCCACAGTAACCGCATGTGCCGGTTTTTGTTTCTTTGTCC -+ -CCCFFFFFHHFHHJJHIJIGIJJIJJJJIJJIIJJJJJIJGIIIJJJJJIJJHJJJJGBBDDDD>CDDDDDDDD@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1988:2168 1:N:0: -AGGGCAGGAATGAGAAATACTGCTTTGATGCTTTATCTTTTTACCATATTAGTCATGATTTAAATTGATTTTTAA -+ -CCCFFFFFHHHHHJJJJJJJJJJJIJJIJIJJJJIJJIJJJJJIIJJGHIGHHIJJIGIIIJJJJJIGGHIJIJI -@HWI-ST1131:111228:C0B0NACXX:2:1101:1803:2170 1:N:0: -TCGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTACTGCTAAACCCCGATCAACCTCACCACCTCTTGCTCA -+ -CCCFFFFFGGHHGJIJIIIIIJJJJJJJJJJJIJGIIJJJJJJJJJJJJIIGGIJGJIIHHHGHFFFFECCEEED -@HWI-ST1131:111228:C0B0NACXX:2:1101:1962:2173 1:N:0: -TTATAGTAAGTATCTATTAAAAATGTGTGTTCTCAAGTCCAGCAGAACTTAAAAGTAAATAAAAATAAAAATGAG -+ -<@8B?BB=4=D??*):??409?GGE990*89*=BFC:=F### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1935:2181 1:N:0: -TGTGATGATTATTGACAATTGGTTCATTTTTATATGTGTTGACCGTTATGCCTATAAATAAGCCTCCTATAGACA -+ -CC@FDFFFHHGHHJGIGJIIJJIGGEGIJJJGIIIJIIJGICGIIHIJJHIGGGEIHIJIEIGBFHHIJGIIJIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:1885:2183 1:N:0: -TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTACTTGAAAAAATTTTTTTATA -+ -?@@FFFFDHHHHHJGBDA?BB7BBDDD0@BD@@BBDDDDDB6BDDDDDBD@######################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1905:2186 1:N:0: -ACGTGCGTGCAGAGCAGCAGGAAGTGAAGACACGTGCATTCCTGCCTTCCGTGAAGGAGTGCCCCGTTCAAGAGG -+ -<@@DDDDDF?=?:AB3EFEE=GFFI?*???BDBDEEED@C -@HWI-ST1131:111228:C0B0NACXX:2:1101:1785:2217 1:N:0: -CTTGCTACCATATACATATAATATTCAATTATAGCTGCTTTATAAAGCCAAATTACAATATTAACTTGAAACATT -+ -CCCFFFFFHHHHHIJJJIIGJJJJJJIJIJJJJIJJJJJJJJIIJ@HIJJGHIJJIJJIJJIJGIIJIIIEHEII -@HWI-ST1131:111228:C0B0NACXX:2:1101:1880:2219 1:N:0: -CGGCGGGGGAGGTGGGGAACTTTGCTCCTGCCTACTCACTGCTCATTGCGGCCTACCTGGCCTCCCAGCTGCCTC -+ -???D?@DDA65<;>/;;=??AA##################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1872:2229 1:N:0: -CGGACTGACCCATGTTCAACTGCTGTTCACATGGAACCCTTCTCCACTTCGGACTTCAAAGTTCTCGTTTGAATA -+ -@CCDDDDAAHDDHIEFEHIII9CEHIIIBEBFGABBHGHIGHIIIIDDFHIFGIGIHGHIG8@GGHG;;AHCBED -@HWI-ST1131:111228:C0B0NACXX:2:1101:1977:2232 1:N:0: -ACAGATGCCTTAAACTTAGTATGCCCAAAACTTATCGGTTCCCCTAGCTCAGTGAATGCCTGTATCCTTCACCAA -+ -CCCFFFDFHHHHHJJIIJJHHIJJIJIGIJIIJJGEIIFGIIIIJIJJIJJIDHHGGIIIJIFHIIJJJGHGGI= -@HWI-ST1131:111228:C0B0NACXX:2:1101:1911:2235 1:N:0: -TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTCTCGTATCCACTCTTTTTT -+ -@C@F=AADDAHDDGIHEC;BDBBBDBB@BBDD63938BBDD@B07:8@BB######################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1814:2236 1:N:0: -ATCTCATGGACATTAAAAGGATAATAAAGGAACACTATAAACAACTCTATGCCCACAAATTTGATAGCCTAGATA -+ -CCCFFFFFHHHGHJJJJJJJIJJJJJJJJJJJJJJJJJJJJJJJJJIJJJIJIJJIJJJJJJJJIJIIGIJJIGH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1785:2245 1:N:0: -TGGGTGTTAAATTTTTTACTCTCTCTACAAGGTTTTTTCCTAGTGTCCAAAGAGCTGTTCCTATTTGGACTAACA -+ -@<;D4@=;FDF,AE>>FFHFFCAEFFFEFFEEF<96)@DB4?BDD*98B8B)@3CA;C@4@)).=3?;A=@@DB: -@HWI-ST1131:111228:C0B0NACXX:2:1101:1754:2247 1:N:0: -TTTTGAGGAAGTCTTTAAGTGCCATAATCAACTGCCATTTCAAAGAATATAGATGGTTTTGAAAAGTTCATGCTG -+ -CCCFFFFFHHHFHIJJIJJHIGIJJJJIJJJIJJIJJJJJJIJJGIJJJJJJJJJJHIJJJJJI=HDHHIJIIJJ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1939:2247 1:N:0: -CCAAGGCCACCACACACCACCTGTCCAAAAAGGCCTTCGATACGGGATAATCCTATTTATTACCTCAGAAGTTTT -+ -CCCFFFFFHHHHHJJJJGHJJIIIJGIIIJJHIGIJJJJIIIGJJJGJGFCGIJJIBHHGHHHGFFFFECC>@>A -@HWI-ST1131:111228:C0B0NACXX:2:1101:2216:2123 1:N:0: -GAACTCAGGAGGTGGAGGTTGCAGTGAGCCAAGATGGTACCATTGCACTCCAGCTTGGGTGACAGAGCGAGACTC -+ -CCCFFFFFHFDFFIGGIJGHIIHIEHFGGIIIGIGIJBGBGDHIJGIIJJGHGIHIIIEDE=DG>EHHHFFCCAC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2139:2128 1:N:0: -ATTGGTGCGGGGGCTTTGTATGATTATGGGCGTTGATTAGTAGTAGTTACTGGTTGAACATTGTTTGTTGGTGTA -+ -@@CDFDDEHGGHGGGIJIHIEEDHICEHHGEFC<><>?9>:2>@CDECDDDB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2154:2148 1:N:0: -GGTAACTTTGTGTTTGATACAATTTTATTACAGGATTTGGAATATGAATAAATGGGTTCAAGTGCAGGACTTACC -+ -CC@FFFFFHHHHHJJJJJIJJIJJJJJIJJJJJJJJJJJJJJIGIJJJIJIIJJJJDGHIIIFHIJJJIGIJIIJ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2185:2150 1:N:0: -ATAATCCCCTTGTAAATTTAACTGTTAGTCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAG -+ -CCCFFFFFHGHHHIJJIJJJJIJIIJJJIIJJJJIIJIGIIGIIJIJJIIJJIGIHIHGGGGGGIGHFFHHHFHD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2024:2150 1:N:0: -GATCTAAAACATACAGTAAATTATATGTAACATATATATAATTGTATATGTATAAAATTCATCAGTTGATGATAA -+ -C@@FFFFFHHHDHIJJGGHGGJIJGIJHIJGGHIIJIJJJIJJIGHIJJJIFGHIIGIGJEGIIBGEDGGGGIIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2064:2154 1:N:0: -CGCAGGGGAGCGCAGCTACTCGTATACCCTTGACCGAAGACCGGTCCTCCTCTATCGGGGATGGTCGTCCTCTTC -+ -@CCFFFFFHH>FAGGGIIIIIIIIIGHAGIIBFFHIIIGIIIGEBDDEEDDDCDDDDDDDBDDD>CBDD@BA>A> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2103:2159 1:N:0: -GTGACCACCATACCGGGTTTGAGAACACCAGTCTCCACTCGGCCAACAGGAACAGTACCAATACCACCAATTTTG -+ -@CCFFFFFHHHDHIJJGEGCEFGIIJJJJIJHIJJJJIJIHIIGIBHGJIGIGHHEEEE>CCFFFFEDDACCCCD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2081:2166 1:N:0: -AGGTTAGTGCATACTTCTCCCTTCCACATTTATACTAACCTCAGCTCCGTGGGCTACGAAGCTCGTTCTTCAAAT -+ -@@CBDEFDHAFHHJIIJJIJIIJIIIJJEHIJJJJJIJIIJIIJJJJJJHIHIIIIHJIIJJ@DHBEHFFD@3;; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2046:2171 1:N:0: -GGCAAATCGGTCGTCCGACCTGGGTATAGGGGCGAAAGACTAATCGAACCATCTAGTAGCTGGTTCCCTCCGCAG -+ -@@@DDDDDFFCFFFGI?>>AABA>ABBAA>?##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2174:2171 1:N:0: -TTGACTGTTCTCAATGAGTATTTTAATCTTGCTCTTGTGCCTTTAGCTTCCTTACAATCTTCTTTCATCTTCTTC -+ -CCCFFFFFHHGGHJIJIJHHIJJJIIJJJJJJJJJJJEHIJIJJJJJJJJJIIIGIGIFJJIIJJJIIIIJGH:= -@HWI-ST1131:111228:C0B0NACXX:2:1101:2024:2176 1:N:0: -GGGGGATCTACTAGTTATCTTCTTGTTAAAAAAATTCTGGCATATACTGTCTGTTCAATATTATAGTACTTTGAA -+ -CCCFFFFFHHHHHIIIIIJJJIJJJJJJJJJIGGIGJJJJJIJJJIJGJHIJJHJJHIJIIIJJEHHIHHHGGFH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2242:2179 1:N:0: -GGGAAGATTTATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTT -+ -CCCFFFFFHHHGHJJDGIIIIIJJJJJJIJJIJJJJJJJIJIGFGIJJJIIH?EEDFFFFEECEDACCCDDEDC@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2143:2180 1:N:0: -CCCTCAAACACAAAGTTAAAAAATGTAAGTCTCCAAAAGACCTACAAAGCTACATAAAAATTTATAGTTTTGGGT -+ -CCCFFFFFHHHHHJIGIJJIJJJJJFIJJJJIJJJIJGIGGGIJJJJJJIJJJJJJJJJJJIJIJJJCGGGHHH; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2210:2187 1:N:0: -ATGGGTGTTAAATTTTTTACTCTCTCTACAAGGTTTTTTCCTAGTGTCCAAAGAGCTGTTCCTCTTTGGACTAAC -+ -CCCFFDFFHHHFHJJJJJJJIJJJJJJJJJJJJFHIFIJJIJJJ9BFHIJIJJJJIGIEHJJIHHHGGHEEFFEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2117:2202 1:N:0: -GAGGGTTCGCCAGCCTTGTCTTGAGCCATCAGTGTGGCAGGGGAGCACAGGGGGGTAGGTGGAGACACTGCGGAG -+ -CCCFFFFFHGHHHIIIIIHIJJJJJJJJJJIJIJIIIIGJIJJ6AAHG@>@EF'5050?(3<2<>8<<:3>@99@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2097:2206 1:N:0: -AGTGTTTGAGTCAAGTTAAGCCGCAGGCTCCACTCCTGGTGGTGCCCTTCCGTCAATTCCTTTAAGTTTCAGCTT -+ -;?=D=ABDDBAFBHGIEGGA@@G6C?A@BGEGEGEGEEH?DD7B>3=BF@35.=;;@)=?E:;?@@);@D>@@@> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2196:2206 1:N:0: -GTAGTTAAGTATGCAGAAAAACAAACAAGACGTTTTGATGAAGGAAAATTAAAAGCTGGCCAAAGTGTAATTGGT -+ -?@@D=BBDFADA:BDFFIEII1CGFFEIFFIF?FGIIBGECA>F?BBFFEEFICGCFFFEIE;@ECE@>=AE### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2154:2207 1:N:0: -CCTGATGCTTACTACTATTTGAAGGATGATTGGGACCAGGTGATGGACTTCTCTGGCTACTTGAGCGCTGAAGAC -+ -??E99BBGAEF?BFDB::9DDFGIII=FE@BF37=7 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2138:2213 1:N:0: -AGAGGGTAAGAGATGGGTAGAAGAGTATGCCTCTGAAAATTTTATTAGTTTATTCTTGTGGAGAATACCAAGAAA -+ -@@@DD8+A?FFGEIE?<DB:CBGGBF<18?CD8CCFG>EHDFGFG4?BDHII?:?00?FFG@EGCGEEIEHCDEEEEGFHEECEEBC?DFDE>>;A -@HWI-ST1131:111228:C0B0NACXX:2:1101:2011:2239 1:N:0: -CTTTGTGTTTGAGTCTCGTTCGTTATCGGAATTAACCAGACAAATCGCTCCACCAACTAAGAACGGCCATGCACC -+ -8?AFFFIFIEE:?)5=>?BAB#### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2038:2248 1:N:0: -ACTGTTTGCATTAATAAATTAAAGCTCCATAGGGTCTTCTCGTCTTGCTGTGTCATGCCCGCCTCTTCACGGGCA -+ -CCCDDFFFHGHHHJIFIGIIHIIJIHJIGGEGGIGGIIJJIGGHIIJJIIHIHIHGHIIGGGIIIC@DCGCHFE> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2265:2123 1:N:0: -CACGCGCTTCAGGGCCCTGTTCAACTAAGCACTCTACTCTCAGTTTACTGCTAAATCCACCTTCGACCCTTAAGT -+ -CCCFFFDFHHHHHJJJJIGGIJJHHHIIFGIJJJJJJIJJIHGFHIIHIJJJIJIJIJJIIIFHGHFFDEDCCCC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2303:2133 1:N:0: -TCAGTGCTCTATCACCTGCATGGGGAGGGATGGAGCAGGGCAGTAACTTCAGTCTTACACTAGCTATAGCAAACA -+ -@@@FBDDFGHHHHIEEAGGDHEGBGEEDHE;DDGGIJIIJFAFCGIGEHIFGC@=EHGDHIHHGDHDECDBBD@A -@HWI-ST1131:111228:C0B0NACXX:2:1101:2468:2138 1:N:0: -ATGATCAGGCTTCCTAGATAAACAGCTTGAGGGGTTTTGCTTTTTAAAAGCCATTTATTGATCTGTTGTCAGTCT -+ -@CCFFFFFHHHHHJJIJFGIJJGIJJJJJIJJJJDHIJIIIIJJIEIGID8EHGIIIJJIIIGHIHIIHFCHEHF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2326:2139 1:N:0: -AATTAAGGAGTTTTGTAACTGAATAGTGGAACTCAGAAAGACATCCTATTCAGAAGGATCTCTCATGATAATAGT -+ -@C@FFFFFHHHHHJJJJJJJJIJJJJHHIJJJIJE?@D;CBA;;@;>?;>@C9985EGGGEE@GH@BH??AEGHGCAFBBG:CBGIDHBFB9?9B09?DGAHEDH=@C8@GFA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2479:2162 1:N:0: -AGCTGAGGAAAGCTTCAGGGAAGAGATGACATTTAAGCTGGATTACAAAAAATAGGTTTTTTGTTTAAAATAAAA -+ -CC@FFFFFHGHGGIEIGIJIGGIII@HHGIGIJJIIJIJGJFHGHJJIIDHGHIJJFDHGIHHHFEEFFBC@CCC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2353:2165 1:N:0: -AAAAGAATAAAATACAGTGTTGGATCCCTTTCTCCTGTTTCTGCAAGTGTCCTGAAAAAGACTGAACAAAAGGAA -+ -@@@DDDDBHHD?FIII><:CFE?HBEGGEGHIIGG9?1?DHHHIFHG?D?BGG@E@?4BGFGGDGEHH@FD7@CC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2329:2169 1:N:0: -GGGGCCACAGTAATTACAAACTTACTATCCGCCATCCCATACATTGGGACAGACCTAGTTCAATGAATCTGAGGA -+ -?@@DBDDDFFADDHGHIIDHAHGIE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2493:2177 1:N:0: -CTGTGAGGAGTTCAGTTATATGTTTGGGATTTTTTAGGTAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTG -+ -CCCFFFFFHHFFHGIAFGJIGJHGIJIJIJJIJJJIJIFEGDGIJDFHIJEIJBGIIGIIHFDHHGFFDCCFACD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2356:2185 1:N:0: -TATTATGCTTGGTTATAATTTTTCATCTTTCCCTTGCGGTACTATATCTATTGCGCCAGGTTTCAATTTCTATCG -+ -@@@FDFFDFFFFHG@GGIHGJJIGCGHBHI>HGGGGGGFFF@FDHA>? -@HWI-ST1131:111228:C0B0NACXX:2:1101:2404:2187 1:N:0: -GTGGGTGGGGGTCTCGCTATGTTGTCCAGGCTGGTATTGAACCCTGGCTAAGGTGATCCTCCCGCCTCAGCCTCC -+ -CBCFFFFFHHHFHIJHIJJJIJJJJJJJJJJJJJFGHIJJJJIJJHHHHHFFF?CCEDECEDDDDDDDDDCACCB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2280:2193 1:N:0: -TGGGTATAAGTCTTTCACTTCCTGGGTTAAATTTATTTTTAGGTATTTTTTTTTCTTTTAGATGCTGTTATAAAT -+ -@CCFBDFFGHHHHJJJJJJJJJJJJJGHIIJJJJGJJJJJJJJDGIJJJJJJJJJJJJHHHGHHFFFFFFFEEED -@HWI-ST1131:111228:C0B0NACXX:2:1101:2343:2195 1:N:0: -AGATCGGAAGAGCACACGTCTGAACTCCAGTCACCGATGTATCTCGTATGCCGTCTTCTGCTTGAAATTATATAG -+ -8E;@B1A2C++*1?@EE*:*1:CDBF94F>FHDH@BFG?D9BBHGHH@9FE1=@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2377:2200 1:N:0: -GTCTCCCTCACTTATGAAGCTTAGTTTGGCTGGATATGAAATTCTGGGTTGAAAATTCTTTTCTTTAAGAATGTT -+ -@@@FFFFFHHHHHIJIJBIGGJJJCB>HIIGJJCAFHHGHGIJIGIEIGFGHGIIFGIIGEGEGGGGGGEHIHJ# -@HWI-ST1131:111228:C0B0NACXX:2:1101:2356:2207 1:N:0: -GAGTTGGGATCAAGTGGATTGAGGAGGCGGTGCTGTGTGACAATGTTTCGTTTGCCTCAGACAGGTATGTCTTCG -+ -;:=DDDDD?BFB3?CECBGHJCEEHE>FCH9FGG'8&)8?A################################# -@HWI-ST1131:111228:C0B0NACXX:2:1101:2460:2222 1:N:0: -AAGAGAAGCCCTTTTTTTAAAAACAAAAACAAAAAGAAAAAAACAAGAATTTTGGTATATATGTAGATATATATA -+ -@@CFDFFFGHHHHJJJGGHIJJJJIJJJJJJJJJJIJJJJJGIHHECDDCDBCCDCEEEDEFECCDEEDEDEDEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2344:2226 1:N:0: -TGTTTGAGGCCATCATCATGAAGGACGTGCCCGACTGGAAGGTGGGGGAGTCTGTGTAGATCGGAAGAGCACACG -+ -@@CDDDDFHHHDHIDHHGIIIEIJIGIGHJJIJEHGHI>GIDCCG;;>;@CD@(@6CFG@CA=CDHD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2315:2240 1:N:0: -CCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGAACCCTC -+ -CCCFFFFFHFHHGIGHIJJJJIJJ>FGHIJJJJJJIIJJJIIHJJHIJJIJIJJJGIJHGIGGIJIJJGHHCDFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2410:2243 1:N:0: -AGGCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGCGTTCAAGCTCAACACCCACTACCTAAAAAATCCC -+ -@CCFFFFFGHFHHCIJIJJJIIJJJCHIJJIIJJIGGGHIHGHEGDHIIIIGGJIIIIJIGIJEHEEEEEDCE>; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2441:2249 1:N:0: -GACTCTTTGTAATCTACTCTGTCATCTGGTTTCCCCATCCTAGTAAATAACAACTAGGAAGTAGCCATGAAATGC -+ -CCCFFFFFHHHHHJJJJJIIJIJJJJJIJEHIJIIJJJIJJIJIIJJGJJJJJJJIJJJJJHGHIHIJJIJIIJB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2634:2122 1:N:0: -CTAATTTTATGTGTTAACTTGACTGGGCTAAGGGATTTCCAGATAGCTGGTAAAACATTATTTCTGAGTGTGTTT -+ -@CCFFFFDDBFFFHJHJEGHEHGHG?9=@EFBB>GFHCHCBDEHICHJI -@HWI-ST1131:111228:C0B0NACXX:2:1101:2683:2140 1:N:0: -GGATTGGTCCAATTGGGTGTGAGGAGTTCAGTTATATGTTTGGGATTTTTTAGGTAGTGGGTGTTGAGCTTGAAC -+ -CCCFFFFFHHHHHJJJJFHHHHIIHHEGIGHGIJJJIJHIJJJJEHHJIJJGGI@GHDHII4AEHEBCEECCEDA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2708:2142 1:N:0: -AGGCCTCCACTCCAAATAAATCACAGTCAAAATAAATGAAGAGCTCAAGATGACATCAGTCCCATTTGTCTTAAG -+ -@@@1BDDDHFBC?DDGIGIII4AEDHHHGGGGIIIH@G>FEBEGIGBGFEG=G?FC@?FAD@FHGIIBD>CBBF:CEGHGGG>7 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2611:2155 1:N:0: -CCACCAGGCTCGGTAGGTTTGTCGCCTCTACCTATAAATCTTCCCACTATTTTGCTACATAGACGGGTGTGCTCT -+ -CCCFFFFFHHHHHEHGI@HHCDFHIIGGDDEHGHIIJJIIGIIIIIIGIJJJJGIGIJIJFGIHHGE######## -@HWI-ST1131:111228:C0B0NACXX:2:1101:2639:2169 1:N:0: -TGGGTGGCTCAGTGGAATCCATTTTGTTAACACCGACAATTAGTTGTTTCACACCCAGTGTGTAAGCCAGAAGGG -+ -@CCFFFFDHGHH?GIIJJJIIIJJJIJJJIJJJJIGIIJIJJJJIJJJJJJIJJJJJJGEHHHHGCDBDDCCCB: -@HWI-ST1131:111228:C0B0NACXX:2:1101:2738:2172 1:N:0: -GAAGGTTAAGGTGACTGTAGCGATTTCTTTAAATAAGACAGCAATGAAGTTTGCCGCATTGACTCTTCCTGTCAC -+ -@@CFFDDDHHFDFHIHJFIHGGEEGGHIJJIJJJJIJIJJJIJJJJJJHGHGIGIJJGGIJIIJJGGCEFEHHGC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2518:2172 1:N:0: -TCTTGATTAATGAAAACATTCTTGGCAAATGCTTTCGCTCTGGTCCGTCTTGCGCCGGTCCAAGAATTTCACCTC -+ -CCCFFFFFHHHHHJJJJIJJJJJJJGJIJJJJJJIGGIJJJJJHIIIIJJIGIEBGIJBHFFFFCCEDEAACDDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2720:2172 1:N:0: -AATAACCAAATACACAACAGGCCAGGAAATAACATTTTCAGAAATGGCCTTCTAACTGGTTTTCCTAATTCTAAC -+ -?+8=B;DDFCB?DHGHEIIIH@7?ACBACEDGD)7@;;D?## -@HWI-ST1131:111228:C0B0NACXX:2:1101:2542:2175 1:N:0: -GATGGTGGCTGCTTTTAGGCCTACTATGGGTGTTAAATTTTTTACTCCCTCAAACACAAAGTTTTTTCCTAGTGT -+ -?B2)=BB3@ADDD9@@CDCDD;6@;@66> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2569:2179 1:N:0: -CAAGGATGGTTTTGGGACTAGAGGCTCAGTGGTGGGTGAGATCCCTGCAGAACCCACCAACCAGAACGTGGTTTG -+ -@@@DFDDFHFHHHGGGGGGEF@GECGGGIIGGHGII)8?D>GCDHIIGGIFGGHIICEHHEDEF;;@>5=?;=?8 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2591:2180 1:N:0: -TCTTCTCATTGAACAAATTTTGCATTTTTGGTAAACTCACAGGTTTGGCTGCCAATAATAGAAGTGCCGCATTTC -+ -@CCFFFFDDDFHHIIIIJJJIJJJJJJIIGI;CEGEHEEHIGIBFHCBGHIGIC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2748:2190 1:N:0: -TAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGCTTTTAGGCCTACTATGGGTGTTAAATTTTTTAC -+ -@@CFDFF@FDDH?HHIEIJIJIIIIIJJJCIGHGGBGHGGHIHHIJGIIJIJ@HG@CGEG);=CHAEDFFDFBD> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2670:2192 1:N:0: -AGAAATTTACTAGTGCAGCAACCATTTAAATTAAATGTTTGTTAACATAATAGTGATGGCATTTTCTCCTCCCCC -+ -CCCFFFFFFDHHHFGIIIIIIIIIGGFEHF8;AC>AC;>CC;>A3;@CCCCBB=<@?@CCA@AC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2518:2205 1:N:7682: -GATCCGTTAGCTATCGTTCGCGAGAAAGTTAGTAGACACACAGGACCCAGGCGTGCAAGTCAATTTCAGCTGACT -+ -CCCFFFFFGHHHHJJJJJJIIGGHIIIJHGGIFIIGJJJJJJIIIGIIJIIGHBDBDCECCECDEDDEDCDDDDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2572:2207 1:N:0: -ATAAGGGGAGAGGGTCAGTCAACCATCTTAGATATGGGAACTTAAGGGGACTTCATGGCCCTGCGGGAAAAAAGC -+ -@@CFFFADHHFFFIAEGEHHGIEGGGHBHIFEEHGIEHHG;GCFHEHIIBGEHEDEHBHGEHHEDEDDBDC?;9A -@HWI-ST1131:111228:C0B0NACXX:2:1101:2740:2214 1:N:0: -GGTCGGGGGGCTGGAATTACCGCGGCTGCTGGCACCAGACTTGCCCTCCAATGGATCCTCGTTAAAGGATTTAAA -+ -@@@ADDDDDBBBBBBCC8@@@@B30:38BC>@<<3+8<>8>C>A83>9@@>3:9>@B(822>:>(+:>:@C -@HWI-ST1131:111228:C0B0NACXX:2:1101:2644:2220 1:N:5122: -ACTGGATGCATCTGCAGGATATCGCGGCCGCGTCTTCAGAGGGGGATAGCATGACCTCACGCCTTCTATAAAAGC -+ -CCCFFFFFHHHGHJJJJIIGHGIGDGIBHIIIFHGIGEGHHHHFDBDCDDDEDCDDDDDDDDDDDDCDECDDDDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2572:2228 1:N:0: -CTATTCATTTCATTCCTAACTAATTTTAAGTGATGTTGATGTTGCAGGACTGGAGACCATGCTTTGAAAACCAAT -+ -C@CFFFFFHGGHHIGIIJJIJJJJEGIDHJHHHIJIJJFIJAHIIIJJIJJIJGIIJJJJJGIIGIEEHGIJG@3 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2694:2228 1:N:0: -GTGGTTTGTTAGGTACTGTTTGCATTAATAAATTAAAGCTCCATAGGGTCTTCTCGTCTTGCTGTGTCATGCCCG -+ -@@@FDFFFFHGHGAEHGIHIJFIGJIIJJJJJJJJIGIIIJJGIJJIJBGHIIJJJHGIIIJIJGG>FGIJJJIB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2629:2230 1:N:0: -GGTGATAGATTGGTCCAATTGGGTGGGAGGAGTTCAGTTATATGTTTGGGATTTTTTAGGGAGTTGGTGTTGAGC -+ -:??D=:4B::DDAAA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2541:2237 1:N:0: -ATAACTTTGTGTTTGAGGACGGTACAGGACCGGTCGACTAGCCAGTCCACAGCCAGGATCAAGGAGATATGGTCG -+ -CC@FFFFFHFFHHIIJJJJIJJCGIIJJIJJJIHIJJJJJJIJJJIJHHHHHFFFFDDEEDCCCDDDCCDCDC@? -@HWI-ST1131:111228:C0B0NACXX:2:1101:2512:2238 1:N:0: -TTTAGGTAACTTTGTGTTTGAGGGCCTTATTTCTCTTGTCCTTTCGTACAGGGAGGAATTTGAAGTAGATAGAAA -+ -CCCFFFDFHHHHHJIIIIIJJJJJIIJJJIJJJJJJJJJJJJJJJJIJJJJJJJJJIJJIIGA@G@EHHFFGDEH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2572:2245 1:N:0: -TTCTCCCTAGAGCTTTCTTGCTAATGTGCCTATATCCTCTTACTTTAGCTATATTCCTTATACAAAGGAGCATCA -+ -@CCFFFFFFHHFGIIIGIJIIIJJJIJJDHIHIIEIIIJJIGGGIIJIEIJEGIIGIJIIIJGG@FEHGEIGII> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2664:2246 1:N:0: -ACATCCGCGCTTCATGATGAAAGGCCTCAACCAGTTAGGCATGGAAGGAACATACCTCAAAATAGTAAGGGCCAT -+ -CCCFFFFFHHHHHJJJIJJJIIIJJIJJJJJJJJHIJJJJJJJJJJJJJJIJIIIIJJJHHHHHHEFFFFE@CBA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2598:2246 1:N:0: -ACAGCCAGGGACATGTAGGCAACACGAGCAGGCACAGCGCGGCCACCACTGTCCACACGCTCACACAAGCCAGGC -+ -@@CFFFFFHHHGHJFBFEHIJJJJIJGIJJIGIIJIGGIIGGHHFFECDEDCDCDDDDBDDBDDCCDDDDDDBDB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2751:2116 1:N:0: -AAGANGAGGACCGGTCTTCGGTCAAGGGTATACGAGTAGCTGCGCTCCCCTGCTAGAACCTCCAAACAAGCTCTC -+ -CCCF#4ADHGHHHJFHJJJJJHIJJJJJDFHIJJJIHHIJJJJJJIJJHHHFFFFFFEEAEEDDDDDDDDDDDDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2972:2117 1:N:0: -GCTCNAGGATTTGACCTTTGCAAGAAGAATGACTCAGCTGGCCTTGATATGGTGTGGTCCACCAGACCTGATTCC -+ -BCCF#2ADDHHDFIIJJJJGEHIIJIIJJJJJJJJJIIIGJEIIIJJJJJIJHIIIJCHIGGGJGGIIIGHHGHD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2858:2117 1:N:0: -TATTNCTTGAGATGAATATTTAATTCACACATTTTTATTTCTTTTTGTTTAGTAGCTTAAGAGTATAAAGCTGAG -+ -CC@F#4BDHHHHHJJIJJJJJIIJJIJJIJGJJJJJJJJJJJJIJJJHIJJJHIIJJJJJIJJHIHIIIJIJGHH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2819:2125 1:N:0: -GTCGGTGAGGAGTACTTAGGCTTGGAGGGTGGTCCCCCCATGTTCAGACAGGATTTCACGTGTCCCGCCCTACTC -+ -@@@FFDDAHBBD:ACEH>HGGIIIIEBD@F7D?FGEIGGG@G@@@ACEGEEFEDDFEDDCCCEC@@;?B=?CBCC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2877:2125 1:N:0: -AGCTTGAACGCTTTCTTAATTTGTGGCTGCTTTTAGGCCTACTATGGGTGTTAAATTTTTTACTCTCTCTACAAG -+ -8=8DDDDBFB?DHEGBFHCHIH>E>1;AEHHCHIC??3BF;)?B<<@;*7?;CGEGHFHE:?;B@EBD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2783:2126 1:N:0: -TTGTGTTTGATTGGTAGATATTGGGCTGTTAATTGTCAGTTCAGTGTTTTAATCTGACGCAGGCTTATGCGGAGG -+ -@CCDDFFFHGHHHJGHIIIIIJIJJJIJHJIJJJIHIIJIIJJJGHEIGIIJJIJJIIJIJJIJIJJIJJHGEFA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2924:2127 1:N:0: -TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT -+ -CCCFFFFFHHHHHJJJFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBDDDDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2833:2134 1:N:0: -GGTGGTTTTTCTCTGGTGTCATTGTTTATTATCCTTCTTGGTAGACTCATCTGCTTTCTGTCTGTTCCAGAAATT -+ -@@@DFADEHHGGFHGEH>CE@HADEHEHIIHGIGFEGGIBCFFD@BFHHGIIHGHGHGHBFBHCHGBFF;==CFG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2979:2137 1:N:0: -CCCCCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAGACTACGAAAGTG -+ -BCCFFFFFHHHGHIJJIJJJIJJJJJJJJIJJJGIJJIIIJJJJJJJJJHGIEIGIIJIJIIHHHHHHHFFFCAC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2847:2145 1:N:0: -GCTGTCTTCCTAGATTCACTGAATCCACTTCTGTGTAGCACCTGGGTCAGCTGTCAATTAATGCTAGTCCTCAGG -+ -@@@D=BDDFFDDFGIIIIIIIIH?FFIIIIIIFEFFGIIFFFFIIFDGGIIIIGIIGEF@FGIIDIGFIIIIIDB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2811:2145 1:N:0: -TCAAGCCTTATTGAAGAGATAGGAACTCTTGGTTGGGATAAGGAAGAGACTTCCACCTTAGGATAGTGTTGCCTG -+ -@@CFFFFFGFFFHIJEEGGCIGI:CFEADHIJFHAHGICHIEHEIGEGGGCA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2885:2146 1:N:0: -TCTGTGGGCAAATTTAAAGTTGAACTAAGATTCTATCTTGGACAACCAGCTATCACCAGGCTCGTTAGGAGATCG -+ -CCCFDFFFGHHHHJJJJIJIJJJJJJJJJJJJJJJIJJJIJGGHJJJJJJJJIIJJJJGHIGIJHIFHHHFFEEE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2770:2150 1:N:0: -TGTGAGGCCCCGCTTTCACGGTCTGTATTCGTACTGAAAATCAAGATCAAGCGAGCTTTTGCCCTTCTGCTCCAC -+ -@@?DDFADFDHHFGHIJJIJJIJIIDFIIGIBFGIIGGIGGGHCFC@CEGIAGAEGIGBHCHIGJIJJCGGHGEGHHIIGFHHIB=A################# -@HWI-ST1131:111228:C0B0NACXX:2:1101:2995:2162 1:N:0: -TGTCAGGCAGGAAAGGAGAGAAAAACATGAAATAGATGAGACAAATAGGCAAAAATAAGAGTTTTAAACCCAAAC -+ -@CCFFFFFGHHHHIJIGGIGJJIJJJIEHGJJJGIIIJIIJJJJJIJJJIIJJIIJJJIJIGGIIJHHHHFEFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2943:2165 1:N:0: -AAACACCCACTACCTAAAAAATCCCAAACATATAACTGAACTCCTCACACCCAATTGGACCAATCTATCACCCTA -+ -CCCFFFFFHHHHHJJJJJJJJJJJJIJJJJJJJJJJJJJJJIJJJIJJJJJJJJJIIJIJJHEHHHFFFFFFEDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2869:2177 1:N:0: -AGGGCCAAAATGGATCTCTAATGAAATATATGTGACTTTATCTTAATGAGCATGCCCTTAATCCTATCATGTAAG -+ -BC@FFFFFHHDHFGHIIIIIIHHEIIGHFFHGFHIIJJIJIJJJJJIGHIGIGEHIJEHHIGIGGGIIIIIIGIC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2816:2183 1:N:0: -TAAAAGAGATATTCTTTCACTATAGTGAATTTAAGGGTGACTTAGAAACCTTACAGCCTGGCGATGATGTGGAAT -+ -CCCFFFFFHHHHHJGIIJIJIGGGECFHIIIGHIJIG:EHIEIIIJJJIIIIHHIJHIGIHIGGHHIICCGIHHH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2957:2184 1:N:0: -GATCGGAAGAGCACACGTCTGAACTCCAGTCACCGATGTATATCGTATGCCGTCTTCTGCTTAGAAAAAAAAGAA -+ -@@@DDDDDDDF3CFHA?AAAFHGGCHGE<*?CCDBFFGDE<*9BB############################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:2848:2194 1:N:0: -AACTGTTAGTCCAAAGAGGAACAGCTCTTTGGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATTTAACAC -+ -@CCFDFBDFFHHHJJIJJGIIJJJJIJJJJJJJIJJJJJJIIJIGIGIIIJIJJIIIJGH=CEEHHFFFFDCACE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2791:2198 1:N:0: -TGTGCGTGTGTGTGTGTGTGTGTGTGCGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGGGTGTGT -+ -=1:?1AADCFCDFEGBGF+C;FG;):*)11:8BG?B9?0?9?DC2C(==@CA(.6==AFD6@;?@@######### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2825:2198 1:N:0: -GGACACTAGGAAAAAACCTTGTAGAGAGAGTAAAAAATTTAACACCCATAGTAGGCCTAAAAGCAGCCACCAATT -+ -?@@DFDFDFDHDDIIIE?CGGBECGBBEEHI@EDCC## -@HWI-ST1131:111228:C0B0NACXX:2:1101:2812:2220 1:N:0: -AACTGCCACACGCAAAAAAGAAAACCAAAGTGGTCCACAAAACATTCTCCTTTCCTTCTGAAGGTTTTACGATGC -+ -CCCFFFFFHHHHGIJJJJJJIJJJJJJJJIGHIHHIIJJJJJJJIEIIIIJIJJJJHHHHHEFF?CF@EEDDDDB -@HWI-ST1131:111228:C0B0NACXX:2:1101:2962:2221 1:N:0: -CTACTATTCGTTTTTGCTTTATATATTCTGGCTATGTTATTCAAATGTGGGATTGTTACGTCTTGCTGACGTGTA -+ -CCCFFFFFHHHHHIJJJJJJJIJJJJJJJJJJJIJJIIJIJJJJJJJDHIJIJ;FFIIJJGIGGHIIJJJJGG7? -@HWI-ST1131:111228:C0B0NACXX:2:1101:2786:2222 1:N:0: -ATGAGGACAACCAGTAAGCTACCCTTTTACCATCATTGGACAAGTAGCATCCGTACTATACTTCACAACAATCCT -+ -C@@FDDDFHHHHHJFHHGAFHJII9EFHHIIIGJJJBFGGIEIIGEHIIGHJIIIJJJGII)=CHIJJECEEHE: -@HWI-ST1131:111228:C0B0NACXX:2:1101:2758:2223 1:N:0: -CTCAGTTTTCCCAGAAAGAGGATAACATCTTAGTAACTTAGATATTGAAGTAGTTGTGATTATTTAAAGCAAGTC -+ -CCCFFFFFGHHGFHGIHJIGEHGGHIJFIJIGI>ADHGIGIJFIIIIIABFIGICGHIGCHGEIIJGGIBGGH4@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2870:2228 1:N:0: -GCGAGGGGTAGGGGAGGGAGAGATCACATGGGGCCATGACAGCGGTTTTGAACTTTATCCTGAAGACTTGATGTG -+ -BBCFFFFFGEIFDIE??FB9=8F@8@;==@E3?>.7=B?@@D7>A>?;35:>(((>@,:? -@HWI-ST1131:111228:C0B0NACXX:2:1101:2897:2238 1:N:0: -CTGTCTGATGATTATTTCTTTCTACAACTGGCTCTTCCACCACATTTATACTATTATTTTGCATAATCTCTTGCA -+ -?@@BDDDDE;C++B15&05@-52@;9@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:3190:2131 1:N:0: -CTAGAATCGGATGGTCTTTGTAACTGATTCTGGACATATGCATCATTGATGTTGCAGTGTTGAAACTACAAGAGC -+ -CCCFFFFFHHFBHIADGHIADFHDFEGCHEDBHBHIHIGGHGIGGIEIHIIGHIIIIDFBFGGHIGIIIIIGHGG -@HWI-ST1131:111228:C0B0NACXX:2:1101:3159:2138 1:N:0: -CTTTGTGTTTGATTATTGTTAAAAATTGATTTGGTTATCTGAGTTCAGCGAGTGGCCGTCATGTGACCATGACTT -+ -@C@FFEFAFFHHHJJJGIJJEGIJJIJIGIJJJJGIIIJJF9DCABGIJ>HBHIJIJJBHDDGHDGHHHHHGFBD -@HWI-ST1131:111228:C0B0NACXX:2:1101:3003:2143 1:N:0: -GAGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTATAGGTAGAGGCG -+ -@@@FDFFFHHHFHJIIGHEDHIJEHE9FFHE;FGIIJIJJGGIGHIIIHHH9BDGBEFHDGAEGIIGDEHH@EF< -@HWI-ST1131:111228:C0B0NACXX:2:1101:3023:2146 1:N:0: -AATCACCCCCTCCCCAATAAAGCTAAAACTCACCTGAGTTGTAAAAAACTCCAGTTGACACAAAATAGACTACGA -+ -@@CFFFEFFHDFFGIIGGHIJCDGECHIBDFEIGHCHHGAHBFIIHII@CHGCH=DHCDGCEEAEBDEEFDCCAC -@HWI-ST1131:111228:C0B0NACXX:2:1101:3234:2154 1:N:0: -CACATCTGGCCCACTCTGACTGACGAAGAATGGATCAAGGTCGAGGTGCAGCTCAAGGATCTGATCTTGGCTGAC -+ -CCCFFFFFHFHHHJJJIJIIJJJJJIJIIJJJJIHGIJJJGGIGIE@CHGIIIIIBEEIIHGHHGHHFFFFFDED -@HWI-ST1131:111228:C0B0NACXX:2:1101:3133:2155 1:N:0: -TGTGTTTGATTTTTTTTTTTTTTCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT -+ -BCBFDEFFHHHHHJJJJJJJJJJ=DHIJHFDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBB@####### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3044:2155 1:N:0: -AAAGTTGAGGTCGTGTCATTACCTTGCTGCGCAAACATGGAAAAATTCATTTGGAAGACATACAACTCAAGTGAT -+ -@@CFFFDDHHAFHCGEHGHGIHGIIGIGIHIJJJJJJGHHGGIJJIIEHJHGGCGGIJIJIIHFGGHHF@D@CC; -@HWI-ST1131:111228:C0B0NACXX:2:1101:3164:2162 1:N:0: -TAGGGGGGGGCGGGCTGAATGCAATGGAGTGTGCATTACATTTGGAAAAAAATGTGAATCAGTCACTACTGGAAC -+ -CCCFFFFDDDDDDDDDDDDDDDDDDDDCD8?CCCEEEDDDEEEEDCDDDDBDDDCDDDEDDDDDDDDDDDDDCAC -@HWI-ST1131:111228:C0B0NACXX:2:1101:3054:2170 1:N:0: -TGTTTGAGGGGCTCAGTTATATGTTTGGGATTTTTTAGGTAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGT -+ -1==DD=?DFFFD>FG>FF>BFEB=F;D9C4?DBCEBDDFF((<@FC=)=)7@CEFEDB?@?3>;A###### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3111:2178 1:N:0: -GAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATC -+ -BCCFFFFFBFFHGIJJIJEIIFHHJIJIJJIIJBHJJIJIJJIJJIJJIJJJJIJGGGHIJIEHIGHDEGGGJ@A -@HWI-ST1131:111228:C0B0NACXX:2:1101:3228:2178 1:N:0: -ACACAAATTGTGCAATTATTTTCATTTAAATTTACTGAGAATCCCACAAAAGTGATCACTTTAAAGATACAGAAA -+ -BCCFFFFFHHFHHJIIJJJJJIIJIJJIJJJJJJJJJJJIJIIJIJIFJGIJEGIIJJJIIIGJGIIJEGGGIJI -@HWI-ST1131:111228:C0B0NACXX:2:1101:3021:2180 1:N:0: -ATGTTGGTGGAGCGATTTGTCTGGTTAATTCCGATAACGAACGAGACTCTGGCATGCTAACTAGTTACGCGACCC -+ -@@@D?BBDHDFHFA1@DHE@GGHIGIFIG@=).=;=CEHEC@;;?>@6;A=/96?;B -@HWI-ST1131:111228:C0B0NACXX:2:1101:3009:2183 1:N:0: -ATATCACTGAAGCCTGGACTATCTTCAAAGCCCGACTGGCACAAAATGACATATTAATGTAGTATCTCATTTCCT -+ -CCCFFDBEHDFGHGBHGFGIGIJGIGIIFHHGGEFD6DGEGIIJDHGGGGGFHCHGHG@=@E@;DH:=?>CEEAE -@HWI-ST1131:111228:C0B0NACXX:2:1101:3074:2186 1:N:0: -AAGATCAGTTTTAAAAATGTAATTGGGATGTAAATTCTGTCTCTAAAATACCTTATGTTATGTTTAGCCATCAGA -+ -CCCFFFFFHHHHHJJJJJJGHJJJJJJIGJHIIJJJJJJHIJIIJJJJJJJIJJJIIIJIIJIIIIJIIJJIJJG -@HWI-ST1131:111228:C0B0NACXX:2:1101:3179:2188 1:N:0: -TGTGAGGAATAGTCATGCTATGGAGAACAGCTACACAACACACATAACCAGAGGACTCAAACACAGCAGCTAATG -+ -@@@DFFFDHFHHDGGHHIJIIIEIIJIJJJJGGIGIIIGJJJJJJJFIJIIDGGGGGIGGGGIGJJHHHHGFFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3046:2190 1:N:0: -GGAAAAAACCTTGTAGAGAGAGTAAAAAATTTAACACCCATAGTAGGCCTAAAAGCAGCCACCAATTAAGAAAGC -+ -@C@FFDFFHHHHHFHGIJIIIDAEAHIIJGJJIJJJJJIIGEHFHGEIIJIDHEGIIHJGHFHDEDDDFECEEEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:3244:2190 1:N:0: -CTGAGCTAATACAGTCTATACTTATTTCTTCCCTACCTGTTTCACATCCGTAAGATTTAGGATATACATTTTTTG -+ -@@@DADA>FHHD4AFB1)0?GH4/?4<@CFGFCB4)/@;@4 -@HWI-ST1131:111228:C0B0NACXX:2:1101:3219:2193 1:N:0: -AAGTCCAAGAGTCCAAAAGCTGAAGAAGTTGGAGTCTGACATTCTTGGGCAGGAAGCATCCAGCATGGGAGAAAG -+ -@@@DD?DBCAD2A;HDHHGABC+A<*:?:?*?9FHHIIIEB3B)9@F;DCHIF37=)8@4=6=?##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3197:2198 1:N:0: -TGTTTGCGTCTGTTTTACTGTCTGCTTATTGTTTGATGTTAATTTATCTCCCTCAGCAAGATAAGCTCTCATAGA -+ -?=@DADDD?@8C?EFB:E@A?BB -@HWI-ST1131:111228:C0B0NACXX:2:1101:1348:2222 2:N:0: -CGATGTA -+ -?BD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2569:2179 2:N:0: -TGACCAA -+ -BCCFFDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2591:2180 2:N:0: -ACAGTGA -+ -<1?BABD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2653:2183 2:N:0: -CGATGTA -+ -?@@DDDF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2748:2190 2:N:0: -CGATGTA -+ -@@@DDBD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2670:2192 2:N:0: -GCCAATA -+ -@?@DFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2551:2197 2:N:0: -CGATGTA -+ -B@BCFDDEDDBA# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1211:2126 3:N:0: -TTCANNNNNTGNTGAGGTCTGAATTACTCTCCCAGTTGAGAGTTGTCTTTGGGTGTAGTTCGGAAGTGCGTCGTN -+ -@B?A#####22#322<++3<2+ACHH4?FGHGDHGGHC??BD?0BDF>DHIEGGIHIGDHIGH#### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1356:2120 3:N:0: -TTGTNNNNNNANGATGAAAAATTATAACCAAGCATAATATAGCAAGGACTAACCCCTATACCTTCTGCATAATGA -+ -BCCD######3#2@@FF?FEE9AB3E3)7;7?;;;;(;@# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1276:2152 3:N:0: -TAGANNACGAAAGTGGCTTTAACATATCTGAACACACAATAGCTAAGACCCAAACTGGGATTAGATACCCCACTN -+ -@@BD##2=CFHFAHGBEIHIJIHGGIIGCEGHIIGGHJJJIJ@GIHGEEHGFGEGGIIIIGIGEGIGEHFEEFF# -@HWI-ST1131:111228:C0B0NACXX:2:1101:1326:2167 3:N:0: -TAGGNTGATAGATTGGTCCAATTGGGGGTGAGGGGTTCAGTTTTATGTTTGGGATTTTTTAGGTAGTGGGAGTTA -+ -==;B#+22+BBDDD##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1395:2221 3:N:0: -GTAGTGGGGTATCTAATCCCAGTTTGGGTCTTAGCTATTGTGTGTTCAGATATGTTAAAGCCACTTTCGTAGTCT -+ -?@BD?DDDHCHHDEGGHGIDEGAFDHIJCCFBEH9@BDFIBFHII;DHABBGGHIIJDFH@=@F@DHIGHHHCHD -@HWI-ST1131:111228:C0B0NACXX:2:1101:1348:2222 3:N:0: -CCTAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAATAAAGTATAGGCGA -+ -@@CFFDDDHDHH?EHGGGHJGEIIJIIIIGG@ADDF>GIGFHJICGGIIIBFHGIHHCGIIJ@HHFEEGHFFFF> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1275:2229 3:N:0: -CTGATGGGGGTAACGTAGTGAGCAACTCTTCCTCTTGCTTCTCCTTAATGTTTTTCTTGTGCCTCTTTTCCTTGN -+ -@@@FDE>DHF@FHGICF@8CFHCHIGGIIGBG>HHGHGIJFDFGEGBBCH@@FHHGEGHJGA7ACHGFF@DCC## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1456:2233 3:N:0: -TTGGCACCCACCGCAACTGTCTGTCTCATATCACGAACAGCAAAGCGACCCAAAGGTGGATAGTCTGAGAAGCTC -+ -CCCFFFFFHGHHHJJJJJJJJJIIJJJJJJJJIJJIGIJJIGGCHJJJJJEHEEFF@BDCEEEEEEDDDDDDDDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1298:2234 3:N:0: -ACGTTGAAAAATAACATTAGAGTAATAAAGGGGGATGCCCAGAAGTAAGGGGATAATAATGAAGATGTATAATTN -+ -########################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1327:2242 3:N:0: -AATGTTATATGGATGCTCCTCGACTTACAGTGGGCTATGTTCCAGTAAGCCCATCATAAAGTTGAAGAATCATAA -+ -?@BAFDDFGHFD## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1426:2246 3:N:0: -TAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAAT -+ -@BCFDDEFGHHHHJJJJJJIJJIJGIJJIJJBGHIJJFIJIIJJGHIJJHHHGHFFFDFFFCEEEEEEDDDDCDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:1287:2250 3:N:0: -CACAATTTGAAACCAAAAAGCTGTATGCAGGAGCTATTCTTGACGTTTGTGGATGAAAATTGGGAAGGTTCCCTN -+ -:?@D:A?;F?C?EEE>=?))7? -@HWI-ST1131:111228:C0B0NACXX:2:1101:1719:2132 3:N:0: -CTCTNNNCCCANTTTCCTCTCTTTCCTCTCAAATCCTAGAAAATACATATGGTGGGGAAGCTAAGGAAATTTCTA -+ -BB@F###22AF#2AEEEG@DEHGIFFHAHEGGIIEEDEHGGHGIEHIIIJJDHIIIFEEGHBECEHEECDEFBD> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1530:2132 3:N:0: -GTAANNNGCGCNCCTGCTGCCTTCCTTGGATGTGGTAGCCGTTTCTCAGGCTCCCTCTCCGGAATCGAACCCTGA -+ -C@@F###22AD#2ACGF;>>>?AC= -@HWI-ST1131:111228:C0B0NACXX:2:1101:1501:2136 3:N:0: -GGTANNNTAAGTTACACATGTTCAAAAGTTAACACAGACCTATCTGAAAAGTAACTAAGTTACAAAACAATGCCC -+ -@BBFGGGIIHHIEH=@EGIIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:1597:2151 3:N:0: -GAGCNNAGTAAATTTGGAGGTTATAAAGCCTTGGATAACAAAAAGAGTAACGGAAATCCTTGGGTTTGAAGATGT -+ -??8A##+22A+2CGFE@CBG3AFH@FHAFH9EHGIIIJJJIJJIJCHHHGGGGI -@HWI-ST1131:111228:C0B0NACXX:2:1101:1529:2172 3:N:0: -TATGATCATGTCAATTTTGGCCAGTTCAGTTCCAGGAGTGACTGTAACAGATGCAGAAAAATAGGATTGTCTCCT -+ -B@CFDFFDHGHAFIJJJJHFEHIIGHHIJGIEGIGIDGCDGEHGHIJIJJIHGHIJJIIII>HIJCGHIEGIJIC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1710:2174 3:N:0: -TGCGGTGTGGGGTTTTTTTTTTTTTTTATTTTTTTTATTTTTCATTAGAATTTTCGAAGGTAGGTTGTGGGGGTT -+ -########################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1571:2181 3:N:0: -TATAGGGTGATAGTTTAGGTAACTTTGTGTTTGAGAGAGTAAAAAATTTAACACCCATAGTGGCCTAAAAGCAGC -+ -@@@@DDD=CFHHFHIIEGEAFEGEIJI4EAEGEGIJJGHDFEHIEIEFHIFGGGIIIIJDFHHGIJGAHHGFFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:1520:2197 3:N:0: -ATAGCCACAGTATAACTTCACATGTTCATTAAAAAGGCAAATTGACCGCTAAAACTTCAAAGAAAAAGTACTCAT -+ -CCCFFFFFHHHHHGIIJJIEIJIJIJIDHIEIEI>CDD8@CDECDC>CACACCCDD8@DC@CA@ACA>CDCDCADA:A?CCDDCDCCC> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1710:2200 3:N:0: -AAAAAAGAACCGCCCTTTGTGTTTGAAATGGTTTATTATCTCTACAATATACTTTTAACTTGTTTAGATAATAAA -+ -@@CFDFFFHGGHFIJJJJJIIIHIJIJJIFHDAGHIJJJJJI9BGGGIIJFHIIIIIJJJJHHHHGG@DDFFFEE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1550:2201 3:N:0: -GGTGGCCAATCATCAGCTAGAAAGAAAGTGCTTAGCAGGGCTTGAAAACACCAAAACTCTGAGACCACTGACCTT -+ -@@@FFDFFHHHHHJJIJJJIJJJJJJJJHIIJIJJJIJGIBHIJHIIIIIIIGIJJIHIJGGHIIIHFHFHFFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:1602:2205 3:N:0: -ATTGATTTCATGTAATCATTGATGACTCGCTCATTGGTGGAAATGCCTCCGCTGAAGGCCCCGAGGGCGAAGGTA -+ -@CCFDFFFGGHHHIIIGIIJJJJJDIJJJDGI1FGGGEGIHIJJJJJJJJHIJIIJJJJJIJIEEDDDDDDBDC: -@HWI-ST1131:111228:C0B0NACXX:2:1101:1687:2216 3:N:0: -TGGGGGGATGGGGTCTTCATCCTCTTCCTCCAGGAAGGATGCCTCTGGGATATGGCTGAAGGCCTCTGGGTGCTG -+ -B@CFFFD?BBDDD@BDD>ACDDCACDDDDDDDDDDDDDDDDBCCCCCD?AACDDDDDD@>@C0ACD<;7@> -@HWI-ST1131:111228:C0B0NACXX:2:1101:1577:2220 3:N:0: -AGCTGCTGTTTGTTCAGAAATCTCAGTTTGAGCATTCAATTTTACAGGTGTAGTATTATCAGAAAGACTAATATC -+ -?B@FDFDFFHHHHIGIJJJJIJJIIJIIGIIJIJJEGFEEGHIGHGII?DDGGDGHBIIHJJJJJIHIIJJC@HE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1520:2227 3:N:0: -ACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGAA -+ -@@CFFAFFHGHDHIJJJGJBHHJFEHGHI:CFDEHBHIJJFII@BBDGAHGFDFHIHGIIJIIGIIEAHEHFFFD -@HWI-ST1131:111228:C0B0NACXX:2:1101:1738:2228 3:N:0: -ATTGGGTCATCATTCATCCTGATGCAGCCTGAGAGATTCGTTCCTGGGCTGGGGCCACTTGTGGGGCCTGGGCAC -+ -??BDAFFEDH>FHIGEF@AAHIIJDDHFBDDHGGGIIF9GFEH@CFIEHCF<8CDCHIHJHIIIIHIGHGDDGHHFFHGG>FAHIGIG>EHECCH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1503:2246 3:N:0: -GTAGAGCCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAGCCAAA -+ -B?@BD;B;FHDDBEC@CEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1648:2247 3:N:0: -CAACTGGACAGGTCTTTGCTACTGTGCTAATTAGATCATACAGGCTGAAGACAATGATAGAGGAATGTGGCAATA -+ -@<@?DBD?D?F?+2AGB@:C@?EHHHIGD9BE>B4DABD?BA?????DEGCEG:CGGEE27=).=6@==@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:1765:2117 3:N:0: -AACANNNNNNNNTAGAGGGTTCTGTGGGCAAATTTAAAGTTGAACTAAGATTCTATCTTGGACAACCAGCTATCA -+ -?B?D########22<+A>@?CBF@CACFHEIGHEG@GE@?AACEHFDD;;@>CCBCC>7?B=ACC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1851:2128 3:N:0: -CAAGNNNNCAGNAAGAACAGGACTCCAGAGCGATAAACACTCGCTGGAGAGGGAGACGCAGGAAGCGATGAAAGA -+ -CCCF####3>C#3AGHIJIJJFJJJJIJIJIJIJIJJIJIJJIIJJJGHFCHIFHFFFDCCDBDDDD@BDCDDDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1954:2130 3:N:0: -CAGGNNNNGAGNAAGCAAAAAAACAAATCAAATCTGAATTAGATTCAGATTTTGTATTTGATTTATTTTTTGGTT -+ -@B@F####222#+2+++2CFHI:):D)*00?9?########################################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1777:2133 3:N:0: -AAATNNNCAAANTTAGAAGAAAATTGGAAGATAGAAACAAGATAGAAAATGAAAATATTGTCAAGAGTTTCAGAT -+ -B@@F###23CF#2AEFBBHGGIDEIGIEGHG>AGEHJD@EGHIGIHIIFIHGEGIJJJJJGIJIJIICGHGECEH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1933:2134 3:N:0: -GATTNNNTAGGNAACTTGTGTTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGCTTTTAGGCCTACTATGGGTGT -+ -@CC<###22AC#2CHHHE377 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1992:2141 3:N:0: -CCAGNNGAGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTATAGGTA -+ -CC@F##22AFHFHJJJIGGIGHHJGIJJJJIGIJJJJGJJEHIGIHFIGGGECHFECFGIJBGGEEGD;AEBE@? -@HWI-ST1131:111228:C0B0NACXX:2:1101:1807:2144 3:N:0: -TAGANNGGCTAAGAAACTGAGGTACTAAGGGGTGAGGCTGAAAATGAGAAGAACTAGATCAATAAGGGGACTACC -+ -@E;BACH9*:*C?*)*1?>4?F>GEHDFHIJ<*BEAFGEFHGADGFIIEIICEA##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1952:2158 3:N:0: -ACGCNNGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATC -+ -;?@D##22GBGD4?G4BGGE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1788:2159 3:N:0: -TATCNNCTCAACTTAGTATTATACCCACAAGATCGGAAGAGCGTCGTGAGGGGGAAGAGTGTAGATCTCGGTGGT -+ -8B?D##22:7?############################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1861:2165 3:N:0: -GAGGNGAGACTCGGGTGATAGCGTGCGATGGCGGCGGGGGAGCTCTTGGCCACCCAAAAGTGTATATAAACTTGG -+ -C@CF#2ADHHHHHJIAFHIJJJJIJIIHIJJIJJIHDDDD-708CAC3@>>3(@C:A -@HWI-ST1131:111228:C0B0NACXX:2:1101:1988:2168 3:N:0: -GAATTGTGTTAATAACTGTTTGGCAGTGTGTACTTTGTTTTTGTGAGTCATGTCTCATGAAATTTATTGGAATGT -+ -BB@FFFADFHHGDGIJJJIJIIIJIJIHEHBHGHIIIGIIJJBHJIGFHFEGIGEIJIJGHJJIEGHIIIJIHII -@HWI-ST1131:111228:C0B0NACXX:2:1101:1803:2170 3:N:0: -AACGTGGGTACTTGCGCTTACTTTGTAGCCTTCATCAGGGTTTGCTGAAGATGGCGGTATATAGGCTGAGCAAGA -+ -BCCFDFFFFHHHHJIIIIJJJJJJIHIJJJJJJIJJJJJIHIIJJJJJIJFGHIJJHEDFEFFEEEEEBDD@?C9 -@HWI-ST1131:111228:C0B0NACXX:2:1101:1962:2173 3:N:0: -CTTTGTGGTTGATTTGTTTCTCAATAATTCTCATTCTCTCTTTAAAAACAAACAACGAAGACAAAAATCTTTCTG -+ -8=;44AD1DB+2A9C?C:F,?;BG@1BBA8@F@A######### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1935:2181 3:N:0: -GTTTTTAGTGTTTTTCATTTTCAGATGGTCAAACATGGAAGTCTATATTGAAAACACTGGCTGGCTTTTACAACT -+ -BBBFFFFFFHHHHJJJJIJJJJJJJJJJIJIJJJIJJIJGHHIJJIJJJJHHGIJJJJIIGIIFGGIIJ:)@EGE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1885:2183 3:N:0: -GTGTTATGAGTATGTACAAATGTTATTTCCTGTAAAATATTTTCATTTTTTAAAATGTTACTTTCTAGATAGAAA -+ -@@@FFDFFDHHDHIGHIGHGHI@DJHJIHIHGEBEHHGDIGIJEIIHGIIBDFDGHGHCFGDABBGIGIJEIJEICDG: -@HWI-ST1131:111228:C0B0NACXX:2:1101:1896:2204 3:N:0: -ACTTTGTGTTTGAGATGGCCCTAAATTCTTGAAGTCTGGTGATGCTGCCATTGTTGATATGGTTCCTGGCAAGCC -+ -?@@FFFDDFFHHDIGGHHIIGJJJGIIIIIHIGG>GIIIHGEHGIDFGGIFGHIIJIJCEGIGGIJEEHGIEIJH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1965:2207 3:N:0: -GTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGAACCCTCTAAATCCCCTTGTAAATTTAACTGTT -+ -B@@FFFFFHHGGHJGIJI>FIBJI@HHJIGHIGGIDHGEFEHGHG@DHGIHHIJJ@HGIICGIIGIGIJDGGE=; -@HWI-ST1131:111228:C0B0NACXX:2:1101:1785:2217 3:N:0: -TCCCTTGTGTTTGAGTGGTGTGTTATTGTGTGTATAGCAAGTAGACATGGTTTACTCATTAACTATCTGAAATTT -+ -CCCFFFFDHHHHGHIGHI?GGHHGHIGIIIIIHIIIIFEHIGHIJJJJIIGFHIHJGJJJIJIJJJGGGGGIJIH -@HWI-ST1131:111228:C0B0NACXX:2:1101:1880:2219 3:N:0: -GGTGGGAGGCAGGAGCTAAAGTTAGAGAAAAAACGGAGAGCTCCGGAAGAATGTAGGATGGGGCTCCTAGGAGTT -+ -@GAFDDAAFD9BGGDHH7B5@E=CD?C2A##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:1977:2232 3:N:0: -TGTAAAATATTTGTTGATTAAATATCTGGGGGAAGAGCTCAGTAAATAAATAAAGGTGTGAGTGATGGTCCTCAG -+ -CC@FFFFFGHHHHHBHDIGIJJJIJIIJIIJJIJHHIIHHIJ?GHHIIGJDHIIJJEFFGEH;CEHIIHECEFFC -@HWI-ST1131:111228:C0B0NACXX:2:1101:1911:2235 3:N:0: -AAATTTGTGTTTGACAGGGGATGAAATACATGAATAAAGAGAGGCATCAGCTCCAAAAAAAAAAAAAAAAAAAAA -+ -@B@FFFBADFFHHEHJJJIJEHH@BHGHEGH@DGD>HIIIJIIIIIGGIHEHIIIBF=FGADBDDDDBDBDD@BB -@HWI-ST1131:111228:C0B0NACXX:2:1101:1814:2236 3:N:0: -TTCAGTGTTTCGAATAGATATAGGCCTCTTCATTTTGTCTATTTTTGTGTCAGATTTGACAGATTATCTTTTTTA -+ -BCCFFDDDHHHHHIJJJHHJHIJJIJJJJJJJJJJJIHJJJJJJJJJJJIIIBGIJIJIJJJIIIJJHHJJIJJE -@HWI-ST1131:111228:C0B0NACXX:2:1101:1785:2245 3:N:0: -TGCAAGGAGAGCCAAAGCTAAGACCCCCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACACGTCT -+ -B;+=:ADD++1+2?FE@@?0?@?)089/A?=;5;5=??@BBA -@HWI-ST1131:111228:C0B0NACXX:2:1101:1754:2247 3:N:0: -TGAATGATTGAAGATAGTGGGAAAAGAAGGAAAAACAAAGCGAGAAAAAAAAAAGAAAGTTTCAGAATTTTGAAC -+ -B@@DDADBHHBF?C9E4,AGH=FGG################################################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:1939:2247 3:N:0: -CAGGTGATTGATACTCCTGATGCGAGTAATACGGATGTGTTTAGGAGTGGGACTTCTAGGGGATTTAGCGGGGTG -+ -@@CFDDFFHHHHHJJGIJJGIJJJFGFHIIGHJI;FGHHHHIIIFFHDFGFHIJJJJIBHGIAEEFHHFFDCD09 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2216:2123 3:N:0: -CTTTNNNNNTGNTTTTTTTTTTTTTAGAGACAGAGTCTCGCTCTGTCACCCAAGCTGGGGTGCAATGGTACCATC -+ -CCCF#####23#2AEHIIJJJJJG6@).7)=BDB;;6>>31,5=(5>95><8A28>AC(&&)2@@:>C####### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2139:2128 3:N:0: -CGCANNNNCAANCAATGTTCAACCAGTAACTACTACTAATCAACGCCCATAATCATACAAAGCCCCCGCACCAAT -+ -@CEEE3; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2064:2154 3:N:0: -TGGCNNGCTAGGCGGGGGTCCCCCTCCTCCCTCACCGCTCCATGTGCGGTCCTCCCCGAGCTGCGCGCGCGGTCG -+ -@@@D##22CDBHDIJE########################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2103:2159 3:N:0: -AGGGNNGGAAAGTCACCCGTAAGGATGGCAATGCCAGTGGAACCACGCTGCTTGAGGCTCTGGACTGCATCCTAC -+ -CCCF##2=CFFGHGGGIGIHHIJJFGGEGIIJIEGGGFGHIIJJIJIGIIGGGJGGIFFHH>EDDFFEDEE@CCC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2081:2166 3:N:0: -GGTCNTTGCATCTGTCGCGGTGTGTATCTTTTGGGGGTTCAGCGCCACCAGCGACTTGGGCCTCATTCATCGCGC -+ -@CBF#2=BFDBHHJBDHDFG8E:CFDIIJJJIEIJJI;;@CGGHHBDDEDDDDB@BBDCDDDDDB@AEEH=@B8A/>A>A:@A -@HWI-ST1131:111228:C0B0NACXX:2:1101:2174:2171 3:N:0: -GGGGGACATAGAAGGGAAAAAATATTGGCAGTGCGGACTGTGAATTTCAGTTTTCTAAGTGCTACATCTAATCAG -+ -BCCFFFFFHHGHHJJIFEGGGHGHIJJIIJJGHGIIGHIJIIIIJIIJJJIGGEHHHFHEFFFFFEEEEECEECD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2024:2176 3:N:0: -GTGGTACAGTAAAATTAGTTAAGATATATGAACCAGAAAACAAGAATAAAAGAAAAAGAATATAGAAGAGATATT -+ -BB@FDFFFGHGGHJIIIJHIGJIJCHIIJJIIJJJJIJJJIJJJJJIJJJHGIJJJJJJJJJJIJJIJJJFIJII -@HWI-ST1131:111228:C0B0NACXX:2:1101:2242:2179 3:N:0: -TTGAGGGGGATGTTTTCATGTTACTTATACTAACATTAGTTCTTCTATAGGGTGATAGATTGGTCCAATTGGGTG -+ -@CCDFFFFHHFHHHIJIJJJJJIJJJJGJJJGJJJJJJIIJJIIIGIJJJIIFFHHIJHBHIDIIGHGEEHFFDC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2143:2180 3:N:0: -GGCATCCACTTAGCTAACTATTGGACTTGGACTGATTATATTCTGGGCGGTAAAATCAGGATAAGCAGCAGATTA -+ -@@BFFFFFHHHHHJJJJJJJJIJJJIGIIJIJFIIIJJJIJGIJJIJIJJIHIJJJJJHHHHHFFFCEEEEEEEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2210:2187 3:N:0: -TATTGCGCCAGGTTTCAATTTCTATCGCCTATACTTTATTTGGGTAAATGGTTTGGCTAAGGTTGTCTGGTAGTA -+ -CCCFFFFFHGGHFHGJJJJJJIIGJIJJJJJJIJJIIJJJJJJJHIIIJJHHIJJJJJIHIJGIJGFHHHDEEFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2117:2202 3:N:0: -TTTAGGCTAGATGTTAACAGAGACCCCCTTCTCCTCAAACACAAATGCTCAGGGTCACTGAACCACTGCTTCTCT -+ -BCCFFFFFHGFDHGJJJIJGIIJICHIIIJJJIJJJJJIIIIJGIIJJHIDFHGCFHIIJJJGHIGHHGGHHFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2097:2206 3:N:0: -TGTGTTTGATTGTAGATATTGGGCTGTTCATTGTCAGTTCAGTGTTTTAATCTGACGCAGGCTTATGCGGAGGAG -+ -B8=A42AAFH<:A,A,,<:I?B3CG@2<+<+F)7B###### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2196:2206 3:N:0: -TGATTCCTTGCCTGGCTGGCTCCTTTATTAGTGCCCATCTGCAGACTAATTGTGGTCTGGTCAAAAGGTTTGTCA -+ -??=CFAEHIFCHF4?41??D;>FF@3E?111:?GD9*90?F@@E?DF;BC############### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2138:2213 3:N:0: -GTCAGTAATTCCTTATTGTTTATTCTCCTCTTACAAAAAGACACTTGGGACAAATAAATACAAAATGGCATATAT -+ -@@@FFDADHH>ADHAGGEHIJBHIDFBBDAHI9DBCBF@GG@HIGGGHGI -@HWI-ST1131:111228:C0B0NACXX:2:1101:2089:2219 3:N:0: -TTGGGGGAAAATTTAGAAATATAATTGACAGGATTATTGGAAATTTGTTATAATGAATGAAACATTTTGTCATAT -+ -??BDD1)BF9CF9C)0*?@GEDGG<@DHGIHIB<4<84=C;=7C;CEEEGG;CEEHA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2026:2222 3:N:0: -GAGGGAAGTTACGCTTATTTTTTTTTTGTCTTTTGTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTGGGAGGG -+ -@@BFFFFFHHFHHJJJJJJJJJJJJJ@'()8CH9.BDHIJHFDDDDDDDDBDDDDDB@7;757@BB######### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2184:2225 3:N:0: -GAGGTTGGGAAACTTGCCATATTATTAAAACATATAAAAGTATAAAGTCTTCTGTAGTGGCATACATGGTAAATA -+ -CCCFFFFDHHHHGIIIFHIICHIGIIIGEIJJJJJJJEIG@FHIGHIIIDFHIJJGGIIIIIJGIIJJIGGA;DG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2239:2229 3:N:0: -GGGGCTATGTAATCAACACTGTCCTTTTACTAATGGTTGCCCATCATTCTAGGCTTTATCAACTCCTTTATCACC -+ -CCCFFFFFHHHHHIIJGEGHHHIJJHJIIIJJJJIIGIIJJJJJIJIJJJIHIIJJJJJJJHGHJJJJJJJEIJJ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2076:2229 3:N:0: -GCAAAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAG -+ -?3:EGI9+AEHG>AB;?ADDDDDCCCCCDC5@:><@@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2112:2236 3:N:0: -TCTCTGTCTTTTAATTAGAACATTTAGTCCATTTTCATTAATAGCACCACTGATGTATTTTTGTTTAGGTCTGCC -+ -@@@DDDE>FGGF9EH@>C@CD;?@CC@CA1-;>;;>C@BD3;35?< -@HWI-ST1131:111228:C0B0NACXX:2:1101:2038:2248 3:N:0: -GCTTTGGCTGGTGAAGTCTTAGCATGTACTGCTCGGAGGTTGGGTTCTGCTCCGAGGTCGCCCCAACCGAAATTT -+ -CCCFFFFDHHF?CBHICBHGHHGC>BAEE@C9EBGGFGB8BGB@BBCGCGDGEBGHH'==BCDB?@B?B###### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2265:2123 3:N:0: -TTTGNNNNNGANGTGGCAAGAAATGGGCTACATTTTCTACCCCAGAAAACTACGATAGCCCTTATGAAACTTAAG -+ -?@BF#####22#22AFHIJJJJJIIIIJJJJJIJJJIJIJIJJIIJIJJJGGHIJJIJGGIHHGGFH@DFFFFEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2303:2133 3:N:0: -CTGGNNNAGTANAGTATTTTACCTCTTTAATATATCAGCATGCCATATTACACATACTACTTACTTGTACTCATC -+ -@@<#2DDEECIGG?BBBFHIJCA7BA=4=FHCACE4 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2451:2154 3:N:0: -GTTTNNGACCCCCGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGA -+ -B:+A##222ACF@18@?CFGGGIHI?@?BD;?D>F=FHG@=CF9===@)7=A=D?53',5=;;ADD@(5>?(>A# -@HWI-ST1131:111228:C0B0NACXX:2:1101:2292:2154 3:N:0: -CTTTNNATAATTCATGAGGTGAGTAGCTAGAGCATATCATAGAAAGCTCATCACAGCATTGGACAGGGCCTTGTC -+ -CCCF##2=CFHHHJJJIJIHGIJGHIJIIIJIJJIJIJIJJJIJJJGIJJGIJJIIIIIJIJJJJJJJJIJHHHH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2253:2161 3:N:0: -GAGGNNCAGTAACTTTTAATGGAAACAAACAACACAATACATTTTTATGTATGGCATAAAAATTGGCATGTTAAA -+ -8+14##222C;CAGEHII=?AA? -@HWI-ST1131:111228:C0B0NACXX:2:1101:2479:2162 3:N:0: -TTCANGGCTGTCCTGTGCAGTGTAGGATGTTTAGCAGCATCTCTGGACTCTGCCTGTCAGATGTCAGTGGCACCT -+ -@@CF#2ADHFBHHJIDHHIJAGBHHIEGGDDHHIHI@DGGADHGGGIJJJCIIIIJGHGIIIGGIIGCHGBDG;C -@HWI-ST1131:111228:C0B0NACXX:2:1101:2353:2165 3:N:0: -ACTTNCAGAAACAGGAGAAAGGGATCCAACACTGTATTTTTTTCTTTTCTTTTTAGGTGTGTCCTTTTCATATTC -+ -B>; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2329:2169 3:N:0: -CTGCAATAATGAAGGGCAAGATGAAGTGAAAGGTAAAGAATCGTGTGAGGGTGGGACTGTCTACTGAGTAGCCTC -+ -@@FFEG@FHEGGBGA@HA@)=;BB@B -@HWI-ST1131:111228:C0B0NACXX:2:1101:2434:2170 3:N:0: -CAGTGGATTTGGTTCATCAGGAGGACTGACAAATGGTAGTGGTCGATATATCTCTGCAGCACCTGGAGCAGAAGC -+ -@CCFFFFDHHHHFHIIJJIJIGIJJIJJJJJJJJJJCHHHHJFFHIIJJJGIJJJJJJIIJJIIIGCHFHFFFE@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2308:2177 3:N:0: -GACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAATCTTAGTTCAACTTTAAATTTGCCCACAGA -+ -CCCFFFFFHHHFHJJJJJJIDGGIIIHGIIDGHIIIIJJEHIJIIJEIJIHHIGIIIJJIJJJIJJJGHHEHFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2493:2177 3:N:0: -GACCCACGAAACCAGACGAGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAG -+ -CCCFFFDFGHHHHJIJIGDIJIJJJJJJIJJGGHEIBHJIIJIEHGHIJBBECEEFFCEEFFDCEEACDCBDDDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2356:2185 3:N:0: -CCTAGCCCCAAACCCACTCCACCTTACTACCAGACAACCTTAGCCAAACCATTTACCCAAATAAAGTATAGGCGA -+ -;@@DDF??FFHD:;+<1CCDGCABDGDEGCEE>CGHDGCHFHEG@FHGJIIF;CHIGGHG9D@EAHEHGEB3?BC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2404:2187 3:N:0: -GCCTGGGATACATTTCAAGACCCGGAGTGGATGCCTAAAACCGCAGATAGTACAGAACCCTACACACTATGCTTT -+ -CCCFFFFFHHHHHJJJJJIJJJJJJGIDFGGGIIJIJJGIJGHGJJIJJJIHIGHIHHHGFFFFECDDEDDADED -@HWI-ST1131:111228:C0B0NACXX:2:1101:2280:2193 3:N:0: -GTTTCATGTATGTATAGAACATATCTTGTGTTTGAGTGGCTGAGAGAATTTTTGCATTTCCACCCAAAAGCCCTC -+ -BBBFFFFFFHHGHJGGGGICHGHGAIJ>FF?FH>DEE911:EDF*:?G@CC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2377:2200 3:N:0: -ATATATGGGACTATGTGAAAAGACCAAATCTACGTCTGATTGGTGTACCTGAAAGTGATGGGGAGAATGGAACCA -+ -;@@FFFFFGHHHHJIHGIIJIJGGHIIHICHIFA8C>FGEGCFDA?FHHGFHHHI?FF>G>DC7AHHHIJJIIEIIIFIJIIEHIEHFIIIJJIGCGHJFIJJIGGCD@CCEDGGIHHDE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2395:2222 3:N:0: -TTGTGTTTGAGGGTCTTGGAAGCTTGACTACCCTACGTTCTCCTACAAATGGACCTTGAGAGCTTGTTTGGAGGT -+ -BC@DFEDFHHHDAGFHDIGHJJFIGIGIGIJEGHEIIGGIFIJGIIIGBFFGGIIJJIGIC@DEGGHHHHFBDF; -@HWI-ST1131:111228:C0B0NACXX:2:1101:2460:2222 3:N:0: -GGCTCACGCCTGTAAAACCAGCACTTTTTGTTTTAGTCAGAGGCTTGTCACGGCGGGGTCCCACCCCCCCGGCCA -+ -B@;DD>?#################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2344:2226 3:N:0: -ACACAGACTCCCCCACCTTCCAGTCGGGCACGTCCTTCATGATGATGGCCTCAAACAAGATCGGAAGAGCGTCGT -+ -B@BFDDFFGHDFHIFJIIEHIBGAGGIHEAF@0?FGCGGGIEHGEGBGAGAC@EHIHEHDHFEBAACAACB>?B8 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2432:2228 3:N:0: -AGGGAGGTTGAGGCTGCAGTGAATTATGATCACACTACTGCACCCCATCTGGAACAACAGAGCGAGACCCTGTCT -+ -=@@FDFFFFH@9B?FFGHGGGGGGGEG;A>FG@BDEHIIGGGEIJJEFHIJIIGIJIIICEHGGDFFGHIJGGGIH@EHEGGHIJ=AEE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2541:2143 3:N:0: -AGGGNNGGGGAGAGAAAAAAAAAGGCTGCCTCTCTTCATACAATGGGTCTCTTTACCCTTCCTATTTCTCCCTCC -+ -=B@F####################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2728:2143 3:N:0: -TTTTNNTTTTTTTTTTTTTTTTTTGGGTTTGAAAATTTTTTTTTCAAAAAAAAATTTTTTTTTAAATAAAACAAA -+ -CCCF##2=DFFHHJJJJIJJHFDD################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2658:2145 3:N:0: -GGTANNAGGTACTTTTGACATTCAGTTTTGCTATATAGAAACAGAATGAATAAATGAACTTTTTTCTTTTTTCTT -+ -B+=D##22<G4:A?,,,3:2A@?B*883B;F######## -@HWI-ST1131:111228:C0B0NACXX:2:1101:2584:2147 3:N:0: -CATTNNCATTTTTTGGACTGCTAGTTTTTCTATTTAAATATTTGCCTTCATGTTAGGAATGTACTATGTGAACAT -+ -CCCF##22CFHHHJJJHIJGJJIGGIJJJJFIJIJJJJJJJJIIIIJJIJFGFHIIJJJJJGIJJJJJJJFGFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2638:2148 3:N:0: -GCTGNNTTTAGATGTTATTTAAAGTCTTGGGACTGAGTAAGATTACTTAAAGACAGCGTAGCTCAACAAGGGACT -+ -<@BF##22AFFHDHFFIIIIJJEGFIIJIGHIIJJGI?DHHIEIJFIEHGHIJIJIJGB;AGCEEHGHIHFHHFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2611:2155 3:N:0: -TTGTNNTTGACGCGCTACCTAAGAACAGCTAAAAGAGCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTAT -+ -CCBF##2=DHHHHIJJJJJJJJIJJJGIGJJJJJJIJGIBFHJJJIJJHHHHHHHFFFFFCDCEEDDDDBCDDDE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2639:2169 3:N:0: -TTTATCAAAAACATGATTACAGGGACATCTCAGGCTGACTGTGCTGTCCTGATTGTTGCTGCTGGTGTTGGTGAA -+ -CCCFFFFFHH?HFGIGIIEGIGHIIIGIJIIJJJDIIGJIIDGGGGHGGGDFGHIIJJGIJJJGI8@=DHJ?EHA -@HWI-ST1131:111228:C0B0NACXX:2:1101:2738:2172 3:N:0: -TTTTCTTTAAATAAGACAGCACTGCATGCTACGGAGAAATCTTTCGTGACAGGAAGAGTCAATGCGGCAAACTTC -+ -@CCFDFFFHHHGHJGGIJJFBHIJGIGIEGIIIIIIGIJJGJEIJIGHIGFHIEIIJI@FGGIGGIHHDACEACC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2518:2172 3:N:0: -GGGAAAGGGTATAAGTGGCGATATAGCGGGAAGAGTCTGGGGGACAGGAGGGAGAGGTAGAGAGGGTGGGGGCAG -+ -########################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2720:2172 3:N:0: -ATGCTGTTAGAATGCTTGGGCCATGTCAACATGTTGTATTGCTACAGAATAAGAAAGAGAAATATTTAGTTTATA -+ -:=8?;+2AFAFF############################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2542:2175 3:N:0: -GCACACCCGTCTATGTAGCAAAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAG -+ -?<CH3F@+AAFE3??1?FGF9B49*000?*??6B44BE#################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2569:2179 3:N:0: -TGATGAACTGGGCTTATGTGAGAATGTCTATATTTTCATAACACAGCCCCAGAATCTTTCTCTCAGTTACAGCCT -+ -@CCDDD?EHGGDHIE@FHAICHDHAG@DIIF@GGAGIE@HGIIDGC?DGHGGIIICGIGEHJJIHGCGGHIIFGG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2591:2180 3:N:0: -GTTTTAGTGTGTGTGTGTGTGTGTGGGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTGTATTATATATAC -+ -81??DBDACFHADGAAFE@@(().7(;>D>@D6 -@HWI-ST1131:111228:C0B0NACXX:2:1101:2653:2183 3:N:0: -ATAGACGGGTGGGCTCTTTTAGGTGTTCTTAGGGAGGTCGGCTGGGTTCGGGGGGCTTATCGTTGGGTCTCCCTG -+ -?@@DDFA?D0<)<+++1CFH49*1:?D################################################ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2748:2190 3:N:0: -AAATAGTGGGAAGATTTATAGGTAGAGGCGACAAACCTACCGAGCCTGGTGATAGCTGGTTGTCCAAGATAGAAT -+ -@@@DDFDDHHHHGIGIJJIGIIGIGJIG6??A8??88>CACC@C:AC:>> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2518:2205 3:N:7682: -TCTGCAGGATATCGCGGCCGCTCTAAACGTGGTAAATTGTTAACTCCGAGCTAGACTTCAGGTGGCCGTATTTAT -+ -CCCFFFFFGHHHGJIIIGIEFEHIJIJIIFGICFHIJJJJJJJIIICC<9?ACECCEEDDDC>@BDDB@6?CDEC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2572:2207 3:N:0: -TTAAGAGATGACTTCGGGTGGGGGAAACCAACCCACCCCTTAATTTTGGTTCAAACCTTTTTCAGCCTCCCCCCC -+ -?@@FFFD;4A?766;6>3;>ABBC/8<5+8(9:(:3::ACACCC3:C>CCCA> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2644:2220 3:N:5122: -ACTAGTATGGCCCGGGGGATCCTAGAGACCATTCGCGATTCCATGAGACTCCAAGGGTTCTGCACAACTTATGCA -+ -CCCFFFFFHHHGHDHJJJGGGIJDII@GHJD>FHIIEBDEFEEEAECEDDDDCDDDD(9?CC>CCCDDDCC@C@> -@HWI-ST1131:111228:C0B0NACXX:2:1101:2572:2228 3:N:0: -CGATGAATGTGTAGTGGCATGGTTAAAGCAATGGGTTTATAAACTCTGAAGGAGTCCTTCACCATTTTTTTCTCA -+ -@BBBB=:ADCDCDB@58@B;@CCCCDB;@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:2826:2161 3:N:0: -CCGANNGGGGGGGCGGGGGGGGGGGGGCGTGTTGAGCTCTGCACCCGAACATAGAGGCGGGCCCCCCCCGACCGC -+ -=?BD####################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2995:2162 3:N:0: -TGGCNGTGAAAAACAGTGTATTTAAAGAAATACACTAAAACCAATAATTATGTTTTGTTGAAGAGATTTGAGTTC -+ -B@CF#2=DHHHHHGHHEHFFHIJJJJIJJJIJIJJIJJJIIJGHGIGJIIGHDGIIIHJJIGIHGGIIIIGHGHH -@HWI-ST1131:111228:C0B0NACXX:2:1101:2943:2165 3:N:0: -CAGGNTTATGCGGAGGAGAATGTTTTCATGTTACTTATACTAACATTAGTTCTTCTATAGGGTGATAGATTGGTC -+ -CCCF#2BDHHHHHIJIIJJJJJJIIJJIJJGIJJJJJJJIIJJJJJJJJHFGIJJJGJGIJJCGHGGHHHHHFFE -@HWI-ST1131:111228:C0B0NACXX:2:1101:2869:2177 3:N:0: -CTTGTCAAAACACCTGATAAATACATAGGCCAAAATGGATCTCTAATGAAATATATGTGACTTTATCTTACATGA -+ -CCCFFFFFHHHHHJJJIJJJJJJJJJJHIIIJJJJIGEHCGGFHEIJ@EIFFHIIIIHIIIJJJGIIIIHIJJJG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2816:2183 3:N:0: -GTTGCTCGCTCTAATTTGTCACGTCGGTCTGTTGAAATATTAAACCTAACATGGTCACCTTCCAGCAGGGTCACC -+ -CCCFFFFFGHGHFIIJJJHEHIIHGHJGHHIJFJJJJJJJJIIJHIJIIJIIIIFHHJGIJJGIHGHGHF?@AED -@HWI-ST1131:111228:C0B0NACXX:2:1101:2957:2184 3:N:0: -GGGGTACTGGCGGAGGCGAGTGGGGAGAGGTGAGTGATAGTAAGAGGTGAACCTCAGCAGGGAAAAAAATTGTGA -+ -1+=?####################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2848:2194 3:N:0: -TATGCGGAGGAGAATGTTTTCATGTTACTTATACTAACATTAGTTCTTATATAGGGTGATAGATTGGTCCAATTG -+ -@CCFFFFFHHHHHJJJJIIIFFHHIJIIJJJJJJDIIIIIJJIHGIJJIJIGJJJJCGIJJIGIGHIJIHHHGDF -@HWI-ST1131:111228:C0B0NACXX:2:1101:2791:2198 3:N:0: -CGCAATCACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC -+ -@@@ADDFDHAH;6CEG?;FGB;?BDD -@HWI-ST1131:111228:C0B0NACXX:2:1101:2825:2198 3:N:0: -ATTGGTCCAATTGTGTTTGAGGGCTGTTAATTGTCAGTTCAGTGTTTTAATCTGACGCAGGCTTATGCGGAGGAG -+ -?DG+C>9*@4:*??FD?9??F?BBFHE?44B@GHIIJJGIIJIE:?DFHIIHHGIJDGHGIIGIJIIIGEIIIIBHC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2870:2228 3:N:0: -TTACCTCTTAAATATCTCTGTTCCCTTCTAAGTTGTTTGCTGTGTTTTCTTCAGAGCAAGAAGGTTATATTTTTT -+ -CCCFFFFFHHHHHJJJIJJJJIJJJJIJIJJJIIJJJJJIIJHHHIIJJJHIJJJIJJIIIIIJGHIJJIJIJIG -@HWI-ST1131:111228:C0B0NACXX:2:1101:2989:2233 3:N:5634: -ACTAGTATGGCCCGGGGGATCCGTTAGCTATCGTTCGCGAGAAAGTTAGTAGACACACAGGACCCAGGCGTGCAA -+ -?@@FDADB<;+2CG?@F@F6)(@AH@F;C7C;AHB:;;@(59<5?A?A?(2?######### -@HWI-ST1131:111228:C0B0NACXX:2:1101:2897:2238 3:N:0: -ATAATGGAACTTACAGACACAGAACTGATTTTATACACCCGCAAACGTGACTCAGTAAAATGGCACTACCTCTGC -+ -B;??D;DDBDDHD:AA<@DFCC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2799:2240 3:N:0: -TTACATTCGATAGTGTTACTGATAACAAACCTACTTAAGAGATATGTTGCTTTTTACTTAAGGGATAGTGTTGAT -+ -@<@DDFDFHHDHHCF@GGGI>DHJIIGJJGHGGHHIIFEGGD>FIIJIII>GHIIIGGIGFEHGAGDHIHFHJIC -@HWI-ST1131:111228:C0B0NACXX:2:1101:2765:2245 3:N:0: -AAGCAAGTGGTGGTTTTAAAATCTGTTATTTCTTTTCTTCCAGTCATAAACTTTGAGGAAGGTATCTCATTTTTA -+ -BB@FFFFBFFCFHFIIJIJGGGGHIIJJIIJJIIJJJJJJIJJIJJJJJJIJIIJIIJHDGIFGIIIJJDHIJID -@HWI-ST1131:111228:C0B0NACXX:2:1101:3034:2128 3:N:0: -CCATNNNNGGGNCTACCTCCAAAATTGCCACCTCCAGGTCCTCCTCCATACCCATTATAGCCATCCCCAAATCCA -+ -@CCF####32A#2AGHIJJJJJJIJJJJJJJJJJJJJJGHIJDGHIIIJJHGIIGIJJJJJIJIJJHHHHFFFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3140:2129 3:N:0: -CCTTNNNNTACNTACATTGTTCCAACATGCCAGAGGCTGTTCACCTTGGAGACCTGCTGCGGATATGGGTACGGC -+ -@@CF####22A#2)6A##### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3023:2146 3:N:0: -TGGTNNTGTTCCGTCTTTGGGTCTTAGCTATTGTGTGTTCAGATATGTTAAAGCCACTTTCGTAGTCTATTTTGT -+ -@BGHGFBDFCG@HIE@CG67C@EHGIHHFHF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3234:2154 3:N:0: -CCATNNCTGCTGCCAGTGCGAGTCTGTGTTGCCGTCAGCTGCGATTGTTCCTTGGTCTGCTTCTCGATCTCAGCG -+ -CCCF##2=CHHGHJJJIIIIHJFGIIGGGIJIJJGHIIJIJIJGGIJJJIFHHIGGGHHHHHHFFDEECEEDEED -@HWI-ST1131:111228:C0B0NACXX:2:1101:3133:2155 3:N:0: -TTGTNNTTGATGGCCAGTTTAAAACTTATGCTATCTGCGGGGCCATTCGTAGGATGGGTGAGTCAGATGATTCCA -+ -@BCB##2=CFHHHJJJIHIJJJJIJJJIJGJJJGIJGIIIIIJJHFEHHB@DFFCEDD>?BDCCDCCCDCDDEFC -@HWI-ST1131:111228:C0B0NACXX:2:1101:3044:2155 3:N:0: -ATAGNNGGCTTTGGATTCAGAAAAGGTGGACCAGATGACAGAGGTGATTGGTTCTTCTAAAGCTGAACATCATAA -+ -@@@D##2=CFHHGJJJJCHIGHJIJJ9FCEGIJJGIIGIJIJJI6,,5=28<@DD89(:>@CD@:4:>3 -@HWI-ST1131:111228:C0B0NACXX:2:1101:3054:2170 3:N:0: -TGTGGGACGTTTATATTTAAAATCATATTTTGTGGTTGTTAAGTATATTGGAATGATTGAATTTGATTAGCTTTG -+ -########################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3111:2178 3:N:0: -GAGCCTGGGGGGAAAAGGGGTGGTTTAAAATTTTCTTTTGGAAAACACGCATCACCAGGGTCAAAACAAAAAACC -+ -=?BDFB##################################################################### -@HWI-ST1131:111228:C0B0NACXX:2:1101:3228:2178 3:N:0: -TATTTGTATCTATTTTTAGATGACTTCAAACCTGCTTCTATTGACACTTCTTCTGAAGGATACCTTGAGGTTGGT -+ -CCCFFFFFHHHHHJJJIJJIJJIJJJJJJJJJIJJGJGGIGGIEIHIIIJIHIJIIJJJJJJJJJIJBHI@FHI; -@HWI-ST1131:111228:C0B0NACXX:2:1101:3021:2180 3:N:0: -AACGGGTTACCCGCGCCTGCCGGCGTAGGGTAGGCACACGCTGAGCCAGTCAGTGTAGCGCGCGTGCAGCCCCGG -+ -@@@C:?@8C:@<6A;;(B@55)=CHH>B################################## -@HWI-ST1131:111228:C0B0NACXX:2:1101:3009:2183 3:N:0: -CTTTGTGTTTGATTATGGTATATATACAATTTTCAACACATAATTATTGCATCTAAGCAACAGATACAGAGAAAA -+ -?7??D2ABAFDFDIGEBGCIJFGGCHGGEHHBCHIEHII?C9DB@FHGIFFCFII>GIG@HHIFEHGEGHJIGDF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3074:2186 3:N:0: -CTTGAGTGATGGGTACATGGTGGTTTACTAAATGCTATTTCTGAATACATTTCAAAATGTTCATAATAAAAGTTA -+ -@CCFFFDDGHHHHEGIIJJJHHIGHIIIGGIJIJJJJJJJJIJJJJJJJJHGIJJJJJIIIJJJJJJJJJIIFHG -@HWI-ST1131:111228:C0B0NACXX:2:1101:3179:2188 3:N:0: -AGGTGATCCGCCCTCCTTGGCCTCCCAAAGTGCTGGAATTACAGGCATGAGCCATGGCACCCTACTTTGATTTAG -+ -@@B=DDBDHHFGGIJJBHHGEHDHIGIJII:CEIHG@DGHIIJEHDIGIJIDGIJIDHIIGIIDHEHFFFFFFFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3046:2190 3:N:0: -AGGAGGTCAGTTATATGTTTGGGATTTTTTAGGTAGTGGGTGTTGAGCTTGAACGCTTTCTTAATTGGTGGCTGC -+ -BC@DFFDDHHFHFIJJJIIIJJJFGIGJJJIBH?FDDEGI?DFEGCHIBHHIHIFECEEHHHEEHFECDF<@AA@ -@HWI-ST1131:111228:C0B0NACXX:2:1101:3244:2190 3:N:0: -TTTGTGTTTGAGGGGGGTTGATTTACATCTGGCACAACTTAGTCTTTGTTCCAATCATTTTAGAAGTCTCAATTT -+ -@@@FDDFDHFABF=G:9)078@@CC8>>CC8@@AAC@BDCCCC>3+38@C9A@@CCDCDDDD<@A:>AA>:>4>> -@HWI-ST1131:111228:C0B0NACXX:2:1101:3219:2193 3:N:0: -GAGGGATGCAAAGTATTGTTCCTAGTGTGACTGTGAGGGAGCGGCAAAGGGAGATTAACATTTGAGTCAGTGGAG -+ -+1+++8A;CBCFAG,AA:=CECHFF -@HWI-ST1131:111228:C0B0NACXX:2:1101:3168:2201 3:N:0: -GCGAGCGGGTGGTAAACTCCATCTAAGGCTAAATACCGGCACGAGACCGATAGTCAACAAGTACCGTAAGGGAAA -+ -?;BDFFDAF)FE>?B::DGGCDAGFGHGEG5?208381<2 diff --git a/clipper/t/join.t b/clipper/t/join.t deleted file mode 100644 index bc422f7..0000000 --- a/clipper/t/join.t +++ /dev/null @@ -1,33 +0,0 @@ -use Test::Builder; -use Test::More; -use File::Basename qw(dirname); - -require (dirname(__FILE__) . "/test-prep.pl"); - -$prog="$BINDIR/fastq-join"; - -@check = ( - {param=>"$INDIR/test-m1.fq $INDIR/test-m2.fq -o $TMPDIR/test-m. > %o:$TMPDIR/test-m.out 2>&1 #o:$TMPDIR/test-m.join"}, - {param=>"$INDIR/phred.1.fq $INDIR/phred.2.fq -o $TMPDIR/test-phred. > %o:$TMPDIR/test-phred.out 2>&1 #o:$TMPDIR/test-phred.join"}, - {param=>"-p 20 -m 5 $INDIR/test-ov-a.1.fq $INDIR/test-ov-a.2.fq -o $TMPDIR/test-ov-a. -x > %o:$TMPDIR/test-ov-a.out 2>&1 #o:$TMPDIR/test-ov-a.join"}, - {param=>"-p 20 -m 5 $INDIR/test-ov-b.1.fq $INDIR/test-ov-b.2.fq -o $TMPDIR/test-ov-b. -x > %o:$TMPDIR/test-ov-b.out 2>&1 #o:$TMPDIR/test-ov-b.join"}, - {param=>"-p 20 -m 5 $INDIR/test-ov-a.1.fq $INDIR/test-ov-a.2.fq -o $TMPDIR/test-nov-a. > %o:$TMPDIR/test-nov-a.out 2>&1 #o:$TMPDIR/test-nov-a.join"}, - {param=>"-p 20 -m 5 $INDIR/test-ov-b.1.fq $INDIR/test-ov-b.2.fq -o $TMPDIR/test-nov-b. > %o:$TMPDIR/test-nov-b.out 2>&1 #o:$TMPDIR/test-nov-b.join"}, -); - -my $id=0; -for (@check) { - ++$id; - my %d = %{$_}; - $cmd = "$prog $d{param}"; - my ($exit, $ncmd, $files) = run($cmd); - if ($d{bad}) { - ok($exit != 0, "test$id worked ($ncmd)"); - } else { - ok($exit == 0, "test$id worked ($ncmd)"); - } - - check_output($files); -} - -done_testing(); diff --git a/clipper/t/mcf.t b/clipper/t/mcf.t deleted file mode 100644 index 28f356b..0000000 --- a/clipper/t/mcf.t +++ /dev/null @@ -1,36 +0,0 @@ -use Test::Builder; -use Test::More; -use File::Basename qw(dirname); - -require (dirname(__FILE__) . "/test-prep.pl"); - -$prog="$BINDIR/fastq-mcf"; - -@check = ( - {param=>"-l 15 $INDIR/test.fa $INDIR/test1.fq > %o:$TMPDIR/test1.out 2> %o:$TMPDIR/test1.err"}, - {param=>"-l 15 $INDIR/test.fa $INDIR/test2.fq > %o:$TMPDIR/test2.out 2> %o:$TMPDIR/test2.err", bad=>1}, - {param=>"-l 15 $INDIR/test.fa $INDIR/test1.fq -o %o:$TMPDIR/test3.out > %o:$TMPDIR/test3.err 2>&1"}, - {param=>"-l 15 -L72 -f $INDIR/test.fa $INDIR/test4.fq1 $INDIR/test4.fq2 -o %o:$TMPDIR/test4.out1 -o %o:$TMPDIR/test4.out2 > %o:$TMPDIR/test4.err 2>&1"}, - {param=>"-l 15 -H $INDIR/test.fa $INDIR/test1.fq -S -o %o:$TMPDIR/test5.out > %o:$TMPDIR/test5.err 2>&1"}, - {param=>"-l 15 $INDIR/test.fa $INDIR/test1.fq -o %o:$TMPDIR/test6.out.gz > %o:$TMPDIR/test6.err 2>&1"}, - {param=>"-0 -D 20 n/a $INDIR/test-mcf-dup.fq -o %o:$TMPDIR/test7.out > %o:$TMPDIR/test7.err 2>&1"}, - {param=>"n/a $INDIR/count.fq > %o:$TMPDIR/test8.out 2> %o:$TMPDIR/test8.err 2>&1"}, - {param=>"$INDIR/adap.fa $INDIR/test5.fq > %o:$TMPDIR/test9.out 2> %o:$TMPDIR/test9.err"}, -); - -my $id=0; -for (@check) { - ++$id; - my %d = %{$_}; - $cmd = "$prog $d{param}"; - my ($exit, $ncmd, $files) = run($cmd); - if ($d{bad}) { - ok($exit != 0, "test$id worked ($ncmd)"); - } else { - ok($exit == 0, "test$id worked ($ncmd)"); - } - - check_output($files); -} - -done_testing(); diff --git a/clipper/t/multx.t b/clipper/t/multx.t deleted file mode 100644 index 09d2599..0000000 --- a/clipper/t/multx.t +++ /dev/null @@ -1,31 +0,0 @@ -use Test::Builder; -use Test::More; -use File::Basename qw(dirname); - -require (dirname(__FILE__) . "/test-prep.pl"); - -$prog="$BINDIR/fastq-multx"; - -@check = ( - {param=>"-l $INDIR/master-barcodes.txt $INDIR/mxtest_2.fastq $INDIR/mxtest_1.fastq $INDIR/mxtest_3.fastq -o n/a -o $TMPDIR/mxout_%_1.fq -o $TMPDIR/mxout_%_2.fq > %o:$TMPDIR/test1.out 2> %o:$TMPDIR/test1.err"}, - {param=>"-l $INDIR/master-barcodes.txt $INDIR/mxtest_2.fastq $INDIR/mxtest_1.fastq $INDIR/mxtest_3.fastq -o n/a -o $TMPDIR/mxout_%_1.fq.gz -o $TMPDIR/mxout_%_2.fq.gz > %o:$TMPDIR/test2.out 2> %o:$TMPDIR/test2.err"}, - {param=>"-g $INDIR/mxtest_2.fastq $INDIR/mxtest_1.fastq $INDIR/mxtest_3.fastq -o $TMPDIR/mxout_%_1.fq -o $TMPDIR/mxout_%_2.fq > %o:$TMPDIR/test3.out 2> %o:$TMPDIR/test3.err"}, - {param=>"-H -v ' ' -l $INDIR/master-barcodes.txt $INDIR/mxtest-h_1.fastq $INDIR/mxtest-h_2.fastq -o $TMPDIR/mxout_%_1.fq -o $TMPDIR/mxout_%_2.fq > %o:$TMPDIR/test4.out 2> %o:$TMPDIR/test4.err"}, -); - -my $id=0; -for (@check) { - ++$id; - my %d = %{$_}; - $cmd = "$prog $d{param}"; - my ($exit, $ncmd, $files) = run($cmd); - if ($d{bad}) { - ok($exit != 0, "test$id worked ($ncmd)"); - } else { - ok($exit == 0, "test$id worked ($ncmd)"); - } - - check_output($files); -} - -done_testing(); diff --git a/clipper/t/out/join/test-m.join b/clipper/t/out/join/test-m.join deleted file mode 100644 index 39233fb..0000000 --- a/clipper/t/out/join/test-m.join +++ /dev/null @@ -1,12 +0,0 @@ -@MISEQ06:5:000000000-A2FRR:1:1102:14347:18774 1:N:0:TCCACAGGAGT -TACAGAGGGTGCAAGCGTTAATCGGAATTACTGGGCGTAAAGCGCGCGTAGGTGGTTCGTTAAGTTGGATGTGAAATCCCCGGGCTCAACCTGGGAACTGCATTCAAAACTGTCGAGCTAGAGTATGGTAGAGGGTGGCGGAATTTCCTGTGTAGCGGTGAAATGCGTAGATATAGGAAGGAACACCAGTGGCGAAGGCGACCACCTGGACTGATACTGACACTGAGGTGCGAAAGCGTGGGGAGCAAACAGGATTAGAAACCCCTGTAGTCCGT -+ -?DEEDGGGGGGGGCEEGEGGEGECEGCEEGGGEEA?CEGGGFEEEEGGGGGGGEGEGGGGFFGGHHHHHHHHHHHHFHHHEGHHIIHHHHHHHFHIHIIIHIIIHHIHIIIIIIIIIIHHHEHIIHHHHHIHHGDGFHHIIIHHHFFFFFC+5DDBDDDB@@????? diff --git a/clipper/t/out/join/test-m.out b/clipper/t/out/join/test-m.out deleted file mode 100644 index 4659452..0000000 --- a/clipper/t/out/join/test-m.out +++ /dev/null @@ -1,5 +0,0 @@ -Total reads: 3 -Total joined: 3 -Average join len: 227.00 -Stdev join len: 0.00 -Version: 1.01.759 diff --git a/clipper/t/out/join/test-nov-a.join b/clipper/t/out/join/test-nov-a.join deleted file mode 100644 index 07e349b..0000000 --- a/clipper/t/out/join/test-nov-a.join +++ /dev/null @@ -1,36 +0,0 @@ -@HWI-M01378:140129:000000000-A7785:1:1115:20594:2152 3:N:0: TATAGCACGC -GGTAATCGTGACTCTGCCCTGGCACTTCTGTGAGTATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GEE,6E,FCD18@ACCCC538D$5=@G@DAFC9BFEFDACGGFA=EDE@D3,>5:B>6B<7GGFEFCGF@,F>,3,:EGGGGFGFFGF:CGFGC6GGGEFC1EFECGGFA+GFCFFEFGGGGGGECGGGFDGF9ECFGGGGGGGGGFCGGGF?ECGEGGGGGFGGGGGGFGGGGGGGGGGGFGGGGGDGGGGGFGGGGGFGGGGGGGGGGGGGGFG -@HWI-M01378:140129:000000000-A7785:1:1115:10327:25119 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGGACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAGGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGFFGFCFGFGGGG,=DFDGGGGGGFGGECDEFFGGFGGFGGGGG?GFFGEECAADDEGGDFDF>?B5F4FFGGGFD7GFDEFFGEF:+C78DFF=FFCBDDFFFGBFFGFFF@;FEFCGFGFFEEGGGGEGGGFCGECEA9,GDFEFGGGGFGGGGGGGGGGFFGGGFGGGFGGGGGGFFF;DD6ECFFF@ECGEDGECEF+7GGC8+GCFECA9EGGGGDGGDGFDA9CGGGGF@FF4AFDC5D=EFADAFDA=A,9D+8DCD=@8,73D,6,,2?=C==CDFGGCFFDFF7$;6GG?=GFCDEFGGDGF>3ED7@B@:=@EGEEFFACA;EEGFFA,F9FBCGGGGGGE@EE9GGGF=8@?GGFGGGGGGGGF?5?@F<@DEGGGCCGGGEFEFFGFFCDGGGFFFDGFEF@GGGGGGFGGGFGGFF@FFDF@G -@HWI-M01378:140129:000000000-A7785:1:1118:8691:1931 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -FGGGCGGFGDFGDGGFFGGGFCFGFGGFAFEGGFDC=2F8==FDGFGFFGGEGFE:;:CBCFBFEF?GFFCGGF;GGGFBGGCCGEGGGGGGGFABEFFCFECGCEEGGGGGGGFFDGFFGGFGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGFFGFCFGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1119:11518:19811 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAAAATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -4DFGGDFD=@3=EDFGGFF8D+,6@FGFG==?D,+6,=FFFE<@@C;51EFFG7<@FEEF?CGFFF;>:9DF>B@CGF@@@6DD3*5+C@++6+=?CEEGGEGGDA8BFGFFEC,,F??8,@FC=<,DDFGCFFFA>,GFEECGGGFFF9F?C?9,EGGFEGGFGCCCCF,8GFCGFEGFFEGFFGF7CF8EF,@FGCFEFGG7B:5>,3D@EDE=AFGGCADFEFB9CFAD@G>$<==CEF<@=5$D835CCCCA@81DCF,E6,EEG -@HWI-M01378:140129:000000000-A7785:1:1115:21004:5310 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GFGGGGGGGGGGGGGGFGGGGGFGGGGGDGGGGGFGGGGGGGGGGGFGGGGGGFGGGGGEGCE?FGGGCFGGGGGGGGGFCE9FGDFGGGCEGGGGGGFEFFCFG+AFGGCEFE1CFEGGG6CGFGC:FGFFGFGGGGE>ECC0FCCCGFGGFGGGGGGGFG@FEDGF=CGFFGFGGGGGGGGGGFFFDEBGEGGFGGGGGDFFFGFFDACDGEEFG -@HWI-M01378:140129:000000000-A7785:1:1115:10327:25119 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCCTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTCCCAGGGCAGAGTCACCATTACC -+ -GFGGGGGGGGGGGGGFGGGGGG,CFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGFGFGGGFGGGGGGGGGGGGGGGGFDGGFFGFFGFGGGGGGGGFFGGCCEEGGGGG+66@@FC<+:FEGFFEDFG7DFGGGFF4F5B?>FDFDGGEDDAACEEGFFG?GGGGGFGGFGGFFEDCEGGFGGGGGGDFD=,GGGGFGFCFGFFGG -@HWI-M01378:140129:000000000-A7785:1:1116:26580:20568 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATGCACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -F@FFGGGGGGGGGGGGGGGGGGGGGGGGGGFFEFGGGFGGGFGFGGGGGGGEGGFGGGGGGGGGAF<5FCFGC<:CFCC6?GGFAFDFE8GGFFFGGGGDGGFGFFGFFFCDGGFDGGGFGG -@HWI-M01378:140129:000000000-A7785:1:1117:15050:1908 1:N:0: TATAGCACGC -TCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCAGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDFFGGGGGGGGGGGGGGGGGGGGGFGGGDGGGGFGGGGGGGGGGFGGGGGGGEGDGE@FGGGGGGGGGGGGGGGGGGGFCFCFGFDCFFGGGFGGFGCEGFDGGGGFGGGFGGGGFGGGGGGG=FFGGGGGEFGGGGGGFFGGGGGGGGGCFGGG -@HWI-M01378:140129:000000000-A7785:1:1117:15528:1981 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGFGGFFFGGFCFGGGDF@CEGGGG@FGGGDCFGGGFDDDAFGGGCEGGG8FFFC,EFFFFAF9FGGFGGGGD<5CDFA4FF@FGGGGC9ADFGDGGDGGGGE9ACEFCG+8CGG7+FECEGDEGCE@FFFCE6DD;>ECF9EFGGCEFGD?2FEFCFC?CEF?@@AF=C97A9GGGD==1DA@6,@,6,86D8F@37,,,F93DE,@,GFF8 -@HWI-M01378:140129:000000000-A7785:1:1118:9968:1647 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGGGGATGGGATGGATCAACGATGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -G@FDFF@FFGGFGGGFGGGGGG@FEFGDFFFGGGDCFFGFFEFEGGGCCGGGED@FGDGGFEDCFG=?GG6;$7>C(31DF8FC9<7F859$FCCF8 -@HWI-M01378:140129:000000000-A7785:1:1118:8691:1931 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGFCFGFFGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGFFGDFFGGGGGGGEECGCEFCFFEBAFGGGGGGGEGCCGGBFGGG;FGGCFFG?FEFBFCBC:;:EFGEGGFFGFGDF==8F2=CDFGGEFAFGGFGFCFGGGFFGGDGFDGFGGCGGGF -@HWI-M01378:140129:000000000-A7785:1:1119:11518:19811 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATTTTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGDAFFFCGFDD,<=CF@,8??F,,CEFFGFB8ADGGEGGEEC?=+6++@C+5*3DD6@@@FGC@B>FD9:>;FFFGC?FEEF@<7GFFE15;C@@CE8?G>FFGGGD8FEDDGGGGEGFCD:FFEECGF@9FECDACFF:;%5:@CGGFCDGFCE@ECGC8AGFFGCGGGGGGGGFCF@GGGFF2GFEGGEFC?7GFD:GGGGGGGGGGGGFFCGGGGGFFGFGGGGGGGGFGGFGGGGGGGGGGGGGGFDGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:27324:10852 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGFGGFGGGGFGGGGGFFGGGGGFGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:13807:10870 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCGCCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGFGFGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:12421:11010 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:7453:12346 3:N:0: TATAGCACGC -GTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGFGFFFDEGGGGGGGGGGGGGGGGGGGGGGGGGGFFGFGGGGGGGGGGGGGGGGGGGGGFGGGGGGGEGGGGGGGGGGGGGGGGEGGEGFEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:24376:13941 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGFGFEGFGFFGGDEGGFGGGFFFGFGFGGGGGGGGGGFFGFEFFFGGGGFGCGGGGGGGGGGFEDFGFGGGGGGFFFFFFGGGGGGGGGGFBGGGGGGGGGGFGGGGGGGGGGGFGGGGFGGGGGGGGGDGGGGGGGGGFGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGF6GGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:10620:14798 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -CEGGGFGA@=E:@DDFF+EA:=EFEGGGDFGGC7FCE8CGGEGGFCFGGGGFF:5=@CEGFCGF@GFAAFGCDA4FCGCDGFGFGGFFGGGGGEFGGGGFEGEGGFEGGEFFFEFFGGFGGGFE9GGGGGGGGGGGFFGGGGGGGGEGGGGF=GGF9GGGGGFAFDGF@GGGGGGGGGGGGGGFGGG>GGGGGGGECGGGGGGGGGGGGGGGEGGGGGGGGGGGGFFGGGGGGGGGGGGGGGFFFGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1113:9754:8982 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGGATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGDFGGGGGGGGFGGGGGGGGGGGFAGFD,FGGGGGGGGGGGFGGGGGGGGGGGGGGFFFGFGGGFGFFGGGGGGGFGGGGGGFGGGGGGGGGGGGGGGGFCGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGFGGGGGGGGFGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1113:7145:11813 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGCCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1113:14234:15031 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGFFGGFFFGDGGGGGFGGGGGGGGGGGGGFGGGGGFFGGGGFGGGGGGGGGGGGGFGGFGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGFGGGGGGGGGGGGGGGGGGFGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1113:18729:16203 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGFFDGFGFGGGGGGFGGGGGGGGGGGGGGGGGGGGFGGGGGGEGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGEGGFFFDF@GGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1113:3306:19532 3:N:0: TATAGTACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGGTCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GCA5EE+FGFEGGCFEC?GG;GGFF4FFFE@@C0GF5GFFFEGGGGGFCCFECDGE8EFD8DGGEC?FF6GGGGGGGGGGFGGFGGGGFF:EEECD+GGGGGGGGGGGBF?9GGGGGGFGFCGF9GGGGGGGF?CGFFAFE,GGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGFCGEGGGGGGGGGGFGGGGGGGFGGG -@HWI-M01378:140129:000000000-A7785:1:1114:23540:7106 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGGATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGCGGGEGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1114:23450:10317 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAAGATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCGGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GFGFB?DFGGGGGGGGGFGGFCFCA8FFGGE;>==FGGGGGGFGC?GFDGF@FFGGGGGGGGGGGGGGF>GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1115:20594:2152 3:N:0: TATAGCACGC -GGTAATCGTGACTCTGCCCTGGCACTTCTGTGAGTATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GEE,6E,FCD18@ACCCC538D$5=@G@DAFC9BFEFDACGGFA=EDE@D3,>5:B>6B<7GGFEFCGF@,F>,3,:EGGGGFGFFGF:CGFGC6GGGEFC1EFECGGFA+GFCFFEFGGGGGGECGGGFDGF9ECFGGGGGGGGGFCGGGF?ECGEGGGGGFGGGGGGFGGGGGGGGGGGFGGGGGDGGGGGFGGGGGFGGGGGGGGGGGGGGFG -@HWI-M01378:140129:000000000-A7785:1:1115:3643:7099 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GFGGGGGGFFFGGGGFGGGGFCGCD>GGG@EFFA5GGGGGGGFGGGGGFGGEFFGGEFEGGGGGGFEEFC>GGGGFEEDFGFFFFEGGGDEEGEGGGDGEGFCGGGGGGGGGGCFDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGF<EEAFFAAEEGGFFFGFFFFGGFGGEFEFAGFFDDDFCE>?FDGGGGGGGGFF>?F@E9@:;FDEEDFFGGFFGFDFG:?E?GGGGGFC>$CCADFC9=CGC:EEG=FGFCC:7FGGGFGGGGGGF?FAGFFCF@FGGGGGFGGFFGFGFGGGGEEGGGGGFGFGGGFFFGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGFCGGGGGGGGGGGGGFFAGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1115:22345:18846 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGA -+ -GGGGGGGGGGGGGFBFGGF>GGCFDFFGGGGGGGGGGGGGGGFGGFGGFFGEDGCFFDFGEGGGGGGGGGGFGFFGEGGGGGGFGFGEGGGGGGGGGGGGGGCGGGFGGGGFGGGGGGFGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFC,GGGGGGGGGGGGGGGCGGGGGGGGFFDEABFGGGGGFCFDG>GGGFGGFCFGGGGEG@FCGEC77FCGGGF?EFA>=:CFBABEFDGF?EGFGGEAFCGGGE@GGGGFGFEFEGFF?B5F4FFGGGFD7GFDEFFGEF:+BFFGGGGG56FDFGF=GGGCFGGCGFFGFFFGGGFGECAFDEFDGECCGGGGGEGC3FF;FCC?GGGFCFGFDGFEDGC<8B?FCEGGGGGFGGGGGGGGGGEDGGGGGFFFFFGGGGGGFFFGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGFFFEFFGGGGFGGEGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1116:21781:3983 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCGCCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGFGGGGGGFGGGGGGGGGGGGGFGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGFGGFGEGGGGGGGGGGGGGGGGGGGGGGGECGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1116:19367:5061 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGFGGFGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGF>EGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1116:22704:5419 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGFGGGFGGGGGFGGGEDEFFGFGGEEEFEEFGGGFGGGGGGGGGGFGGEFFFGGGGD8=EGGEFFGGGGFFCCFEFDFGDCCDFBGFGFFDFGFFEGFGGEFCFGFGECFC;BC:FGGFF1FC7GGGGFC@6D=CGGGC@EFFFGGGGGGFCGGGGFGGGFEFGGFFGGGGGFC78DFF=FFCBDDFFFGBFFGFFF@;FEFCGFGFFEEGGGGEGGGFCGECEA9,GDFEFGGGGFGGGGGGGGGGFFGGGFGGGFGGGGGGFFF;DD6ECFFF@ECGEDGECEF+7GGC8+GCFECA9EGGGGDGGDGFDA9CGGGGF@FF4AFDC5GGGGGGGFFFGGGGFGGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGFDGGGGGGGGGGGGFGGGGGGGGGGGGFEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1117:13251:7519 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -DFGGFCF89CEC7:<@E@E:@F@BB?6AC?CFFDFFFEFEBGF>CA7CCFC@GGEFFCBEFGGFFGGFFAE?AGGGFFGGFFEBEFGDECGFGGGFGFGGGFFGGFGGGGFFGFGFCEGGFGGGGGGGGGFDFGFDEAE?GGGF8C@EGGGFDFFCCGEFGGEEFFFDGGFCGCFE@ -@HWI-M01378:140129:000000000-A7785:1:1117:14612:8918 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGFFGGGGGGGFFGGGGGGGGGDGFFGFFGGFFCGGFCAD@GGGGGGFEFFGGGGGEGGGGGGGGGGGGGGFFFGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGGGFGF@GGGGGGGGGGGE9GGGGGGGGGGGGGGGGGGGGGGGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1117:2770:10016 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -FGGGGGFFGGDGGEFGGGGGGGDDGGGGFGFFGGGGGGGFGGFGGFGGFGGGFGFCEBGGGGGGGGGGGFGGGFFGGGGFGGFFGFGGGGGGGGGGGGGGDGDGGGGGGGGGFAFGG?GGGFGFGGGFGGGGGGGFGGFCGGFD9FGGGGGGGGFGGGGGGGGGGGGGGGGFGGGGGGGDGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1117:7058:13477 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTGCCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCFGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGEFFFF;GGFEEGGGFGFDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGFGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1117:20535:14960 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGFGGGGGGGDGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1117:12925:16162 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGA -+ -GGGGGGGGGGGFFEFGGGGGGGFFGCEGGFFFGGGGGGGGGGGGGGGGGGGFC2GGGGFCGFFGFGFGGGFGFGGGGEGGFGGFGGGGGGGGGGGGGGGFGGCGGGFGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGFGGGGGGGGGGGGGGGGGFGGFGGFGGGGGGF -@HWI-M01378:140129:000000000-A7785:1:1118:9968:1647 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCCCTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -8F>D=EFADAFDA=A,9D+8DCD=@8,73D,6,,2?=C==CDFGGCFFDFF7$;6GG?=GFCDEFGGDGF>3ED7@B@:=@EGEEFFACA;EEGFFA,F9FBCGGGGGGE@EE9GGGF=8@?GGFGGGGGGGGF?5?@F<@DEGGGCCGGGEFEFFGFFCDGGGFFFDGFEF@GGGGGGFGGGFGGFF@FFDF@G -@HWI-M01378:140129:000000000-A7785:1:1118:9715:1754 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGCCEFGGCFG=8DFGFDGGGGEFGGFGGDFFCFFGGGFGGFDFFGGCGGGGGGGGGGGGGFGGGGFGGGGGGGGGEDGGGGFGGGGGGGGEGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGFGGGGGFECCDEGGGDGFFDFFFD7:?EFF=9@FDGFFDFGGFGG;=GFGGECEEGGGGEE?GFFCGEDGGGGGFGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:21171:9133 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATACTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:18189:10068 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGFGGGGGGGGGGGFGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:9717:10455 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTACCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFEGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGFGGGGGCGGFGGGGGGGGGGGGGDGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:6493:13149 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGAGGGCCTGGCGCACCCAATGCATAGCATAGCTAGCGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCGGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:9182:16529 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGDFFDFGFDDFGGGGGGGFFFCGGGGGGFGGGGGGFGFGFGGGFGCEFFFGGGGGGGFGFFGGGGGGGGGGGGGGGGGGGFCGGGGGGGGGGGGGGFFGGFGGGFGGFFGGGGGGGGGGGGGGFGGGFGGFGGGGGGFGGGGGGGGGFFCGEGDGGGEGGGGGFGFGGGGGGGGGGGFEGGGGGGGGGGGGGGGGGFFGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:19019:20700 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGCGFFEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFG -@HWI-M01378:140129:000000000-A7785:1:1118:24760:20968 3:N:0: AATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGGGGGGGGCDGFGFGECFGGGGGDFGFGGCFGFGGFGGDGGGGGFGECGFGGGFGFFFFFFFGGGGGGGGFGGGGEGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGCGGGFCDGFGGFFE1?CCFFEGGGGGGF,GGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGFG -@HWI-M01378:140129:000000000-A7785:1:1118:12797:21177 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGCTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGFGGGEFGDFGGGGGFFGGEGFGGGGGFGGFGGFGGGGGGGFEFGFGGGGGGGGGGGGGGGGGFGGGGGGFGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFAFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1119:12200:9232 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCACGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGGGGFGGGGGFGGGGGGFFCFFCGGGGGGFGGFFFFGGGGGC:GGGGGDFGGGGGGGGGGFFGFGF+GGFFGFGGGGDGGGGFGGGGGGGGGGGGGGGGGFGFGGG?GGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1119:25522:9543 3:N:0: TATAGCACGC -GATAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCTGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -D$FCEF>FGGCGFFEADF>9GFGGEFGFFGFFFDGGGGGGGGFGGFEBF@EFGF.GEGGGGGGFFGFFFGGGGGGGGEGGGGGFGGGGGFFGGGGGGGF>GGGGGGGGFCFGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1119:25841:13619 3:N:0: TATAGCACGC -GTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ ->FFFGGG=BDFGA@B@F8?DDCGGGFGGGGGGECFGGFGGGGFGGFGGGGGGGGGGGGFDFCGFFGGGDGGGGGGGGGGGGGGGGFDGGGGGGGFGGGE:GCFGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGE -@HWI-M01378:140129:000000000-A7785:1:1119:20076:14454 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1119:5209:16156 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGFGGGGGGGFGGGGGGGGGGGGFGGGGGGGGGGFGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG?GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGFGGGGGGGFE:9DF>B@CGF@@@6DD3*5+C@++6+=?CEEGGEGGDA8BFGFFEC,,F??8,@FC=<,DDFGCFFFA>,GFEECGGGFFF9F?C?9,EGGFEGGFGCCCCF,8GFCGFEGFFEGFFGF7CF8EGGGGGGGGGGGGGGGE@EFEC7GGGFFGGGGGFEDGGFFGGFGGGGGGGECGGGGFEGGGFFGFGGGGGGFFGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFF9GGGGGGGGFG -@HWI-M01378:140129:000000000-A7785:1:2101:21110:9989 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GFGFDGGGGGFFF?FFGGGFFGGFGGGFFGFFCFGFGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGFFECDFGGFGGGGGGGGGGG>EGGGGGGGGGGGGGGGGGGCGGGGGGGGFGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:2101:25521:14328 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGTTGGACCTGGGAG -+ -GGGBEFGGGD;DDFFGGGGGGGFGGGGGGGGGGGGGGFGGGGGGGFGGGGGFGFCDFGFGGGGGGGFFCF9GGGFFADGFGGGGGGGGGGGGGGGGDGGGGGCGCF9FFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGFFEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:2101:6147:17939 3:N:0: TATAGTACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -EC@>CDGADDEGCFF8DFFGCGGG@=CFEF@9AFCFGGDGGGBFG?;CC071=A;FFGB4CFFFFE:7GGGGGGGGGEGGG>GFGGFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFFGFGFCGGGGGGGFFFGGFGGGGGGGGGGFFGCGGGGG -@HWI-M01378:140129:000000000-A7785:1:2101:7510:19246 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGFD9DFGGEGEF?AGGGGGGFC;4F@?FFA@CDF:FCDGCAGGGGGE?FE:=DD+FCGGGFFC>GGGFGGGFDGGGG5GFGFGGGGFC@GGGGGGGGDGGGGGFFC57,9GGGGGGGFEEFE.9B?>DFGFFCCECD:@CFCGGGFGGFCCEFGGDFFFGFAGFFCFFC?CDDAEG5:%B'6F>=27?GFFC;FDFEEFGGGGECGGF@GGFGGGECGGFCGFGGGFGGGGFBAAFE@FGGGGCFGFF=FBFAGGGGGFGF>8@GGFDGFGGGGGGGGGGFGF=GGFFGGGGGGGGGGGGGGGGGGGGGGGGFGGGGCGFGFFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGF@GGGGGGGGGGGGGGGGGGF,GGGGGGGGGGGGGGGGGGGGFGGGGGG -@HWI-M01378:140129:000000000-A7785:1:2102:20537:10795 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGFGFFGGGGGGGGGGGGGGGGGGGGGGFGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFCCGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:2102:11278:14783 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGTCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:2102:15247:16145 3:N:0: TATAGCACGC -GGTAATGGTGACTCTGCCCTGGAACTTCTGTGAATATTTTGTGTTACCATTGCCAGCGTTGATCCATCCCATCCACTCAAGCCTTTGTCCGGGGGCCTGGCGCACCCAATGCATAGCATAGCTAGTGAAGGTGTATCCAGAAGCCTTGCAGGAAACCTTCACTGAGGCCCCAGGCTTCTTCACCTCAGCCCCAGACTGCACAAGCTGGACCTGGGAG -+ -GGGGFCFGG?,6FFFEGGGGDFFGGGGFFG;@=?FG=EFGFGGFEFFF=FGGDGE?DFGGGGGGGGGFG>GGGGFGGGGFGGGGGGEGCFFGFGF?CGGGGGGGGGGGGFGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGD diff --git a/clipper/t/out/join/test-ov-a.out b/clipper/t/out/join/test-ov-a.out deleted file mode 100644 index 97cd1a7..0000000 --- a/clipper/t/out/join/test-ov-a.out +++ /dev/null @@ -1,5 +0,0 @@ -Total reads: 100 -Total joined: 93 -Average join len: 137.66 -Stdev join len: 36.10 -Version: 1.01.759 diff --git a/clipper/t/out/join/test-ov-b.join b/clipper/t/out/join/test-ov-b.join deleted file mode 100644 index 7087898..0000000 --- a/clipper/t/out/join/test-ov-b.join +++ /dev/null @@ -1,372 +0,0 @@ -@HWI-M01378:140129:000000000-A7785:1:1112:20058:10262 1:N:0: TATAGCACGC -CTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGACCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTTCC -+ -GGGGG:DFG7?CFEGGEFG2FFGGG@FCFGGGGGGGGCGFFGA8CGCE@ECFGDCFGGC@:5%;:FFCADCEF9@FGCEEFF:DCFGEGGGGDDEF8DGGGFF>G?8EC>?GE8FG -@HWI-M01378:140129:000000000-A7785:1:1112:27324:10852 1:N:0: TATAGCACGC -AAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGFGGGGGFFGGGGGFGGGGFGGFGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:13807:10870 1:N:0: TATAGCACGC -AAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGCGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGFGFGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:12421:11010 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:7453:12346 1:N:0: TATAGCACGC -TGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTAC -+ -GGGGGGGGGGGGGEFGEGGEGGGGGGGGGGGGGGGGEGGGGGGGFGGGGGGGGGGGGGGGGGGGGGFGFFGGGGGGGGGGGGGGGGGGGGGGGGGGEDFFFGFGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:24376:13941 1:N:0: TATAGCACGC -ATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -FGGGGGGGGGGGFGGGGGGGGGGBFGGGGGGGGGGFFFFFFGGGGGGFGFDEFGGGGGGGGGGCGFGGGGFFFEFGFFGGGGGGGGGGFGFGFFFGGGFGGEDGGFFGFGEFGFGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:10620:14798 1:N:0: TATAGCACGC -TGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GEFGGEGEFGGGGFEGGGGGFFGGFGFGDCGCF4ADCGFAAFG@FGCFGEC@=5:FFGGGGFCFGGEGGC8ECF7CGGFDGGGEFE=:AE+FFDD@:E=@AGFGGGEC -@HWI-M01378:140129:000000000-A7785:1:1112:26422:14876 1:N:0: TATAGCACGC -ATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -BFFCGFGEFEGCFFFGGGGGGDGFEGGGFADDGFFGFGFCGGGFFFFEFFGGFGGGGGFGGGGGFGGFGGGGGGFGGGFGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:17229:16419 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFFGGGGGGGGGGGFGGGGFGGGGGGGGGGGGGGGGGFGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGFFGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1112:9440:21170 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGDFGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGFGG -@HWI-M01378:140129:000000000-A7785:1:1112:13154:23703 1:N:0: TATAGCACGC -GCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGEGGGGGGGGGFFGGGGGGGG=GGGGGGGFGFGFFGCEGGGGGGEFFFECFGG@GGGFGGGGGGGGGGGGGG@FGDFAFGGGGG9FGG=FGGGGEGGGGGGGGFFGGGGGGGGGGG>FGGGDGFFGEFFGGGGFGGGGGGGFCGGFFGGGGGGGGGGGGG:CGGGGGCFGFFGDFFFFFADFDCD=GGGGGGGGGGGGGGGGGGGGGGGG;EGGFF8ACFCFGGFGGGGGGGGGFD?BFGFG -@HWI-M01378:140129:000000000-A7785:1:1114:14583:14170 1:N:0: TATAGCACGC -TAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGFEGGGGGGGGGGGGGGGGGGGGGGGEGGGGGEF=GGGGGGFGGGGGGGGGDFECEGGCGGGGDEGFDEFECFGGGGGGFFCDGDGGGFGGE=FGGGFGGGGGGFFDGFGCGGGGGFFGG -@HWI-M01378:140129:000000000-A7785:1:1114:7126:18810 1:N:0: TATAGCACGC -ACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGFGGGGGGGGGGGGFGGGGGGG8GGGFGGGGGEEGGFCEGGGGGGGGGGGGGGGGGGGGGGGFGFGGGGGGGGGGGGGFGGGGFFGFGGGGFGGGGGGGGGGGFEFFFCFDFGGGGGGGGFAGGFGDGGGE -@HWI-M01378:140129:000000000-A7785:1:1114:9907:23323 1:N:0: TATAGCACGC -TCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGG>FGGGGGGGGGGGGGGF>GGGGGGGGGGGGGFGFGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGFFFGGGGGGGGGGGFDFFGFGGGFGGFGGECCGGGFCGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1115:20594:2152 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTGCCAGGGCAGAGTCACGATTACC -+ -:FFGGG8F,@FGCFEFGG7B:5>,3D@EDE=AFGGCADFEFB9CFAD@G>$<==CEF<@=5$D835CCCCA@81DCF,E6,EEG -@HWI-M01378:140129:000000000-A7785:1:1115:22303:4248 1:N:0: TATAGCACGC -TGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGFGGGGGGGGGGGGGEFGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGDGFFFGGFGGDFGFFEFFFGGGGGGFGCFFFGGGG -@HWI-M01378:140129:000000000-A7785:1:1115:21004:5310 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GFGGGGGGGGGGGGGGFGGGGGFGGGGGDGGGGGFGGGGGGGGGGGFGGGGGGFGGGGGEGCE?FGGGCFGGGGGGGGGFCE9FGDFGGGCEGGGGGGFEFFCFG+AFGGCEFE1CFEGGG6CGFGC:FGFFGFGGGGE>ECC0FCCCGFGGFGGGGGGGFG@FEDGF=CGFFGFGGGGGGGGGGFFFDEBGEGGFGGGGGDFFFGFFDACDGEEFG -@HWI-M01378:140129:000000000-A7785:1:1115:3643:7099 1:N:0: TATAGCACGC -GGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -DGGGEFFFFGFDEEFGGGG>CFEEFGGGGGGEFEGGFFEGGFGGGGGFGGGGGGG5AFFE@GGG>DCGCFGGGGFGGGGFFFGGGGGGFG -@HWI-M01378:140129:000000000-A7785:1:1115:19291:10393 1:N:0: TATAGCACGC -AAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -?>ECFDDDFFGAFEFEGGFGGFFFFGFFFGGEEAAFFAEE>EFF5F;BCCGGGGGGGGGEFGGGGGGFFGEGFFGAGFADFFEGGGFEEEFEGECEFGFGFFGGFGGFF=FGGFFGGACFGGGGG?E?:GFDFGFFGGFFDEEDF;:@9E@F?>F>CFF -@HWI-M01378:140129:000000000-A7785:1:1115:22293:14738 1:N:0: TATAGCACGC -CTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCFGFGGGGGGGGGGGGGGGFEGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGFGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1115:3156:15238 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGF?GGGGG?GGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGFGGFFGGFFFGGGGGGGGGGGFEGGGGFGGGGGGGGGGFGFCGFFFFGGGGGGGGGGGGFGGGGGGFGGGGGGGGGFGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1115:27886:16559 1:N:0: TATAGCACGC -TGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGAFFGGGGGGGGGGGGGCFGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGFFFGGGFGFGGGGGEEGGGGFGFGFFGGFGGGGGF@FC>FEGGFFCGGFGDGGGGFFGEGGFFB$DEGG -@HWI-M01378:140129:000000000-A7785:1:1115:22345:18846 1:N:0: TATAGCACGC -TTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGFGGGCGGGGGGGGGGGGGGEGFGFGGGGGGEGFFGFGGGGGGGGGGEGFDFFCGDEGFFGGFGGFGGGGGGGGGGGGGGGFFDFCGG>FGGFBFGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1115:13309:19306 1:N:0: TATAGCACGC -CCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGFGGGGFGDFFF@FFEGGGGEGGGGGGGGFGGEFGFGGGGGGGGGGGGGFGGGGGFGFFGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1115:24515:20126 1:N:0: TATAGCACGC -TGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTAC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFGGEGGGGGGFGGGGGGGGGGGGGGGGGGGGFFFGGGFFGGGFFGGGGGGGDGGGGGGFFGGFGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1115:15717:20410 1:N:0: TATAGCACGC -AAGGCTTCTGGATGCACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTAGC -+ -GGGGGGGGGGFGGGGGGGGGGGGGGGGDGGGGGGGGGGGGFGGGDGGGGGGGGGGGGGGGFGGGGGFFGGFGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGCGGFGGFG/G -@HWI-M01378:140129:000000000-A7785:1:1115:20074:21744 1:N:0: TATAGCACGC -GCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGAGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -EBABFC:=>AFE?FGGGCF77CEGCF@GEGGGGFCFGGFGGG>GDFCFGGGGGFBAEDF>GEDDFD5??=::9BCGCCFFGFGGE=DF@:9:DGFD8EA/F@EGGEFF;ACEFDFDGGEDDAACEEGFFG?GGGGGFGGFGGFFEDCEGGFGGGGGGDFD=,GGGGFGFCFGFFGG -@HWI-M01378:140129:000000000-A7785:1:1116:21394:3317 1:N:0: TATAGCACGC -CAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -F?B8EEC?CFFFBAFGFG -@HWI-M01378:140129:000000000-A7785:1:1116:21781:3983 1:N:0: TATAGCACGC -ATGCATTGGGCGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGCEGGGGGGGGGGGGGGGGGGGGGGGEGFGGFGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGFGGGGGGGGGGGGGFGGGGGGFGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1116:19367:5061 1:N:0: TATAGCACGC -TACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGE>FGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGFGGFGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1116:22704:5419 1:N:0: TATAGCACGC -GCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GFGGGFEEFEEEGGFGFFEDEGGGFG>FGGGGGGGGFGGGGGGFCFFGGGGGGGEGGGGGGGGGGGGGGGCFGGBFGGGGFFGCFGFGG?GGGGGGGFFFFGGGG<1FFGGF:CB;CFCEGFGFCFEGGFGEFFGFDFFGFGBFDCCDGFDFEFCCFFGGGGFFEGGE=8>CGFFDGFGGG -@HWI-M01378:140129:000000000-A7785:1:1116:12883:11398 1:N:0: TATAGCACGC -AAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGEFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1116:4257:14374 1:N:0: TATAGCACGC -TATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGCFGGGGGG>:GGG?GGFGGGGGGCCGGGGGGGCFGFGFGFCFGFFFGGGCEFGGGGFFGDCFGGCGEFGGGGGGGGFEFGFGGFGGF@FGGGGGFFFGGGGGFFGGFFFGGG -@HWI-M01378:140129:000000000-A7785:1:1116:21249:16016 1:N:0: TATAGCACGC -GCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGG:FCC@EEEGFGGGGGGECCFGAFGFGGGFGFGGGGGGGGGGGGGEGGFGGFFFGGGGGGFGGFGGGGGGGGGGGFEEFGGGGGGFFFFFGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1116:26580:20568 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATGCACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -F@FFGGGGGGGGGGGGGGGGGGGGGGGGGGFFEFGGGFGGGFGFGGGGGGGEGGFGGGGGGGGGAF<5FCFGC<:CFCC6?GGFAFDFE8GGFFFGGGGDGGFGFFGFFFCDGGFDGGGFGG -@HWI-M01378:140129:000000000-A7785:1:1117:15050:1908 1:N:0: TATAGCACGC -TCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCAGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDFFGGGGGGGGGGGGGGGGGGGGGFGGGDGGGGFGGGGGGGGGGFGGGGGGGEGDGE@FGGGGGGGGGGGGGGGGGGGFCFCFGFDCFFGGGFGGFGCEGFDGGGGFGGGFGGGGFGGGGGGG=FFGGGGGEFGGGGGGFFGGGGGGGGGCFGGG -@HWI-M01378:140129:000000000-A7785:1:1117:15528:1981 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGFGGFFFGGFCFGGGDF@CEGGGG@FGGGDCFGGGFDDDAFGGGCEGGG8FFFC,EFFFFAF9FGGFGGGGD<5CDFA4FF@FGGGGC9ADFGDGGDGGGGE9ACEFCG+8CGG7+FECEGDEGCE@FFFCE6DD;>ECF9EFGGCEFGD?2FEFCFC?CEF?@@AF=C97A9GGGD==1DA@6,@,6,86D8F@37,,,F93DE,@,GFF8 -@HWI-M01378:140129:000000000-A7785:1:1117:10756:3719 1:N:0: TATAGCACGC -CAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGCGFGGGGGGFCGGGGFFFGGFGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGFGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1117:24534:4247 1:N:0: TATAGCACGC -GCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGFGGGGFFFGGGGGGG>GGCEGFCEGGGGFFCGGGGGGGGGGFGGC9CGGG=GGGGEFGGGGFGGFGGCGGGGGF::DFGEGGGD;CG.GG -@HWI-M01378:140129:000000000-A7785:1:1117:13251:7519 1:N:0: TATAGCACGC -CGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -CFCC7AC>FGBEFEFFFDFFC?CA6?BB@F@:E@E@<:7CEC9>GFCGFFGGFGGGFFGFFGGDGFEGFFDFDFGGFFFGEF<8FCFGGFD -@HWI-M01378:140129:000000000-A7785:1:1117:14612:8918 1:N:0: TATAGCACGC -TGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGFFFGGGGGGGGGGGGGGEGGGGGFFEFGGGGGG@DACFGGCFFGGFFGFFGDGGGGGGGGGFFGGGGGGGFFGGGGG -@HWI-M01378:140129:000000000-A7785:1:1117:2770:10016 1:N:0: TATAGCACGC -AGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GFGGG?GGFAFGGGGGGGGGDGDGGGGGGGGGGGGGGFGFFGGFGGGGFFGGGFGGGGGGGGGGGBECFGFGGGFGGFGGFGGFGGGGGGGFFGFGGGGDDGGGGGGGFEGGDGGFFGGGGGF -@HWI-M01378:140129:000000000-A7785:1:1117:7058:13477 1:N:0: TATAGCACGC -GCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGCAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDFGFGGGEEFGG;FFFFEGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGFCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGG -@HWI-M01378:140129:000000000-A7785:1:1117:20535:14960 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGDGGGGGGGFGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1117:12925:16162 1:N:0: TATAGCACGC -TATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -FFGGGGGGFGGGCGGFGGGGGGGGGGGGGGGFGGFGGEGGGGFGFGGGFGFGFFGCFGGGG2CFGGGGGGGGGGGGGGGGGGGFFFGGECGFFGGGGGGGFEFFGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:9968:1647 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGGGGATGGGATGGATCAACGATGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -G@FDFF@FFGGFGGGFGGGGGG@FEFGDFFFGGGDCFFGFFEFEGGGCCGGGED@FGDGGFEDCFG=?GG6;$7>C(31DF8FC9<7F859$FCCF8 -@HWI-M01378:140129:000000000-A7785:1:1118:9715:1754 1:N:0: TATAGCACGC -CCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -EGGGGGGGGFGGGGDEGGGGGGGGGFGGGGFGGGGGGGGGGGGGCGGFFDFGGFGGGFFCFFDGGFGGFEGGGGDFGFD8=GFCGGFECCGGG -@HWI-M01378:140129:000000000-A7785:1:1118:9533:1899 1:N:0: TATAGCACGC -TTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGE@CEGGCGGFGGFGGFFDGFFFGGFGFGFFGFGGGGGGGGCDGGGDGEGGGDCFGFGEGGGGGDFGFFGGG$:E@8EECC?FFGFFGEFFGGFGG?GGFGGGF -@HWI-M01378:140129:000000000-A7785:1:1118:8691:1931 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGFCFGFFGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGFGGFFGDFFGGGGGGGEECGCEFCFFEBAFGGGGGGGEGCCGGBFGGG;FGGCFFG?FEFBFCBC:;:EFGEGGFFGFGDF==8F2=CDFGGEFAFGGFGFCFGGGFFGGDGFDGFGGCGGGF -@HWI-M01378:140129:000000000-A7785:1:1118:23298:2242 1:N:0: TATAGCACGC -GGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGDEGCFFG?EEGGGGEECEGGFG=;GGFGGFDFFGDF@9=FFE?:7DFFFDFFGDGGGEDCC>=FCE -@HWI-M01378:140129:000000000-A7785:1:1118:23073:6508 1:N:0: TATAGCACGC -GCAAGGCTTCTGGATACACCTTCACTAGCTGTGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGG>GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGFGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGFGGG -@HWI-M01378:140129:000000000-A7785:1:1118:21171:9133 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAGTATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:18189:10068 1:N:0: TATAGCACGC -AAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGFGGGGGGGGGGGFGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:9717:10455 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGGTACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGDGGGGGGGGGGGGGFGGCGGGGGFGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGEFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGG -@HWI-M01378:140129:000000000-A7785:1:1118:6493:13149 1:N:0: TATAGCACGC -CAAGGCTTCTGGATACACCTTCGCTAGCTATGCTATGCATTGGGTGCGCCAGGCCCTCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:9182:16529 1:N:0: TATAGCACGC -AGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGFGGGGEGGGGGGGGGGGGGGGGGCFFF?FGGGFGGGGGGGGGGGGGGGFGFGGGGGGGGGDFGFFCDGGFFFGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:19019:20700 1:N:0: TATAGCACGC -TGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGEFFGCGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:24760:20968 1:N:0: AATAGCACGC -GCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -G,FGGGGGGEFFCC?1EFFGGFGDCFGGGCGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGEGGGGFGGGGGGGGFFFFFFFGFGGGFGCEGFGGGGGDGGFGGFGFCGGFGFDGGGGGFCEGFGFGDCGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1118:12797:21177 1:N:0: TATAGCACGC -GCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAGCACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGFAFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGGGGGGGGGGGGGGFGGGGGGFGGGGGGGGGGGGGGGGGFGFEFGGGGGGGFGGFGGFGGGGGFGEGGFFGGGGGFDGFEGGGFGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1119:12200:9232 1:N:0: TATAGCACGC -TGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCGTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGFGGGGGGGGGGGGGGG?GGGFGFGGGGGGGGGGGGGGGGGFGGGGDGGGGFGFFGG+FGFGFFGGGGGGGGGGFDGGGGG:CGGGGGFFFFGGFGGGGGGCFFCFFGGGGGGFGGGGGFGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1119:25522:9543 1:N:0: TATAGCACGC -CCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCAGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTATC -+ -GGGGGGGGGGGGGGGGGGGGFCFGGGGGGGG>FGGGGGGGFFGGGGGFGGGGGEGGGGGGGGFFFGFFGGGGGGEG.FGFE@FBEFGGFGGGGGGGGDFFFGFFGFEGGFG9>FDAEFFGCGGF>FECF$D -@HWI-M01378:140129:000000000-A7785:1:1119:25841:13619 1:N:0: TATAGCACGC -CCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTAC -+ -GGGGGGDFGGGGGGGGGGGGGGGGDGGGFFGCFDFGGGGGGGGGGGGFGGFGGGGFGGFCEGGGGGGFGGGCDD?8F@B@AGFDB=GGGFFF> -@HWI-M01378:140129:000000000-A7785:1:1119:20076:14454 1:N:0: TATAGCACGC -GCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1119:5209:16156 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGG?GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGFGGGGGGGGGGFGGGGGGGGGGGGFGGGGGGGFGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1119:21229:17686 1:N:0: TATAGCACGC -GGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGDGGGGGGFEGGGGGGGGGGGGGGGGGFFGFGGFGEGGCFGGCGGGGGC4GFCGF@4DCCFFFGFGGGGGGGGGGGFFFGGFGGFECEFGGG -@HWI-M01378:140129:000000000-A7785:1:1119:6516:18986 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFFGGGGGGGGGFGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:1119:11518:19811 1:N:0: TATAGCACGC -CTCCCAGGTCCAGCTTGTGCAGTCTGGGGCTGAGGTGAAGAAGCCTGGGGCCTCAGTGAAGGTTTCCTGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATTTTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGDAFFFCGFDD,<=CF@,8??F,,CEFFGFB8ADGGEGGEEC?=+6++@C+5*3DD6@@@FGC@B>FD9:>;FFFGC?FEEF@<7GFFE15;C@@GGGGGGGGGGGDGGGGGDFA:EEFCFCDEDDFCGE9BFGGGGGG<=@FGGFGEGGGGGGGD8FFA9GGFGFGGFGGFFFF -@HWI-M01378:140129:000000000-A7785:1:2101:21110:9989 1:N:0: TATAGCACGC -GGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -CGGGGGGGGGGGGGGGGGGE>GGGGGGGGGGGFGGFDCEFFGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGFGFCFFGFFGGGFGGFFGGGFF?FFFGGGGGDFGFG -@HWI-M01378:140129:000000000-A7785:1:2101:25521:14328 1:N:0: TATAGCACGC -GCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGDGGGGGGGGGGGGGGGGFGDAFFGGG9FCFFGGGGGGGFGFDCFGFGGGGGFGGGGGGGFGGGGGGGGGGGGGGFGGGGGGGFFDD;DGGGFEBGGG -@HWI-M01378:140129:000000000-A7785:1:2101:6147:17939 1:N:0: TATAGTACGC -GGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -FGGFG>GGGEGGGGGGGGG7:EFFFFC4BGFF;A>@5;FF?34EGGGGGGD6?<=170CC;?GFBGGGDGGFCFA9@FEFC=@GGGCGFFD8FFCGEDDAGDC>@CE -@HWI-M01378:140129:000000000-A7785:1:2101:7510:19246 1:N:0: TATAGCACGC -CCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGG@CFGGGGFGFG5GGGGDFGGGFGGG>CFFGGGCF+DD=:EF?EGGGGGACGDCF:FDC@AFF?@F4;CFGGGGGGA?FEGEGGFD9DFGGG -@HWI-M01378:140129:000000000-A7785:1:2101:13482:19637 1:N:0: TATAGCACGC -GCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -FGGG?GGGGGGGGGGBFFEF6'B%:5GEADDC?CFFCFFGAFGFFFDGGFECCFGGFGGGCFC@:DCECCFFGFD>?B9.E>FGGF -@HWI-M01378:140129:000000000-A7785:1:2102:23669:4942 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGDGGGGGGFGFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGEGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGFGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:2102:18023:6868 1:N:0: TATAGCACGC -TGGGTGCGCCAGGCCTCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGFFGG=FGFGGGGGGGGGG>GGGFGFFGGGGGGGGGGGGFFFGGGGGGGGGGGGGGFGGFGGGGGGGGGEGFGGEBEGFEFGGGG -@HWI-M01378:140129:000000000-A7785:1:2102:20537:10795 1:N:0: TATAGCACGC -AAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFGGGFGGGGGGGGGGGGGGGGGGGGGGFFGFGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:2102:11278:14783 1:N:0: TATAGCACGC -TGCAAGGCTTCTGGATACACCTTCACTAGCTATGCTATGCATTGGGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGACAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG -@HWI-M01378:140129:000000000-A7785:1:2102:15247:16145 1:N:0: TATAGCACGC -GGTGCGCCAGGCCCCCGGACAAAGGCTTGAGTGGATGGGATGGATCAACGCTGGCAATGGTAACACAAAATATTCACAGAAGTTCCAGGGCAGAGTCACCATTACC -+ -GGGGGGGGGC?FGFGFFCGEGGGGGGFGGGGFGGGG>GFGGGGGGGGGFD?EGDGGF=FFFEFGGFGFE=GF?=@;GFFGGGGFFDGGGGEFFF6,?GGFCFGGGG diff --git a/clipper/t/out/join/test-ov-b.out b/clipper/t/out/join/test-ov-b.out deleted file mode 100644 index cbc95d4..0000000 --- a/clipper/t/out/join/test-ov-b.out +++ /dev/null @@ -1,5 +0,0 @@ -Total reads: 100 -Total joined: 93 -Average join len: 136.75 -Stdev join len: 35.91 -Version: 1.01.759 diff --git a/clipper/t/out/join/test-phred.join b/clipper/t/out/join/test-phred.join deleted file mode 100644 index c3c3f14..0000000 --- a/clipper/t/out/join/test-phred.join +++ /dev/null @@ -1,4 +0,0 @@ -@M00517:196:000000000-A7GT8:1:1101:15158:1438 1:N:0:0 -TACGTAGGTCCCGAGCGTTGTCCGGATTTATTGGGCGTAAAGCGAGCGCAGGCGGTTAGATAAGTCTGAAGTTAAAGGCTGTGGCTTAACCATAGTACGCTTTGGAAACTGTTTAACTTGAGTGCAAGAGGGGAGAGTGGAATTCCATGTGTAGCGGTGAAATGCGTAGATATATGGAGGAACACCGGTGGCGAAAGCGGCTCTCTGGGTTGTAACTGACGCTGAGGCTCGAAAGCGTGGGGAGCAAACAGG -+ -BBBBBFFBFFFFGGGGGGGGGGHGGGGGHHHHGHHHGGGGHHBFCEGGGGGGGGGGGGHHFGGHHGHGBFDGFFHHHHHHHHHHFBGGHHHHHHBHBFD?/?HGFCDGC2F>$GGHHGFHHHHFGF8FHGHHHHHG1HHHHHHHGG3DGFGGGGGHHHF4GGGEFHFHHHGFB41HGHHHEGEFEEHEGGEEFFB0EEAA1FHHGFEB35HHHHHGGEGEGBHHGEAAABFGFEECAGGGFFFDB5FAABA> diff --git a/clipper/t/out/join/test-phred.out b/clipper/t/out/join/test-phred.out deleted file mode 100644 index bf7dccf..0000000 --- a/clipper/t/out/join/test-phred.out +++ /dev/null @@ -1,5 +0,0 @@ -Total reads: 1 -Total joined: 1 -Average join len: 50.00 -Stdev join len: -nan -Version: 1.01.759 diff --git a/clipper/t/out/mcf/test1.err b/clipper/t/out/mcf/test1.err deleted file mode 100644 index d5fb6d5..0000000 --- a/clipper/t/out/mcf/test1.err +++ /dev/null @@ -1,10 +0,0 @@ -Command Line: -l 15 in/mcf/test.fa in/mcf/test1.fq -Scale used: 2.2 -Phred: 64 -Threshold used: 1 out of 8 -Adapter clip me (AGTCCCGTAC): counted 2 at the 'end' of 'in/mcf/test1.fq', clip set to 1 -Files: 1 -Total reads: 8 -Too short after clip: 0 -Clipped 'end' reads: Count: 5, Mean: 6.80, Sd: 5.07 -Trimmed 5 reads by an average of 1.00 bases on quality < 7 diff --git a/clipper/t/out/mcf/test1.out b/clipper/t/out/mcf/test1.out deleted file mode 100644 index dede413..0000000 --- a/clipper/t/out/mcf/test1.out +++ /dev/null @@ -1,32 +0,0 @@ -@1 CLIP IS AGTCCCGTAC AT END -ATATGCTACGTTTGTGACCT -+ -hhhhh]]hhhhhhhhhhhhh -@2 CLIP AGTCCCGTAC + AAAA's -ATGTTCGTATATGAGC -+ -hhbhh^^hhhhhhhhh -@3 CLIP JUST AGTCC if nmin >= 5 -TATAGCCTCTAGCTTGACTCTAGCT -+ -hhhh]]hhhhhhhhhhhhh]hhfff -@4 CLIP AG at end if nmin >= 2 -ATCTATCTTAGTCATCTTATCTACTATC -+ -hhhhhdchhhhhhhhhhh]hhfggfaab -@5 CLIP AGT at END if nmin >= 3 -ATATACTTATCTACTTATCTATCTTAA -+ -hhhhh]bhddhhhhhhhhhh]hhffff -@6 CLIP NOTHING, even though some at front, because mismatch pct too high -AGTCCTTGGTCTTATCTACTTATCTATCT -+ -hhhhh]bhddhhhhhhhhhh]hhffffga -@7 CLIP WHOLE SEQENCE -AGTCCATTACCTTATCTACTTATCTATCT -+ -hhhhh]bhddhhhhhhhhhh]hhffffga -@8 CLIP HOMOPOLYMER -AAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+ -hhhhh]bhddhhhhhhhhhh]hhffffga diff --git a/clipper/t/out/mcf/test2.err b/clipper/t/out/mcf/test2.err deleted file mode 100644 index 6eafaab..0000000 --- a/clipper/t/out/mcf/test2.err +++ /dev/null @@ -1,62 +0,0 @@ -Command Line: -l 15 in/mcf/test.fa in/mcf/test2.fq -Scale used: 2.2 -Invalid FASTQ format : in/mcf/test2.fq -Phred: 33 -Warning, corrupt quality for sequence: @SQ SN:chr14 LN:125194864 -Warning, corrupt quality for sequence: @SQ SN:chrM LN:16299 -Threshold used: 1 out of 4 -No adapters found, no skewing detected, and no trimming needed. -Files: 1 -Malformed fastq record (no '+' for comment) at line 1 -Malformed fastq record (no '+' for comment) at line 3 -Malformed fastq record (no '+' for comment) at line 5 -Malformed fastq record (length mismatch) at line 7 -Malformed fastq record (no '+' for comment) at line 9 -Malformed fastq record (length mismatch) at line 11 -Malformed fastq record (length mismatch) at line 13 -Malformed fastq record (length mismatch) at line 15 -Malformed fastq record (length mismatch) at line 17 -Malformed fastq record (length mismatch) at line 19 -Malformed fastq record (length mismatch) at line 21 -Malformed fastq record (length mismatch) at line 23 -Malformed fastq record (length mismatch) at line 25 -Malformed fastq record (length mismatch) at line 27 -Malformed fastq record (length mismatch) at line 29 -Malformed fastq record (length mismatch) at line 31 -Malformed fastq record (length mismatch) at line 33 -Malformed fastq record (length mismatch) at line 35 -Malformed fastq record (length mismatch) at line 37 -Malformed fastq record (length mismatch) at line 39 -Malformed fastq record (length mismatch) at line 41 -Malformed fastq record (length mismatch) at line 43 -Malformed fastq record (length mismatch) at line 45 -Malformed fastq record (length mismatch) at line 47 -Malformed fastq record (length mismatch) at line 49 -Malformed fastq record (length mismatch) at line 51 -Malformed fastq record (length mismatch) at line 53 -Malformed fastq record (no '@' for id) at line 55 -Malformed fastq record (length mismatch) at line 57 -Malformed fastq record (length mismatch) at line 59 -Malformed fastq record (length mismatch) at line 61 -Malformed fastq record (no '@' for id) at line 63 -Malformed fastq record (length mismatch) at line 65 -Malformed fastq record (length mismatch) at line 67 -Malformed fastq record (length mismatch) at line 69 -Malformed fastq record (length mismatch) at line 71 -Malformed fastq record (length mismatch) at line 73 -Malformed fastq record (length mismatch) at line 75 -Malformed fastq record (length mismatch) at line 77 -Malformed fastq record (length mismatch) at line 79 -Malformed fastq record (length mismatch) at line 81 -Malformed fastq record (length mismatch) at line 83 -Malformed fastq record (length mismatch) at line 85 -Malformed fastq record (no '@' for id) at line 87 -Malformed fastq record (length mismatch) at line 89 -Malformed fastq record (length mismatch) at line 91 -Malformed fastq record (length mismatch) at line 93 -Malformed fastq record (length mismatch) at line 95 -Malformed fastq record (length mismatch) at line 97 -Malformed fastq record (length mismatch) at line 99 -Total reads: 50 -Too short after clip: 0 -Errors (in/mcf/test2.fq): 50 diff --git a/clipper/t/out/mcf/test2.out b/clipper/t/out/mcf/test2.out deleted file mode 100644 index e69de29..0000000 diff --git a/clipper/t/out/mcf/test3.err b/clipper/t/out/mcf/test3.err deleted file mode 100644 index ebbbb05..0000000 --- a/clipper/t/out/mcf/test3.err +++ /dev/null @@ -1,10 +0,0 @@ -Command Line: -l 15 in/mcf/test.fa in/mcf/test1.fq -o #TMPDIR#/test3.out -Scale used: 2.2 -Phred: 64 -Threshold used: 1 out of 8 -Adapter clip me (AGTCCCGTAC): counted 2 at the 'end' of 'in/mcf/test1.fq', clip set to 1 -Files: 1 -Total reads: 8 -Too short after clip: 0 -Clipped 'end' reads: Count: 5, Mean: 6.80, Sd: 5.07 -Trimmed 5 reads by an average of 1.00 bases on quality < 7 diff --git a/clipper/t/out/mcf/test3.out b/clipper/t/out/mcf/test3.out deleted file mode 100644 index dede413..0000000 --- a/clipper/t/out/mcf/test3.out +++ /dev/null @@ -1,32 +0,0 @@ -@1 CLIP IS AGTCCCGTAC AT END -ATATGCTACGTTTGTGACCT -+ -hhhhh]]hhhhhhhhhhhhh -@2 CLIP AGTCCCGTAC + AAAA's -ATGTTCGTATATGAGC -+ -hhbhh^^hhhhhhhhh -@3 CLIP JUST AGTCC if nmin >= 5 -TATAGCCTCTAGCTTGACTCTAGCT -+ -hhhh]]hhhhhhhhhhhhh]hhfff -@4 CLIP AG at end if nmin >= 2 -ATCTATCTTAGTCATCTTATCTACTATC -+ -hhhhhdchhhhhhhhhhh]hhfggfaab -@5 CLIP AGT at END if nmin >= 3 -ATATACTTATCTACTTATCTATCTTAA -+ -hhhhh]bhddhhhhhhhhhh]hhffff -@6 CLIP NOTHING, even though some at front, because mismatch pct too high -AGTCCTTGGTCTTATCTACTTATCTATCT -+ -hhhhh]bhddhhhhhhhhhh]hhffffga -@7 CLIP WHOLE SEQENCE -AGTCCATTACCTTATCTACTTATCTATCT -+ -hhhhh]bhddhhhhhhhhhh]hhffffga -@8 CLIP HOMOPOLYMER -AAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+ -hhhhh]bhddhhhhhhhhhh]hhffffga diff --git a/clipper/t/out/mcf/test4.err b/clipper/t/out/mcf/test4.err deleted file mode 100644 index f88916e..0000000 --- a/clipper/t/out/mcf/test4.err +++ /dev/null @@ -1,9 +0,0 @@ -Command Line: -l 15 -L72 -f in/mcf/test.fa in/mcf/test4.fq1 in/mcf/test4.fq2 -o #TMPDIR#/test4.out1 -o #TMPDIR#/test4.out2 -Scale used: 2.2 -Phred: 64 -Threshold used: 1 out of 1 -Files: 2 -Total reads: 1 -Too short after clip: 0 -Trimmed 1 reads (in/mcf/test4.fq1) by an average of 21.00 bases on quality < 7 -Trimmed 1 reads (in/mcf/test4.fq2) by an average of 8.00 bases on quality < 7 diff --git a/clipper/t/out/mcf/test4.out1 b/clipper/t/out/mcf/test4.out1 deleted file mode 100644 index 25e2a01..0000000 --- a/clipper/t/out/mcf/test4.out1 +++ /dev/null @@ -1,4 +0,0 @@ -@EA-GAII-02:7:1:19703:1174#0/1 -ATGATGATGATGATGTTGTGCCCACCACTCCAAGACAGTG -+ -gg]cdggggggfggcffafdgggg_ggfffggfgggdf[c diff --git a/clipper/t/out/mcf/test4.out2 b/clipper/t/out/mcf/test4.out2 deleted file mode 100644 index 784682a..0000000 --- a/clipper/t/out/mcf/test4.out2 +++ /dev/null @@ -1,4 +0,0 @@ -@EA-GAII-02:7:1:19703:1174#0/3 -ATGATGATGATGATATGTGATGATGATGATGTGATGATGATGATGAGTGTGATGATGTGTGTGTGTGT -+ -hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh diff --git a/clipper/t/out/mcf/test5.err b/clipper/t/out/mcf/test5.err deleted file mode 100644 index 36a27ce..0000000 --- a/clipper/t/out/mcf/test5.err +++ /dev/null @@ -1,11 +0,0 @@ -Command Line: -l 15 -H in/mcf/test.fa in/mcf/test1.fq -S -o #TMPDIR#/test5.out -Scale used: 2.2 -Phred: 64 -Threshold used: 1 out of 8 -Adapter clip me (AGTCCCGTAC): counted 2 at the 'end' of 'in/mcf/test1.fq', clip set to 1 -Files: 1 -Total reads: 8 -Too short after clip: 0 -Filtered on hompolymer: 1 -Clipped 'end' reads: Count: 5, Mean: 6.80, Sd: 5.07 -Trimmed 5 reads by an average of 1.00 bases on quality < 7 diff --git a/clipper/t/out/mcf/test5.out b/clipper/t/out/mcf/test5.out deleted file mode 100644 index 2b14278..0000000 --- a/clipper/t/out/mcf/test5.out +++ /dev/null @@ -1,28 +0,0 @@ -@1 CLIP IS AGTCCCGTAC AT END -ATATGCTACGTTTGTGACCT -+ -hhhhh]]hhhhhhhhhhhhh -@2 CLIP AGTCCCGTAC + AAAA's -ATGTTCGTATATGAGC -+ -hhbhh^^hhhhhhhhh -@3 CLIP JUST AGTCC if nmin >= 5 -TATAGCCTCTAGCTTGACTCTAGCT -+ -hhhh]]hhhhhhhhhhhhh]hhfff -@4 CLIP AG at end if nmin >= 2 -ATCTATCTTAGTCATCTTATCTACTATC -+ -hhhhhdchhhhhhhhhhh]hhfggfaab -@5 CLIP AGT at END if nmin >= 3 -ATATACTTATCTACTTATCTATCTTAA -+ -hhhhh]bhddhhhhhhhhhh]hhffff -@6 CLIP NOTHING, even though some at front, because mismatch pct too high -AGTCCTTGGTCTTATCTACTTATCTATCT -+ -hhhhh]bhddhhhhhhhhhh]hhffffga -@7 CLIP WHOLE SEQENCE -AGTCCATTACCTTATCTACTTATCTATCT -+ -hhhhh]bhddhhhhhhhhhh]hhffffga diff --git a/clipper/t/out/mcf/test6.err b/clipper/t/out/mcf/test6.err deleted file mode 100644 index a893606..0000000 --- a/clipper/t/out/mcf/test6.err +++ /dev/null @@ -1,10 +0,0 @@ -Command Line: -l 15 in/mcf/test.fa in/mcf/test1.fq -o #TMPDIR#/test6.out.gz -Scale used: 2.2 -Phred: 64 -Threshold used: 1 out of 8 -Adapter clip me (AGTCCCGTAC): counted 2 at the 'end' of 'in/mcf/test1.fq', clip set to 1 -Files: 1 -Total reads: 8 -Too short after clip: 0 -Clipped 'end' reads: Count: 5, Mean: 6.80, Sd: 5.07 -Trimmed 5 reads by an average of 1.00 bases on quality < 7 diff --git a/clipper/t/out/mcf/test6.out.gz b/clipper/t/out/mcf/test6.out.gz deleted file mode 100644 index ae9d08f..0000000 Binary files a/clipper/t/out/mcf/test6.out.gz and /dev/null differ diff --git a/clipper/t/out/mcf/test7.err b/clipper/t/out/mcf/test7.err deleted file mode 100644 index e7e9af8..0000000 --- a/clipper/t/out/mcf/test7.err +++ /dev/null @@ -1,9 +0,0 @@ -Command Line: -0 -D 20 n/a in/mcf/test-mcf-dup.fq -o #TMPDIR#/test7.out -Scale used: 2.2 -Phred: 64 -Threshold used: 1 out of 6 -No adapters found. -Files: 1 -Total reads: 6 -Too short after clip: 0 -Filtered on duplicates: 2 diff --git a/clipper/t/out/mcf/test7.out b/clipper/t/out/mcf/test7.out deleted file mode 100644 index fb9c675..0000000 --- a/clipper/t/out/mcf/test7.out +++ /dev/null @@ -1,16 +0,0 @@ -@1 READ A -ATATGCTACGTTTGTGACCTAGTCCCGTAC -+ -hhhhh]]hhhhhhhhhhhhhhhhhhhhhhh -@3 READB -TATAGCCTCTAGCTTGACTCTAGCTAGTCC -+ -hhhhh]]hhhhhhhhhhhhhhhhhhhhhhh -@4 NOTDUPREADB = OFFBY1 -TATAGACTCTAGCTTGACTCTAGCTAGTCC -+ -hhhhh]]hhhhhhhhhhhhhhhhhhhhhhh -@4 NOTDUPREADC = OFFBY3 -TACAGCCTCTAGCGTGACTCTAGCCAGTCC -+ -hhhhh]]hhhhhhhhhhhhhhhhhhhhhhh diff --git a/clipper/t/out/mcf/test8.err b/clipper/t/out/mcf/test8.err deleted file mode 100644 index e69de29..0000000 diff --git a/clipper/t/out/mcf/test8.out b/clipper/t/out/mcf/test8.out deleted file mode 100644 index 4276641..0000000 --- a/clipper/t/out/mcf/test8.out +++ /dev/null @@ -1,8 +0,0 @@ -Command Line: n/a in/mcf/count.fq -Scale used: 2.2 -Phred: 33 -Threshold used: 1 out of 1 -Files: 1 -Total reads: 1 -Too short after clip: 1 -Trimmed 1 reads by an average of 60.00 bases on quality < 7 diff --git a/clipper/t/out/mcf/test9.err b/clipper/t/out/mcf/test9.err deleted file mode 100644 index 68d6174..0000000 --- a/clipper/t/out/mcf/test9.err +++ /dev/null @@ -1,9 +0,0 @@ -Command Line: in/mcf/adap.fa in/mcf/test5.fq -Scale used: 2.2 -Phred: 64 -Threshold used: 1 out of 4 -Adapter 3p_for_test (CATGATTGATGGTGCCTACAG): counted 4 at the 'start' of 'in/mcf/test5.fq', clip set to 1 -Files: 1 -Total reads: 4 -Too short after clip: 0 -Clipped 'start' reads: Count: 4, Mean: 21.00, Sd: 0.00 diff --git a/clipper/t/out/mcf/test9.out b/clipper/t/out/mcf/test9.out deleted file mode 100644 index 853d17a..0000000 --- a/clipper/t/out/mcf/test9.out +++ /dev/null @@ -1,16 +0,0 @@ -@1 -ATCAGCTAGGCATCGATATATCGATCGGCTAGAGATATACGATCGAT -+ -hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh -@2 -ATCAGCTAGGCATCGATATATCGATCGGCTAGAGATATACGATCGAG -+ -hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh -@3 -ATCAGCTAGGCATCGATATATCGATCGGCTAGAGATATACGATCGAG -+ -hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh -@4 -ATCAGCTAGGCATCGATATATCGATCGGCTAGAGATATACGATCGAC -+ -hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh diff --git a/clipper/t/out/multx/test1.err b/clipper/t/out/multx/test1.err deleted file mode 100644 index 7ceb0e1..0000000 --- a/clipper/t/out/multx/test1.err +++ /dev/null @@ -1,5 +0,0 @@ -Using Barcode Group: TruSeq on File: in/multx/mxtest_2.fastq (start), Threshold 0.00% -Using Barcode LB2 (CGATGT) -Using Barcode LB4 (TGACCA) -Using Barcode LB5 (ACAGTG) -Using Barcode LB6 (GCCAAT) diff --git a/clipper/t/out/multx/test1.out b/clipper/t/out/multx/test1.out deleted file mode 100644 index 20c5166..0000000 --- a/clipper/t/out/multx/test1.out +++ /dev/null @@ -1,7 +0,0 @@ -Id Count File(s) -LB2 75 #TMPDIR#/mxout_LB2_1.fq #TMPDIR#/mxout_LB2_2.fq -LB4 57 #TMPDIR#/mxout_LB4_1.fq #TMPDIR#/mxout_LB4_2.fq -LB5 60 #TMPDIR#/mxout_LB5_1.fq #TMPDIR#/mxout_LB5_2.fq -LB6 51 #TMPDIR#/mxout_LB6_1.fq #TMPDIR#/mxout_LB6_2.fq -unmatched 7 #TMPDIR#/mxout_unmatched_1.fq #TMPDIR#/mxout_unmatched_2.fq -total 250 diff --git a/clipper/t/out/multx/test2.err b/clipper/t/out/multx/test2.err deleted file mode 100644 index 7ceb0e1..0000000 --- a/clipper/t/out/multx/test2.err +++ /dev/null @@ -1,5 +0,0 @@ -Using Barcode Group: TruSeq on File: in/multx/mxtest_2.fastq (start), Threshold 0.00% -Using Barcode LB2 (CGATGT) -Using Barcode LB4 (TGACCA) -Using Barcode LB5 (ACAGTG) -Using Barcode LB6 (GCCAAT) diff --git a/clipper/t/out/multx/test2.out b/clipper/t/out/multx/test2.out deleted file mode 100644 index e47972c..0000000 --- a/clipper/t/out/multx/test2.out +++ /dev/null @@ -1,7 +0,0 @@ -Id Count File(s) -LB2 75 #TMPDIR#/mxout_LB2_1.fq.gz #TMPDIR#/mxout_LB2_2.fq.gz -LB4 57 #TMPDIR#/mxout_LB4_1.fq.gz #TMPDIR#/mxout_LB4_2.fq.gz -LB5 60 #TMPDIR#/mxout_LB5_1.fq.gz #TMPDIR#/mxout_LB5_2.fq.gz -LB6 51 #TMPDIR#/mxout_LB6_1.fq.gz #TMPDIR#/mxout_LB6_2.fq.gz -unmatched 7 #TMPDIR#/mxout_unmatched_1.fq.gz #TMPDIR#/mxout_unmatched_2.fq.gz -total 250 diff --git a/clipper/t/out/multx/test3.err b/clipper/t/out/multx/test3.err deleted file mode 100644 index fd3014e..0000000 --- a/clipper/t/out/multx/test3.err +++ /dev/null @@ -1,2 +0,0 @@ -Barcode length used: 7 (start) -Threshold used: 1 diff --git a/clipper/t/out/multx/test3.out b/clipper/t/out/multx/test3.out deleted file mode 100644 index 815d6a7..0000000 --- a/clipper/t/out/multx/test3.out +++ /dev/null @@ -1,7 +0,0 @@ -Id Count File(s) -ACAGTGA 60 #TMPDIR#/mxout_ACAGTGA_1.fq #TMPDIR#/mxout_ACAGTGA_2.fq -CGATGTA 73 #TMPDIR#/mxout_CGATGTA_1.fq #TMPDIR#/mxout_CGATGTA_2.fq -TGACCAA 56 #TMPDIR#/mxout_TGACCAA_1.fq #TMPDIR#/mxout_TGACCAA_2.fq -GCCAATA 49 #TMPDIR#/mxout_GCCAATA_1.fq #TMPDIR#/mxout_GCCAATA_2.fq -unmatched 12 #TMPDIR#/mxout_unmatched_1.fq #TMPDIR#/mxout_unmatched_2.fq -total 250 diff --git a/clipper/t/out/multx/test4.err b/clipper/t/out/multx/test4.err deleted file mode 100644 index d8c952f..0000000 --- a/clipper/t/out/multx/test4.err +++ /dev/null @@ -1,5 +0,0 @@ -Using Barcode Group: TruSeq on File: in/multx/mxtest-h_1.fastq (start), Threshold 0.00% -Using Barcode LB2 (CGATGT) -Using Barcode LB4 (TGACCA) -Using Barcode LB5 (ACAGTG) -Using Barcode LB6 (GCCAAT) diff --git a/clipper/t/out/multx/test4.out b/clipper/t/out/multx/test4.out deleted file mode 100644 index 20c5166..0000000 --- a/clipper/t/out/multx/test4.out +++ /dev/null @@ -1,7 +0,0 @@ -Id Count File(s) -LB2 75 #TMPDIR#/mxout_LB2_1.fq #TMPDIR#/mxout_LB2_2.fq -LB4 57 #TMPDIR#/mxout_LB4_1.fq #TMPDIR#/mxout_LB4_2.fq -LB5 60 #TMPDIR#/mxout_LB5_1.fq #TMPDIR#/mxout_LB5_2.fq -LB6 51 #TMPDIR#/mxout_LB6_1.fq #TMPDIR#/mxout_LB6_2.fq -unmatched 7 #TMPDIR#/mxout_unmatched_1.fq #TMPDIR#/mxout_unmatched_2.fq -total 250 diff --git a/clipper/t/test-prep.pl b/clipper/t/test-prep.pl deleted file mode 100644 index d693d66..0000000 --- a/clipper/t/test-prep.pl +++ /dev/null @@ -1,79 +0,0 @@ -use strict; -use Test::More; - -# core modules only! -use File::Basename qw(dirname basename); -use File::Compare; -use File::Path; -use File::Spec; -use File::Temp; - -use strict; - -our $COPY_OK=0; - -use Getopt::Long qw(:config pass_through no_ignore_case); - -GetOptions("X"=>\$COPY_OK); - -my $testdir = dirname(__FILE__); - -chdir($testdir) || die("$testdir : $!\n"); - -my $tempbase = "tmp"; - -mkdir($tempbase); - -my $template = basename($0) . ".XXXXX"; - -# exported -our $BINDIR = ".."; -our $TMPDIR=File::Temp::tempdir($template, CLEANUP=>0, DIR=>$tempbase); -our $INDIR="in/" . basename($0); $INDIR =~ s/\.t$//; -our $OUTDIR="out/" . basename($0); $OUTDIR =~ s/\.t$//; - -sub check_output { - my ($arr) = @_; - for my $f (@$arr) { - my $o = File::Spec->catfile($OUTDIR,basename($f)); - my $c1 = ($f =~ /.gz$/ ? "gunzip -c '$f'" : "cat '$f'") . "|perl -pe 's/\Q$TMPDIR\E/#TMPDIR#/g' |"; - if ($COPY_OK) { - my $cp = "$c1 " . ( $f =~ /.gz$/ ? "gzip -c" : "cat" ) . " > '$o'"; - system($cp); - } - my ($i1, $i2); - my $c2 = ($o =~ /.gz$/ ? "gunzip -c '$o'" : "cat '$o'") . "|perl -pe 's/\Q$TMPDIR\E/#TMPDIR#/g' |"; - open $i1, $c1; - open $i2, $c2; - ok(compare($i1, $i2) == 0, "Files equal: $f == $o"); - } -} - -sub run { - my ($cmd) = @_; - my @o = $cmd =~ m/[#%]o:(\S+)/g; - - chomp $cmd; - - $cmd =~ s/%o:(\S+)/$1/g; - -# warn "# $cmd\n"; - - my $exit = system($cmd); - - if ($exit >> 8) { - $exit = $exit >> 8; - } - - return $exit, $cmd, [@o]; -} - -END { - if (Test::More->builder->is_passing() && !$?) { - warn "# removing $TMPDIR\n"; - File::Path::rmtree($TMPDIR); - } -} - - -1; diff --git a/clipper/testchrdex-speed.pl b/clipper/testchrdex-speed.pl deleted file mode 100644 index 9903c8c..0000000 --- a/clipper/testchrdex-speed.pl +++ /dev/null @@ -1,18 +0,0 @@ -use Benchmark qw(:all); - -BEGIN { - @INC = ('.', @INC); -} - -use Chrdex; - -$x = Chrdex->new("chrdexannot.txt", chr=>2, beg=>5, end=>6, skip=>1); -$r = Chrdex->new("chrdexannot.txt", chr=>2, beg=>5, end=>6, skip=>1, index_path=>"chrdexbyref", byref=>1); - -cmpthese( -1, { - ram =>sub{$x->query(1, 869395)}, - ram_range =>sub{$x->query(1, 869395, 869936)}, - ref =>sub{$r->query(1, 869395)}, - ref_range =>sub{$r->query(1, 869395, 869936)}, - } -); diff --git a/clipper/testchrdex.pl b/clipper/testchrdex.pl deleted file mode 100644 index a5bb0dd..0000000 --- a/clipper/testchrdex.pl +++ /dev/null @@ -1,22 +0,0 @@ -BEGIN { - @INC = ('.', @INC); -} - -use Chrdex; -use Data::Dumper; - -#$x = Chrdex->new("chrdexannot.txt", chr=>2, beg=>5, end=>6, skip=>1); -#for ($i=0;$i<10000;++$i) { -# $x->search(1, 153432255); -#} - -my $ct=Chrdex->new("/mnt/scratch/indexes/Annotations/cytoBand.txt", force=>1); -print Dumper($ct->query(1, 8601118)); - -$x = Chrdex->new("chrdexannot.txt", chr=>2, beg=>5, end=>6, skip=>1); -print "---l1:\n"; -print $x->search(1, 851184), "\n"; -print "---l2:\n"; -print $x->search(1, 869395), "\n"; -print "---l2-3:\n"; -print $x->search(1, 869395, 869936), "\n"; diff --git a/clipper/testsuf.pl b/clipper/testsuf.pl deleted file mode 100644 index 794b8f7..0000000 --- a/clipper/testsuf.pl +++ /dev/null @@ -1,11 +0,0 @@ -use Tree::Suffix; - -$tree = Tree::Suffix->new; - -$tree->insert("apple\t32", "banana\t45", "appley\t38"); - -@pos = $tree->find("appl"); - -for (@pos) { - print "pos: $_\n" -} diff --git a/clipper/tidx/Makefile b/clipper/tidx/Makefile deleted file mode 100644 index 5abde2a..0000000 --- a/clipper/tidx/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# set these if you want to override - -PREFIX?=/usr -CPPFLAGS?=-O3 -I. -REL := $(shell svnversion 2>/dev/null | perl -ne 'print $$1 if /:(\d+)/' ) -VER := $(shell perl -e 'do "perl/lib/Text/Tidx.pm"; print "$$Text::Tidx::VERSION\n"' ) - -all: tidx perl/Tidx.bs - -debug: - CPPFLAGS="-I. -g" ${MAKE} $(MFLAGS) all - -# no fPIC for linking main module -tidx: tidx.cpp tidx-lib.cpp fastq-lib.cpp utils.cpp tidx.h - -perl/Tidx.bs perl/Makefile: perl/Makefile.PL - cd perl; perl Makefile.PL; ${MAKE} $(MFLAGS) INSTALL_BASE=${PREFIX} - -${PREFIX}/bin/tidx: tidx - cp tidx ${PREFIX}/bin - -install: ${PREFIX}/bin/tidx - cd perl; ${MAKE} $(MFLAGS) install - -clean: - -$(RM) -f tidx *.a perl/*.bs Makefile.old - cd perl; ${MAKE} $(MFLAGS) clean - -test: all - cd perl; make test - -dist: tidx.cpp tidx-lib.cpp fastq-lib.cpp utils.cpp tidx.h - tar --exclude=".svn" -cvhzf tidx.$(VER)-$(REL).tar.gz $^ sparsehash diff --git a/clipper/tidx/README b/clipper/tidx/README deleted file mode 100644 index 4b7c324..0000000 --- a/clipper/tidx/README +++ /dev/null @@ -1,11 +0,0 @@ -This program aims to index a text file. - -It should probably use a file-based btree, instead of reading the whole thing into RAM (DBSnp eats 1.2GB ram). - -The important pert of th algorithm is the part that - -a) sorts -b) removes overlaps -c) creates an index that can be searched trivially, rather than requiring an r-tree - -This could be generalized to n-dminensional speces as well.... by removing all possible overlapping regions diff --git a/clipper/tidx/chr20.txt b/clipper/tidx/chr20.txt deleted file mode 100644 index 192bfaf..0000000 --- a/clipper/tidx/chr20.txt +++ /dev/null @@ -1,30738 +0,0 @@ -chr20 hg19_knownGene CDS 68351 68408 0.000000 + 0 gene_id "DEFB125"; transcript_id "NM_153325:uc002wcw.3"; -chr20 hg19_knownGene exon 68351 68408 0.000000 + . gene_id "DEFB125"; transcript_id "NM_153325:uc002wcw.3"; -chr20 hg19_knownGene CDS 76646 77055 0.000000 + 2 gene_id "DEFB125"; transcript_id "NM_153325:uc002wcw.3"; -chr20 hg19_knownGene exon 76646 77296 0.000000 + . gene_id "DEFB125"; transcript_id "NM_153325:uc002wcw.3"; -chr20 hg19_knownGene CDS 123270 123327 0.000000 + 0 gene_id "DEFB126"; transcript_id "NM_030931:uc002wcx.3"; -chr20 hg19_knownGene exon 123252 123327 0.000000 + . gene_id "DEFB126"; transcript_id "NM_030931:uc002wcx.3"; -chr20 hg19_knownGene CDS 126056 126330 0.000000 + 2 gene_id "DEFB126"; transcript_id "NM_030931:uc002wcx.3"; -chr20 hg19_knownGene exon 126056 126392 0.000000 + . gene_id "DEFB126"; transcript_id "NM_030931:uc002wcx.3"; -chr20 hg19_knownGene CDS 138186 138234 0.000000 + 0 gene_id "DEFB127"; transcript_id "NM_139074:uc002wcy.1"; -chr20 hg19_knownGene exon 138186 138234 0.000000 + . gene_id "DEFB127"; transcript_id "NM_139074:uc002wcy.1"; -chr20 hg19_knownGene CDS 139415 139662 0.000000 + 2 gene_id "DEFB127"; transcript_id "NM_139074:uc002wcy.1"; -chr20 hg19_knownGene exon 139415 139804 0.000000 + . gene_id "DEFB127"; transcript_id "NM_139074:uc002wcy.1"; -chr20 hg19_knownGene CDS 168530 168759 0.000000 - 2 gene_id "DEFB128"; transcript_id "NM_001037732:uc002wcz.1"; -chr20 hg19_knownGene exon 168527 168759 0.000000 - . gene_id "DEFB128"; transcript_id "NM_001037732:uc002wcz.1"; -chr20 hg19_knownGene CDS 170216 170264 0.000000 - 0 gene_id "DEFB128"; transcript_id "NM_001037732:uc002wcz.1"; -chr20 hg19_knownGene exon 170216 170264 0.000000 - . gene_id "DEFB128"; transcript_id "NM_001037732:uc002wcz.1"; -chr20 hg19_knownGene CDS 207930 207987 0.000000 + 0 gene_id "DEFB129"; transcript_id "NM_080831:uc002wda.3"; -chr20 hg19_knownGene exon 207899 207987 0.000000 + . gene_id "DEFB129"; transcript_id "NM_080831:uc002wda.3"; -chr20 hg19_knownGene CDS 209919 210409 0.000000 + 2 gene_id "DEFB129"; transcript_id "NM_080831:uc002wda.3"; -chr20 hg19_knownGene exon 209919 210527 0.000000 + . gene_id "DEFB129"; transcript_id "NM_080831:uc002wda.3"; -chr20 hg19_knownGene CDS 238420 238477 0.000000 + 0 gene_id "DEFB132"; transcript_id "NM_207469:uc002wdb.3"; -chr20 hg19_knownGene exon 238377 238477 0.000000 + . gene_id "DEFB132"; transcript_id "NM_207469:uc002wdb.3"; -chr20 hg19_knownGene CDS 239718 239944 0.000000 + 2 gene_id "DEFB132"; transcript_id "NM_207469:uc002wdb.3"; -chr20 hg19_knownGene exon 239718 241736 0.000000 + . gene_id "DEFB132"; transcript_id "NM_207469:uc002wdb.3"; -chr20 hg19_knownGene CDS 257404 257520 0.000000 - 0 gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene exon 256609 257520 0.000000 - . gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene CDS 257685 257786 0.000000 - 0 gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene exon 257685 257786 0.000000 - . gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene CDS 257867 258024 0.000000 - 2 gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene exon 257867 258024 0.000000 - . gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene CDS 258971 259070 0.000000 - 0 gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene exon 258971 259070 0.000000 - . gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene CDS 259813 259971 0.000000 - 0 gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene exon 259813 259971 0.000000 - . gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene CDS 264604 264722 0.000000 - 2 gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene exon 264604 264722 0.000000 - . gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene CDS 270900 270981 0.000000 - 0 gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene exon 270900 271079 0.000000 - . gene_id "C20orf96"; transcript_id "AK304526:uc010zpj.1"; -chr20 hg19_knownGene CDS 251851 251908 0.000000 - 1 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 251504 251908 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 256609 256727 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 256609 256727 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 257434 257520 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 257434 257520 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 257685 257786 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 257685 257786 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 257867 258024 0.000000 - 2 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 257867 258024 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 258971 259070 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 258971 259070 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 259813 259971 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 259813 259971 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 264604 264722 0.000000 - 2 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 264604 264722 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 270200 270317 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 270200 270317 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 270900 270948 0.000000 - 1 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 270900 270948 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 271228 271244 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene exon 271228 271419 0.000000 - . gene_id "C20orf96"; transcript_id "NM_080571:uc021vzl.1"; -chr20 hg19_knownGene CDS 251851 251908 0.000000 - 1 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 251504 251908 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 256609 256727 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 256609 256727 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 257434 257520 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 257434 257520 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 257685 257786 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 257685 257786 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 257867 258024 0.000000 - 2 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 257867 258024 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 258971 259070 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 258971 259070 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 259813 259971 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 259813 259971 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 264604 264722 0.000000 - 2 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 264604 264722 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 270200 270317 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 270200 270317 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 270900 270948 0.000000 - 1 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 270900 270948 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 271232 271251 0.000000 - 0 gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene exon 271232 271419 0.000000 - . gene_id "C20orf96"; transcript_id "NM_153269:uc002wde.2"; -chr20 hg19_knownGene CDS 251851 251908 0.000000 - 1 gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene exon 251504 251908 0.000000 - . gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene CDS 256609 256727 0.000000 - 0 gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene exon 256609 256727 0.000000 - . gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene CDS 257434 257520 0.000000 - 0 gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene exon 257434 257520 0.000000 - . gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene CDS 257685 257786 0.000000 - 0 gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene exon 257685 257786 0.000000 - . gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene CDS 257867 258024 0.000000 - 2 gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene exon 257867 258024 0.000000 - . gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene CDS 258971 259070 0.000000 - 0 gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene exon 258971 259070 0.000000 - . gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene CDS 259813 259971 0.000000 - 0 gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene exon 259813 259971 0.000000 - . gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene CDS 264604 264722 0.000000 - 2 gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene exon 264604 264722 0.000000 - . gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene CDS 270200 270227 0.000000 - 0 gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene exon 270200 270317 0.000000 - . gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene exon 271232 271419 0.000000 - . gene_id "C20orf96"; transcript_id "BC144648:uc010zpi.2"; -chr20 hg19_knownGene CDS 257404 257520 0.000000 - 0 gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene exon 256609 257520 0.000000 - . gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene CDS 257685 257786 0.000000 - 0 gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene exon 257685 257786 0.000000 - . gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene CDS 257867 258024 0.000000 - 2 gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene exon 257867 258024 0.000000 - . gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene CDS 258971 259070 0.000000 - 0 gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene exon 258971 259070 0.000000 - . gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene CDS 259813 259971 0.000000 - 0 gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene exon 259813 259971 0.000000 - . gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene CDS 264604 264722 0.000000 - 2 gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene exon 264604 264722 0.000000 - . gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene CDS 271232 271232 0.000000 - 0 gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene exon 271232 271419 0.000000 - . gene_id "C20orf96"; transcript_id "AK302223:uc010zpk.2"; -chr20 hg19_knownGene CDS 278228 279439 0.000000 + 0 gene_id "ZCCHC3"; transcript_id "NM_033089:uc002wdf.3"; -chr20 hg19_knownGene exon 278204 280963 0.000000 + . gene_id "ZCCHC3"; transcript_id "NM_033089:uc002wdf.3"; -chr20 hg19_knownGene CDS 306569 307513 0.000000 + 0 gene_id "SOX12"; transcript_id "NM_006943:uc002wdh.3"; -chr20 hg19_knownGene exon 306239 310867 0.000000 + . gene_id "SOX12"; transcript_id "NM_006943:uc002wdh.3"; -chr20 hg19_knownGene exon 327370 327786 0.000000 + . gene_id "NRSN2"; transcript_id "NM_024958:uc002wdi.4"; -chr20 hg19_knownGene exon 329893 330007 0.000000 + . gene_id "NRSN2"; transcript_id "NM_024958:uc002wdi.4"; -chr20 hg19_knownGene CDS 330288 330476 0.000000 + 0 gene_id "NRSN2"; transcript_id "NM_024958:uc002wdi.4"; -chr20 hg19_knownGene exon 330282 330476 0.000000 + . gene_id "NRSN2"; transcript_id "NM_024958:uc002wdi.4"; -chr20 hg19_knownGene CDS 333854 334276 0.000000 + 0 gene_id "NRSN2"; transcript_id "NM_024958:uc002wdi.4"; -chr20 hg19_knownGene exon 333854 335512 0.000000 + . gene_id "NRSN2"; transcript_id "NM_024958:uc002wdi.4"; -chr20 hg19_knownGene exon 361308 361813 0.000000 + . gene_id "TRIB3"; transcript_id "NM_021158:uc002wdm.3"; -chr20 hg19_knownGene CDS 368655 368945 0.000000 + 0 gene_id "TRIB3"; transcript_id "NM_021158:uc002wdm.3"; -chr20 hg19_knownGene exon 368655 368945 0.000000 + . gene_id "TRIB3"; transcript_id "NM_021158:uc002wdm.3"; -chr20 hg19_knownGene CDS 371931 372223 0.000000 + 0 gene_id "TRIB3"; transcript_id "NM_021158:uc002wdm.3"; -chr20 hg19_knownGene exon 371931 372223 0.000000 + . gene_id "TRIB3"; transcript_id "NM_021158:uc002wdm.3"; -chr20 hg19_knownGene CDS 376842 377331 0.000000 + 1 gene_id "TRIB3"; transcript_id "NM_021158:uc002wdm.3"; -chr20 hg19_knownGene exon 376842 378203 0.000000 + . gene_id "TRIB3"; transcript_id "NM_021158:uc002wdm.3"; -chr20 hg19_knownGene exon 361941 362144 0.000000 + . gene_id "TRIB3"; transcript_id "AK297546:uc002wdn.3"; -chr20 hg19_knownGene CDS 363190 363270 0.000000 + 0 gene_id "TRIB3"; transcript_id "AK297546:uc002wdn.3"; -chr20 hg19_knownGene exon 363077 363270 0.000000 + . gene_id "TRIB3"; transcript_id "AK297546:uc002wdn.3"; -chr20 hg19_knownGene CDS 368655 368945 0.000000 + 0 gene_id "TRIB3"; transcript_id "AK297546:uc002wdn.3"; -chr20 hg19_knownGene exon 368655 368945 0.000000 + . gene_id "TRIB3"; transcript_id "AK297546:uc002wdn.3"; -chr20 hg19_knownGene CDS 371931 372223 0.000000 + 0 gene_id "TRIB3"; transcript_id "AK297546:uc002wdn.3"; -chr20 hg19_knownGene exon 371931 372223 0.000000 + . gene_id "TRIB3"; transcript_id "AK297546:uc002wdn.3"; -chr20 hg19_knownGene CDS 376842 377331 0.000000 + 1 gene_id "TRIB3"; transcript_id "AK297546:uc002wdn.3"; -chr20 hg19_knownGene exon 376842 378203 0.000000 + . gene_id "TRIB3"; transcript_id "AK297546:uc002wdn.3"; -chr20 hg19_knownGene exon 388709 389423 0.000000 + . gene_id "RBCK1"; transcript_id "AK309414:uc002wdo.3"; -chr20 hg19_knownGene exon 390525 390669 0.000000 + . gene_id "RBCK1"; transcript_id "AK309414:uc002wdo.3"; -chr20 hg19_knownGene exon 391056 391408 0.000000 + . gene_id "RBCK1"; transcript_id "AK309414:uc002wdo.3"; -chr20 hg19_knownGene CDS 389402 389423 0.000000 + 0 gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene exon 388709 389423 0.000000 + . gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene CDS 390525 390669 0.000000 + 2 gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene exon 390525 390669 0.000000 + . gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene CDS 398170 398263 0.000000 + 1 gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene exon 398170 398263 0.000000 + . gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene CDS 398376 398574 0.000000 + 0 gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene exon 398376 398574 0.000000 + . gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene CDS 399991 400112 0.000000 + 2 gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene exon 399991 400112 0.000000 + . gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene CDS 400202 400426 0.000000 + 0 gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene exon 400202 400504 0.000000 + . gene_id "RBCK1"; transcript_id "AK303357:uc010zpl.1"; -chr20 hg19_knownGene exon 388709 389423 0.000000 + . gene_id "RBCK1"; transcript_id "AK297524:uc010zpm.1"; -chr20 hg19_knownGene exon 390525 390669 0.000000 + . gene_id "RBCK1"; transcript_id "AK297524:uc010zpm.1"; -chr20 hg19_knownGene exon 398170 398263 0.000000 + . gene_id "RBCK1"; transcript_id "AK297524:uc010zpm.1"; -chr20 hg19_knownGene exon 398376 398574 0.000000 + . gene_id "RBCK1"; transcript_id "AK297524:uc010zpm.1"; -chr20 hg19_knownGene exon 399991 400112 0.000000 + . gene_id "RBCK1"; transcript_id "AK297524:uc010zpm.1"; -chr20 hg19_knownGene exon 400202 400375 0.000000 + . gene_id "RBCK1"; transcript_id "AK297524:uc010zpm.1"; -chr20 hg19_knownGene exon 402771 402882 0.000000 + . gene_id "RBCK1"; transcript_id "AK297524:uc010zpm.1"; -chr20 hg19_knownGene exon 407957 408136 0.000000 + . gene_id "RBCK1"; transcript_id "AK297524:uc010zpm.1"; -chr20 hg19_knownGene exon 409135 409233 0.000000 + . gene_id "RBCK1"; transcript_id "AK297524:uc010zpm.1"; -chr20 hg19_knownGene CDS 389402 389423 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 388709 389423 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 390525 390669 0.000000 + 2 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 390525 390669 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 398170 398263 0.000000 + 1 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 398170 398263 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 398376 398574 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 398376 398574 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 399991 400112 0.000000 + 2 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 399991 400112 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 400202 400375 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 400202 400375 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 401515 401675 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 401515 401675 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 402771 402882 0.000000 + 1 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 402771 402882 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 407957 408136 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 407957 408136 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 409135 409233 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 409135 409233 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 409595 409738 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 409595 409738 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 410994 411071 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene exon 410994 411610 0.000000 + . gene_id "RBCK1"; transcript_id "NM_031229:uc002wdp.4"; -chr20 hg19_knownGene CDS 389383 389423 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 388709 389423 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene CDS 398170 398263 0.000000 + 1 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 398170 398263 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene CDS 398376 398574 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 398376 398574 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene CDS 399991 400112 0.000000 + 2 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 399991 400112 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene CDS 400202 400375 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 400202 400375 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene CDS 401515 401675 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 401515 401675 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene CDS 402771 402882 0.000000 + 1 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 402771 402882 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene CDS 407957 408136 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 407957 408136 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene CDS 409135 409233 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 409135 409233 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene CDS 409595 409738 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 409595 409738 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene CDS 410994 411071 0.000000 + 0 gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 410994 411610 0.000000 + . gene_id "RBCK1"; transcript_id "NM_006462:uc002wdq.4"; -chr20 hg19_knownGene exon 388709 389423 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 390525 390669 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 398170 398263 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 398376 398574 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 399991 400112 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 400202 400375 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 401515 401650 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 402771 402882 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 407957 408136 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 409135 409233 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 409595 409738 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 410994 411610 0.000000 + . gene_id "RBCK1"; transcript_id "BC014116:uc010fzy.3"; -chr20 hg19_knownGene exon 388709 389423 0.000000 + . gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene exon 398170 398263 0.000000 + . gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene CDS 398464 398574 0.000000 + 0 gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene exon 398376 398574 0.000000 + . gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene CDS 399991 400112 0.000000 + 0 gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene exon 399991 400112 0.000000 + . gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene CDS 400202 400375 0.000000 + 1 gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene exon 400202 400375 0.000000 + . gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene CDS 402771 402882 0.000000 + 1 gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene exon 402771 402882 0.000000 + . gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene CDS 407957 408136 0.000000 + 0 gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene exon 407957 408136 0.000000 + . gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene CDS 409135 409233 0.000000 + 0 gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene exon 409135 409233 0.000000 + . gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene CDS 409595 409738 0.000000 + 0 gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene exon 409595 409738 0.000000 + . gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene CDS 410994 411071 0.000000 + 0 gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene exon 410994 411610 0.000000 + . gene_id "RBCK1"; transcript_id "BC000983:uc002wdr.4"; -chr20 hg19_knownGene exon 416126 417600 0.000000 - . gene_id "DQ588114"; transcript_id "DQ588114:uc021vzm.1"; -chr20 hg19_knownGene CDS 419233 419485 0.000000 - 1 gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene exon 416124 419485 0.000000 - . gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene CDS 419752 419939 0.000000 - 0 gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene exon 419752 419939 0.000000 - . gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene CDS 420892 421033 0.000000 - 1 gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene exon 420892 421033 0.000000 - . gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene CDS 422232 422333 0.000000 - 1 gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene exon 422232 422333 0.000000 - . gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene CDS 422501 422687 0.000000 - 2 gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene exon 422501 422687 0.000000 - . gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene CDS 425694 425774 0.000000 - 2 gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene exon 425694 425774 0.000000 - . gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene CDS 428533 428718 0.000000 - 2 gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene exon 428533 428718 0.000000 - . gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene CDS 442980 443049 0.000000 - 0 gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene exon 442980 443187 0.000000 - . gene_id "TBC1D20"; transcript_id "NM_144628:uc002wds.3"; -chr20 hg19_knownGene exon 416124 416614 0.000000 - . gene_id "TBC1D20"; transcript_id "BC014983:uc002wdt.3"; -chr20 hg19_knownGene exon 418084 418242 0.000000 - . gene_id "TBC1D20"; transcript_id "BC014983:uc002wdt.3"; -chr20 hg19_knownGene exon 419194 419485 0.000000 - . gene_id "TBC1D20"; transcript_id "BC014983:uc002wdt.3"; -chr20 hg19_knownGene exon 419752 419939 0.000000 - . gene_id "TBC1D20"; transcript_id "BC014983:uc002wdt.3"; -chr20 hg19_knownGene exon 420892 421033 0.000000 - . gene_id "TBC1D20"; transcript_id "BC014983:uc002wdt.3"; -chr20 hg19_knownGene exon 422232 422333 0.000000 - . gene_id "TBC1D20"; transcript_id "BC014983:uc002wdt.3"; -chr20 hg19_knownGene exon 422501 422687 0.000000 - . gene_id "TBC1D20"; transcript_id "BC014983:uc002wdt.3"; -chr20 hg19_knownGene exon 425694 425774 0.000000 - . gene_id "TBC1D20"; transcript_id "BC014983:uc002wdt.3"; -chr20 hg19_knownGene exon 428533 428718 0.000000 - . gene_id "TBC1D20"; transcript_id "BC014983:uc002wdt.3"; -chr20 hg19_knownGene exon 442980 443187 0.000000 - . gene_id "TBC1D20"; transcript_id "BC014983:uc002wdt.3"; -chr20 hg19_knownGene CDS 419233 419485 0.000000 - 1 gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene exon 416124 419485 0.000000 - . gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene CDS 419752 419939 0.000000 - 0 gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene exon 419752 419939 0.000000 - . gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene CDS 420892 421033 0.000000 - 1 gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene exon 420892 421033 0.000000 - . gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene CDS 422232 422326 0.000000 - 0 gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene exon 422232 422687 0.000000 - . gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene exon 425694 425774 0.000000 - . gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene exon 428533 428718 0.000000 - . gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene exon 442980 443187 0.000000 - . gene_id "TBC1D20"; transcript_id "AK095110:uc002wdv.3"; -chr20 hg19_knownGene CDS 464608 464720 0.000000 - 2 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 463338 464720 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 467020 467106 0.000000 - 2 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 467020 467106 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 468071 468219 0.000000 - 1 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 468071 468219 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 469322 469422 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 469322 469422 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 470424 470525 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 470424 470525 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 472898 473008 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 472898 473008 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 476363 476446 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 476363 476446 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 478365 478424 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 478365 478424 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 479899 479949 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 479899 479949 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 480477 480578 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 480477 480578 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 485762 485873 0.000000 - 1 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 485762 485873 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 489095 489195 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 489095 489304 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 508577 508693 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene exon 524316 524482 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177559:uc002wdw.1"; -chr20 hg19_knownGene CDS 464608 464720 0.000000 - 2 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 463338 464720 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 467020 467106 0.000000 - 2 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 467020 467106 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 468071 468219 0.000000 - 1 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 468071 468219 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 469322 469422 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 469322 469422 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 470424 470525 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 470424 470525 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 472898 473008 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 472898 473008 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 476363 476446 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 476363 476446 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 478365 478424 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 478365 478424 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 479899 479949 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 479899 479949 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 480477 480578 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 480477 480578 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 485762 485873 0.000000 - 1 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 485762 485873 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 489095 489195 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 489095 489304 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene exon 524316 524482 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_001895:uc002wdx.1"; -chr20 hg19_knownGene CDS 464608 464720 0.000000 - 2 gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 463338 464720 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene CDS 467020 467106 0.000000 - 2 gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 467020 467106 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene CDS 468071 468219 0.000000 - 1 gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 468071 468219 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene CDS 469322 469422 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 469322 469422 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene CDS 470424 470525 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 470424 470525 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene CDS 472898 473008 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 472898 473008 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene CDS 476363 476446 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 476363 476446 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene CDS 478365 478382 0.000000 - 0 gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 478365 478424 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 479899 479949 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 480477 480578 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 485762 485873 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene exon 524316 524482 0.000000 - . gene_id "CSNK2A1"; transcript_id "NM_177560:uc002wdy.1"; -chr20 hg19_knownGene CDS 585238 585309 0.000000 - 0 gene_id "TCF15"; transcript_id "NM_004609:uc002wdz.3"; -chr20 hg19_knownGene exon 584637 585309 0.000000 - . gene_id "TCF15"; transcript_id "NM_004609:uc002wdz.3"; -chr20 hg19_knownGene CDS 590357 590881 0.000000 - 0 gene_id "TCF15"; transcript_id "NM_004609:uc002wdz.3"; -chr20 hg19_knownGene exon 590357 590910 0.000000 - . gene_id "TCF15"; transcript_id "NM_004609:uc002wdz.3"; -chr20 hg19_knownGene CDS 629361 629561 0.000000 - 0 gene_id "SRXN1"; transcript_id "NM_080725:uc002wea.3"; -chr20 hg19_knownGene exon 627268 629561 0.000000 - . gene_id "SRXN1"; transcript_id "NM_080725:uc002wea.3"; -chr20 hg19_knownGene CDS 633620 633829 0.000000 - 0 gene_id "SRXN1"; transcript_id "NM_080725:uc002wea.3"; -chr20 hg19_knownGene exon 633620 633890 0.000000 - . gene_id "SRXN1"; transcript_id "NM_080725:uc002wea.3"; -chr20 hg19_knownGene exon 627268 629561 0.000000 - . gene_id "SRXN1"; transcript_id "AK125343:uc002web.3"; -chr20 hg19_knownGene exon 634875 634964 0.000000 - . gene_id "SRXN1"; transcript_id "AK125343:uc002web.3"; -chr20 hg19_knownGene exon 656113 656823 0.000000 - . gene_id "SRXN1"; transcript_id "AK125343:uc002web.3"; -chr20 hg19_knownGene CDS 644318 645105 0.000000 - 2 gene_id "SCRT2"; transcript_id "NM_033129:uc002wec.3"; -chr20 hg19_knownGene exon 642240 645105 0.000000 - . gene_id "SCRT2"; transcript_id "NM_033129:uc002wec.3"; -chr20 hg19_knownGene CDS 656113 656245 0.000000 - 0 gene_id "SCRT2"; transcript_id "NM_033129:uc002wec.3"; -chr20 hg19_knownGene exon 656113 656823 0.000000 - . gene_id "SCRT2"; transcript_id "NM_033129:uc002wec.3"; -chr20 hg19_knownGene CDS 741673 741882 0.000000 - 0 gene_id "C20orf54"; transcript_id "NM_033409:uc002wed.4"; -chr20 hg19_knownGene exon 740724 741882 0.000000 - . gene_id "C20orf54"; transcript_id "NM_033409:uc002wed.4"; -chr20 hg19_knownGene CDS 742345 742468 0.000000 - 1 gene_id "C20orf54"; transcript_id "NM_033409:uc002wed.4"; -chr20 hg19_knownGene exon 742345 742468 0.000000 - . gene_id "C20orf54"; transcript_id "NM_033409:uc002wed.4"; -chr20 hg19_knownGene CDS 744142 744647 0.000000 - 0 gene_id "C20orf54"; transcript_id "NM_033409:uc002wed.4"; -chr20 hg19_knownGene exon 744142 744647 0.000000 - . gene_id "C20orf54"; transcript_id "NM_033409:uc002wed.4"; -chr20 hg19_knownGene CDS 745852 746418 0.000000 - 0 gene_id "C20orf54"; transcript_id "NM_033409:uc002wed.4"; -chr20 hg19_knownGene exon 745852 746469 0.000000 - . gene_id "C20orf54"; transcript_id "NM_033409:uc002wed.4"; -chr20 hg19_knownGene exon 748941 749228 0.000000 - . gene_id "C20orf54"; transcript_id "NM_033409:uc002wed.4"; -chr20 hg19_knownGene CDS 742297 742468 0.000000 - 1 gene_id "C20orf54"; transcript_id "AK291706:uc002wee.2"; -chr20 hg19_knownGene exon 740725 742468 0.000000 - . gene_id "C20orf54"; transcript_id "AK291706:uc002wee.2"; -chr20 hg19_knownGene CDS 744142 744647 0.000000 - 0 gene_id "C20orf54"; transcript_id "AK291706:uc002wee.2"; -chr20 hg19_knownGene exon 744142 744647 0.000000 - . gene_id "C20orf54"; transcript_id "AK291706:uc002wee.2"; -chr20 hg19_knownGene CDS 745852 746418 0.000000 - 0 gene_id "C20orf54"; transcript_id "AK291706:uc002wee.2"; -chr20 hg19_knownGene exon 745852 746469 0.000000 - . gene_id "C20orf54"; transcript_id "AK291706:uc002wee.2"; -chr20 hg19_knownGene exon 748941 749228 0.000000 - . gene_id "C20orf54"; transcript_id "AK291706:uc002wee.2"; -chr20 hg19_knownGene exon 814356 814594 0.000000 + . gene_id "FAM110A"; transcript_id "NM_001042353:uc002wef.1"; -chr20 hg19_knownGene CDS 825448 826332 0.000000 + 0 gene_id "FAM110A"; transcript_id "NM_001042353:uc002wef.1"; -chr20 hg19_knownGene exon 825351 826922 0.000000 + . gene_id "FAM110A"; transcript_id "NM_001042353:uc002wef.1"; -chr20 hg19_knownGene exon 816711 816757 0.000000 + . gene_id "FAM110A"; transcript_id "NM_207121:uc002weg.1"; -chr20 hg19_knownGene CDS 825448 826332 0.000000 + 0 gene_id "FAM110A"; transcript_id "NM_207121:uc002weg.1"; -chr20 hg19_knownGene exon 825351 826922 0.000000 + . gene_id "FAM110A"; transcript_id "NM_207121:uc002weg.1"; -chr20 hg19_knownGene CDS 825448 826332 0.000000 + 0 gene_id "FAM110A"; transcript_id "NM_031424:uc002weh.1"; -chr20 hg19_knownGene exon 825285 826922 0.000000 + . gene_id "FAM110A"; transcript_id "NM_031424:uc002weh.1"; -chr20 hg19_knownGene CDS 853606 853763 0.000000 - 2 gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene exon 853297 853763 0.000000 - . gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene CDS 854927 855057 0.000000 - 1 gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene exon 854927 855057 0.000000 - . gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene CDS 858804 858970 0.000000 - 0 gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene exon 858804 858970 0.000000 - . gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene CDS 860390 860491 0.000000 - 0 gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene exon 860390 860491 0.000000 - . gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene CDS 861814 861929 0.000000 - 2 gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene exon 861814 861929 0.000000 - . gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene CDS 865721 865968 0.000000 - 1 gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene exon 865721 865968 0.000000 - . gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene CDS 868961 869082 0.000000 - 0 gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene exon 868961 869082 0.000000 - . gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene CDS 870856 871011 0.000000 - 0 gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene exon 870856 871011 0.000000 - . gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene CDS 896549 896857 0.000000 - 0 gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene exon 896549 896960 0.000000 - . gene_id "ANGPT4"; transcript_id "NM_015985:uc002wei.3"; -chr20 hg19_knownGene CDS 853754 853763 0.000000 - 1 gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene exon 853297 853763 0.000000 - . gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene CDS 858804 858970 0.000000 - 0 gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene exon 858804 858970 0.000000 - . gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene CDS 860390 860491 0.000000 - 0 gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene exon 860390 860491 0.000000 - . gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene CDS 861814 861929 0.000000 - 2 gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene exon 861814 861929 0.000000 - . gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene CDS 865721 865968 0.000000 - 1 gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene exon 865721 865968 0.000000 - . gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene CDS 868961 869082 0.000000 - 0 gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene exon 868961 869082 0.000000 - . gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene CDS 870856 871011 0.000000 - 0 gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene exon 870856 871011 0.000000 - . gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene CDS 896549 896839 0.000000 - 0 gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene exon 896549 896960 0.000000 - . gene_id "ANGPT4"; transcript_id "AK304756:uc010zpn.2"; -chr20 hg19_knownGene CDS 941003 941109 0.000000 - 2 gene_id "RSPO4"; transcript_id "NM_001029871:uc002wej.3"; -chr20 hg19_knownGene exon 939096 941109 0.000000 - . gene_id "RSPO4"; transcript_id "NM_001029871:uc002wej.3"; -chr20 hg19_knownGene CDS 944578 944763 0.000000 - 2 gene_id "RSPO4"; transcript_id "NM_001029871:uc002wej.3"; -chr20 hg19_knownGene exon 944578 944763 0.000000 - . gene_id "RSPO4"; transcript_id "NM_001029871:uc002wej.3"; -chr20 hg19_knownGene CDS 947817 947957 0.000000 - 2 gene_id "RSPO4"; transcript_id "NM_001029871:uc002wej.3"; -chr20 hg19_knownGene exon 947817 947957 0.000000 - . gene_id "RSPO4"; transcript_id "NM_001029871:uc002wej.3"; -chr20 hg19_knownGene CDS 948593 948781 0.000000 - 2 gene_id "RSPO4"; transcript_id "NM_001029871:uc002wej.3"; -chr20 hg19_knownGene exon 948593 948781 0.000000 - . gene_id "RSPO4"; transcript_id "NM_001029871:uc002wej.3"; -chr20 hg19_knownGene CDS 982729 982807 0.000000 - 0 gene_id "RSPO4"; transcript_id "NM_001029871:uc002wej.3"; -chr20 hg19_knownGene exon 982729 982907 0.000000 - . gene_id "RSPO4"; transcript_id "NM_001029871:uc002wej.3"; -chr20 hg19_knownGene CDS 941003 941109 0.000000 - 2 gene_id "RSPO4"; transcript_id "NM_001040007:uc002wek.3"; -chr20 hg19_knownGene exon 939096 941109 0.000000 - . gene_id "RSPO4"; transcript_id "NM_001040007:uc002wek.3"; -chr20 hg19_knownGene CDS 947817 947957 0.000000 - 2 gene_id "RSPO4"; transcript_id "NM_001040007:uc002wek.3"; -chr20 hg19_knownGene exon 947817 947957 0.000000 - . gene_id "RSPO4"; transcript_id "NM_001040007:uc002wek.3"; -chr20 hg19_knownGene CDS 948593 948781 0.000000 - 2 gene_id "RSPO4"; transcript_id "NM_001040007:uc002wek.3"; -chr20 hg19_knownGene exon 948593 948781 0.000000 - . gene_id "RSPO4"; transcript_id "NM_001040007:uc002wek.3"; -chr20 hg19_knownGene CDS 982729 982807 0.000000 - 0 gene_id "RSPO4"; transcript_id "NM_001040007:uc002wek.3"; -chr20 hg19_knownGene exon 982729 982907 0.000000 - . gene_id "RSPO4"; transcript_id "NM_001040007:uc002wek.3"; -chr20 hg19_knownGene exon 1093906 1094052 0.000000 + . gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene CDS 1106276 1106293 0.000000 + 0 gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene exon 1106141 1106293 0.000000 + . gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene CDS 1108069 1108151 0.000000 + 0 gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene exon 1108069 1108151 0.000000 + . gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene CDS 1115764 1115949 0.000000 + 1 gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene exon 1115764 1115949 0.000000 + . gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene CDS 1143774 1143827 0.000000 + 1 gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene exon 1143774 1143827 0.000000 + . gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene CDS 1144962 1145120 0.000000 + 1 gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene exon 1144962 1145120 0.000000 + . gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene CDS 1146871 1146895 0.000000 + 1 gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene exon 1146871 1147970 0.000000 + . gene_id "PSMF1"; transcript_id "AK302164:uc010zpo.2"; -chr20 hg19_knownGene CDS 1099417 1099545 0.000000 + 0 gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene exon 1099240 1099545 0.000000 + . gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene CDS 1106141 1106293 0.000000 + 0 gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene exon 1106141 1106293 0.000000 + . gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene CDS 1108069 1108151 0.000000 + 0 gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene exon 1108069 1108151 0.000000 + . gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene CDS 1143774 1143827 0.000000 + 1 gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene exon 1143774 1143827 0.000000 + . gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene CDS 1144962 1145120 0.000000 + 1 gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene exon 1144962 1145120 0.000000 + . gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene CDS 1146871 1146895 0.000000 + 1 gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene exon 1146871 1147970 0.000000 + . gene_id "PSMF1"; transcript_id "AK294134:uc010zpp.2"; -chr20 hg19_knownGene exon 1093906 1094052 0.000000 + . gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene CDS 1099417 1099545 0.000000 + 0 gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene exon 1099396 1099545 0.000000 + . gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene CDS 1106141 1106293 0.000000 + 0 gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene exon 1106141 1106293 0.000000 + . gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene CDS 1108069 1108151 0.000000 + 0 gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene exon 1108069 1108151 0.000000 + . gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene CDS 1115764 1115949 0.000000 + 1 gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene exon 1115764 1115949 0.000000 + . gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene CDS 1143774 1143827 0.000000 + 1 gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene exon 1143774 1143827 0.000000 + . gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene CDS 1144962 1145120 0.000000 + 1 gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene exon 1144962 1145120 0.000000 + . gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene CDS 1145673 1145721 0.000000 + 1 gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene exon 1145673 1148426 0.000000 + . gene_id "PSMF1"; transcript_id "NM_178578:uc002wel.4"; -chr20 hg19_knownGene CDS 1099417 1099545 0.000000 + 0 gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene exon 1099240 1099545 0.000000 + . gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene CDS 1106141 1106293 0.000000 + 0 gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene exon 1106141 1106293 0.000000 + . gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene CDS 1108069 1108151 0.000000 + 0 gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene exon 1108069 1108151 0.000000 + . gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene CDS 1115764 1115949 0.000000 + 1 gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene exon 1115764 1115949 0.000000 + . gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene CDS 1143774 1143827 0.000000 + 1 gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene exon 1143774 1143827 0.000000 + . gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene CDS 1144962 1145120 0.000000 + 1 gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene exon 1144962 1145120 0.000000 + . gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene CDS 1145673 1145721 0.000000 + 1 gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene exon 1145673 1148426 0.000000 + . gene_id "PSMF1"; transcript_id "NM_006814:uc002wen.4"; -chr20 hg19_knownGene CDS 1115546 1115949 0.000000 + 0 gene_id "PSMF1"; transcript_id "BC029836:uc002wep.4"; -chr20 hg19_knownGene exon 1115483 1115949 0.000000 + . gene_id "PSMF1"; transcript_id "BC029836:uc002wep.4"; -chr20 hg19_knownGene CDS 1143774 1143827 0.000000 + 1 gene_id "PSMF1"; transcript_id "BC029836:uc002wep.4"; -chr20 hg19_knownGene exon 1143774 1143827 0.000000 + . gene_id "PSMF1"; transcript_id "BC029836:uc002wep.4"; -chr20 hg19_knownGene CDS 1144962 1145120 0.000000 + 1 gene_id "PSMF1"; transcript_id "BC029836:uc002wep.4"; -chr20 hg19_knownGene exon 1144962 1145120 0.000000 + . gene_id "PSMF1"; transcript_id "BC029836:uc002wep.4"; -chr20 hg19_knownGene CDS 1145673 1145721 0.000000 + 1 gene_id "PSMF1"; transcript_id "BC029836:uc002wep.4"; -chr20 hg19_knownGene exon 1145673 1148426 0.000000 + . gene_id "PSMF1"; transcript_id "BC029836:uc002wep.4"; -chr20 hg19_knownGene CDS 1161495 1162231 0.000000 - 2 gene_id "TMEM74B"; transcript_id "BC126989:uc010gaa.1"; -chr20 hg19_knownGene exon 1161215 1162231 0.000000 - . gene_id "TMEM74B"; transcript_id "BC126989:uc010gaa.1"; -chr20 hg19_knownGene CDS 1164415 1164445 0.000000 - 0 gene_id "TMEM74B"; transcript_id "BC126989:uc010gaa.1"; -chr20 hg19_knownGene exon 1164415 1164592 0.000000 - . gene_id "TMEM74B"; transcript_id "BC126989:uc010gaa.1"; -chr20 hg19_knownGene exon 1164946 1165017 0.000000 - . gene_id "TMEM74B"; transcript_id "BC126989:uc010gaa.1"; -chr20 hg19_knownGene CDS 1161495 1162231 0.000000 - 2 gene_id "TMEM74B"; transcript_id "NM_018354:uc002weq.1"; -chr20 hg19_knownGene exon 1161215 1162231 0.000000 - . gene_id "TMEM74B"; transcript_id "NM_018354:uc002weq.1"; -chr20 hg19_knownGene CDS 1164415 1164445 0.000000 - 0 gene_id "TMEM74B"; transcript_id "NM_018354:uc002weq.1"; -chr20 hg19_knownGene exon 1164415 1165117 0.000000 - . gene_id "TMEM74B"; transcript_id "NM_018354:uc002weq.1"; -chr20 hg19_knownGene CDS 1184161 1184295 0.000000 + 0 gene_id "C20orf202"; transcript_id "NM_001009612:uc002wer.4"; -chr20 hg19_knownGene exon 1184098 1184295 0.000000 + . gene_id "C20orf202"; transcript_id "NM_001009612:uc002wer.4"; -chr20 hg19_knownGene CDS 1187513 1187743 0.000000 + 0 gene_id "C20orf202"; transcript_id "NM_001009612:uc002wer.4"; -chr20 hg19_knownGene exon 1187513 1188918 0.000000 + . gene_id "C20orf202"; transcript_id "NM_001009612:uc002wer.4"; -chr20 hg19_knownGene exon 1206764 1206824 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1209098 1209241 0.000000 + 0 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1209066 1209241 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1210524 1210653 0.000000 + 0 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1210524 1210653 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1212170 1212263 0.000000 + 2 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1212170 1212263 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1214729 1214835 0.000000 + 1 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1214729 1214835 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1218688 1218858 0.000000 + 2 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1218688 1218858 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1219956 1220051 0.000000 + 2 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1219956 1220051 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1220965 1221078 0.000000 + 2 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1220965 1221078 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1223263 1223489 0.000000 + 2 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1223263 1223489 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1223741 1223840 0.000000 + 0 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1223741 1223840 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1224690 1224814 0.000000 + 2 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1224690 1224814 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1226854 1226949 0.000000 + 0 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1226854 1226949 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1229270 1229347 0.000000 + 0 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1229270 1229347 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene CDS 1234913 1235098 0.000000 + 0 gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1234913 1235145 0.000000 + . gene_id "RAD21L1"; transcript_id "NM_001136566:uc010gab.1"; -chr20 hg19_knownGene exon 1246960 1247041 0.000000 + . gene_id "SNPH"; transcript_id "NM_014723:uc002wes.3"; -chr20 hg19_knownGene exon 1247298 1247404 0.000000 + . gene_id "SNPH"; transcript_id "NM_014723:uc002wes.3"; -chr20 hg19_knownGene CDS 1277016 1277065 0.000000 + 0 gene_id "SNPH"; transcript_id "NM_014723:uc002wes.3"; -chr20 hg19_knownGene exon 1276969 1277065 0.000000 + . gene_id "SNPH"; transcript_id "NM_014723:uc002wes.3"; -chr20 hg19_knownGene CDS 1277789 1277896 0.000000 + 1 gene_id "SNPH"; transcript_id "NM_014723:uc002wes.3"; -chr20 hg19_knownGene exon 1277789 1277896 0.000000 + . gene_id "SNPH"; transcript_id "NM_014723:uc002wes.3"; -chr20 hg19_knownGene CDS 1281206 1281355 0.000000 + 1 gene_id "SNPH"; transcript_id "NM_014723:uc002wes.3"; -chr20 hg19_knownGene exon 1281206 1281355 0.000000 + . gene_id "SNPH"; transcript_id "NM_014723:uc002wes.3"; -chr20 hg19_knownGene CDS 1285522 1286695 0.000000 + 1 gene_id "SNPH"; transcript_id "NM_014723:uc002wes.3"; -chr20 hg19_knownGene exon 1285522 1289971 0.000000 + . gene_id "SNPH"; transcript_id "NM_014723:uc002wes.3"; -chr20 hg19_knownGene exon 1246960 1247041 0.000000 + . gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene exon 1247298 1247404 0.000000 + . gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene exon 1275595 1275622 0.000000 + . gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene CDS 1276884 1277065 0.000000 + 0 gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene exon 1276420 1277065 0.000000 + . gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene CDS 1277789 1277896 0.000000 + 1 gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene exon 1277789 1277896 0.000000 + . gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene CDS 1281206 1281355 0.000000 + 1 gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene exon 1281206 1281355 0.000000 + . gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene CDS 1285522 1286695 0.000000 + 1 gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene exon 1285522 1289971 0.000000 + . gene_id "SNPH"; transcript_id "AF187733:uc002wet.3"; -chr20 hg19_knownGene CDS 1291088 1291139 0.000000 - 1 gene_id "SDCBP2"; transcript_id "NM_015685:uc002weu.4"; -chr20 hg19_knownGene exon 1290555 1291139 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_015685:uc002weu.4"; -chr20 hg19_knownGene CDS 1291444 1291535 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_015685:uc002weu.4"; -chr20 hg19_knownGene exon 1291444 1291535 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_015685:uc002weu.4"; -chr20 hg19_knownGene CDS 1292981 1293152 0.000000 - 1 gene_id "SDCBP2"; transcript_id "NM_015685:uc002weu.4"; -chr20 hg19_knownGene exon 1292981 1293152 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_015685:uc002weu.4"; -chr20 hg19_knownGene CDS 1293231 1293406 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_015685:uc002weu.4"; -chr20 hg19_knownGene exon 1293231 1293406 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_015685:uc002weu.4"; -chr20 hg19_knownGene CDS 1293984 1294112 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_015685:uc002weu.4"; -chr20 hg19_knownGene exon 1293984 1294317 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_015685:uc002weu.4"; -chr20 hg19_knownGene CDS 1291088 1291139 0.000000 - 1 gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene exon 1290555 1291139 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene CDS 1291444 1291535 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene exon 1291444 1291535 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene CDS 1292981 1293152 0.000000 - 1 gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene exon 1292981 1293152 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene CDS 1293231 1293406 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene exon 1293231 1293406 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene CDS 1293984 1294142 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene exon 1293984 1294142 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene CDS 1298962 1299062 0.000000 - 2 gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene exon 1298962 1299062 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene CDS 1300234 1300303 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene exon 1300234 1300303 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene CDS 1301007 1301060 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene exon 1301007 1301079 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene exon 1306474 1306513 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_001199784:uc021vzn.1"; -chr20 hg19_knownGene CDS 1291088 1291139 0.000000 - 1 gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene exon 1290555 1291139 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene CDS 1291444 1291535 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene exon 1291444 1291535 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene CDS 1292981 1293152 0.000000 - 1 gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene exon 1292981 1293152 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene CDS 1293231 1293406 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene exon 1293231 1293406 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene CDS 1293984 1294142 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene exon 1293984 1294142 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene CDS 1298962 1299062 0.000000 - 2 gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene exon 1298962 1299062 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene CDS 1300234 1300303 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene exon 1300234 1300303 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene CDS 1301007 1301060 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene exon 1301007 1301079 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene exon 1309729 1309879 0.000000 - . gene_id "SDCBP2"; transcript_id "NM_080489:uc002wev.4"; -chr20 hg19_knownGene CDS 1293897 1294142 0.000000 - 0 gene_id "SDCBP2"; transcript_id "AK296577:uc010zpq.2"; -chr20 hg19_knownGene exon 1293346 1294142 0.000000 - . gene_id "SDCBP2"; transcript_id "AK296577:uc010zpq.2"; -chr20 hg19_knownGene CDS 1298962 1299062 0.000000 - 2 gene_id "SDCBP2"; transcript_id "AK296577:uc010zpq.2"; -chr20 hg19_knownGene exon 1298962 1299062 0.000000 - . gene_id "SDCBP2"; transcript_id "AK296577:uc010zpq.2"; -chr20 hg19_knownGene CDS 1300234 1300303 0.000000 - 0 gene_id "SDCBP2"; transcript_id "AK296577:uc010zpq.2"; -chr20 hg19_knownGene exon 1300234 1300303 0.000000 - . gene_id "SDCBP2"; transcript_id "AK296577:uc010zpq.2"; -chr20 hg19_knownGene CDS 1301007 1301060 0.000000 - 0 gene_id "SDCBP2"; transcript_id "AK296577:uc010zpq.2"; -chr20 hg19_knownGene exon 1301007 1301079 0.000000 - . gene_id "SDCBP2"; transcript_id "AK296577:uc010zpq.2"; -chr20 hg19_knownGene exon 1309729 1309879 0.000000 - . gene_id "SDCBP2"; transcript_id "AK296577:uc010zpq.2"; -chr20 hg19_knownGene exon 1305987 1306173 0.000000 + . gene_id "LOC100507495"; transcript_id "NR_040048:uc002wew.3"; -chr20 hg19_knownGene exon 1353722 1353822 0.000000 + . gene_id "LOC100507495"; transcript_id "NR_040048:uc002wew.3"; -chr20 hg19_knownGene exon 1355128 1355342 0.000000 + . gene_id "LOC100507495"; transcript_id "NR_040048:uc002wew.3"; -chr20 hg19_knownGene exon 1357442 1359379 0.000000 + . gene_id "LOC100507495"; transcript_id "NR_040048:uc002wew.3"; -chr20 hg19_knownGene exon 1305987 1306173 0.000000 + . gene_id "LOC100507495"; transcript_id "NR_040049:uc002wex.3"; -chr20 hg19_knownGene exon 1353722 1353822 0.000000 + . gene_id "LOC100507495"; transcript_id "NR_040049:uc002wex.3"; -chr20 hg19_knownGene exon 1357442 1359379 0.000000 + . gene_id "LOC100507495"; transcript_id "NR_040049:uc002wex.3"; -chr20 hg19_knownGene exon 1305987 1306426 0.000000 + . gene_id "LOC100507495"; transcript_id "NR_040047:uc021vzp.1"; -chr20 hg19_knownGene exon 1353722 1353822 0.000000 + . gene_id "LOC100507495"; transcript_id "NR_040047:uc021vzp.1"; -chr20 hg19_knownGene exon 1357442 1359379 0.000000 + . gene_id "LOC100507495"; transcript_id "NR_040047:uc021vzp.1"; -chr20 hg19_knownGene CDS 1291088 1291139 0.000000 - 1 gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene exon 1290555 1291139 0.000000 - . gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene CDS 1291444 1291535 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene exon 1291444 1291535 0.000000 - . gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene CDS 1292981 1293152 0.000000 - 1 gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene exon 1292981 1293152 0.000000 - . gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene CDS 1293231 1293406 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene exon 1293231 1293406 0.000000 - . gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene CDS 1293984 1294142 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene exon 1293984 1294142 0.000000 - . gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene CDS 1298962 1299062 0.000000 - 2 gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene exon 1298962 1299062 0.000000 - . gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene CDS 1300234 1300303 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene exon 1300234 1300303 0.000000 - . gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene CDS 1301007 1301060 0.000000 - 0 gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene exon 1301007 1301079 0.000000 - . gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene exon 1373478 1373525 0.000000 - . gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene exon 1373606 1373816 0.000000 - . gene_id "SDCBP2"; transcript_id "NR_037661:uc021vzo.1"; -chr20 hg19_knownGene CDS 1298683 1299062 0.000000 - 2 gene_id "FKBP1A-SDCBP2"; transcript_id "AK309026:uc010gac.2"; -chr20 hg19_knownGene exon 1298215 1299062 0.000000 - . gene_id "FKBP1A-SDCBP2"; transcript_id "AK309026:uc010gac.2"; -chr20 hg19_knownGene CDS 1300234 1300303 0.000000 - 0 gene_id "FKBP1A-SDCBP2"; transcript_id "AK309026:uc010gac.2"; -chr20 hg19_knownGene exon 1300234 1300303 0.000000 - . gene_id "FKBP1A-SDCBP2"; transcript_id "AK309026:uc010gac.2"; -chr20 hg19_knownGene CDS 1301007 1301060 0.000000 - 0 gene_id "FKBP1A-SDCBP2"; transcript_id "AK309026:uc010gac.2"; -chr20 hg19_knownGene exon 1301007 1301079 0.000000 - . gene_id "FKBP1A-SDCBP2"; transcript_id "AK309026:uc010gac.2"; -chr20 hg19_knownGene exon 1373478 1373525 0.000000 - . gene_id "FKBP1A-SDCBP2"; transcript_id "AK309026:uc010gac.2"; -chr20 hg19_knownGene exon 1373606 1373816 0.000000 - . gene_id "FKBP1A-SDCBP2"; transcript_id "AK309026:uc010gac.2"; -chr20 hg19_knownGene exon 1349621 1350716 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_000801:uc002wey.3"; -chr20 hg19_knownGene CDS 1352759 1352884 0.000000 - 0 gene_id "FKBP1A"; transcript_id "NM_000801:uc002wey.3"; -chr20 hg19_knownGene exon 1352720 1352884 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_000801:uc002wey.3"; -chr20 hg19_knownGene CDS 1356135 1356247 0.000000 - 2 gene_id "FKBP1A"; transcript_id "NM_000801:uc002wey.3"; -chr20 hg19_knownGene exon 1356135 1356247 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_000801:uc002wey.3"; -chr20 hg19_knownGene CDS 1373478 1373525 0.000000 - 2 gene_id "FKBP1A"; transcript_id "NM_000801:uc002wey.3"; -chr20 hg19_knownGene exon 1373478 1373525 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_000801:uc002wey.3"; -chr20 hg19_knownGene CDS 1373606 1373642 0.000000 - 0 gene_id "FKBP1A"; transcript_id "NM_000801:uc002wey.3"; -chr20 hg19_knownGene exon 1373606 1373816 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_000801:uc002wey.3"; -chr20 hg19_knownGene CDS 1350676 1350716 0.000000 - 2 gene_id "FKBP1A"; transcript_id "NM_001199786:uc002wez.3"; -chr20 hg19_knownGene exon 1349621 1350716 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_001199786:uc002wez.3"; -chr20 hg19_knownGene CDS 1352720 1352884 0.000000 - 2 gene_id "FKBP1A"; transcript_id "NM_001199786:uc002wez.3"; -chr20 hg19_knownGene exon 1352720 1352884 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_001199786:uc002wez.3"; -chr20 hg19_knownGene CDS 1373478 1373525 0.000000 - 2 gene_id "FKBP1A"; transcript_id "NM_001199786:uc002wez.3"; -chr20 hg19_knownGene exon 1373478 1373525 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_001199786:uc002wez.3"; -chr20 hg19_knownGene CDS 1373606 1373642 0.000000 - 0 gene_id "FKBP1A"; transcript_id "NM_001199786:uc002wez.3"; -chr20 hg19_knownGene exon 1373606 1373816 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_001199786:uc002wez.3"; -chr20 hg19_knownGene CDS 1352703 1352884 0.000000 - 2 gene_id "FKBP1A"; transcript_id "AB241124:uc002wfb.3"; -chr20 hg19_knownGene exon 1352356 1352884 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241124:uc002wfb.3"; -chr20 hg19_knownGene CDS 1373478 1373525 0.000000 - 2 gene_id "FKBP1A"; transcript_id "AB241124:uc002wfb.3"; -chr20 hg19_knownGene exon 1373478 1373525 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241124:uc002wfb.3"; -chr20 hg19_knownGene CDS 1373606 1373642 0.000000 - 0 gene_id "FKBP1A"; transcript_id "AB241124:uc002wfb.3"; -chr20 hg19_knownGene exon 1373606 1373816 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241124:uc002wfb.3"; -chr20 hg19_knownGene CDS 1352759 1352884 0.000000 - 0 gene_id "FKBP1A"; transcript_id "NM_054014:uc002wfa.3"; -chr20 hg19_knownGene exon 1352356 1352884 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_054014:uc002wfa.3"; -chr20 hg19_knownGene CDS 1356135 1356247 0.000000 - 2 gene_id "FKBP1A"; transcript_id "NM_054014:uc002wfa.3"; -chr20 hg19_knownGene exon 1356135 1356247 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_054014:uc002wfa.3"; -chr20 hg19_knownGene CDS 1373478 1373525 0.000000 - 2 gene_id "FKBP1A"; transcript_id "NM_054014:uc002wfa.3"; -chr20 hg19_knownGene exon 1373478 1373525 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_054014:uc002wfa.3"; -chr20 hg19_knownGene CDS 1373606 1373642 0.000000 - 0 gene_id "FKBP1A"; transcript_id "NM_054014:uc002wfa.3"; -chr20 hg19_knownGene exon 1373606 1373816 0.000000 - . gene_id "FKBP1A"; transcript_id "NM_054014:uc002wfa.3"; -chr20 hg19_knownGene exon 1352720 1352884 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241125:uc010gaf.2"; -chr20 hg19_knownGene exon 1356135 1356247 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241125:uc010gaf.2"; -chr20 hg19_knownGene exon 1358074 1358155 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241125:uc010gaf.2"; -chr20 hg19_knownGene exon 1373478 1373525 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241125:uc010gaf.2"; -chr20 hg19_knownGene exon 1373606 1373816 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241125:uc010gaf.2"; -chr20 hg19_knownGene CDS 1352759 1352884 0.000000 - 0 gene_id "FKBP1A"; transcript_id "AB241123:uc010gae.2"; -chr20 hg19_knownGene exon 1352720 1352884 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241123:uc010gae.2"; -chr20 hg19_knownGene CDS 1356135 1356247 0.000000 - 2 gene_id "FKBP1A"; transcript_id "AB241123:uc010gae.2"; -chr20 hg19_knownGene exon 1356135 1356247 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241123:uc010gae.2"; -chr20 hg19_knownGene CDS 1373606 1373642 0.000000 - 0 gene_id "FKBP1A"; transcript_id "AB241123:uc010gae.2"; -chr20 hg19_knownGene exon 1373606 1373816 0.000000 - . gene_id "FKBP1A"; transcript_id "AB241123:uc010gae.2"; -chr20 hg19_knownGene CDS 1424397 1424556 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene exon 1422807 1424556 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene CDS 1426311 1426475 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene exon 1426311 1426475 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene CDS 1433138 1433275 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene exon 1433138 1433275 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene CDS 1433676 1433785 0.000000 - 0 gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene exon 1433676 1433785 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene CDS 1434858 1434950 0.000000 - 0 gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene exon 1434858 1434950 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene CDS 1435612 1435777 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene exon 1435612 1435777 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene CDS 1438845 1438919 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene exon 1438845 1438919 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene CDS 1444974 1445071 0.000000 - 0 gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene exon 1444974 1445071 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene CDS 1447365 1447469 0.000000 - 0 gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene exon 1447365 1448337 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_016143:uc002wfc.3"; -chr20 hg19_knownGene CDS 1424397 1424556 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene exon 1422807 1424556 0.000000 - . gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene CDS 1426311 1426475 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene exon 1426311 1426475 0.000000 - . gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene CDS 1433138 1433275 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene exon 1433138 1433275 0.000000 - . gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene CDS 1433676 1433785 0.000000 - 0 gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene exon 1433676 1433785 0.000000 - . gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene CDS 1434858 1434950 0.000000 - 0 gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene exon 1434858 1434950 0.000000 - . gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene CDS 1435612 1435682 0.000000 - 2 gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene exon 1435612 1435682 0.000000 - . gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene CDS 1438845 1438875 0.000000 - 0 gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene exon 1438845 1438919 0.000000 - . gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene exon 1447365 1448337 0.000000 - . gene_id "NSFL1C"; transcript_id "NR_038164:uc021vzq.1"; -chr20 hg19_knownGene CDS 1424397 1424556 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene exon 1422807 1424556 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene CDS 1426311 1426475 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene exon 1426311 1426475 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene CDS 1433138 1433275 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene exon 1433138 1433275 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene CDS 1433676 1433785 0.000000 - 0 gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene exon 1433676 1433785 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene CDS 1435612 1435777 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene exon 1435612 1435777 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene CDS 1438845 1438919 0.000000 - 1 gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene exon 1438845 1438919 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene CDS 1444974 1445071 0.000000 - 0 gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene exon 1444974 1445071 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene CDS 1447365 1447469 0.000000 - 0 gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene exon 1447365 1448337 0.000000 - . gene_id "NSFL1C"; transcript_id "NM_018839:uc002wfe.3"; -chr20 hg19_knownGene CDS 1456815 1456981 0.000000 - 2 gene_id "SIRPB2"; transcript_id "NM_001134836:uc002wfh.3"; -chr20 hg19_knownGene exon 1455236 1456981 0.000000 - . gene_id "SIRPB2"; transcript_id "NM_001134836:uc002wfh.3"; -chr20 hg19_knownGene CDS 1457983 1458048 0.000000 - 2 gene_id "SIRPB2"; transcript_id "NM_001134836:uc002wfh.3"; -chr20 hg19_knownGene exon 1457983 1458048 0.000000 - . gene_id "SIRPB2"; transcript_id "NM_001134836:uc002wfh.3"; -chr20 hg19_knownGene CDS 1458911 1459252 0.000000 - 2 gene_id "SIRPB2"; transcript_id "NM_001134836:uc002wfh.3"; -chr20 hg19_knownGene exon 1458911 1459252 0.000000 - . gene_id "SIRPB2"; transcript_id "NM_001134836:uc002wfh.3"; -chr20 hg19_knownGene CDS 1460639 1460710 0.000000 - 2 gene_id "SIRPB2"; transcript_id "NM_001134836:uc002wfh.3"; -chr20 hg19_knownGene exon 1460639 1460710 0.000000 - . gene_id "SIRPB2"; transcript_id "NM_001134836:uc002wfh.3"; -chr20 hg19_knownGene CDS 1471921 1472005 0.000000 - 0 gene_id "SIRPB2"; transcript_id "NM_001134836:uc002wfh.3"; -chr20 hg19_knownGene exon 1471921 1472233 0.000000 - . gene_id "SIRPB2"; transcript_id "NM_001134836:uc002wfh.3"; -chr20 hg19_knownGene CDS 1456815 1456981 0.000000 - 2 gene_id "SIRPB2"; transcript_id "NM_001122962:uc002wfg.2"; -chr20 hg19_knownGene exon 1455236 1456981 0.000000 - . gene_id "SIRPB2"; transcript_id "NM_001122962:uc002wfg.2"; -chr20 hg19_knownGene CDS 1457983 1458048 0.000000 - 2 gene_id "SIRPB2"; transcript_id "NM_001122962:uc002wfg.2"; -chr20 hg19_knownGene exon 1457983 1458048 0.000000 - . gene_id "SIRPB2"; transcript_id "NM_001122962:uc002wfg.2"; -chr20 hg19_knownGene CDS 1458911 1459252 0.000000 - 2 gene_id "SIRPB2"; transcript_id "NM_001122962:uc002wfg.2"; -chr20 hg19_knownGene exon 1458911 1459252 0.000000 - . gene_id "SIRPB2"; transcript_id "NM_001122962:uc002wfg.2"; -chr20 hg19_knownGene CDS 1460345 1460710 0.000000 - 2 gene_id "SIRPB2"; transcript_id "NM_001122962:uc002wfg.2"; -chr20 hg19_knownGene exon 1460345 1460710 0.000000 - . gene_id "SIRPB2"; transcript_id "NM_001122962:uc002wfg.2"; -chr20 hg19_knownGene CDS 1471921 1472005 0.000000 - 0 gene_id "SIRPB2"; transcript_id "NM_001122962:uc002wfg.2"; -chr20 hg19_knownGene exon 1471921 1472233 0.000000 - . gene_id "SIRPB2"; transcript_id "NM_001122962:uc002wfg.2"; -chr20 hg19_knownGene CDS 1457798 1458048 0.000000 - 2 gene_id "SIRPB2"; transcript_id "AK294440:uc010zpr.1"; -chr20 hg19_knownGene exon 1457285 1458048 0.000000 - . gene_id "SIRPB2"; transcript_id "AK294440:uc010zpr.1"; -chr20 hg19_knownGene CDS 1458911 1459252 0.000000 - 2 gene_id "SIRPB2"; transcript_id "AK294440:uc010zpr.1"; -chr20 hg19_knownGene exon 1458911 1459252 0.000000 - . gene_id "SIRPB2"; transcript_id "AK294440:uc010zpr.1"; -chr20 hg19_knownGene CDS 1460345 1460381 0.000000 - 0 gene_id "SIRPB2"; transcript_id "AK294440:uc010zpr.1"; -chr20 hg19_knownGene exon 1460345 1460439 0.000000 - . gene_id "SIRPB2"; transcript_id "AK294440:uc010zpr.1"; -chr20 hg19_knownGene exon 1460571 1460710 0.000000 - . gene_id "SIRPB2"; transcript_id "AK294440:uc010zpr.1"; -chr20 hg19_knownGene exon 1471921 1472233 0.000000 - . gene_id "SIRPB2"; transcript_id "AK294440:uc010zpr.1"; -chr20 hg19_knownGene CDS 1515074 1515087 0.000000 - 2 gene_id "SIRPD"; transcript_id "NM_178460:uc002wfi.3"; -chr20 hg19_knownGene exon 1514897 1515087 0.000000 - . gene_id "SIRPD"; transcript_id "NM_178460:uc002wfi.3"; -chr20 hg19_knownGene CDS 1517801 1517956 0.000000 - 2 gene_id "SIRPD"; transcript_id "NM_178460:uc002wfi.3"; -chr20 hg19_knownGene exon 1517801 1517956 0.000000 - . gene_id "SIRPD"; transcript_id "NM_178460:uc002wfi.3"; -chr20 hg19_knownGene CDS 1532337 1532684 0.000000 - 2 gene_id "SIRPD"; transcript_id "NM_178460:uc002wfi.3"; -chr20 hg19_knownGene exon 1532337 1532684 0.000000 - . gene_id "SIRPD"; transcript_id "NM_178460:uc002wfi.3"; -chr20 hg19_knownGene CDS 1538227 1538299 0.000000 - 0 gene_id "SIRPD"; transcript_id "NM_178460:uc002wfi.3"; -chr20 hg19_knownGene exon 1538227 1538343 0.000000 - . gene_id "SIRPD"; transcript_id "NM_178460:uc002wfi.3"; -chr20 hg19_knownGene exon 1545029 1546143 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene CDS 1546804 1546913 0.000000 - 2 gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene exon 1546799 1546913 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene CDS 1551451 1551783 0.000000 - 2 gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene exon 1551451 1551783 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene CDS 1552366 1552683 0.000000 - 2 gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene exon 1552366 1552683 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene CDS 1558984 1559340 0.000000 - 2 gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene exon 1558984 1559340 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene CDS 1600515 1600590 0.000000 - 0 gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene exon 1600515 1600689 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_006065:uc010gai.3"; -chr20 hg19_knownGene exon 1545029 1546143 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_001083910:uc002wfk.4"; -chr20 hg19_knownGene CDS 1546804 1546913 0.000000 - 2 gene_id "SIRPB1"; transcript_id "NM_001083910:uc002wfk.4"; -chr20 hg19_knownGene exon 1546799 1546913 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_001083910:uc002wfk.4"; -chr20 hg19_knownGene CDS 1558984 1559340 0.000000 - 2 gene_id "SIRPB1"; transcript_id "NM_001083910:uc002wfk.4"; -chr20 hg19_knownGene exon 1558984 1559340 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_001083910:uc002wfk.4"; -chr20 hg19_knownGene CDS 1600515 1600590 0.000000 - 0 gene_id "SIRPB1"; transcript_id "NM_001083910:uc002wfk.4"; -chr20 hg19_knownGene exon 1600515 1600689 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_001083910:uc002wfk.4"; -chr20 hg19_knownGene exon 1577986 1578928 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene CDS 1579473 1579582 0.000000 - 2 gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene exon 1579468 1579582 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene CDS 1584456 1584788 0.000000 - 2 gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene exon 1584456 1584788 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene CDS 1585388 1585705 0.000000 - 2 gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene exon 1585388 1585705 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene CDS 1592003 1592359 0.000000 - 2 gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene exon 1592003 1592359 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene CDS 1600515 1600590 0.000000 - 0 gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene exon 1600515 1600689 0.000000 - . gene_id "SIRPB1"; transcript_id "NM_001135844:uc002wfl.4"; -chr20 hg19_knownGene exon 1611583 1611595 0.000000 + . gene_id "AK093519"; transcript_id "AK093519:uc002wfp.1"; -chr20 hg19_knownGene exon 1614154 1614366 0.000000 + . gene_id "AK093519"; transcript_id "AK093519:uc002wfp.1"; -chr20 hg19_knownGene exon 1617852 1617996 0.000000 + . gene_id "AK093519"; transcript_id "AK093519:uc002wfp.1"; -chr20 hg19_knownGene exon 1626682 1629118 0.000000 + . gene_id "AK093519"; transcript_id "AK093519:uc002wfp.1"; -chr20 hg19_knownGene exon 1609798 1610282 0.000000 - . gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene CDS 1610873 1610952 0.000000 - 2 gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene exon 1610868 1610952 0.000000 - . gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene CDS 1615913 1616245 0.000000 - 2 gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene exon 1615913 1616245 0.000000 - . gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene CDS 1616834 1617151 0.000000 - 2 gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene exon 1616834 1617151 0.000000 - . gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene CDS 1629698 1630054 0.000000 - 2 gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene exon 1629698 1630054 0.000000 - . gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene CDS 1638288 1638360 0.000000 - 0 gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene exon 1638288 1638425 0.000000 - . gene_id "SIRPG"; transcript_id "NM_018556:uc002wfm.1"; -chr20 hg19_knownGene exon 1609798 1610282 0.000000 - . gene_id "SIRPG"; transcript_id "NM_001039508:uc002wfn.1"; -chr20 hg19_knownGene CDS 1610873 1610952 0.000000 - 2 gene_id "SIRPG"; transcript_id "NM_001039508:uc002wfn.1"; -chr20 hg19_knownGene exon 1610868 1610952 0.000000 - . gene_id "SIRPG"; transcript_id "NM_001039508:uc002wfn.1"; -chr20 hg19_knownGene CDS 1616834 1617151 0.000000 - 2 gene_id "SIRPG"; transcript_id "NM_001039508:uc002wfn.1"; -chr20 hg19_knownGene exon 1616834 1617151 0.000000 - . gene_id "SIRPG"; transcript_id "NM_001039508:uc002wfn.1"; -chr20 hg19_knownGene CDS 1629698 1630054 0.000000 - 2 gene_id "SIRPG"; transcript_id "NM_001039508:uc002wfn.1"; -chr20 hg19_knownGene exon 1629698 1630054 0.000000 - . gene_id "SIRPG"; transcript_id "NM_001039508:uc002wfn.1"; -chr20 hg19_knownGene CDS 1638288 1638360 0.000000 - 0 gene_id "SIRPG"; transcript_id "NM_001039508:uc002wfn.1"; -chr20 hg19_knownGene exon 1638288 1638425 0.000000 - . gene_id "SIRPG"; transcript_id "NM_001039508:uc002wfn.1"; -chr20 hg19_knownGene exon 1609798 1610282 0.000000 - . gene_id "SIRPG"; transcript_id "NM_080816:uc002wfo.1"; -chr20 hg19_knownGene CDS 1610873 1610952 0.000000 - 2 gene_id "SIRPG"; transcript_id "NM_080816:uc002wfo.1"; -chr20 hg19_knownGene exon 1610868 1610952 0.000000 - . gene_id "SIRPG"; transcript_id "NM_080816:uc002wfo.1"; -chr20 hg19_knownGene CDS 1629698 1630054 0.000000 - 2 gene_id "SIRPG"; transcript_id "NM_080816:uc002wfo.1"; -chr20 hg19_knownGene exon 1629698 1630054 0.000000 - . gene_id "SIRPG"; transcript_id "NM_080816:uc002wfo.1"; -chr20 hg19_knownGene CDS 1638288 1638360 0.000000 - 0 gene_id "SIRPG"; transcript_id "NM_080816:uc002wfo.1"; -chr20 hg19_knownGene exon 1638288 1638425 0.000000 - . gene_id "SIRPG"; transcript_id "NM_080816:uc002wfo.1"; -chr20 hg19_knownGene exon 1754011 1754188 0.000000 - . gene_id "LOC100289473"; transcript_id "NR_037142:uc021vzr.1"; -chr20 hg19_knownGene exon 1755157 1755311 0.000000 - . gene_id "LOC100289473"; transcript_id "NR_037142:uc021vzr.1"; -chr20 hg19_knownGene exon 1759166 1759494 0.000000 - . gene_id "LOC100289473"; transcript_id "NR_037142:uc021vzr.1"; -chr20 hg19_knownGene exon 1760308 1760392 0.000000 - . gene_id "LOC100289473"; transcript_id "NR_037142:uc021vzr.1"; -chr20 hg19_knownGene exon 1874813 1875163 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene CDS 1876094 1876172 0.000000 + 0 gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene exon 1876085 1876172 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene CDS 1895745 1896101 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene exon 1895745 1896101 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene CDS 1902041 1902358 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene exon 1902041 1902358 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene CDS 1902959 1903291 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene exon 1902959 1903291 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene CDS 1905410 1905523 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene exon 1905410 1905523 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene CDS 1908521 1908545 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene exon 1908521 1908545 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene CDS 1915361 1915400 0.000000 + 1 gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene exon 1915361 1915400 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene CDS 1917966 1918211 0.000000 + 0 gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene exon 1917966 1920540 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040022:uc002wfq.3"; -chr20 hg19_knownGene exon 1874813 1875163 0.000000 + . gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene CDS 1876094 1876172 0.000000 + 0 gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene exon 1876085 1876172 0.000000 + . gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene CDS 1895805 1896101 0.000000 + 2 gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene exon 1895805 1896101 0.000000 + . gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene CDS 1902041 1902358 0.000000 + 2 gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene exon 1902041 1902358 0.000000 + . gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene CDS 1902959 1903291 0.000000 + 2 gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene exon 1902959 1903291 0.000000 + . gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene CDS 1905410 1905523 0.000000 + 2 gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene exon 1905410 1905523 0.000000 + . gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene CDS 1908521 1908545 0.000000 + 2 gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene exon 1908521 1908545 0.000000 + . gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene CDS 1915361 1915400 0.000000 + 1 gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene exon 1915361 1915400 0.000000 + . gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene CDS 1917966 1918211 0.000000 + 0 gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene exon 1917966 1920540 0.000000 + . gene_id "SIRPA"; transcript_id "AK298243:uc010zps.2"; -chr20 hg19_knownGene exon 1875425 1875442 0.000000 + . gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene CDS 1876094 1876172 0.000000 + 0 gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene exon 1876085 1876172 0.000000 + . gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene CDS 1895745 1896101 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene exon 1895745 1896101 0.000000 + . gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene CDS 1902041 1902358 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene exon 1902041 1902358 0.000000 + . gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene CDS 1902959 1903291 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene exon 1902959 1903291 0.000000 + . gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene CDS 1905410 1905523 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene exon 1905410 1905523 0.000000 + . gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene CDS 1908521 1908545 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene exon 1908521 1908545 0.000000 + . gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene CDS 1915361 1915400 0.000000 + 1 gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene exon 1915361 1915400 0.000000 + . gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene CDS 1917966 1918211 0.000000 + 0 gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene exon 1917966 1920540 0.000000 + . gene_id "SIRPA"; transcript_id "NM_080792:uc002wfr.3"; -chr20 hg19_knownGene CDS 1876094 1876172 0.000000 + 0 gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene exon 1875826 1876172 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene CDS 1895745 1896101 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene exon 1895745 1896101 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene CDS 1902041 1902358 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene exon 1902041 1902358 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene CDS 1902959 1903291 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene exon 1902959 1903291 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene CDS 1905410 1905523 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene exon 1905410 1905523 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene CDS 1908521 1908545 0.000000 + 2 gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene exon 1908521 1908545 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene CDS 1915361 1915400 0.000000 + 1 gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene exon 1915361 1915400 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene CDS 1917966 1918211 0.000000 + 0 gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene exon 1917966 1920540 0.000000 + . gene_id "SIRPA"; transcript_id "NM_001040023:uc002wfs.3"; -chr20 hg19_knownGene CDS 1876094 1876172 0.000000 + 0 gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene exon 1876085 1876172 0.000000 + . gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene CDS 1895745 1896101 0.000000 + 2 gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene exon 1895745 1896101 0.000000 + . gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene CDS 1902041 1902358 0.000000 + 2 gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene exon 1902041 1902358 0.000000 + . gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene CDS 1902959 1903291 0.000000 + 2 gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene exon 1902959 1903291 0.000000 + . gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene CDS 1905410 1905523 0.000000 + 2 gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene exon 1905410 1905523 0.000000 + . gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene CDS 1908521 1908545 0.000000 + 2 gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene exon 1908521 1908545 0.000000 + . gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene CDS 1915361 1915412 0.000000 + 1 gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene exon 1915361 1915412 0.000000 + . gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene CDS 1917966 1918211 0.000000 + 0 gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene exon 1917966 1920540 0.000000 + . gene_id "SIRPA"; transcript_id "BC033092:uc002wft.3"; -chr20 hg19_knownGene CDS 1960972 1961604 0.000000 - 0 gene_id "PDYN"; transcript_id "NM_001190892:uc010gaj.3"; -chr20 hg19_knownGene exon 1959402 1961604 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190892:uc010gaj.3"; -chr20 hg19_knownGene CDS 1963602 1963730 0.000000 - 0 gene_id "PDYN"; transcript_id "NM_001190892:uc010gaj.3"; -chr20 hg19_knownGene exon 1963602 1963749 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190892:uc010gaj.3"; -chr20 hg19_knownGene exon 1973230 1973452 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190892:uc010gaj.3"; -chr20 hg19_knownGene CDS 1960972 1961604 0.000000 - 0 gene_id "PDYN"; transcript_id "NM_001190900:uc021vzs.1"; -chr20 hg19_knownGene exon 1959402 1961604 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190900:uc021vzs.1"; -chr20 hg19_knownGene CDS 1963602 1963730 0.000000 - 0 gene_id "PDYN"; transcript_id "NM_001190900:uc021vzs.1"; -chr20 hg19_knownGene exon 1963602 1963749 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190900:uc021vzs.1"; -chr20 hg19_knownGene exon 1973230 1973289 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190900:uc021vzs.1"; -chr20 hg19_knownGene exon 1974333 1974394 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190900:uc021vzs.1"; -chr20 hg19_knownGene CDS 1960972 1961604 0.000000 - 0 gene_id "PDYN"; transcript_id "NM_001190898:uc021vzt.1"; -chr20 hg19_knownGene exon 1959402 1961604 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190898:uc021vzt.1"; -chr20 hg19_knownGene CDS 1963602 1963730 0.000000 - 0 gene_id "PDYN"; transcript_id "NM_001190898:uc021vzt.1"; -chr20 hg19_knownGene exon 1963602 1963746 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190898:uc021vzt.1"; -chr20 hg19_knownGene exon 1973230 1973289 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190898:uc021vzt.1"; -chr20 hg19_knownGene exon 1974557 1974931 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190898:uc021vzt.1"; -chr20 hg19_knownGene CDS 1960972 1961604 0.000000 - 0 gene_id "PDYN"; transcript_id "NM_001190899:uc021vzu.1"; -chr20 hg19_knownGene exon 1959402 1961604 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190899:uc021vzu.1"; -chr20 hg19_knownGene CDS 1963602 1963730 0.000000 - 0 gene_id "PDYN"; transcript_id "NM_001190899:uc021vzu.1"; -chr20 hg19_knownGene exon 1963602 1963749 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190899:uc021vzu.1"; -chr20 hg19_knownGene exon 1974557 1974931 0.000000 - . gene_id "PDYN"; transcript_id "NM_001190899:uc021vzu.1"; -chr20 hg19_knownGene CDS 1960972 1961604 0.000000 - 0 gene_id "PDYN"; transcript_id "NM_024411:uc002wfv.3"; -chr20 hg19_knownGene exon 1959402 1961604 0.000000 - . gene_id "PDYN"; transcript_id "NM_024411:uc002wfv.3"; -chr20 hg19_knownGene CDS 1963602 1963730 0.000000 - 0 gene_id "PDYN"; transcript_id "NM_024411:uc002wfv.3"; -chr20 hg19_knownGene exon 1963602 1963749 0.000000 - . gene_id "PDYN"; transcript_id "NM_024411:uc002wfv.3"; -chr20 hg19_knownGene exon 1973230 1973289 0.000000 - . gene_id "PDYN"; transcript_id "NM_024411:uc002wfv.3"; -chr20 hg19_knownGene exon 1974557 1974931 0.000000 - . gene_id "PDYN"; transcript_id "NM_024411:uc002wfv.3"; -chr20 hg19_knownGene exon 1927892 1928297 0.000000 + . gene_id "AK090681"; transcript_id "AK090681:uc002wfu.1"; -chr20 hg19_knownGene exon 1932125 1932194 0.000000 + . gene_id "AK090681"; transcript_id "AK090681:uc002wfu.1"; -chr20 hg19_knownGene exon 1946250 1946989 0.000000 + . gene_id "AK090681"; transcript_id "AK090681:uc002wfu.1"; -chr20 hg19_knownGene exon 1987578 1988163 0.000000 + . gene_id "AK090681"; transcript_id "AK090681:uc002wfu.1"; -chr20 hg19_knownGene CDS 2082528 2082821 0.000000 + 0 gene_id "STK35"; transcript_id "NM_080836:uc002wfw.4"; -chr20 hg19_knownGene exon 2082528 2082821 0.000000 + . gene_id "STK35"; transcript_id "NM_080836:uc002wfw.4"; -chr20 hg19_knownGene CDS 2083414 2084011 0.000000 + 0 gene_id "STK35"; transcript_id "NM_080836:uc002wfw.4"; -chr20 hg19_knownGene exon 2083414 2084011 0.000000 + . gene_id "STK35"; transcript_id "NM_080836:uc002wfw.4"; -chr20 hg19_knownGene CDS 2097312 2098021 0.000000 + 2 gene_id "STK35"; transcript_id "NM_080836:uc002wfw.4"; -chr20 hg19_knownGene exon 2097312 2098061 0.000000 + . gene_id "STK35"; transcript_id "NM_080836:uc002wfw.4"; -chr20 hg19_knownGene exon 2124430 2129198 0.000000 + . gene_id "STK35"; transcript_id "NM_080836:uc002wfw.4"; -chr20 hg19_knownGene CDS 2083519 2084011 0.000000 + 0 gene_id "STK35"; transcript_id "AK302629:uc010zpu.2"; -chr20 hg19_knownGene exon 2083414 2084011 0.000000 + . gene_id "STK35"; transcript_id "AK302629:uc010zpu.2"; -chr20 hg19_knownGene CDS 2124430 2124539 0.000000 + 2 gene_id "STK35"; transcript_id "AK302629:uc010zpu.2"; -chr20 hg19_knownGene exon 2124430 2129198 0.000000 + . gene_id "STK35"; transcript_id "AK302629:uc010zpu.2"; -chr20 hg19_knownGene CDS 2276710 2276716 0.000000 + 0 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2276613 2276716 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2290303 2290476 0.000000 + 2 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2290303 2290476 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2290824 2291063 0.000000 + 2 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2290824 2291063 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2291657 2291775 0.000000 + 2 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2291657 2291775 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2293544 2293672 0.000000 + 0 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2293544 2293672 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2297714 2297891 0.000000 + 0 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2297714 2297891 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2297996 2298131 0.000000 + 2 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2297996 2298131 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2306495 2306598 0.000000 + 1 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2306495 2306598 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2308766 2309011 0.000000 + 2 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2308766 2309011 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2312648 2312956 0.000000 + 2 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2312648 2312956 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2315762 2315919 0.000000 + 2 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2315762 2315919 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2320500 2320633 0.000000 + 0 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2320500 2320633 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2321080 2321224 0.000000 + 1 gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene exon 2321080 2321725 0.000000 + . gene_id "TGM3"; transcript_id "NM_003245:uc002wfx.4"; -chr20 hg19_knownGene CDS 2361615 2361621 0.000000 + 0 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2361554 2361621 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2375098 2375271 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2375098 2375271 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2375840 2376082 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2375840 2376082 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2377152 2377270 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2377152 2377270 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2378564 2378692 0.000000 + 0 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2378564 2378692 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2380207 2380384 0.000000 + 0 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2380207 2380384 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2380952 2381090 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2380952 2381090 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2384043 2384146 0.000000 + 1 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2384043 2384146 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2384227 2384469 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2384227 2384469 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2397878 2398219 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2397878 2398219 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2411092 2411246 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2411092 2411246 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2411540 2411673 0.000000 + 0 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2411540 2411673 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2413136 2413286 0.000000 + 1 gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene exon 2413136 2413399 0.000000 + . gene_id "TGM6"; transcript_id "NM_198994:uc002wfy.1"; -chr20 hg19_knownGene CDS 2361615 2361621 0.000000 + 0 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2361554 2361621 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2375098 2375271 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2375098 2375271 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2375840 2376082 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2375840 2376082 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2377152 2377270 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2377152 2377270 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2378564 2378692 0.000000 + 0 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2378564 2378692 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2380207 2380384 0.000000 + 0 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2380207 2380384 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2380952 2381090 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2380952 2381090 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2384043 2384146 0.000000 + 1 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2384043 2384146 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2384227 2384469 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2384227 2384469 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2397878 2398219 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2397878 2398219 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2411092 2411246 0.000000 + 2 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2411092 2411246 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene CDS 2413136 2413177 0.000000 + 0 gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2413136 2413399 0.000000 + . gene_id "TGM6"; transcript_id "NM_001254734:uc010gal.1"; -chr20 hg19_knownGene exon 2443598 2443693 0.000000 - . gene_id "SNORD119"; transcript_id "NR_003684:uc010gam.1"; -chr20 hg19_knownGene CDS 2442578 2442585 0.000000 - 2 gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene exon 2442281 2442585 0.000000 - . gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene CDS 2443282 2443407 0.000000 - 2 gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene exon 2443282 2443407 0.000000 - . gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene CDS 2443735 2443873 0.000000 - 0 gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene exon 2443735 2443873 0.000000 - . gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene CDS 2444393 2444545 0.000000 - 0 gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene exon 2444393 2444545 0.000000 - . gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene CDS 2446354 2446465 0.000000 - 1 gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene exon 2446354 2446465 0.000000 - . gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene CDS 2448253 2448404 0.000000 - 0 gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene exon 2448253 2448404 0.000000 - . gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene CDS 2451334 2451336 0.000000 - 0 gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene exon 2451334 2451499 0.000000 - . gene_id "SNRPB"; transcript_id "NM_003091:uc002wga.1"; -chr20 hg19_knownGene CDS 2442405 2442439 0.000000 - 2 gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene exon 2442281 2442439 0.000000 - . gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene CDS 2443282 2443407 0.000000 - 2 gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene exon 2443282 2443407 0.000000 - . gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene CDS 2443735 2443873 0.000000 - 0 gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene exon 2443735 2443873 0.000000 - . gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene CDS 2444393 2444545 0.000000 - 0 gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene exon 2444393 2444545 0.000000 - . gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene CDS 2446354 2446465 0.000000 - 1 gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene exon 2446354 2446465 0.000000 - . gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene CDS 2448253 2448404 0.000000 - 0 gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene exon 2448253 2448404 0.000000 - . gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene CDS 2451334 2451336 0.000000 - 0 gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene exon 2451334 2451499 0.000000 - . gene_id "SNRPB"; transcript_id "NM_198216:uc002wfz.1"; -chr20 hg19_knownGene CDS 2443265 2443407 0.000000 - 2 gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene exon 2442288 2443407 0.000000 - . gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene CDS 2443735 2443873 0.000000 - 0 gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene exon 2443735 2443873 0.000000 - . gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene CDS 2444393 2444545 0.000000 - 0 gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene exon 2444393 2444545 0.000000 - . gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene CDS 2446354 2446383 0.000000 - 0 gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene exon 2446354 2446465 0.000000 - . gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene exon 2447838 2447961 0.000000 - . gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene exon 2448253 2448404 0.000000 - . gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene exon 2451334 2451499 0.000000 - . gene_id "SNRPB"; transcript_id "AK301034:uc010zpv.2"; -chr20 hg19_knownGene CDS 2443265 2443407 0.000000 - 2 gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene exon 2442288 2443407 0.000000 - . gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene CDS 2443735 2443873 0.000000 - 0 gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene exon 2443735 2443873 0.000000 - . gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene CDS 2444393 2444545 0.000000 - 0 gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene exon 2444393 2444545 0.000000 - . gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene CDS 2446354 2446465 0.000000 - 1 gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene exon 2446354 2446465 0.000000 - . gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene CDS 2448253 2448404 0.000000 - 0 gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene exon 2448253 2448404 0.000000 - . gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene CDS 2451334 2451336 0.000000 - 0 gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene exon 2451334 2451499 0.000000 - . gene_id "SNRPB"; transcript_id "AK301206:uc002wgb.3"; -chr20 hg19_knownGene CDS 2447907 2447961 0.000000 - 1 gene_id "SNRPB"; transcript_id "AK307093:uc010gan.3"; -chr20 hg19_knownGene exon 2446882 2447961 0.000000 - . gene_id "SNRPB"; transcript_id "AK307093:uc010gan.3"; -chr20 hg19_knownGene CDS 2448253 2448404 0.000000 - 0 gene_id "SNRPB"; transcript_id "AK307093:uc010gan.3"; -chr20 hg19_knownGene exon 2448253 2448404 0.000000 - . gene_id "SNRPB"; transcript_id "AK307093:uc010gan.3"; -chr20 hg19_knownGene CDS 2451334 2451336 0.000000 - 0 gene_id "SNRPB"; transcript_id "AK307093:uc010gan.3"; -chr20 hg19_knownGene exon 2451334 2451499 0.000000 - . gene_id "SNRPB"; transcript_id "AK307093:uc010gan.3"; -chr20 hg19_knownGene exon 2454889 2455853 0.000000 - . gene_id "AK126717"; transcript_id "AK126717:uc002wgc.1"; -chr20 hg19_knownGene CDS 2463810 2465302 0.000000 - 2 gene_id "ZNF343"; transcript_id "AK055734:uc002wgd.1"; -chr20 hg19_knownGene exon 2462467 2465302 0.000000 - . gene_id "ZNF343"; transcript_id "AK055734:uc002wgd.1"; -chr20 hg19_knownGene CDS 2473345 2473378 0.000000 - 0 gene_id "ZNF343"; transcript_id "AK055734:uc002wgd.1"; -chr20 hg19_knownGene exon 2473345 2473565 0.000000 - . gene_id "ZNF343"; transcript_id "AK055734:uc002wgd.1"; -chr20 hg19_knownGene CDS 2463810 2465302 0.000000 - 2 gene_id "ZNF343"; transcript_id "NM_024325:uc002wge.1"; -chr20 hg19_knownGene exon 2462467 2465302 0.000000 - . gene_id "ZNF343"; transcript_id "NM_024325:uc002wge.1"; -chr20 hg19_knownGene CDS 2473345 2473471 0.000000 - 0 gene_id "ZNF343"; transcript_id "NM_024325:uc002wge.1"; -chr20 hg19_knownGene exon 2473345 2473471 0.000000 - . gene_id "ZNF343"; transcript_id "NM_024325:uc002wge.1"; -chr20 hg19_knownGene CDS 2474165 2474223 0.000000 - 2 gene_id "ZNF343"; transcript_id "NM_024325:uc002wge.1"; -chr20 hg19_knownGene exon 2474165 2474223 0.000000 - . gene_id "ZNF343"; transcript_id "NM_024325:uc002wge.1"; -chr20 hg19_knownGene CDS 2474424 2474541 0.000000 - 0 gene_id "ZNF343"; transcript_id "NM_024325:uc002wge.1"; -chr20 hg19_knownGene exon 2474424 2474690 0.000000 - . gene_id "ZNF343"; transcript_id "NM_024325:uc002wge.1"; -chr20 hg19_knownGene exon 2481302 2481388 0.000000 - . gene_id "ZNF343"; transcript_id "NM_024325:uc002wge.1"; -chr20 hg19_knownGene exon 2489527 2489778 0.000000 - . gene_id "ZNF343"; transcript_id "NM_024325:uc002wge.1"; -chr20 hg19_knownGene CDS 2463810 2465302 0.000000 - 2 gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene exon 2462467 2465302 0.000000 - . gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene CDS 2473345 2473471 0.000000 - 0 gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene exon 2473345 2473471 0.000000 - . gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene CDS 2474165 2474223 0.000000 - 2 gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene exon 2474165 2474223 0.000000 - . gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene CDS 2474424 2474541 0.000000 - 0 gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene exon 2474424 2474690 0.000000 - . gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene exon 2476061 2476170 0.000000 - . gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene exon 2481302 2481388 0.000000 - . gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene exon 2505101 2505165 0.000000 - . gene_id "ZNF343"; transcript_id "BC065009:uc010gao.1"; -chr20 hg19_knownGene exon 2539102 2539420 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2542610 2542656 0.000000 + 0 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2542504 2542656 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2552822 2552915 0.000000 + 1 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2552822 2552915 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2559792 2559873 0.000000 + 0 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2559792 2559873 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2560596 2560702 0.000000 + 2 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2560596 2560702 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2572956 2573054 0.000000 + 0 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2572956 2573054 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2575471 2575613 0.000000 + 0 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2575471 2575613 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2577797 2577944 0.000000 + 1 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2577797 2577944 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2582759 2582947 0.000000 + 0 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2582759 2582947 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2591065 2591244 0.000000 + 0 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2591065 2591244 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2592837 2592986 0.000000 + 0 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2592837 2592986 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene CDS 2593840 2594091 0.000000 + 0 gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2593840 2594666 0.000000 + . gene_id "TMC2"; transcript_id "AK316261:uc010zpw.1"; -chr20 hg19_knownGene exon 2539102 2539420 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2542610 2542656 0.000000 + 0 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2542504 2542656 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2552825 2552915 0.000000 + 1 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2552825 2552915 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2559792 2559873 0.000000 + 0 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2559792 2559873 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2560596 2560702 0.000000 + 2 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2560596 2560702 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2572956 2573054 0.000000 + 0 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2572956 2573054 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2575471 2575613 0.000000 + 0 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2575471 2575613 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2577797 2577944 0.000000 + 1 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2577797 2577944 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2582759 2582947 0.000000 + 0 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2582759 2582947 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2591065 2591244 0.000000 + 0 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2591065 2591244 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2592837 2592986 0.000000 + 0 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2592837 2592986 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2593840 2594091 0.000000 + 0 gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene exon 2593840 2594666 0.000000 + . gene_id "TMC2"; transcript_id "AK294013:uc010zpx.1"; -chr20 hg19_knownGene CDS 2517268 2517301 0.000000 + 0 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2517253 2517301 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2517915 2517962 0.000000 + 2 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2517915 2517962 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2539102 2539420 0.000000 + 2 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2539102 2539420 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2542504 2542656 0.000000 + 1 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2542504 2542656 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2552825 2552915 0.000000 + 1 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2552825 2552915 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2559792 2559873 0.000000 + 0 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2559792 2559873 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2560596 2560702 0.000000 + 2 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2560596 2560702 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2572956 2573054 0.000000 + 0 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2572956 2573054 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2575471 2575613 0.000000 + 0 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2575471 2575613 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2577797 2577944 0.000000 + 1 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2577797 2577944 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2582759 2582947 0.000000 + 0 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2582759 2582947 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2591065 2591244 0.000000 + 0 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2591065 2591244 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2592837 2592986 0.000000 + 0 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2592837 2592986 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2593840 2593968 0.000000 + 0 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2593840 2593968 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2596783 2596850 0.000000 + 0 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2596783 2596850 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2597718 2597957 0.000000 + 1 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2597718 2597957 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2604917 2605042 0.000000 + 1 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2604917 2605042 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2616572 2616650 0.000000 + 1 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2616572 2616650 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2618120 2618237 0.000000 + 0 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2618120 2618237 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2621780 2621994 0.000000 + 2 gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene exon 2621780 2622430 0.000000 + . gene_id "TMC2"; transcript_id "NM_080751:uc002wgf.1"; -chr20 hg19_knownGene CDS 2517268 2517301 0.000000 + 0 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2517253 2517301 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2539102 2539420 0.000000 + 2 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2539102 2539420 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2542504 2542656 0.000000 + 1 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2542504 2542656 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2552825 2552915 0.000000 + 1 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2552825 2552915 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2559792 2559873 0.000000 + 0 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2559792 2559873 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2560596 2560702 0.000000 + 2 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2560596 2560702 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2572956 2573054 0.000000 + 0 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2572956 2573054 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2575471 2575613 0.000000 + 0 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2575471 2575613 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2577797 2577944 0.000000 + 1 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2577797 2577944 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2582759 2582947 0.000000 + 0 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2582759 2582947 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2591065 2591244 0.000000 + 0 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2591065 2591244 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2592837 2592986 0.000000 + 0 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2592837 2592986 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2593840 2593968 0.000000 + 0 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2593840 2593968 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2596783 2596850 0.000000 + 0 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2596783 2596850 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2597718 2597957 0.000000 + 1 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2597718 2597957 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2604917 2605042 0.000000 + 1 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2604917 2605042 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2616572 2616650 0.000000 + 1 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2616572 2616650 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2618120 2618237 0.000000 + 0 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2618120 2618237 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene CDS 2621780 2621994 0.000000 + 2 gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2621780 2622430 0.000000 + . gene_id "TMC2"; transcript_id "AB463320:uc002wgg.1"; -chr20 hg19_knownGene exon 2633423 2633488 0.000000 + . gene_id "MIR1292"; transcript_id "NR_031699:uc021vzv.1"; -chr20 hg19_knownGene exon 2634858 2634932 0.000000 + . gene_id "SNORD110"; transcript_id "NR_003078:uc002wgj.3"; -chr20 hg19_knownGene exon 2635713 2635844 0.000000 + . gene_id "SNORA51"; transcript_id "NR_002981:uc002wgk.1"; -chr20 hg19_knownGene exon 2633178 2633309 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2633488 2633577 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2633925 2634039 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2635060 2635221 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2635395 2635593 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2635971 2636158 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2636241 2636392 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2636580 2636860 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2637047 2637195 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2637420 2637541 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2637727 2637864 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene exon 2638575 2639039 0.000000 + . gene_id "NOP56"; transcript_id "NR_027700:uc010zpy.2"; -chr20 hg19_knownGene CDS 2633307 2633309 0.000000 + 0 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2633178 2633309 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2633488 2633577 0.000000 + 0 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2633488 2633577 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2633925 2634039 0.000000 + 0 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2633925 2634039 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2635060 2635221 0.000000 + 2 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2635060 2635221 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2635395 2635593 0.000000 + 2 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2635395 2635593 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2635971 2636158 0.000000 + 1 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2635971 2636158 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2636241 2636392 0.000000 + 2 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2636241 2636392 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2636580 2636680 0.000000 + 0 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2636580 2636680 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2637047 2637195 0.000000 + 1 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2637047 2637195 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2637420 2637541 0.000000 + 2 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2637420 2637541 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2637727 2637864 0.000000 + 0 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2637727 2637864 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene CDS 2638575 2638937 0.000000 + 0 gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2638575 2639039 0.000000 + . gene_id "NOP56"; transcript_id "NM_006392:uc002wgh.3"; -chr20 hg19_knownGene exon 2633674 2633819 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene exon 2633925 2634039 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene exon 2635060 2635221 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene CDS 2635523 2635593 0.000000 + 0 gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene exon 2635395 2635593 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene CDS 2635971 2636158 0.000000 + 1 gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene exon 2635971 2636158 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene CDS 2636241 2636392 0.000000 + 2 gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene exon 2636241 2636392 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene CDS 2636580 2636680 0.000000 + 0 gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene exon 2636580 2636680 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene CDS 2637047 2637195 0.000000 + 1 gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene exon 2637047 2637195 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene CDS 2637420 2637541 0.000000 + 2 gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene exon 2637420 2637541 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene CDS 2637727 2637864 0.000000 + 0 gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene exon 2637727 2637864 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene CDS 2638575 2638937 0.000000 + 0 gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene exon 2638575 2639039 0.000000 + . gene_id "NOP56"; transcript_id "BX647513:uc002wgi.3"; -chr20 hg19_knownGene CDS 2639400 2639483 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2639041 2639483 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2640171 2640231 0.000000 - 1 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2640171 2640231 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2640345 2640439 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2640345 2640439 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2640676 2640822 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2640676 2640822 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2640909 2641011 0.000000 - 1 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2640909 2641011 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2641103 2641236 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2641103 2641236 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2641343 2641475 0.000000 - 1 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2641343 2641475 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2641555 2641615 0.000000 - 2 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2641555 2641615 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2644092 2644212 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2644092 2644212 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2644306 2644404 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2644306 2644404 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2644571 2644651 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2644571 2644651 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2644799 2644834 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene exon 2644799 2644843 0.000000 - . gene_id "IDH3B"; transcript_id "NM_006899:uc002wgp.3"; -chr20 hg19_knownGene CDS 2639091 2639168 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2639041 2639168 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2640171 2640231 0.000000 - 1 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2640171 2640231 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2640345 2640439 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2640345 2640439 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2640676 2640822 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2640676 2640822 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2640909 2641011 0.000000 - 1 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2640909 2641011 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2641103 2641236 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2641103 2641236 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2641343 2641475 0.000000 - 1 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2641343 2641475 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2641555 2641615 0.000000 - 2 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2641555 2641615 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2644092 2644212 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2644092 2644212 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2644306 2644404 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2644306 2644404 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2644571 2644651 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2644571 2644651 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2644799 2644834 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene exon 2644799 2644843 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174855:uc002wgq.3"; -chr20 hg19_knownGene CDS 2639400 2639483 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2639041 2639483 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene CDS 2640171 2640231 0.000000 - 1 gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2640171 2640231 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene CDS 2640345 2640439 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2640345 2640439 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene CDS 2640676 2640822 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2640676 2640822 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene CDS 2640909 2641011 0.000000 - 1 gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2640909 2641011 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene CDS 2641103 2641311 0.000000 - 0 gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2641103 2641475 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2641555 2641615 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2644092 2644212 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2644306 2644404 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2644571 2644651 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene exon 2644799 2644843 0.000000 - . gene_id "IDH3B"; transcript_id "NM_174856:uc002wgr.3"; -chr20 hg19_knownGene CDS 2641554 2641615 0.000000 - 2 gene_id "IDH3B"; transcript_id "AK300485:uc010zpz.1"; -chr20 hg19_knownGene exon 2641112 2641615 0.000000 - . gene_id "IDH3B"; transcript_id "AK300485:uc010zpz.1"; -chr20 hg19_knownGene CDS 2644092 2644212 0.000000 - 0 gene_id "IDH3B"; transcript_id "AK300485:uc010zpz.1"; -chr20 hg19_knownGene exon 2644092 2644212 0.000000 - . gene_id "IDH3B"; transcript_id "AK300485:uc010zpz.1"; -chr20 hg19_knownGene CDS 2644306 2644404 0.000000 - 0 gene_id "IDH3B"; transcript_id "AK300485:uc010zpz.1"; -chr20 hg19_knownGene exon 2644306 2644404 0.000000 - . gene_id "IDH3B"; transcript_id "AK300485:uc010zpz.1"; -chr20 hg19_knownGene CDS 2644571 2644651 0.000000 - 0 gene_id "IDH3B"; transcript_id "AK300485:uc010zpz.1"; -chr20 hg19_knownGene exon 2644571 2644651 0.000000 - . gene_id "IDH3B"; transcript_id "AK300485:uc010zpz.1"; -chr20 hg19_knownGene CDS 2644799 2644834 0.000000 - 0 gene_id "IDH3B"; transcript_id "AK300485:uc010zpz.1"; -chr20 hg19_knownGene exon 2644799 2644843 0.000000 - . gene_id "IDH3B"; transcript_id "AK300485:uc010zpz.1"; -chr20 hg19_knownGene CDS 2673792 2673794 0.000000 + 0 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2673524 2673794 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2674307 2674428 0.000000 + 0 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2674307 2674428 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2686223 2686379 0.000000 + 1 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2686223 2686379 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2686620 2686683 0.000000 + 0 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2686620 2686683 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2686855 2686910 0.000000 + 2 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2686855 2686910 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2688593 2688666 0.000000 + 0 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2688593 2688666 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2690220 2690288 0.000000 + 1 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2690220 2690288 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2729195 2729276 0.000000 + 1 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2729195 2729276 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2730047 2730164 0.000000 + 0 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2730047 2730164 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2730266 2730399 0.000000 + 2 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2730266 2730399 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2730493 2730619 0.000000 + 0 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2730493 2730619 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2732346 2732434 0.000000 + 2 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2732346 2732434 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2732568 2732633 0.000000 + 0 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2732568 2732633 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2732732 2732909 0.000000 + 0 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2732732 2732909 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2733003 2733191 0.000000 + 2 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2733003 2733191 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2736273 2736470 0.000000 + 2 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2736273 2736470 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene CDS 2739555 2739622 0.000000 + 2 gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2739555 2739630 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2739914 2740754 0.000000 + . gene_id "EBF4"; transcript_id "NM_001110514:uc002wgt.4"; -chr20 hg19_knownGene exon 2673524 2673794 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2674307 2674428 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2686223 2686379 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2686620 2686683 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2686855 2686910 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2688593 2688666 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2690220 2690288 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2729195 2729276 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2730047 2730164 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2730266 2730399 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2730493 2730619 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2732346 2732434 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2732568 2732633 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2732732 2732909 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2733003 2733191 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2736389 2736470 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2739555 2739630 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene exon 2739914 2740754 0.000000 + . gene_id "EBF4"; transcript_id "AB037863:uc002wgs.4"; -chr20 hg19_knownGene CDS 2774839 2775077 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2774715 2775077 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2775183 2775285 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2775183 2775285 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2775923 2776062 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2775923 2776062 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2776467 2776542 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2776467 2776542 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2776628 2776807 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2776628 2776807 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2776893 2777089 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2776893 2777089 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2777173 2777296 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2777173 2777296 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2777652 2777740 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2777652 2777740 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2777838 2777988 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2777838 2777988 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2778614 2778704 0.000000 - 1 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2778614 2778704 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2778798 2778937 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2778798 2778937 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2779074 2779183 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2779074 2779183 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2779372 2779539 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2779372 2779539 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2781047 2781218 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene exon 2781047 2781292 0.000000 - . gene_id "CPXM1"; transcript_id "NM_001184699:uc010gas.3"; -chr20 hg19_knownGene CDS 2774839 2775077 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2774715 2775077 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2775183 2775285 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2775183 2775285 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2775923 2776062 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2775923 2776062 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2776245 2776542 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2776245 2776542 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2776628 2776807 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2776628 2776807 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2776893 2777089 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2776893 2777089 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2777173 2777296 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2777173 2777296 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2777652 2777740 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2777652 2777740 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2777838 2777988 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2777838 2777988 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2778614 2778704 0.000000 - 1 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2778614 2778704 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2778798 2778937 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2778798 2778937 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2779074 2779183 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2779074 2779183 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2779372 2779539 0.000000 - 2 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2779372 2779539 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene CDS 2781047 2781218 0.000000 - 0 gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2781047 2781292 0.000000 - . gene_id "CPXM1"; transcript_id "NM_019609:uc002wgu.3"; -chr20 hg19_knownGene exon 2795614 2795663 0.000000 + . gene_id "C20orf141"; transcript_id "AK312218:uc010gat.3"; -chr20 hg19_knownGene CDS 2795831 2796090 0.000000 + 0 gene_id "C20orf141"; transcript_id "AK312218:uc010gat.3"; -chr20 hg19_knownGene exon 2795798 2796090 0.000000 + . gene_id "C20orf141"; transcript_id "AK312218:uc010gat.3"; -chr20 hg19_knownGene CDS 2796184 2796418 0.000000 + 1 gene_id "C20orf141"; transcript_id "AK312218:uc010gat.3"; -chr20 hg19_knownGene exon 2796184 2796476 0.000000 + . gene_id "C20orf141"; transcript_id "AK312218:uc010gat.3"; -chr20 hg19_knownGene CDS 2795831 2796090 0.000000 + 0 gene_id "C20orf141"; transcript_id "NM_080739:uc002wgw.3"; -chr20 hg19_knownGene exon 2795657 2796090 0.000000 + . gene_id "C20orf141"; transcript_id "NM_080739:uc002wgw.3"; -chr20 hg19_knownGene CDS 2796184 2796418 0.000000 + 1 gene_id "C20orf141"; transcript_id "NM_080739:uc002wgw.3"; -chr20 hg19_knownGene exon 2796184 2796476 0.000000 + . gene_id "C20orf141"; transcript_id "NM_080739:uc002wgw.3"; -chr20 hg19_knownGene CDS 2797201 2797656 0.000000 + 0 gene_id "TMEM239"; transcript_id "CCDS54444:uc021vzw.1"; -chr20 hg19_knownGene exon 2797201 2797659 0.000000 + . gene_id "TMEM239"; transcript_id "CCDS54444:uc021vzw.1"; -chr20 hg19_knownGene exon 2795614 2795663 0.000000 + . gene_id "TMEM239"; transcript_id "AK129653:uc002wgv.2"; -chr20 hg19_knownGene CDS 2795831 2796090 0.000000 + 0 gene_id "TMEM239"; transcript_id "AK129653:uc002wgv.2"; -chr20 hg19_knownGene exon 2795798 2796090 0.000000 + . gene_id "TMEM239"; transcript_id "AK129653:uc002wgv.2"; -chr20 hg19_knownGene CDS 2797190 2797691 0.000000 + 1 gene_id "TMEM239"; transcript_id "AK129653:uc002wgv.2"; -chr20 hg19_knownGene exon 2797190 2797804 0.000000 + . gene_id "TMEM239"; transcript_id "AK129653:uc002wgv.2"; -chr20 hg19_knownGene exon 2796976 2797061 0.000000 + . gene_id "TMEM239"; transcript_id "NM_001167670:uc002wgx.2"; -chr20 hg19_knownGene CDS 2797201 2797656 0.000000 + 0 gene_id "TMEM239"; transcript_id "NM_001167670:uc002wgx.2"; -chr20 hg19_knownGene exon 2797190 2797804 0.000000 + . gene_id "TMEM239"; transcript_id "NM_001167670:uc002wgx.2"; -chr20 hg19_knownGene CDS 2816111 2816355 0.000000 - 2 gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene exon 2815971 2816355 0.000000 - . gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene CDS 2816685 2816960 0.000000 - 2 gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene exon 2816685 2816960 0.000000 - . gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene CDS 2818878 2819124 0.000000 - 0 gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene exon 2818878 2819124 0.000000 - . gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene CDS 2819242 2819392 0.000000 - 1 gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene exon 2819242 2819392 0.000000 - . gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene CDS 2819490 2819728 0.000000 - 0 gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene exon 2819490 2819728 0.000000 - . gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene CDS 2819838 2819917 0.000000 - 2 gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene exon 2819838 2819917 0.000000 - . gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene CDS 2820435 2820558 0.000000 - 0 gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene exon 2820435 2820579 0.000000 - . gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene exon 2820857 2821332 0.000000 - . gene_id "FAM113A"; transcript_id "NM_022760:uc002wgz.1"; -chr20 hg19_knownGene CDS 2816111 2816355 0.000000 - 2 gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene exon 2815971 2816355 0.000000 - . gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene CDS 2816685 2816960 0.000000 - 2 gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene exon 2816685 2816960 0.000000 - . gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene CDS 2818878 2819124 0.000000 - 0 gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene exon 2818878 2819124 0.000000 - . gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene CDS 2819242 2819376 0.000000 - 0 gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene exon 2819242 2819392 0.000000 - . gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene exon 2819490 2819917 0.000000 - . gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene exon 2820435 2820579 0.000000 - . gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene exon 2820857 2821332 0.000000 - . gene_id "FAM113A"; transcript_id "AK293638:uc010zqa.1"; -chr20 hg19_knownGene CDS 2816111 2816355 0.000000 - 2 gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene exon 2815971 2816355 0.000000 - . gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene CDS 2816685 2816960 0.000000 - 2 gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene exon 2816685 2816960 0.000000 - . gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene CDS 2818878 2819124 0.000000 - 0 gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene exon 2818878 2819124 0.000000 - . gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene CDS 2819242 2819392 0.000000 - 1 gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene exon 2819242 2819392 0.000000 - . gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene CDS 2819490 2819575 0.000000 - 0 gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene exon 2819490 2819575 0.000000 - . gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene CDS 2819838 2819917 0.000000 - 2 gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene exon 2819838 2819917 0.000000 - . gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene CDS 2820435 2820558 0.000000 - 0 gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene exon 2820435 2820579 0.000000 - . gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene exon 2821512 2821797 0.000000 - . gene_id "FAM113A"; transcript_id "AK026029:uc002whc.1"; -chr20 hg19_knownGene CDS 2821421 2821473 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2821373 2821473 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2840365 2840453 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2840365 2840453 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2840700 2840797 0.000000 + 2 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2840700 2840797 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2840885 2841013 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2840885 2841013 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2841095 2841239 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2841095 2841239 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2841394 2841509 0.000000 + 2 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2841394 2841509 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2841616 2841738 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2841616 2841738 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2841871 2841926 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2841871 2841926 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2842261 2842350 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2842261 2842350 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2842451 2842545 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2842451 2842545 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2842700 2842776 0.000000 + 2 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2842700 2842776 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2843225 2843356 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2843225 2843356 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2843453 2843580 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2843453 2843580 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2843711 2843746 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2843711 2843746 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2843936 2844044 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2843936 2844044 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2844595 2844729 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2844595 2844729 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2844825 2844933 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2844825 2844933 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2845011 2845108 0.000000 + 2 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2845011 2845108 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2845193 2845300 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2845193 2845300 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2845624 2845701 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2845624 2845701 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2845794 2845963 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2845794 2845963 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2846045 2846141 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2846045 2846141 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2846858 2846961 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2846858 2846961 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2847076 2847217 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene exon 2847076 2847378 0.000000 + . gene_id "VPS16"; transcript_id "NM_022575:uc002whe.3"; -chr20 hg19_knownGene CDS 2821421 2821473 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2821373 2821473 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2840365 2840453 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2840365 2840453 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2840700 2840797 0.000000 + 2 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2840700 2840797 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2840885 2841013 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2840885 2841013 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2841095 2841239 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2841095 2841239 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2841394 2841509 0.000000 + 2 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2841394 2841509 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2841616 2841738 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2841616 2841738 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2841871 2841926 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2841871 2841926 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2842261 2842350 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2842261 2842350 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2843711 2843746 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2843711 2843746 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2843936 2844044 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2843936 2844044 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2844595 2844729 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2844595 2844729 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2844825 2844933 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2844825 2844933 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2845011 2845108 0.000000 + 2 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2845011 2845108 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2845193 2845300 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2845193 2845300 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2845624 2845701 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2845624 2845701 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2845794 2845963 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2845794 2845963 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2846045 2846141 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2846045 2846141 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2846858 2846961 0.000000 + 0 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2846858 2846961 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2847076 2847217 0.000000 + 1 gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene exon 2847076 2847378 0.000000 + . gene_id "VPS16"; transcript_id "NM_080413:uc002whf.3"; -chr20 hg19_knownGene CDS 2843192 2843580 0.000000 + 0 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2843102 2843580 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2843711 2843746 0.000000 + 1 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2843711 2843746 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2843936 2844044 0.000000 + 1 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2843936 2844044 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2844595 2844729 0.000000 + 0 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2844595 2844729 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2844825 2844933 0.000000 + 0 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2844825 2844933 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2845011 2845108 0.000000 + 2 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2845011 2845108 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2845193 2845300 0.000000 + 0 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2845193 2845300 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2845624 2845701 0.000000 + 0 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2845624 2845701 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2845794 2845963 0.000000 + 0 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2845794 2845963 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2846045 2846141 0.000000 + 1 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2846045 2846141 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2846858 2846961 0.000000 + 0 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2846858 2846961 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene CDS 2847076 2847217 0.000000 + 1 gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2847076 2847378 0.000000 + . gene_id "VPS16"; transcript_id "BC073959:uc002whg.3"; -chr20 hg19_knownGene exon 2854142 2854406 0.000000 + . gene_id "PTPRA"; transcript_id "AK294990:uc010zqb.1"; -chr20 hg19_knownGene exon 2903853 2903931 0.000000 + . gene_id "PTPRA"; transcript_id "AK294990:uc010zqb.1"; -chr20 hg19_knownGene exon 2928628 2928670 0.000000 + . gene_id "PTPRA"; transcript_id "AK294990:uc010zqb.1"; -chr20 hg19_knownGene CDS 2944924 2944996 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294990:uc010zqb.1"; -chr20 hg19_knownGene exon 2944918 2944996 0.000000 + . gene_id "PTPRA"; transcript_id "AK294990:uc010zqb.1"; -chr20 hg19_knownGene CDS 2945507 2945848 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK294990:uc010zqb.1"; -chr20 hg19_knownGene exon 2945507 2945848 0.000000 + . gene_id "PTPRA"; transcript_id "AK294990:uc010zqb.1"; -chr20 hg19_knownGene CDS 2967411 2967496 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK294990:uc010zqb.1"; -chr20 hg19_knownGene exon 2967411 2968751 0.000000 + . gene_id "PTPRA"; transcript_id "AK294990:uc010zqb.1"; -chr20 hg19_knownGene exon 2854142 2854406 0.000000 + . gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene CDS 2903905 2903931 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene exon 2903853 2903931 0.000000 + . gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene CDS 2928628 2928670 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene exon 2928628 2928670 0.000000 + . gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene CDS 2955861 2955887 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene exon 2955861 2955887 0.000000 + . gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene CDS 2967411 2967495 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene exon 2967411 2967495 0.000000 + . gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene CDS 2968678 2968751 0.000000 + 1 gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene exon 2968678 2968751 0.000000 + . gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene CDS 2968984 2969120 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene exon 2968984 2969120 0.000000 + . gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene CDS 2985702 2985788 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene exon 2985702 2985792 0.000000 + . gene_id "PTPRA"; transcript_id "AK297293:uc010zqc.1"; -chr20 hg19_knownGene exon 2844825 2844933 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2845011 2845108 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2845193 2845300 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2845624 2845701 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2845794 2845963 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2903853 2903931 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2928628 2928670 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 2944924 2944996 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2944918 2944996 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 2945507 2945848 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2945507 2945848 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 2955861 2955887 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2955861 2955887 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 2967411 2967495 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2967411 2967495 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 2968678 2968751 0.000000 + 1 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2968678 2968751 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 2968984 2969120 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2968984 2969120 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 2985702 2985792 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2985702 2985792 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 2987990 2988066 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2987990 2988066 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 2996495 2996531 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2996495 2996531 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 2998462 2998559 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2998462 2998559 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3001955 3002074 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3001955 3002074 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3002700 3002866 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3002700 3002866 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3003335 3003470 0.000000 + 1 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3003335 3003470 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3005118 3005267 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3005118 3005267 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3007333 3007426 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3007333 3007426 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3007767 3007843 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3007767 3007843 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3008353 3008487 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3008353 3008487 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3016231 3016356 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3016231 3016356 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3016436 3016587 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3016436 3016587 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3017800 3017935 0.000000 + 1 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3017800 3017935 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene CDS 3018705 3018776 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 3018705 3019315 0.000000 + . gene_id "PTPRA"; transcript_id "NM_002836:uc002whj.3"; -chr20 hg19_knownGene exon 2854142 2854406 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2903853 2903931 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2928628 2928670 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 2944924 2944996 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2944918 2944996 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 2945507 2945848 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2945507 2945848 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 2967411 2967495 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2967411 2967495 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 2968678 2968751 0.000000 + 1 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2968678 2968751 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 2968984 2969120 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2968984 2969120 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 2985702 2985792 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2985702 2985792 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 2987990 2988066 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2987990 2988066 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 2996495 2996531 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2996495 2996531 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 2998462 2998559 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2998462 2998559 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3001955 3002074 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3001955 3002074 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3002700 3002866 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3002700 3002866 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3003335 3003470 0.000000 + 1 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3003335 3003470 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3005118 3005267 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3005118 3005267 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3007333 3007426 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3007333 3007426 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3007767 3007843 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3007767 3007843 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3008353 3008487 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3008353 3008487 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3016231 3016356 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3016231 3016356 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3016436 3016587 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3016436 3016587 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3017800 3017935 0.000000 + 1 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3017800 3017935 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene CDS 3018705 3018776 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 3018705 3019315 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080840:uc002whk.3"; -chr20 hg19_knownGene exon 2854142 2854406 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2903905 2903931 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2903853 2903931 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2944918 2944996 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2944918 2944996 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2945507 2945848 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2945507 2945848 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2955861 2955887 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2955861 2955887 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2967411 2967495 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2967411 2967495 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2968678 2968751 0.000000 + 1 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2968678 2968751 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2968984 2969120 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2968984 2969120 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2985702 2985792 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2985702 2985792 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2987990 2988066 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2987990 2988066 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2996495 2996531 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2996495 2996531 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 2998462 2998559 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2998462 2998559 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3001955 3002074 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3001955 3002074 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3002700 3002866 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3002700 3002866 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3003335 3003470 0.000000 + 1 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3003335 3003470 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3005118 3005267 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3005118 3005267 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3007333 3007426 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3007333 3007426 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3007767 3007843 0.000000 + 2 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3007767 3007843 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3008353 3008487 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3008353 3008487 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3016231 3016356 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3016231 3016356 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3016436 3016587 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3016436 3016587 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3017800 3017935 0.000000 + 1 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3017800 3017935 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene CDS 3018705 3018776 0.000000 + 0 gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 3018705 3019315 0.000000 + . gene_id "PTPRA"; transcript_id "AK294499:uc010zqd.2"; -chr20 hg19_knownGene exon 2854142 2854406 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2891587 2891679 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2903853 2903931 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2928628 2928670 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 2944924 2944996 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2944918 2944996 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 2945507 2945848 0.000000 + 2 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2945507 2945848 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 2967411 2967495 0.000000 + 2 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2967411 2967495 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 2968678 2968751 0.000000 + 1 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2968678 2968751 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 2968984 2969120 0.000000 + 2 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2968984 2969120 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 2985702 2985792 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2985702 2985792 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 2987990 2988066 0.000000 + 2 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2987990 2988066 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 2996495 2996531 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2996495 2996531 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 2998462 2998559 0.000000 + 2 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2998462 2998559 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3001955 3002074 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3001955 3002074 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3002700 3002866 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3002700 3002866 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3003335 3003470 0.000000 + 1 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3003335 3003470 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3005118 3005267 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3005118 3005267 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3007333 3007426 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3007333 3007426 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3007767 3007843 0.000000 + 2 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3007767 3007843 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3008353 3008487 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3008353 3008487 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3016231 3016356 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3016231 3016356 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3016436 3016587 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3016436 3016587 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3017800 3017935 0.000000 + 1 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3017800 3017935 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene CDS 3018705 3018776 0.000000 + 0 gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 3018705 3019315 0.000000 + . gene_id "PTPRA"; transcript_id "BX571753:uc002whl.3"; -chr20 hg19_knownGene exon 2854142 2854406 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2903853 2903931 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2928628 2928670 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2944918 2944996 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2945507 2945848 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2955861 2955887 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2967411 2968751 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 2969082 2969120 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2968984 2969120 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 2985702 2985792 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2985702 2985792 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 2987990 2988066 0.000000 + 2 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2987990 2988066 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 2996495 2996531 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2996495 2996531 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 2998462 2998559 0.000000 + 2 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2998462 2998559 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3001955 3002074 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3001955 3002074 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3002700 3002866 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3002700 3002866 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3003335 3003470 0.000000 + 1 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3003335 3003470 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3005118 3005267 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3005118 3005267 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3007333 3007426 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3007333 3007426 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3007767 3007843 0.000000 + 2 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3007767 3007843 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3008353 3008487 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3008353 3008487 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3016231 3016356 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3016231 3016356 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3016436 3016587 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3016436 3016587 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3017800 3017935 0.000000 + 1 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3017800 3017935 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene CDS 3018705 3018776 0.000000 + 0 gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 3018705 3019315 0.000000 + . gene_id "PTPRA"; transcript_id "AB209702:uc002whm.3"; -chr20 hg19_knownGene exon 2903853 2903931 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2928628 2928670 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2936255 2936344 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 2944924 2944996 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2944918 2944996 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 2945507 2945848 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2945507 2945848 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 2967411 2967495 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2967411 2967495 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 2968678 2968751 0.000000 + 1 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2968678 2968751 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 2968984 2969120 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2968984 2969120 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 2985702 2985792 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2985702 2985792 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 2987990 2988066 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2987990 2988066 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 2996495 2996531 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2996495 2996531 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 2998462 2998559 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2998462 2998559 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3001955 3002074 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3001955 3002074 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3002700 3002866 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3002700 3002866 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3003335 3003470 0.000000 + 1 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3003335 3003470 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3005118 3005267 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3005118 3005267 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3007333 3007426 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3007333 3007426 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3007767 3007843 0.000000 + 2 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3007767 3007843 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3008353 3008487 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3008353 3008487 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3016231 3016356 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3016231 3016356 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3016436 3016587 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3016436 3016587 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3017800 3017935 0.000000 + 1 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3017800 3017935 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene CDS 3018705 3018776 0.000000 + 0 gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 3018705 3019315 0.000000 + . gene_id "PTPRA"; transcript_id "NM_080841:uc002whn.3"; -chr20 hg19_knownGene exon 2967411 2968751 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 2968984 2969120 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 2979977 2980071 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 2985702 2985792 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 2987990 2988066 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 2996495 2996531 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 2998530 2998559 0.000000 + 0 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 2998462 2998559 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3001955 3002074 0.000000 + 0 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3001955 3002074 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3002700 3002866 0.000000 + 0 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3002700 3002866 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3003335 3003470 0.000000 + 1 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3003335 3003470 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3005118 3005267 0.000000 + 0 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3005118 3005267 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3007333 3007426 0.000000 + 0 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3007333 3007426 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3007767 3007843 0.000000 + 2 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3007767 3007843 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3008353 3008487 0.000000 + 0 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3008353 3008487 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3016231 3016356 0.000000 + 0 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3016231 3016356 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3016436 3016587 0.000000 + 0 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3016436 3016587 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3017800 3017935 0.000000 + 1 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3017800 3017935 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene CDS 3018705 3018776 0.000000 + 0 gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3018705 3019315 0.000000 + . gene_id "PTPRA"; transcript_id "AX746597:uc002who.3"; -chr20 hg19_knownGene exon 3024268 3024311 0.000000 + . gene_id "GNRH2"; transcript_id "NM_178331:uc002whp.1"; -chr20 hg19_knownGene CDS 3025061 3025214 0.000000 + 0 gene_id "GNRH2"; transcript_id "NM_178331:uc002whp.1"; -chr20 hg19_knownGene exon 3025054 3025214 0.000000 + . gene_id "GNRH2"; transcript_id "NM_178331:uc002whp.1"; -chr20 hg19_knownGene CDS 3025346 3025482 0.000000 + 2 gene_id "GNRH2"; transcript_id "NM_178331:uc002whp.1"; -chr20 hg19_knownGene exon 3025346 3025482 0.000000 + . gene_id "GNRH2"; transcript_id "NM_178331:uc002whp.1"; -chr20 hg19_knownGene CDS 3026332 3026379 0.000000 + 0 gene_id "GNRH2"; transcript_id "NM_178331:uc002whp.1"; -chr20 hg19_knownGene exon 3026332 3026391 0.000000 + . gene_id "GNRH2"; transcript_id "NM_178331:uc002whp.1"; -chr20 hg19_knownGene exon 3024268 3024311 0.000000 + . gene_id "GNRH2"; transcript_id "NM_178332:uc002whq.1"; -chr20 hg19_knownGene CDS 3025061 3025214 0.000000 + 0 gene_id "GNRH2"; transcript_id "NM_178332:uc002whq.1"; -chr20 hg19_knownGene exon 3025054 3025214 0.000000 + . gene_id "GNRH2"; transcript_id "NM_178332:uc002whq.1"; -chr20 hg19_knownGene CDS 3025349 3025482 0.000000 + 2 gene_id "GNRH2"; transcript_id "NM_178332:uc002whq.1"; -chr20 hg19_knownGene exon 3025349 3025482 0.000000 + . gene_id "GNRH2"; transcript_id "NM_178332:uc002whq.1"; -chr20 hg19_knownGene CDS 3026332 3026379 0.000000 + 0 gene_id "GNRH2"; transcript_id "NM_178332:uc002whq.1"; -chr20 hg19_knownGene exon 3026332 3026391 0.000000 + . gene_id "GNRH2"; transcript_id "NM_178332:uc002whq.1"; -chr20 hg19_knownGene exon 3024268 3024311 0.000000 + . gene_id "GNRH2"; transcript_id "NM_001501:uc002whr.1"; -chr20 hg19_knownGene CDS 3025061 3025214 0.000000 + 0 gene_id "GNRH2"; transcript_id "NM_001501:uc002whr.1"; -chr20 hg19_knownGene exon 3025054 3025214 0.000000 + . gene_id "GNRH2"; transcript_id "NM_001501:uc002whr.1"; -chr20 hg19_knownGene CDS 3025325 3025482 0.000000 + 2 gene_id "GNRH2"; transcript_id "NM_001501:uc002whr.1"; -chr20 hg19_knownGene exon 3025325 3025482 0.000000 + . gene_id "GNRH2"; transcript_id "NM_001501:uc002whr.1"; -chr20 hg19_knownGene CDS 3026332 3026379 0.000000 + 0 gene_id "GNRH2"; transcript_id "NM_001501:uc002whr.1"; -chr20 hg19_knownGene exon 3026332 3026391 0.000000 + . gene_id "GNRH2"; transcript_id "NM_001501:uc002whr.1"; -chr20 hg19_knownGene exon 3024268 3024311 0.000000 + . gene_id "GNRH2"; transcript_id "BC115400:uc010gau.1"; -chr20 hg19_knownGene CDS 3025061 3025214 0.000000 + 0 gene_id "GNRH2"; transcript_id "BC115400:uc010gau.1"; -chr20 hg19_knownGene exon 3025059 3025214 0.000000 + . gene_id "GNRH2"; transcript_id "BC115400:uc010gau.1"; -chr20 hg19_knownGene CDS 3025325 3025482 0.000000 + 2 gene_id "GNRH2"; transcript_id "BC115400:uc010gau.1"; -chr20 hg19_knownGene exon 3025325 3025482 0.000000 + . gene_id "GNRH2"; transcript_id "BC115400:uc010gau.1"; -chr20 hg19_knownGene CDS 3026332 3026379 0.000000 + 0 gene_id "GNRH2"; transcript_id "BC115400:uc010gau.1"; -chr20 hg19_knownGene exon 3026332 3026391 0.000000 + . gene_id "GNRH2"; transcript_id "BC115400:uc010gau.1"; -chr20 hg19_knownGene CDS 3026715 3026926 0.000000 + 0 gene_id "MRPS26"; transcript_id "NM_030811:uc002whs.3"; -chr20 hg19_knownGene exon 3026675 3026926 0.000000 + . gene_id "MRPS26"; transcript_id "NM_030811:uc002whs.3"; -chr20 hg19_knownGene CDS 3027019 3027165 0.000000 + 1 gene_id "MRPS26"; transcript_id "NM_030811:uc002whs.3"; -chr20 hg19_knownGene exon 3027019 3027165 0.000000 + . gene_id "MRPS26"; transcript_id "NM_030811:uc002whs.3"; -chr20 hg19_knownGene CDS 3027260 3027383 0.000000 + 1 gene_id "MRPS26"; transcript_id "NM_030811:uc002whs.3"; -chr20 hg19_knownGene exon 3027260 3027383 0.000000 + . gene_id "MRPS26"; transcript_id "NM_030811:uc002whs.3"; -chr20 hg19_knownGene CDS 3028381 3028512 0.000000 + 0 gene_id "MRPS26"; transcript_id "NM_030811:uc002whs.3"; -chr20 hg19_knownGene exon 3028381 3028896 0.000000 + . gene_id "MRPS26"; transcript_id "NM_030811:uc002whs.3"; -chr20 hg19_knownGene CDS 3052302 3052421 0.000000 + 0 gene_id "OXT"; transcript_id "NM_000915:uc002wht.1"; -chr20 hg19_knownGene exon 3052266 3052421 0.000000 + . gene_id "OXT"; transcript_id "NM_000915:uc002wht.1"; -chr20 hg19_knownGene CDS 3052723 3052924 0.000000 + 0 gene_id "OXT"; transcript_id "NM_000915:uc002wht.1"; -chr20 hg19_knownGene exon 3052723 3052924 0.000000 + . gene_id "OXT"; transcript_id "NM_000915:uc002wht.1"; -chr20 hg19_knownGene CDS 3053009 3053061 0.000000 + 2 gene_id "OXT"; transcript_id "NM_000915:uc002wht.1"; -chr20 hg19_knownGene exon 3053009 3053162 0.000000 + . gene_id "OXT"; transcript_id "NM_000915:uc002wht.1"; -chr20 hg19_knownGene CDS 3063279 3063448 0.000000 - 2 gene_id "AVP"; transcript_id "NM_000490:uc002whu.3"; -chr20 hg19_knownGene exon 3063202 3063448 0.000000 - . gene_id "AVP"; transcript_id "NM_000490:uc002whu.3"; -chr20 hg19_knownGene CDS 3063623 3063824 0.000000 - 0 gene_id "AVP"; transcript_id "NM_000490:uc002whu.3"; -chr20 hg19_knownGene exon 3063623 3063824 0.000000 - . gene_id "AVP"; transcript_id "NM_000490:uc002whu.3"; -chr20 hg19_knownGene CDS 3065201 3065320 0.000000 - 0 gene_id "AVP"; transcript_id "NM_000490:uc002whu.3"; -chr20 hg19_knownGene exon 3065201 3065370 0.000000 - . gene_id "AVP"; transcript_id "NM_000490:uc002whu.3"; -chr20 hg19_knownGene CDS 3127425 3129716 0.000000 - 0 gene_id "FASTKD5"; transcript_id "CCDS13048:uc021vzx.1"; -chr20 hg19_knownGene exon 3127422 3129716 0.000000 - . gene_id "FASTKD5"; transcript_id "CCDS13048:uc021vzx.1"; -chr20 hg19_knownGene exon 3087557 3088217 0.000000 + . gene_id "LOC100134015"; transcript_id "NR_038395:uc002whv.1"; -chr20 hg19_knownGene exon 3090121 3090396 0.000000 + . gene_id "LOC100134015"; transcript_id "NR_038395:uc002whv.1"; -chr20 hg19_knownGene exon 3090924 3091099 0.000000 + . gene_id "LOC100134015"; transcript_id "NR_038395:uc002whv.1"; -chr20 hg19_knownGene exon 3091278 3091363 0.000000 + . gene_id "LOC100134015"; transcript_id "NR_038395:uc002whv.1"; -chr20 hg19_knownGene exon 3092290 3092398 0.000000 + . gene_id "LOC100134015"; transcript_id "NR_038395:uc002whv.1"; -chr20 hg19_knownGene exon 3116649 3116804 0.000000 + . gene_id "LOC100134015"; transcript_id "NR_038395:uc002whv.1"; -chr20 hg19_knownGene exon 3131184 3131513 0.000000 + . gene_id "LOC100134015"; transcript_id "NR_038395:uc002whv.1"; -chr20 hg19_knownGene CDS 3090755 3090960 0.000000 - 2 gene_id "UBOX5"; transcript_id "NM_014948:uc002whw.3"; -chr20 hg19_knownGene exon 3088219 3090960 0.000000 - . gene_id "UBOX5"; transcript_id "NM_014948:uc002whw.3"; -chr20 hg19_knownGene CDS 3095951 3096112 0.000000 - 2 gene_id "UBOX5"; transcript_id "NM_014948:uc002whw.3"; -chr20 hg19_knownGene exon 3095951 3096112 0.000000 - . gene_id "UBOX5"; transcript_id "NM_014948:uc002whw.3"; -chr20 hg19_knownGene CDS 3102030 3103230 0.000000 - 0 gene_id "UBOX5"; transcript_id "NM_014948:uc002whw.3"; -chr20 hg19_knownGene exon 3102030 3103230 0.000000 - . gene_id "UBOX5"; transcript_id "NM_014948:uc002whw.3"; -chr20 hg19_knownGene CDS 3103958 3104011 0.000000 - 0 gene_id "UBOX5"; transcript_id "NM_014948:uc002whw.3"; -chr20 hg19_knownGene exon 3103958 3104052 0.000000 - . gene_id "UBOX5"; transcript_id "NM_014948:uc002whw.3"; -chr20 hg19_knownGene exon 3140412 3140540 0.000000 - . gene_id "UBOX5"; transcript_id "NM_014948:uc002whw.3"; -chr20 hg19_knownGene CDS 3090755 3090960 0.000000 - 2 gene_id "UBOX5"; transcript_id "NM_199415:uc002whx.3"; -chr20 hg19_knownGene exon 3088219 3090960 0.000000 - . gene_id "UBOX5"; transcript_id "NM_199415:uc002whx.3"; -chr20 hg19_knownGene CDS 3102030 3103230 0.000000 - 0 gene_id "UBOX5"; transcript_id "NM_199415:uc002whx.3"; -chr20 hg19_knownGene exon 3102030 3103230 0.000000 - . gene_id "UBOX5"; transcript_id "NM_199415:uc002whx.3"; -chr20 hg19_knownGene CDS 3103958 3104011 0.000000 - 0 gene_id "UBOX5"; transcript_id "NM_199415:uc002whx.3"; -chr20 hg19_knownGene exon 3103958 3104052 0.000000 - . gene_id "UBOX5"; transcript_id "NM_199415:uc002whx.3"; -chr20 hg19_knownGene exon 3140412 3140540 0.000000 - . gene_id "UBOX5"; transcript_id "NM_199415:uc002whx.3"; -chr20 hg19_knownGene CDS 3090837 3090955 0.000000 - 2 gene_id "UBOX5"; transcript_id "BC064544:uc002why.1"; -chr20 hg19_knownGene exon 3090256 3090955 0.000000 - . gene_id "UBOX5"; transcript_id "BC064544:uc002why.1"; -chr20 hg19_knownGene CDS 3095951 3096112 0.000000 - 2 gene_id "UBOX5"; transcript_id "BC064544:uc002why.1"; -chr20 hg19_knownGene exon 3095951 3096112 0.000000 - . gene_id "UBOX5"; transcript_id "BC064544:uc002why.1"; -chr20 hg19_knownGene CDS 3102030 3103230 0.000000 - 0 gene_id "UBOX5"; transcript_id "BC064544:uc002why.1"; -chr20 hg19_knownGene exon 3102030 3103230 0.000000 - . gene_id "UBOX5"; transcript_id "BC064544:uc002why.1"; -chr20 hg19_knownGene CDS 3103958 3104011 0.000000 - 0 gene_id "UBOX5"; transcript_id "BC064544:uc002why.1"; -chr20 hg19_knownGene exon 3103958 3104052 0.000000 - . gene_id "UBOX5"; transcript_id "BC064544:uc002why.1"; -chr20 hg19_knownGene exon 3140412 3140540 0.000000 - . gene_id "UBOX5"; transcript_id "BC064544:uc002why.1"; -chr20 hg19_knownGene CDS 3127425 3129716 0.000000 - 0 gene_id "FASTKD5"; transcript_id "NM_021826:uc002whz.3"; -chr20 hg19_knownGene exon 3127165 3129906 0.000000 - . gene_id "FASTKD5"; transcript_id "NM_021826:uc002whz.3"; -chr20 hg19_knownGene exon 3140412 3140540 0.000000 - . gene_id "FASTKD5"; transcript_id "NM_021826:uc002whz.3"; -chr20 hg19_knownGene CDS 3145103 3145798 0.000000 - 0 gene_id "ProSAPiP1"; transcript_id "NM_014731:uc002wia.1"; -chr20 hg19_knownGene exon 3143273 3145798 0.000000 - . gene_id "ProSAPiP1"; transcript_id "NM_014731:uc002wia.1"; -chr20 hg19_knownGene CDS 3146143 3147006 0.000000 - 0 gene_id "ProSAPiP1"; transcript_id "NM_014731:uc002wia.1"; -chr20 hg19_knownGene exon 3146143 3147006 0.000000 - . gene_id "ProSAPiP1"; transcript_id "NM_014731:uc002wia.1"; -chr20 hg19_knownGene CDS 3147351 3147809 0.000000 - 0 gene_id "ProSAPiP1"; transcript_id "NM_014731:uc002wia.1"; -chr20 hg19_knownGene exon 3147351 3149207 0.000000 - . gene_id "ProSAPiP1"; transcript_id "NM_014731:uc002wia.1"; -chr20 hg19_knownGene CDS 3145103 3145798 0.000000 - 0 gene_id "ProSAPiP1"; transcript_id "BC038860:uc002wib.1"; -chr20 hg19_knownGene exon 3143273 3145798 0.000000 - . gene_id "ProSAPiP1"; transcript_id "BC038860:uc002wib.1"; -chr20 hg19_knownGene CDS 3146143 3146274 0.000000 - 0 gene_id "ProSAPiP1"; transcript_id "BC038860:uc002wib.1"; -chr20 hg19_knownGene exon 3146143 3146274 0.000000 - . gene_id "ProSAPiP1"; transcript_id "BC038860:uc002wib.1"; -chr20 hg19_knownGene CDS 3146413 3147006 0.000000 - 0 gene_id "ProSAPiP1"; transcript_id "BC038860:uc002wib.1"; -chr20 hg19_knownGene exon 3146413 3147006 0.000000 - . gene_id "ProSAPiP1"; transcript_id "BC038860:uc002wib.1"; -chr20 hg19_knownGene CDS 3147351 3147809 0.000000 - 0 gene_id "ProSAPiP1"; transcript_id "BC038860:uc002wib.1"; -chr20 hg19_knownGene exon 3147351 3147827 0.000000 - . gene_id "ProSAPiP1"; transcript_id "BC038860:uc002wib.1"; -chr20 hg19_knownGene exon 3148384 3148607 0.000000 - . gene_id "ProSAPiP1"; transcript_id "BC038860:uc002wib.1"; -chr20 hg19_knownGene exon 3154101 3154192 0.000000 - . gene_id "ProSAPiP1"; transcript_id "BC038860:uc002wib.1"; -chr20 hg19_knownGene CDS 3171302 3171465 0.000000 - 2 gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene exon 3171012 3171465 0.000000 - . gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene CDS 3171836 3171884 0.000000 - 0 gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene exon 3171836 3171884 0.000000 - . gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene CDS 3172411 3172467 0.000000 - 0 gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene exon 3172411 3172467 0.000000 - . gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene CDS 3175476 3175514 0.000000 - 0 gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene exon 3175476 3175514 0.000000 - . gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene CDS 3175877 3175999 0.000000 - 0 gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene exon 3175877 3175999 0.000000 - . gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene CDS 3180647 3180748 0.000000 - 0 gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene exon 3180647 3180748 0.000000 - . gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene CDS 3180988 3181100 0.000000 - 2 gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene exon 3180988 3181100 0.000000 - . gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene CDS 3183859 3184062 0.000000 - 2 gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene exon 3183859 3184062 0.000000 - . gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene CDS 3185183 3185273 0.000000 - 0 gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene exon 3185183 3185295 0.000000 - . gene_id "DDRGK1"; transcript_id "NM_023935:uc002wic.3"; -chr20 hg19_knownGene CDS 3175464 3175514 0.000000 - 0 gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene exon 3174653 3175514 0.000000 - . gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene CDS 3175877 3175999 0.000000 - 0 gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene exon 3175877 3175999 0.000000 - . gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene CDS 3180647 3180748 0.000000 - 0 gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene exon 3180647 3180748 0.000000 - . gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene CDS 3180988 3181100 0.000000 - 2 gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene exon 3180988 3181100 0.000000 - . gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene CDS 3183859 3184062 0.000000 - 2 gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene exon 3183859 3184062 0.000000 - . gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene CDS 3185183 3185273 0.000000 - 0 gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene exon 3185183 3185295 0.000000 - . gene_id "DDRGK1"; transcript_id "AK310809:uc010gax.1"; -chr20 hg19_knownGene CDS 3190198 3190212 0.000000 + 0 gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene exon 3190056 3190212 0.000000 + . gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene CDS 3193815 3193872 0.000000 + 0 gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene exon 3193815 3193872 0.000000 + . gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene CDS 3193965 3194029 0.000000 + 2 gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene exon 3193965 3194029 0.000000 + . gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene CDS 3194631 3194704 0.000000 + 0 gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene exon 3194631 3194704 0.000000 + . gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene CDS 3195927 3195958 0.000000 + 1 gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene exon 3195927 3195958 0.000000 + . gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene CDS 3199163 3199278 0.000000 + 2 gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene exon 3199163 3199278 0.000000 + . gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene CDS 3202487 3202563 0.000000 + 0 gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene exon 3202487 3202563 0.000000 + . gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene CDS 3204012 3204105 0.000000 + 1 gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene exon 3204012 3204506 0.000000 + . gene_id "ITPA"; transcript_id "NM_181493:uc002wie.3"; -chr20 hg19_knownGene CDS 3190198 3190263 0.000000 + 0 gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene exon 3190056 3190263 0.000000 + . gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene CDS 3193815 3193872 0.000000 + 0 gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene exon 3193815 3193872 0.000000 + . gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene CDS 3193965 3194029 0.000000 + 2 gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene exon 3193965 3194029 0.000000 + . gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene CDS 3194631 3194704 0.000000 + 0 gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene exon 3194631 3194704 0.000000 + . gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene CDS 3195927 3195958 0.000000 + 1 gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene exon 3195927 3195958 0.000000 + . gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene CDS 3199163 3199278 0.000000 + 2 gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene exon 3199163 3199278 0.000000 + . gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene CDS 3202487 3202563 0.000000 + 0 gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene exon 3202487 3202563 0.000000 + . gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene CDS 3204012 3204105 0.000000 + 1 gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene exon 3204012 3204506 0.000000 + . gene_id "ITPA"; transcript_id "NM_033453:uc002wid.3"; -chr20 hg19_knownGene exon 3190135 3190181 0.000000 + . gene_id "ITPA"; transcript_id "AF334680:uc002wif.3"; -chr20 hg19_knownGene exon 3193904 3194029 0.000000 + . gene_id "ITPA"; transcript_id "AF334680:uc002wif.3"; -chr20 hg19_knownGene exon 3194631 3194704 0.000000 + . gene_id "ITPA"; transcript_id "AF334680:uc002wif.3"; -chr20 hg19_knownGene exon 3195927 3195958 0.000000 + . gene_id "ITPA"; transcript_id "AF334680:uc002wif.3"; -chr20 hg19_knownGene exon 3199163 3199278 0.000000 + . gene_id "ITPA"; transcript_id "AF334680:uc002wif.3"; -chr20 hg19_knownGene exon 3202487 3202563 0.000000 + . gene_id "ITPA"; transcript_id "AF334680:uc002wif.3"; -chr20 hg19_knownGene exon 3204012 3204506 0.000000 + . gene_id "ITPA"; transcript_id "AF334680:uc002wif.3"; -chr20 hg19_knownGene CDS 3208436 3208502 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3208063 3208502 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3208905 3209074 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3208905 3209074 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3209158 3209353 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3209158 3209353 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3209484 3209657 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3209484 3209657 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3209741 3209909 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3209741 3209909 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3209992 3210098 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3209992 3210098 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3210170 3210422 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3210170 3210422 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3210833 3210906 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3210833 3210906 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3211161 3211293 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3211161 3211293 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3211378 3211491 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3211378 3211491 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3211579 3211704 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3211579 3211704 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3211795 3211888 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3211795 3211888 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3211976 3212194 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3211976 3212194 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3214160 3214283 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3214160 3214283 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3214567 3214648 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3214567 3214648 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3214729 3214960 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3214729 3214960 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3215214 3215263 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3215214 3215263 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3215388 3215540 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3215388 3215540 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3218190 3218325 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene exon 3218190 3218373 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_032034:uc002wig.3"; -chr20 hg19_knownGene CDS 3208436 3208502 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3208063 3208502 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3208905 3209074 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3208905 3209074 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3209158 3209353 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3209158 3209353 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3209484 3209657 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3209484 3209657 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3209741 3209909 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3209741 3209909 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3209992 3210098 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3209992 3210098 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3210170 3210422 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3210170 3210422 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3210833 3210906 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3210833 3210906 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3211161 3211293 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3211161 3211293 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3211378 3211491 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3211378 3211491 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3211579 3211704 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3211579 3211704 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3211795 3211888 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3211795 3211888 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3211976 3212194 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3211976 3212194 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3214160 3214283 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3214160 3214283 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3214567 3214648 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3214567 3214648 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3214729 3214960 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3214729 3214960 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3215214 3215263 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3215214 3215263 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3215388 3215540 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3215388 3215540 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3218190 3218234 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3218190 3218234 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene CDS 3218539 3218710 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3218539 3218835 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174090:uc010zqe.2"; -chr20 hg19_knownGene exon 3208063 3208502 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3208905 3209074 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3209158 3209353 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3209484 3209657 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3209741 3209909 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3209992 3210098 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3210170 3210352 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3210833 3210906 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3211161 3211293 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3211378 3211491 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3211579 3211704 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3211795 3211888 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3211976 3212194 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3214160 3214283 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3214567 3214648 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3214729 3214960 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3215214 3215263 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3215388 3215540 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3218190 3218234 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene exon 3219626 3219836 0.000000 - . gene_id "SLC4A11"; transcript_id "AX746815:uc002wih.3"; -chr20 hg19_knownGene CDS 3208436 3208502 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3208063 3208502 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3208905 3209074 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3208905 3209074 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3209158 3209353 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3209158 3209353 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3209484 3209657 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3209484 3209657 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3209741 3209909 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3209741 3209909 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3209992 3210098 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3209992 3210098 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3210170 3210422 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3210170 3210422 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3210833 3210906 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3210833 3210906 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3211161 3211293 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3211161 3211293 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3211378 3211491 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3211378 3211491 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3211579 3211704 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3211579 3211704 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3211795 3211888 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3211795 3211888 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3211976 3212194 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3211976 3212194 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3214160 3214283 0.000000 - 1 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3214160 3214283 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3214567 3214648 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3214567 3214648 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3214729 3214960 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3214729 3214960 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3215214 3215263 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3215214 3215263 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3215388 3215540 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3215388 3215540 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3218190 3218234 0.000000 - 2 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3218190 3218234 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3219741 3219783 0.000000 - 0 gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene exon 3219741 3219887 0.000000 - . gene_id "SLC4A11"; transcript_id "NM_001174089:uc010zqf.2"; -chr20 hg19_knownGene CDS 3233221 3233330 0.000000 - 2 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3229948 3233330 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3234372 3234465 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3234372 3234465 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3235865 3235930 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3235865 3235930 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3236652 3236857 0.000000 - 2 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3236652 3236857 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3240126 3240200 0.000000 - 2 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3240126 3240200 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3240568 3240674 0.000000 - 1 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3240568 3240674 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3245084 3245170 0.000000 - 1 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3245084 3245170 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3251073 3251208 0.000000 - 2 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3251073 3251208 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3259558 3259595 0.000000 - 1 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3259558 3259595 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3262287 3262412 0.000000 - 1 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3262287 3262412 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3268278 3268436 0.000000 - 1 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3268278 3268436 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3270775 3270863 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3270775 3270863 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3274785 3274902 0.000000 - 1 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3274785 3274902 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3275174 3275275 0.000000 - 1 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3275174 3275275 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3277508 3277596 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3277508 3277596 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3278676 3278822 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3278676 3278822 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3285087 3285190 0.000000 - 2 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3285087 3285190 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3295680 3295767 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3295680 3295767 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3296382 3296432 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3296382 3296432 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3297370 3297440 0.000000 - 2 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3297370 3297440 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3298936 3299047 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3298936 3299047 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3302864 3302909 0.000000 - 1 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3302864 3302909 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3303299 3303343 0.000000 - 1 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3303299 3303343 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3305539 3305615 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3305539 3305615 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3306844 3306931 0.000000 - 1 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3306844 3306931 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3311293 3311329 0.000000 - 2 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3311293 3311329 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3312927 3313008 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3312927 3313008 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene CDS 3321151 3321348 0.000000 - 0 gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3321151 3321608 0.000000 - . gene_id "C20orf194"; transcript_id "BC122529:uc002wij.3"; -chr20 hg19_knownGene exon 3340683 3340789 0.000000 + . gene_id "U6"; transcript_id ":uc021vzy.1"; -chr20 hg19_knownGene CDS 3233221 3233330 0.000000 - 2 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3229948 3233330 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3234372 3234465 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3234372 3234465 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3235865 3235930 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3235865 3235930 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3236652 3236857 0.000000 - 2 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3236652 3236857 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3240126 3240200 0.000000 - 2 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3240126 3240200 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3240568 3240674 0.000000 - 1 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3240568 3240674 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3245084 3245170 0.000000 - 1 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3245084 3245170 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3251073 3251208 0.000000 - 2 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3251073 3251208 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3259558 3259595 0.000000 - 1 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3259558 3259595 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3262287 3262412 0.000000 - 1 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3262287 3262412 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3268278 3268436 0.000000 - 1 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3268278 3268436 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3270775 3270863 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3270775 3270863 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3274785 3274902 0.000000 - 1 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3274785 3274902 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3275174 3275275 0.000000 - 1 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3275174 3275275 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3277508 3277596 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3277508 3277596 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3278676 3278822 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3278676 3278822 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3285087 3285190 0.000000 - 2 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3285087 3285190 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3295680 3295767 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3295680 3295767 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3296382 3296432 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3296382 3296432 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3297370 3297440 0.000000 - 2 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3297370 3297440 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3298936 3299047 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3298936 3299047 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3302864 3302909 0.000000 - 1 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3302864 3302909 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3303299 3303343 0.000000 - 1 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3303299 3303343 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3305539 3305615 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3305539 3305615 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3306844 3306931 0.000000 - 1 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3306844 3306931 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3311293 3311329 0.000000 - 2 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3311293 3311329 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3312927 3313008 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3312927 3313008 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3321151 3321153 0.000000 - 0 gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3321151 3321286 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3329172 3329270 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3340163 3340240 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3354695 3354801 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene exon 3355677 3355773 0.000000 - . gene_id "C20orf194"; transcript_id "AK226100:uc002wik.2"; -chr20 hg19_knownGene CDS 3233221 3233330 0.000000 - 2 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3229948 3233330 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3234372 3234465 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3234372 3234465 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3235865 3235930 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3235865 3235930 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3236652 3236857 0.000000 - 2 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3236652 3236857 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3240126 3240200 0.000000 - 2 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3240126 3240200 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3240568 3240674 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3240568 3240674 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3245084 3245170 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3245084 3245170 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3251073 3251208 0.000000 - 2 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3251073 3251208 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3259558 3259595 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3259558 3259595 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3262287 3262412 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3262287 3262412 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3268278 3268436 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3268278 3268436 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3270775 3270863 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3270775 3270863 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3274785 3274902 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3274785 3274902 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3275174 3275275 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3275174 3275275 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3277508 3277596 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3277508 3277596 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3278676 3278822 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3278676 3278822 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3285087 3285190 0.000000 - 2 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3285087 3285190 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3295680 3295767 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3295680 3295767 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3296382 3296432 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3296382 3296432 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3297370 3297440 0.000000 - 2 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3297370 3297440 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3298936 3299047 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3298936 3299047 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3302864 3302909 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3302864 3302909 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3303299 3303343 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3303299 3303343 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3305539 3305615 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3305539 3305615 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3306844 3306931 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3306844 3306931 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3311293 3311329 0.000000 - 2 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3311293 3311329 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3312927 3313008 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3312927 3313008 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3321151 3321286 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3321151 3321286 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3324323 3324378 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3324323 3324378 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3329172 3329270 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3329172 3329270 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3340163 3340240 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3340163 3340240 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3354695 3354801 0.000000 - 2 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3354695 3354801 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3355677 3355773 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3355677 3355773 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3356825 3356949 0.000000 - 2 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3356825 3356949 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3362026 3362145 0.000000 - 2 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3362026 3362145 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3363074 3363153 0.000000 - 1 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3363074 3363153 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene CDS 3388122 3388204 0.000000 - 0 gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3388122 3388255 0.000000 - . gene_id "C20orf194"; transcript_id "NM_001009984:uc002wii.2"; -chr20 hg19_knownGene exon 3303299 3303343 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3305539 3305615 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3306231 3306406 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3306844 3306931 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3311293 3311329 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3312927 3313008 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3321151 3321286 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3324323 3324378 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3329172 3329270 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3340163 3340240 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3354695 3354801 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3355677 3355773 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3356825 3356949 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3362026 3362145 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3363074 3363153 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene exon 3388382 3388587 0.000000 - . gene_id "C20orf194"; transcript_id "AK310540:uc010gay.1"; -chr20 hg19_knownGene CDS 3451755 3452164 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3451665 3452164 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3515900 3515983 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3515900 3515983 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3520869 3520982 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3520869 3520982 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3526409 3526537 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3526409 3526537 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3527931 3528136 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3527931 3528136 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3529817 3529985 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3529817 3529985 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3540040 3540130 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3540040 3540130 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3541309 3541552 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3541309 3541552 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3542923 3543106 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3542923 3543106 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3543856 3544010 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3543856 3544010 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3545995 3546079 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3545995 3546079 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3553378 3553598 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3553378 3553598 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3556474 3556595 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3556474 3556595 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3557506 3557644 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3557506 3557644 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3559229 3559419 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3559229 3559419 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3562782 3563001 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3562782 3563001 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3564545 3564730 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3564545 3564730 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3565294 3565527 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3565294 3565527 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3571816 3571953 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3571816 3571953 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3575126 3575219 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3575126 3575219 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3577024 3577076 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3577024 3577076 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3578553 3578647 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3578553 3578647 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3581593 3581671 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3581593 3581671 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3584752 3584909 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3584752 3584909 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3596475 3596489 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene exon 3596475 3596550 0.000000 + . gene_id "ATRN"; transcript_id "NM_139322:uc002wil.2"; -chr20 hg19_knownGene CDS 3451720 3451781 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3451665 3451781 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3515900 3515983 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3515900 3515983 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3520869 3520982 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3520869 3520982 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3526409 3526537 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3526409 3526537 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3527931 3528136 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3527931 3528136 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3529817 3529985 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3529817 3529985 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3540040 3540130 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3540040 3540130 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3541309 3541552 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3541309 3541552 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3542923 3543106 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3542923 3543106 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3543856 3544010 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3543856 3544010 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3545995 3546079 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3545995 3546079 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3553378 3553598 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3553378 3553598 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3556474 3556595 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3556474 3556595 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3557506 3557644 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3557506 3557644 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3559229 3559419 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3559229 3559419 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3562782 3563001 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3562782 3563001 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3564545 3564730 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3564545 3564730 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3565294 3565527 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3565294 3565527 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3571816 3571953 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3571816 3571953 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3575126 3575219 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3575126 3575219 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3577024 3577076 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3577024 3577076 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3578553 3578647 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3578553 3578647 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3581593 3581671 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3581593 3581671 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3584752 3584909 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3584752 3584909 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3596475 3596489 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene exon 3596475 3596550 0.000000 + . gene_id "ATRN"; transcript_id "NM_001207047:uc021vzz.1"; -chr20 hg19_knownGene CDS 3451755 3452164 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3451665 3452164 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3515900 3515983 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3515900 3515983 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3520869 3520982 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3520869 3520982 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3526409 3526537 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3526409 3526537 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3527931 3528136 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3527931 3528136 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3529817 3529985 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3529817 3529985 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3540040 3540130 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3540040 3540130 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3541309 3541552 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3541309 3541552 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3542923 3543106 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3542923 3543106 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3543856 3544010 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3543856 3544010 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3545995 3546079 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3545995 3546079 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3553378 3553598 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3553378 3553598 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3556474 3556595 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3556474 3556595 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3557506 3557644 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3557506 3557644 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3559229 3559419 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3559229 3559419 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3562782 3563001 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3562782 3563001 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3564545 3564730 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3564545 3564730 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3565294 3565527 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3565294 3565527 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3571816 3571953 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3571816 3571953 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3575126 3575219 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3575126 3575219 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3577024 3577076 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3577024 3577076 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3578553 3578647 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3578553 3578647 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3581593 3581671 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3581593 3581671 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3584752 3584909 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3584752 3584909 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3605158 3605219 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3605158 3605219 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3614958 3615036 0.000000 + 1 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3614958 3615036 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3619475 3619582 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3619475 3619582 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3624801 3624915 0.000000 + 0 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3624801 3624915 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3627370 3627491 0.000000 + 2 gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene exon 3627370 3631769 0.000000 + . gene_id "ATRN"; transcript_id "NM_139321:uc002wim.2"; -chr20 hg19_knownGene CDS 3640559 3640636 0.000000 - 0 gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene exon 3639939 3640636 0.000000 - . gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene CDS 3640805 3640896 0.000000 - 2 gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene exon 3640805 3640896 0.000000 - . gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene CDS 3641173 3641307 0.000000 - 2 gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene exon 3641173 3641307 0.000000 - . gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene CDS 3641402 3641511 0.000000 - 1 gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene exon 3641402 3641511 0.000000 - . gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene CDS 3641591 3641936 0.000000 - 2 gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene exon 3641591 3641936 0.000000 - . gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene CDS 3644001 3644046 0.000000 - 0 gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene exon 3644001 3644046 0.000000 - . gene_id "GFRA4"; transcript_id "NM_022139:uc002win.3"; -chr20 hg19_knownGene CDS 3640559 3640636 0.000000 - 0 gene_id "GFRA4"; transcript_id "NM_145762:uc002wio.3"; -chr20 hg19_knownGene exon 3639939 3640636 0.000000 - . gene_id "GFRA4"; transcript_id "NM_145762:uc002wio.3"; -chr20 hg19_knownGene CDS 3640805 3640896 0.000000 - 2 gene_id "GFRA4"; transcript_id "NM_145762:uc002wio.3"; -chr20 hg19_knownGene exon 3640805 3640896 0.000000 - . gene_id "GFRA4"; transcript_id "NM_145762:uc002wio.3"; -chr20 hg19_knownGene CDS 3641173 3641318 0.000000 - 1 gene_id "GFRA4"; transcript_id "NM_145762:uc002wio.3"; -chr20 hg19_knownGene exon 3641173 3641318 0.000000 - . gene_id "GFRA4"; transcript_id "NM_145762:uc002wio.3"; -chr20 hg19_knownGene CDS 3641402 3641936 0.000000 - 2 gene_id "GFRA4"; transcript_id "NM_145762:uc002wio.3"; -chr20 hg19_knownGene exon 3641402 3641936 0.000000 - . gene_id "GFRA4"; transcript_id "NM_145762:uc002wio.3"; -chr20 hg19_knownGene CDS 3644001 3644046 0.000000 - 0 gene_id "GFRA4"; transcript_id "NM_145762:uc002wio.3"; -chr20 hg19_knownGene exon 3644001 3644046 0.000000 - . gene_id "GFRA4"; transcript_id "NM_145762:uc002wio.3"; -chr20 hg19_knownGene CDS 3641275 3641318 0.000000 - 2 gene_id "GFRA4"; transcript_id "AJ291675:uc002wip.1"; -chr20 hg19_knownGene exon 3641173 3641318 0.000000 - . gene_id "GFRA4"; transcript_id "AJ291675:uc002wip.1"; -chr20 hg19_knownGene CDS 3641402 3641511 0.000000 - 1 gene_id "GFRA4"; transcript_id "AJ291675:uc002wip.1"; -chr20 hg19_knownGene exon 3641402 3641511 0.000000 - . gene_id "GFRA4"; transcript_id "AJ291675:uc002wip.1"; -chr20 hg19_knownGene CDS 3641591 3641936 0.000000 - 2 gene_id "GFRA4"; transcript_id "AJ291675:uc002wip.1"; -chr20 hg19_knownGene exon 3641591 3641936 0.000000 - . gene_id "GFRA4"; transcript_id "AJ291675:uc002wip.1"; -chr20 hg19_knownGene CDS 3644001 3644046 0.000000 - 0 gene_id "GFRA4"; transcript_id "AJ291675:uc002wip.1"; -chr20 hg19_knownGene exon 3644001 3644046 0.000000 - . gene_id "GFRA4"; transcript_id "AJ291675:uc002wip.1"; -chr20 hg19_knownGene CDS 3649613 3649644 0.000000 - 2 gene_id "ADAM33"; transcript_id "AK095953:uc002wiq.1"; -chr20 hg19_knownGene exon 3648618 3649644 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiq.1"; -chr20 hg19_knownGene CDS 3649946 3650017 0.000000 - 2 gene_id "ADAM33"; transcript_id "AK095953:uc002wiq.1"; -chr20 hg19_knownGene exon 3649946 3650017 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiq.1"; -chr20 hg19_knownGene CDS 3650193 3650406 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK095953:uc002wiq.1"; -chr20 hg19_knownGene exon 3650193 3650540 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiq.1"; -chr20 hg19_knownGene exon 3650542 3651272 0.000000 - . gene_id "AX748440"; transcript_id "AX748440:uc002wiv.1"; -chr20 hg19_knownGene CDS 3649613 3649647 0.000000 - 2 gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3648620 3649647 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene CDS 3649946 3650017 0.000000 - 2 gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3649946 3650017 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene CDS 3650193 3650284 0.000000 - 1 gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3650193 3650284 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene CDS 3651653 3651800 0.000000 - 2 gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3651653 3651800 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene CDS 3651884 3651992 0.000000 - 0 gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3651884 3651992 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene CDS 3652228 3652426 0.000000 - 1 gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3652228 3652426 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene CDS 3652524 3652632 0.000000 - 2 gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3652524 3652632 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene CDS 3652781 3652943 0.000000 - 0 gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3652781 3652976 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3653184 3653273 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3653368 3654143 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene exon 3654221 3654394 0.000000 - . gene_id "ADAM33"; transcript_id "AL117415:uc002wis.3"; -chr20 hg19_knownGene CDS 3649613 3649644 0.000000 - 2 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3648618 3649644 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3649946 3650017 0.000000 - 2 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3649946 3650017 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3650193 3650284 0.000000 - 1 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3650193 3650284 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3651653 3651800 0.000000 - 2 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3651653 3651800 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3651884 3651992 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3651884 3651992 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3652066 3652143 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3652066 3652143 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3652228 3652426 0.000000 - 1 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3652228 3652426 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3652524 3652632 0.000000 - 2 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3652524 3652632 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3652781 3652976 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3652781 3652976 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3653184 3653273 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3653184 3653273 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3653368 3653545 0.000000 - 1 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3653368 3653545 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3654001 3654143 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3654001 3654143 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3654221 3654305 0.000000 - 1 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3654221 3654305 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3654392 3654558 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3654392 3654558 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3654711 3654782 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3654711 3654782 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3654866 3654931 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3654866 3654931 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3655151 3655340 0.000000 - 1 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3655151 3655340 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3655420 3655496 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3655420 3655496 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3655674 3655752 0.000000 - 1 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3655674 3655752 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3657714 3657790 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3657714 3657790 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3660139 3660218 0.000000 - 2 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3660139 3660218 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3662555 3662651 0.000000 - 0 gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene exon 3662555 3662738 0.000000 - . gene_id "ADAM33"; transcript_id "AF466287:uc002wir.1"; -chr20 hg19_knownGene CDS 3649613 3649647 0.000000 - 2 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3648620 3649647 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3649946 3650017 0.000000 - 2 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3649946 3650017 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3650193 3650284 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3650193 3650284 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3651653 3651800 0.000000 - 2 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3651653 3651800 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3651884 3651992 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3651884 3651992 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3652066 3652143 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3652066 3652143 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3652228 3652426 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3652228 3652426 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3652524 3652632 0.000000 - 2 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3652524 3652632 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3652781 3652976 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3652781 3652976 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3653184 3653273 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3653184 3653273 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3653368 3653545 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3653368 3653545 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3654001 3654143 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3654001 3654143 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3654221 3654305 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3654221 3654305 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3654392 3654558 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3654392 3654558 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3654711 3654782 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3654711 3654782 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3654866 3654931 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3654866 3654931 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3655151 3655340 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3655151 3655340 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3655420 3655496 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3655420 3655496 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3655674 3655752 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3655674 3655752 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3657714 3657790 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3657714 3657790 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3660139 3660218 0.000000 - 2 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3660139 3660218 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3662555 3662651 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene exon 3662555 3662738 0.000000 - . gene_id "ADAM33"; transcript_id "NM_025220:uc002wit.3"; -chr20 hg19_knownGene CDS 3649613 3649647 0.000000 - 2 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3648620 3649647 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3649946 3650017 0.000000 - 2 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3649946 3650017 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3650193 3650284 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3650193 3650284 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3651653 3651800 0.000000 - 2 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3651653 3651800 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3651884 3651992 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3651884 3651992 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3652228 3652426 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3652228 3652426 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3652524 3652632 0.000000 - 2 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3652524 3652632 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3652781 3652976 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3652781 3652976 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3653184 3653273 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3653184 3653273 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3653368 3653545 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3653368 3653545 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3654001 3654143 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3654001 3654143 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3654221 3654305 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3654221 3654305 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3654392 3654558 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3654392 3654558 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3654711 3654782 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3654711 3654782 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3654866 3654931 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3654866 3654931 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3655151 3655340 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3655151 3655340 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3655420 3655496 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3655420 3655496 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3655674 3655752 0.000000 - 1 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3655674 3655752 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3657714 3657790 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3657714 3657790 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3660139 3660218 0.000000 - 2 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3660139 3660218 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene CDS 3662555 3662651 0.000000 - 0 gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3662555 3662738 0.000000 - . gene_id "ADAM33"; transcript_id "NM_153202:uc002wiu.3"; -chr20 hg19_knownGene exon 3650542 3650945 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3651416 3651800 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3651884 3651992 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3652066 3652143 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3652228 3652426 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3654711 3654782 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3654866 3654931 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3655420 3655496 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3655635 3655752 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3657714 3657790 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3660139 3660218 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene exon 3662555 3662738 0.000000 - . gene_id "ADAM33"; transcript_id "AK095953:uc002wiw.1"; -chr20 hg19_knownGene CDS 3651887 3651992 0.000000 - 1 gene_id "ADAM33"; transcript_id "AY223851:uc010gba.1"; -chr20 hg19_knownGene exon 3651884 3651992 0.000000 - . gene_id "ADAM33"; transcript_id "AY223851:uc010gba.1"; -chr20 hg19_knownGene CDS 3657714 3657790 0.000000 - 0 gene_id "ADAM33"; transcript_id "AY223851:uc010gba.1"; -chr20 hg19_knownGene exon 3657714 3657790 0.000000 - . gene_id "ADAM33"; transcript_id "AY223851:uc010gba.1"; -chr20 hg19_knownGene CDS 3660139 3660218 0.000000 - 2 gene_id "ADAM33"; transcript_id "AY223851:uc010gba.1"; -chr20 hg19_knownGene exon 3660139 3660218 0.000000 - . gene_id "ADAM33"; transcript_id "AY223851:uc010gba.1"; -chr20 hg19_knownGene CDS 3662555 3662651 0.000000 - 0 gene_id "ADAM33"; transcript_id "AY223851:uc010gba.1"; -chr20 hg19_knownGene exon 3662555 3662738 0.000000 - . gene_id "ADAM33"; transcript_id "AY223851:uc010gba.1"; -chr20 hg19_knownGene CDS 3652231 3652426 0.000000 - 1 gene_id "ADAM33"; transcript_id "AY223850:uc010gbb.1"; -chr20 hg19_knownGene exon 3652228 3652426 0.000000 - . gene_id "ADAM33"; transcript_id "AY223850:uc010gbb.1"; -chr20 hg19_knownGene CDS 3657714 3657790 0.000000 - 0 gene_id "ADAM33"; transcript_id "AY223850:uc010gbb.1"; -chr20 hg19_knownGene exon 3657714 3657790 0.000000 - . gene_id "ADAM33"; transcript_id "AY223850:uc010gbb.1"; -chr20 hg19_knownGene CDS 3660139 3660218 0.000000 - 2 gene_id "ADAM33"; transcript_id "AY223850:uc010gbb.1"; -chr20 hg19_knownGene exon 3660139 3660218 0.000000 - . gene_id "ADAM33"; transcript_id "AY223850:uc010gbb.1"; -chr20 hg19_knownGene CDS 3662555 3662651 0.000000 - 0 gene_id "ADAM33"; transcript_id "AY223850:uc010gbb.1"; -chr20 hg19_knownGene exon 3662555 3662738 0.000000 - . gene_id "ADAM33"; transcript_id "AY223850:uc010gbb.1"; -chr20 hg19_knownGene CDS 3653187 3653273 0.000000 - 0 gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene exon 3653184 3653273 0.000000 - . gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene CDS 3654711 3654782 0.000000 - 0 gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene exon 3654711 3654782 0.000000 - . gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene CDS 3654866 3654931 0.000000 - 0 gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene exon 3654866 3654931 0.000000 - . gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene CDS 3655635 3655749 0.000000 - 1 gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene exon 3655635 3655749 0.000000 - . gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene CDS 3657714 3657790 0.000000 - 0 gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene exon 3657714 3657790 0.000000 - . gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene CDS 3660139 3660218 0.000000 - 2 gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene exon 3660139 3660218 0.000000 - . gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene CDS 3662555 3662651 0.000000 - 0 gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene exon 3662555 3662738 0.000000 - . gene_id "ADAM33"; transcript_id "AY223854:uc002wix.1"; -chr20 hg19_knownGene CDS 3653964 3654143 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3653368 3654143 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3654221 3654305 0.000000 - 1 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3654221 3654305 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3654392 3654558 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3654392 3654558 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3654711 3654782 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3654711 3654782 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3654866 3654931 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3654866 3654931 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3655151 3655340 0.000000 - 1 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3655151 3655340 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3655420 3655496 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3655420 3655496 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3655635 3655749 0.000000 - 1 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3655635 3655749 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3657714 3657790 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3657714 3657790 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3660139 3660218 0.000000 - 2 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3660139 3660218 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3662555 3662651 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene exon 3662555 3662738 0.000000 - . gene_id "ADAM33"; transcript_id "AK304037:uc010zqg.1"; -chr20 hg19_knownGene CDS 3653906 3654143 0.000000 - 1 gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene exon 3653368 3654143 0.000000 - . gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene CDS 3654230 3654558 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene exon 3654230 3654558 0.000000 - . gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene CDS 3654711 3654782 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene exon 3654711 3654782 0.000000 - . gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene CDS 3654866 3654931 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene exon 3654866 3654931 0.000000 - . gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene CDS 3655151 3655340 0.000000 - 1 gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene exon 3655151 3655340 0.000000 - . gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene CDS 3655420 3655496 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene exon 3655420 3655496 0.000000 - . gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene CDS 3655674 3655752 0.000000 - 1 gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene exon 3655674 3655752 0.000000 - . gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene CDS 3657714 3657790 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene exon 3657714 3657790 0.000000 - . gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene CDS 3660139 3660218 0.000000 - 2 gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene exon 3660139 3660218 0.000000 - . gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene CDS 3662555 3662651 0.000000 - 0 gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene exon 3662555 3662738 0.000000 - . gene_id "ADAM33"; transcript_id "AK300429:uc010zqh.1"; -chr20 hg19_knownGene CDS 3657713 3657790 0.000000 - 0 gene_id "ADAM33"; transcript_id "BC062663:uc002wiy.3"; -chr20 hg19_knownGene exon 3657083 3657790 0.000000 - . gene_id "ADAM33"; transcript_id "BC062663:uc002wiy.3"; -chr20 hg19_knownGene CDS 3660139 3660218 0.000000 - 2 gene_id "ADAM33"; transcript_id "BC062663:uc002wiy.3"; -chr20 hg19_knownGene exon 3660139 3660218 0.000000 - . gene_id "ADAM33"; transcript_id "BC062663:uc002wiy.3"; -chr20 hg19_knownGene CDS 3662555 3662651 0.000000 - 0 gene_id "ADAM33"; transcript_id "BC062663:uc002wiy.3"; -chr20 hg19_knownGene exon 3662555 3662738 0.000000 - . gene_id "ADAM33"; transcript_id "BC062663:uc002wiy.3"; -chr20 hg19_knownGene CDS 3670556 3670911 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "AK024479:uc002wjb.1"; -chr20 hg19_knownGene exon 3667619 3670911 0.000000 - . gene_id "SIGLEC1"; transcript_id "AK024479:uc002wjb.1"; -chr20 hg19_knownGene CDS 3671987 3672247 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "AK024479:uc002wjb.1"; -chr20 hg19_knownGene exon 3671987 3672247 0.000000 - . gene_id "SIGLEC1"; transcript_id "AK024479:uc002wjb.1"; -chr20 hg19_knownGene CDS 3672550 3672796 0.000000 - 0 gene_id "SIGLEC1"; transcript_id "AK024479:uc002wjb.1"; -chr20 hg19_knownGene exon 3672550 3672849 0.000000 - . gene_id "SIGLEC1"; transcript_id "AK024479:uc002wjb.1"; -chr20 hg19_knownGene exon 3673168 3673419 0.000000 - . gene_id "SIGLEC1"; transcript_id "AK024479:uc002wjb.1"; -chr20 hg19_knownGene exon 3673509 3673778 0.000000 - . gene_id "SIGLEC1"; transcript_id "AK024479:uc002wjb.1"; -chr20 hg19_knownGene CDS 3683713 3684098 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "AY927519:uc002wjc.3"; -chr20 hg19_knownGene exon 3683708 3684098 0.000000 - . gene_id "SIGLEC1"; transcript_id "AY927519:uc002wjc.3"; -chr20 hg19_knownGene CDS 3684472 3684738 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "AY927519:uc002wjc.3"; -chr20 hg19_knownGene exon 3684472 3684738 0.000000 - . gene_id "SIGLEC1"; transcript_id "AY927519:uc002wjc.3"; -chr20 hg19_knownGene CDS 3686391 3686687 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "AY927519:uc002wjc.3"; -chr20 hg19_knownGene exon 3686391 3686687 0.000000 - . gene_id "SIGLEC1"; transcript_id "AY927519:uc002wjc.3"; -chr20 hg19_knownGene CDS 3686994 3687135 0.000000 - 0 gene_id "SIGLEC1"; transcript_id "AY927519:uc002wjc.3"; -chr20 hg19_knownGene exon 3686994 3687353 0.000000 - . gene_id "SIGLEC1"; transcript_id "AY927519:uc002wjc.3"; -chr20 hg19_knownGene CDS 3669210 3669266 0.000000 - 0 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3667617 3669266 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3669802 3669874 0.000000 - 1 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3669802 3669874 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3670247 3670349 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3670247 3670349 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3670609 3670911 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3670609 3670911 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3671987 3672247 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3671987 3672247 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3672550 3672849 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3672550 3672849 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3673168 3673419 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3673168 3673419 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3673509 3673778 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3673509 3673778 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3674094 3674345 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3674094 3674345 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3674868 3675179 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3674868 3675179 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3675310 3675570 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3675310 3675570 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3677233 3677535 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3677233 3677535 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3677732 3677989 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3677732 3677989 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3678445 3678780 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3678445 3678780 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3679849 3680106 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3679849 3680106 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3681989 3682288 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3681989 3682288 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3683844 3684098 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3683844 3684098 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3684472 3684738 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3684472 3684738 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3686391 3686687 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3686391 3686687 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3686994 3687353 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3686994 3687353 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3687727 3687775 0.000000 - 0 gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene exon 3687727 3687775 0.000000 - . gene_id "SIGLEC1"; transcript_id "NM_023068:uc002wja.3"; -chr20 hg19_knownGene CDS 3669161 3669266 0.000000 - 1 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3667617 3669266 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3670247 3670349 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3670247 3670349 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3670609 3670911 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3670609 3670911 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3671987 3672247 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3671987 3672247 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3672550 3672849 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3672550 3672849 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3673168 3673419 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3673168 3673419 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3673509 3673778 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3673509 3673778 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3674094 3674345 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3674094 3674345 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3674868 3675179 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3674868 3675179 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3675310 3675570 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3675310 3675570 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3677233 3677535 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3677233 3677535 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3677732 3677989 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3677732 3677989 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3678445 3678780 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3678445 3678780 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3679849 3680106 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3679849 3680106 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3681989 3682288 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3681989 3682288 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3683844 3684098 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3683844 3684098 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3684472 3684738 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3684472 3684738 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3686391 3686687 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3686391 3686687 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3686994 3687353 0.000000 - 2 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3686994 3687353 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene CDS 3687727 3687775 0.000000 - 0 gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3687727 3687775 0.000000 - . gene_id "SIGLEC1"; transcript_id "BC141884:uc002wiz.4"; -chr20 hg19_knownGene exon 3713317 3713441 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3719322 3719364 0.000000 + 0 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3719305 3719364 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3721462 3721559 0.000000 + 2 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3721462 3721559 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3722931 3723055 0.000000 + 0 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3722931 3723055 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3725549 3725735 0.000000 + 1 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3725549 3725735 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3726140 3726244 0.000000 + 0 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3726140 3726244 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3726562 3726678 0.000000 + 0 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3726562 3726678 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3728864 3729038 0.000000 + 0 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3728864 3729038 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3729879 3729965 0.000000 + 2 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3729879 3729965 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3730397 3730501 0.000000 + 2 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3730397 3730501 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3730616 3730874 0.000000 + 2 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3730616 3730874 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3731451 3731554 0.000000 + 1 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3731451 3731554 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene CDS 3732158 3732810 0.000000 + 2 gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3732158 3733758 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_052970:uc002wjd.3"; -chr20 hg19_knownGene exon 3713317 3713441 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3719322 3719364 0.000000 + 0 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3719305 3719364 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3721462 3721559 0.000000 + 2 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3721462 3721559 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3722931 3723055 0.000000 + 0 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3722931 3723055 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3725549 3725735 0.000000 + 1 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3725549 3725735 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3726140 3726244 0.000000 + 0 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3726140 3726244 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3726565 3726678 0.000000 + 0 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3726565 3726678 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3728864 3729038 0.000000 + 0 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3728864 3729038 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3729879 3729965 0.000000 + 2 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3729879 3729965 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3730397 3730501 0.000000 + 2 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3730397 3730501 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3730616 3730874 0.000000 + 2 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3730616 3730874 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3731451 3731554 0.000000 + 1 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3731451 3731554 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene CDS 3732158 3732810 0.000000 + 2 gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3732158 3733758 0.000000 + . gene_id "HSPA12B"; transcript_id "NM_001197327:uc010zqi.2"; -chr20 hg19_knownGene exon 3713317 3713441 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3719305 3719364 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene CDS 3723051 3723055 0.000000 + 0 gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3722931 3723055 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene CDS 3725549 3725735 0.000000 + 1 gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3725549 3725735 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene CDS 3726140 3726244 0.000000 + 0 gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3726140 3726244 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene CDS 3726562 3726678 0.000000 + 0 gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3726562 3726678 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene CDS 3728864 3729038 0.000000 + 0 gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3728864 3729038 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene CDS 3729879 3729965 0.000000 + 2 gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3729879 3729965 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene CDS 3730397 3730501 0.000000 + 2 gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3730397 3730501 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene CDS 3730616 3730874 0.000000 + 2 gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3730616 3730874 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene CDS 3731451 3731554 0.000000 + 1 gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3731451 3731554 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene CDS 3732158 3732810 0.000000 + 2 gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3732158 3733758 0.000000 + . gene_id "HSPA12B"; transcript_id "BC090857:uc002wje.3"; -chr20 hg19_knownGene exon 3713317 3713441 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene exon 3719305 3719364 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene exon 3725549 3725735 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene CDS 3726185 3726244 0.000000 + 0 gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene exon 3726118 3726244 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene CDS 3726562 3726678 0.000000 + 0 gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene exon 3726562 3726678 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene CDS 3728864 3729038 0.000000 + 0 gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene exon 3728864 3729038 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene CDS 3729879 3729965 0.000000 + 2 gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene exon 3729879 3729965 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene CDS 3730397 3730501 0.000000 + 2 gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene exon 3730397 3730501 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene CDS 3730616 3730874 0.000000 + 2 gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene exon 3730616 3730874 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene CDS 3731451 3731554 0.000000 + 1 gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene exon 3731451 3731554 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene CDS 3732158 3732810 0.000000 + 2 gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene exon 3732158 3733758 0.000000 + . gene_id "HSPA12B"; transcript_id "AK297120:uc010zqj.2"; -chr20 hg19_knownGene CDS 3736075 3736254 0.000000 - 0 gene_id "C20orf27"; transcript_id "AK124341:uc002wjf.1"; -chr20 hg19_knownGene exon 3734156 3736254 0.000000 - . gene_id "C20orf27"; transcript_id "AK124341:uc002wjf.1"; -chr20 hg19_knownGene CDS 3739183 3739325 0.000000 - 2 gene_id "C20orf27"; transcript_id "AK124341:uc002wjf.1"; -chr20 hg19_knownGene exon 3739183 3739325 0.000000 - . gene_id "C20orf27"; transcript_id "AK124341:uc002wjf.1"; -chr20 hg19_knownGene CDS 3740654 3740747 0.000000 - 0 gene_id "C20orf27"; transcript_id "AK124341:uc002wjf.1"; -chr20 hg19_knownGene exon 3740654 3740833 0.000000 - . gene_id "C20orf27"; transcript_id "AK124341:uc002wjf.1"; -chr20 hg19_knownGene exon 3748310 3748452 0.000000 - . gene_id "C20orf27"; transcript_id "AK124341:uc002wjf.1"; -chr20 hg19_knownGene CDS 3734708 3734805 0.000000 - 2 gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene exon 3734158 3734805 0.000000 - . gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene CDS 3735044 3735166 0.000000 - 2 gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene exon 3735044 3735166 0.000000 - . gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene CDS 3736116 3736254 0.000000 - 0 gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene exon 3736116 3736254 0.000000 - . gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene CDS 3739183 3739325 0.000000 - 2 gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene exon 3739183 3739325 0.000000 - . gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene CDS 3740654 3740747 0.000000 - 0 gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene exon 3740654 3740833 0.000000 - . gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene exon 3748310 3748452 0.000000 - . gene_id "C20orf27"; transcript_id "NM_001039140:uc002wjh.1"; -chr20 hg19_knownGene CDS 3734708 3734805 0.000000 - 2 gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene exon 3734158 3734805 0.000000 - . gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene CDS 3735044 3735166 0.000000 - 2 gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene exon 3735044 3735166 0.000000 - . gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene CDS 3736116 3736254 0.000000 - 0 gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene exon 3736116 3736254 0.000000 - . gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene CDS 3739183 3739325 0.000000 - 2 gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene exon 3739183 3739325 0.000000 - . gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene CDS 3740729 3740747 0.000000 - 0 gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene exon 3740729 3740833 0.000000 - . gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene exon 3748310 3748452 0.000000 - . gene_id "C20orf27"; transcript_id "AK225109:uc002wji.1"; -chr20 hg19_knownGene CDS 3758862 3758966 0.000000 - 0 gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene exon 3758151 3758966 0.000000 - . gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene CDS 3759068 3759191 0.000000 - 1 gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene exon 3759068 3759191 0.000000 - . gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene CDS 3759393 3759453 0.000000 - 2 gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene exon 3759393 3759453 0.000000 - . gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene CDS 3759598 3759637 0.000000 - 0 gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene exon 3759598 3759637 0.000000 - . gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene CDS 3759843 3759999 0.000000 - 1 gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene exon 3759843 3759999 0.000000 - . gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene CDS 3760311 3760422 0.000000 - 2 gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene exon 3760311 3760422 0.000000 - . gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene CDS 3761826 3761934 0.000000 - 0 gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene exon 3761826 3762102 0.000000 - . gene_id "SPEF1"; transcript_id "NM_015417:uc002wjj.3"; -chr20 hg19_knownGene CDS 3765334 3767130 0.000000 - 0 gene_id "CENPB"; transcript_id "NM_001810:uc002wjk.3"; -chr20 hg19_knownGene exon 3764498 3767337 0.000000 - . gene_id "CENPB"; transcript_id "NM_001810:uc002wjk.3"; -chr20 hg19_knownGene CDS 3767779 3767786 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3767578 3767786 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3778269 3778396 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3778269 3778396 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3779059 3779110 0.000000 + 2 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3779059 3779110 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3780935 3780976 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3780935 3780976 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3781109 3781145 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3781109 3781145 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3781390 3781512 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3781390 3781512 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3781618 3781740 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3781618 3781740 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3781901 3782035 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3781901 3782035 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3782369 3782449 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3782369 3782449 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3782571 3782747 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3782571 3782747 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3782928 3783023 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3782928 3783023 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3783557 3783619 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3783557 3783619 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3783755 3783853 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3783755 3783853 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3784051 3784184 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3784051 3784184 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3785216 3785327 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3785216 3785327 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3785468 3785605 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene exon 3785468 3786761 0.000000 + . gene_id "CDC25B"; transcript_id "AK295573:uc010zqk.2"; -chr20 hg19_knownGene CDS 3767779 3767786 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3767578 3767786 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3778311 3778396 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3778311 3778396 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3779059 3779110 0.000000 + 2 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3779059 3779110 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3780935 3780976 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3780935 3780976 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3781109 3781145 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3781109 3781145 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3781390 3781512 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3781390 3781512 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3781618 3781740 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3781618 3781740 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3781901 3782035 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3781901 3782035 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3782369 3782449 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3782369 3782449 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3782571 3782747 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3782571 3782747 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3782928 3783023 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3782928 3783023 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3783557 3783619 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3783557 3783619 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3783755 3783853 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3783755 3783853 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3784051 3784184 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3784051 3784184 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3785216 3785327 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3785216 3785327 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3785468 3785605 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene exon 3785468 3786761 0.000000 + . gene_id "CDC25B"; transcript_id "AK299192:uc010zql.2"; -chr20 hg19_knownGene CDS 3767779 3767786 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3767578 3767786 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3778269 3778396 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3778269 3778396 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3779059 3779110 0.000000 + 2 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3779059 3779110 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3780935 3780976 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3780935 3780976 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3781109 3781145 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3781109 3781145 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3781390 3781512 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3781390 3781512 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3781618 3781740 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3781618 3781740 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3781901 3782035 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3781901 3782035 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3782571 3782747 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3782571 3782747 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3782928 3783023 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3782928 3783023 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3783557 3783619 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3783557 3783619 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3783755 3783853 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3783755 3783853 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3784051 3784184 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3784051 3784184 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3785216 3785327 0.000000 + 1 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3785216 3785327 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene CDS 3785468 3785605 0.000000 + 0 gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3785468 3786761 0.000000 + . gene_id "CDC25B"; transcript_id "AK299028:uc010zqm.2"; -chr20 hg19_knownGene exon 3776386 3776526 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3778269 3778396 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3779067 3779110 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3779059 3779110 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3780935 3780976 0.000000 + 1 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3780935 3780976 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3781109 3781145 0.000000 + 1 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3781109 3781145 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3781390 3781512 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3781390 3781512 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3781618 3781740 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3781618 3781740 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3781901 3782035 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3781901 3782035 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3782369 3782449 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3782369 3782449 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3782571 3782747 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3782571 3782747 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3782928 3783023 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3782928 3783023 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3783557 3783619 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3783557 3783619 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3783755 3783853 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3783755 3783853 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3784051 3784184 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3784051 3784184 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3785216 3785327 0.000000 + 1 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3785216 3785327 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene CDS 3785468 3785605 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3785468 3786761 0.000000 + . gene_id "CDC25B"; transcript_id "FR695900:uc002wjl.3"; -chr20 hg19_knownGene exon 3776386 3776526 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3778311 3778396 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3779067 3779110 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3779059 3779110 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3780935 3780976 0.000000 + 1 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3780935 3780976 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3781109 3781145 0.000000 + 1 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3781109 3781145 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3781390 3781512 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3781390 3781512 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3781618 3781740 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3781618 3781740 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3781901 3782035 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3781901 3782035 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3782369 3782449 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3782369 3782449 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3782571 3782747 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3782571 3782747 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3782928 3783023 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3782928 3783023 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3783557 3783619 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3783557 3783619 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3783755 3783853 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3783755 3783853 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3784051 3784184 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3784051 3784184 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3785216 3785327 0.000000 + 1 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3785216 3785327 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene CDS 3785468 3785605 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3785468 3786761 0.000000 + . gene_id "CDC25B"; transcript_id "BX647988:uc002wjm.3"; -chr20 hg19_knownGene exon 3776386 3776526 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3778269 3778396 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3779067 3779110 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3779059 3779110 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3780935 3780976 0.000000 + 1 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3780935 3780976 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3781109 3781145 0.000000 + 1 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3781109 3781145 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3781618 3781740 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3781618 3781740 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3781901 3782035 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3781901 3782035 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3782369 3782449 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3782369 3782449 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3782571 3782747 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3782571 3782747 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3782928 3783023 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3782928 3783023 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3783557 3783619 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3783557 3783619 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3783755 3783853 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3783755 3783853 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3784051 3784184 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3784051 3784184 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3785216 3785327 0.000000 + 1 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3785216 3785327 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3785468 3785605 0.000000 + 0 gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene exon 3785468 3786761 0.000000 + . gene_id "CDC25B"; transcript_id "FR695901:uc021waa.1"; -chr20 hg19_knownGene CDS 3777179 3777378 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3776401 3777378 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3778269 3778396 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3778269 3778396 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3779059 3779110 0.000000 + 2 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3779059 3779110 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3780935 3780976 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3780935 3780976 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3781109 3781145 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3781109 3781145 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3781390 3781512 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3781390 3781512 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3781618 3781740 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3781618 3781740 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3781901 3782035 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3781901 3782035 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3782369 3782449 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3782369 3782449 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3782571 3782747 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3782571 3782747 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3782928 3783023 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3782928 3783023 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3783557 3783619 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3783557 3783619 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3783755 3783853 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3783755 3783853 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3784051 3784184 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3784051 3784184 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3785216 3785327 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3785216 3785327 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3785468 3785605 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene exon 3785468 3786761 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021873:uc002wjn.3"; -chr20 hg19_knownGene CDS 3777179 3777378 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3776401 3777378 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3778311 3778396 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3778311 3778396 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3779059 3779110 0.000000 + 2 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3779059 3779110 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3780935 3780976 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3780935 3780976 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3781109 3781145 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3781109 3781145 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3781390 3781512 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3781390 3781512 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3781618 3781740 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3781618 3781740 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3781901 3782035 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3781901 3782035 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3782369 3782449 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3782369 3782449 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3782571 3782747 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3782571 3782747 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3782928 3783023 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3782928 3783023 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3783557 3783619 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3783557 3783619 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3783755 3783853 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3783755 3783853 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3784051 3784184 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3784051 3784184 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3785216 3785327 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3785216 3785327 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3785468 3785605 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene exon 3785468 3786761 0.000000 + . gene_id "CDC25B"; transcript_id "NM_004358:uc002wjo.3"; -chr20 hg19_knownGene CDS 3777179 3777378 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3776401 3777378 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3778269 3778396 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3778269 3778396 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3779059 3779110 0.000000 + 2 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3779059 3779110 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3780935 3780976 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3780935 3780976 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3781109 3781145 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3781109 3781145 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3781618 3781740 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3781618 3781740 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3781901 3782035 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3781901 3782035 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3782369 3782449 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3782369 3782449 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3782571 3782747 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3782571 3782747 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3782928 3783023 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3782928 3783023 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3783557 3783619 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3783557 3783619 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3783755 3783853 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3783755 3783853 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3784051 3784184 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3784051 3784184 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3785216 3785327 0.000000 + 1 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3785216 3785327 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene CDS 3785468 3785605 0.000000 + 0 gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3785468 3786761 0.000000 + . gene_id "CDC25B"; transcript_id "NM_021872:uc002wjp.3"; -chr20 hg19_knownGene exon 3780717 3780976 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3781109 3781145 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene CDS 3781636 3781740 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3781618 3781740 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene CDS 3781901 3782035 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3781901 3782035 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene CDS 3782369 3782449 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3782369 3782449 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene CDS 3782571 3782747 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3782571 3782747 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene CDS 3782928 3783023 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3782928 3783023 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene CDS 3783557 3783619 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3783557 3783619 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene CDS 3783755 3783853 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3783755 3783853 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene CDS 3784051 3784184 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3784051 3784184 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene CDS 3785216 3785327 0.000000 + 1 gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3785216 3785327 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene CDS 3785468 3785605 0.000000 + 0 gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3785468 3786761 0.000000 + . gene_id "CDC25B"; transcript_id "BX640836:uc002wjq.3"; -chr20 hg19_knownGene exon 3789141 3789249 0.000000 + . gene_id "BC042140"; transcript_id "BC042140:uc002wjr.3"; -chr20 hg19_knownGene exon 3790544 3790661 0.000000 + . gene_id "BC042140"; transcript_id "BC042140:uc002wjr.3"; -chr20 hg19_knownGene exon 3792177 3792388 0.000000 + . gene_id "BC042140"; transcript_id "BC042140:uc002wjr.3"; -chr20 hg19_knownGene exon 3792815 3793081 0.000000 + . gene_id "BC042140"; transcript_id "BC042140:uc002wjr.3"; -chr20 hg19_knownGene exon 3801171 3801405 0.000000 + . gene_id "C20orf29"; transcript_id "BC011985:uc002wjt.3"; -chr20 hg19_knownGene exon 3802749 3802940 0.000000 + . gene_id "C20orf29"; transcript_id "BC011985:uc002wjt.3"; -chr20 hg19_knownGene CDS 3804570 3804941 0.000000 + 0 gene_id "C20orf29"; transcript_id "BC011985:uc002wjt.3"; -chr20 hg19_knownGene exon 3804522 3805580 0.000000 + . gene_id "C20orf29"; transcript_id "BC011985:uc002wjt.3"; -chr20 hg19_knownGene exon 3801171 3801405 0.000000 + . gene_id "C20orf29"; transcript_id "NM_018347:uc002wju.2"; -chr20 hg19_knownGene CDS 3802765 3802940 0.000000 + 0 gene_id "C20orf29"; transcript_id "NM_018347:uc002wju.2"; -chr20 hg19_knownGene exon 3802749 3802940 0.000000 + . gene_id "C20orf29"; transcript_id "NM_018347:uc002wju.2"; -chr20 hg19_knownGene CDS 3804518 3804941 0.000000 + 1 gene_id "C20orf29"; transcript_id "NM_018347:uc002wju.2"; -chr20 hg19_knownGene exon 3804518 3805954 0.000000 + . gene_id "C20orf29"; transcript_id "NM_018347:uc002wju.2"; -chr20 hg19_knownGene exon 3801171 3801349 0.000000 + . gene_id "C20orf29"; transcript_id "NM_001204447:uc002wjs.2"; -chr20 hg19_knownGene CDS 3802765 3802940 0.000000 + 0 gene_id "C20orf29"; transcript_id "NM_001204447:uc002wjs.2"; -chr20 hg19_knownGene exon 3802749 3802940 0.000000 + . gene_id "C20orf29"; transcript_id "NM_001204447:uc002wjs.2"; -chr20 hg19_knownGene CDS 3804518 3804941 0.000000 + 1 gene_id "C20orf29"; transcript_id "NM_001204447:uc002wjs.2"; -chr20 hg19_knownGene exon 3804518 3805954 0.000000 + . gene_id "C20orf29"; transcript_id "NM_001204447:uc002wjs.2"; -chr20 hg19_knownGene exon 3801171 3801501 0.000000 + . gene_id "C20orf29"; transcript_id "NM_001204446:uc021wab.1"; -chr20 hg19_knownGene CDS 3802765 3802940 0.000000 + 0 gene_id "C20orf29"; transcript_id "NM_001204446:uc021wab.1"; -chr20 hg19_knownGene exon 3802749 3802940 0.000000 + . gene_id "C20orf29"; transcript_id "NM_001204446:uc021wab.1"; -chr20 hg19_knownGene CDS 3804518 3804941 0.000000 + 1 gene_id "C20orf29"; transcript_id "NM_001204446:uc021wab.1"; -chr20 hg19_knownGene exon 3804518 3805954 0.000000 + . gene_id "C20orf29"; transcript_id "NM_001204446:uc021wab.1"; -chr20 hg19_knownGene exon 3827446 3827550 0.000000 + . gene_id "MAVS"; transcript_id "AK130992:uc002wjv.3"; -chr20 hg19_knownGene CDS 3835272 3835388 0.000000 + 0 gene_id "MAVS"; transcript_id "AK130992:uc002wjv.3"; -chr20 hg19_knownGene exon 3835205 3835388 0.000000 + . gene_id "MAVS"; transcript_id "AK130992:uc002wjv.3"; -chr20 hg19_knownGene CDS 3838282 3838578 0.000000 + 0 gene_id "MAVS"; transcript_id "AK130992:uc002wjv.3"; -chr20 hg19_knownGene exon 3838282 3838615 0.000000 + . gene_id "MAVS"; transcript_id "AK130992:uc002wjv.3"; -chr20 hg19_knownGene exon 3827446 3827550 0.000000 + . gene_id "MAVS"; transcript_id "NM_001206491:uc002wjx.4"; -chr20 hg19_knownGene exon 3835205 3835388 0.000000 + . gene_id "MAVS"; transcript_id "NM_001206491:uc002wjx.4"; -chr20 hg19_knownGene CDS 3842110 3842151 0.000000 + 0 gene_id "MAVS"; transcript_id "NM_001206491:uc002wjx.4"; -chr20 hg19_knownGene exon 3841979 3842151 0.000000 + . gene_id "MAVS"; transcript_id "NM_001206491:uc002wjx.4"; -chr20 hg19_knownGene CDS 3842901 3843060 0.000000 + 0 gene_id "MAVS"; transcript_id "NM_001206491:uc002wjx.4"; -chr20 hg19_knownGene exon 3842901 3843060 0.000000 + . gene_id "MAVS"; transcript_id "NM_001206491:uc002wjx.4"; -chr20 hg19_knownGene CDS 3844903 3845435 0.000000 + 2 gene_id "MAVS"; transcript_id "NM_001206491:uc002wjx.4"; -chr20 hg19_knownGene exon 3844903 3845435 0.000000 + . gene_id "MAVS"; transcript_id "NM_001206491:uc002wjx.4"; -chr20 hg19_knownGene CDS 3846330 3846791 0.000000 + 0 gene_id "MAVS"; transcript_id "NM_001206491:uc002wjx.4"; -chr20 hg19_knownGene exon 3846330 3856770 0.000000 + . gene_id "MAVS"; transcript_id "NM_001206491:uc002wjx.4"; -chr20 hg19_knownGene exon 3827446 3827550 0.000000 + . gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene CDS 3835272 3835388 0.000000 + 0 gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene exon 3835205 3835388 0.000000 + . gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene CDS 3838282 3838456 0.000000 + 0 gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene exon 3838282 3838456 0.000000 + . gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene CDS 3841979 3842151 0.000000 + 2 gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene exon 3841979 3842151 0.000000 + . gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene CDS 3842901 3843060 0.000000 + 0 gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene exon 3842901 3843060 0.000000 + . gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene CDS 3844903 3845435 0.000000 + 2 gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene exon 3844903 3845435 0.000000 + . gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene CDS 3846330 3846791 0.000000 + 0 gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene exon 3846330 3856770 0.000000 + . gene_id "MAVS"; transcript_id "NM_020746:uc002wjw.4"; -chr20 hg19_knownGene exon 3827446 3827550 0.000000 + . gene_id "MAVS"; transcript_id "NR_037921:uc002wjy.4"; -chr20 hg19_knownGene exon 3835205 3835388 0.000000 + . gene_id "MAVS"; transcript_id "NR_037921:uc002wjy.4"; -chr20 hg19_knownGene exon 3838282 3838456 0.000000 + . gene_id "MAVS"; transcript_id "NR_037921:uc002wjy.4"; -chr20 hg19_knownGene exon 3842901 3843060 0.000000 + . gene_id "MAVS"; transcript_id "NR_037921:uc002wjy.4"; -chr20 hg19_knownGene CDS 3845184 3845435 0.000000 + 0 gene_id "MAVS"; transcript_id "NR_037921:uc002wjy.4"; -chr20 hg19_knownGene exon 3844903 3845435 0.000000 + . gene_id "MAVS"; transcript_id "NR_037921:uc002wjy.4"; -chr20 hg19_knownGene CDS 3846330 3846791 0.000000 + 0 gene_id "MAVS"; transcript_id "NR_037921:uc002wjy.4"; -chr20 hg19_knownGene exon 3846330 3856770 0.000000 + . gene_id "MAVS"; transcript_id "NR_037921:uc002wjy.4"; -chr20 hg19_knownGene exon 3867916 3869231 0.000000 - . gene_id "BC012193"; transcript_id "BC012193:uc002wjz.2"; -chr20 hg19_knownGene exon 3869232 3869724 0.000000 - . gene_id "BC012193"; transcript_id "BC012193:uc002wka.1"; -chr20 hg19_knownGene exon 3869742 3870375 0.000000 + . gene_id "PANK2"; transcript_id "AK310190:uc010gbd.1"; -chr20 hg19_knownGene exon 3871891 3872058 0.000000 + . gene_id "PANK2"; transcript_id "AK310190:uc010gbd.1"; -chr20 hg19_knownGene exon 3888573 3888925 0.000000 + . gene_id "PANK2"; transcript_id "AK310190:uc010gbd.1"; -chr20 hg19_knownGene exon 3891224 3891477 0.000000 + . gene_id "PANK2"; transcript_id "AK310190:uc010gbd.1"; -chr20 hg19_knownGene exon 3898149 3898210 0.000000 - . gene_id "MIR103B2"; transcript_id "NR_031722:uc021wac.1"; -chr20 hg19_knownGene exon 3898141 3898218 0.000000 + . gene_id "MIR103A2"; transcript_id "NR_029519:uc002wkg.3"; -chr20 hg19_knownGene exon 3869486 3869551 0.000000 + . gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene CDS 3888818 3888925 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene exon 3888573 3888925 0.000000 + . gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene CDS 3891224 3891477 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene exon 3891224 3891477 0.000000 + . gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene CDS 3893105 3893281 0.000000 + 1 gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene exon 3893105 3893281 0.000000 + . gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene CDS 3897574 3897697 0.000000 + 1 gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene exon 3897574 3897697 0.000000 + . gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene CDS 3899318 3899443 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene exon 3899318 3899443 0.000000 + . gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene CDS 3903891 3903938 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene exon 3903891 3904502 0.000000 + . gene_id "PANK2"; transcript_id "NM_024960:uc002wkb.3"; -chr20 hg19_knownGene CDS 3869748 3870375 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene exon 3869742 3870375 0.000000 + . gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene CDS 3888573 3888925 0.000000 + 2 gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene exon 3888573 3888925 0.000000 + . gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene CDS 3891224 3891477 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene exon 3891224 3891477 0.000000 + . gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene CDS 3893105 3893281 0.000000 + 1 gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene exon 3893105 3893281 0.000000 + . gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene CDS 3897574 3897697 0.000000 + 1 gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene exon 3897574 3897697 0.000000 + . gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene CDS 3899318 3899443 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene exon 3899318 3899443 0.000000 + . gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene CDS 3903891 3903938 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene exon 3903891 3904502 0.000000 + . gene_id "PANK2"; transcript_id "NM_153638:uc002wkc.3"; -chr20 hg19_knownGene exon 3869742 3870375 0.000000 + . gene_id "PANK2"; transcript_id "BC009421:uc002wkd.3"; -chr20 hg19_knownGene exon 3888573 3888782 0.000000 + . gene_id "PANK2"; transcript_id "BC009421:uc002wkd.3"; -chr20 hg19_knownGene exon 3891224 3891477 0.000000 + . gene_id "PANK2"; transcript_id "BC009421:uc002wkd.3"; -chr20 hg19_knownGene exon 3893105 3893281 0.000000 + . gene_id "PANK2"; transcript_id "BC009421:uc002wkd.3"; -chr20 hg19_knownGene exon 3897574 3897697 0.000000 + . gene_id "PANK2"; transcript_id "BC009421:uc002wkd.3"; -chr20 hg19_knownGene exon 3899318 3899443 0.000000 + . gene_id "PANK2"; transcript_id "BC009421:uc002wkd.3"; -chr20 hg19_knownGene exon 3903891 3904502 0.000000 + . gene_id "PANK2"; transcript_id "BC009421:uc002wkd.3"; -chr20 hg19_knownGene exon 3870463 3870579 0.000000 + . gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene CDS 3888818 3888925 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene exon 3888573 3888925 0.000000 + . gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene CDS 3891224 3891477 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene exon 3891224 3891477 0.000000 + . gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene CDS 3893105 3893281 0.000000 + 1 gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene exon 3893105 3893281 0.000000 + . gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene CDS 3897574 3897697 0.000000 + 1 gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene exon 3897574 3897697 0.000000 + . gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene CDS 3899318 3899443 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene exon 3899318 3899443 0.000000 + . gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene CDS 3903891 3903938 0.000000 + 0 gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene exon 3903891 3904502 0.000000 + . gene_id "PANK2"; transcript_id "NM_153640:uc002wke.3"; -chr20 hg19_knownGene exon 3870463 3870579 0.000000 + . gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene exon 3888573 3888782 0.000000 + . gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene exon 3891224 3891477 0.000000 + . gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene CDS 3893178 3893281 0.000000 + 0 gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene exon 3893105 3893281 0.000000 + . gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene CDS 3897574 3897697 0.000000 + 1 gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene exon 3897574 3897697 0.000000 + . gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene CDS 3899318 3899443 0.000000 + 0 gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene exon 3899318 3899443 0.000000 + . gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene CDS 3903891 3903938 0.000000 + 0 gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene exon 3903891 3904502 0.000000 + . gene_id "PANK2"; transcript_id "BC107724:uc002wkf.3"; -chr20 hg19_knownGene CDS 3914713 3914848 0.000000 - 1 gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene exon 3912069 3914848 0.000000 - . gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene CDS 3915641 3915720 0.000000 - 0 gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene exon 3915641 3915720 0.000000 - . gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene CDS 3925824 3925865 0.000000 - 0 gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene exon 3925824 3925865 0.000000 - . gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene CDS 3928884 3928926 0.000000 - 1 gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene exon 3928884 3928926 0.000000 - . gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene CDS 3944522 3944664 0.000000 - 0 gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene exon 3944522 3944671 0.000000 - . gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene exon 3995792 3996054 0.000000 - . gene_id "RNF24"; transcript_id "NM_007219:uc002wkh.2"; -chr20 hg19_knownGene CDS 3914713 3914848 0.000000 - 1 gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene exon 3912069 3914848 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene CDS 3915641 3915720 0.000000 - 0 gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene exon 3915641 3915720 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene CDS 3925824 3925865 0.000000 - 0 gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene exon 3925824 3925865 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene CDS 3928884 3928926 0.000000 - 1 gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene exon 3928884 3928926 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene CDS 3944522 3944671 0.000000 - 1 gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene exon 3944522 3944671 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene CDS 3954979 3955034 0.000000 - 0 gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene exon 3954979 3955047 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene exon 3996084 3996216 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134338:uc002wki.2"; -chr20 hg19_knownGene CDS 3914713 3914848 0.000000 - 1 gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene exon 3912069 3914848 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene CDS 3915641 3915720 0.000000 - 0 gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene exon 3915641 3915720 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene CDS 3925824 3925865 0.000000 - 0 gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene exon 3925824 3925865 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene CDS 3928884 3928926 0.000000 - 1 gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene exon 3928884 3928926 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene CDS 3944522 3944664 0.000000 - 0 gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene exon 3944522 3944671 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene exon 3996084 3996216 0.000000 - . gene_id "RNF24"; transcript_id "NM_001134337:uc002wkj.2"; -chr20 hg19_knownGene exon 4100589 4100738 0.000000 + . gene_id "BC027448"; transcript_id "BC027448:uc021wad.1"; -chr20 hg19_knownGene exon 4101627 4101824 0.000000 + . gene_id "BC027448"; transcript_id "BC027448:uc021wad.1"; -chr20 hg19_knownGene exon 4122911 4124836 0.000000 + . gene_id "BC027448"; transcript_id "BC027448:uc021wad.1"; -chr20 hg19_knownGene exon 4129450 4129624 0.000000 + . gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene CDS 4155703 4155910 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene exon 4155677 4155910 0.000000 + . gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene CDS 4157998 4158224 0.000000 + 2 gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene exon 4157998 4158224 0.000000 + . gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene CDS 4162450 4162623 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene exon 4162450 4162623 0.000000 + . gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene CDS 4162736 4162970 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene exon 4162736 4162970 0.000000 + . gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene CDS 4163130 4163495 0.000000 + 2 gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene exon 4163130 4163495 0.000000 + . gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene CDS 4164141 4164301 0.000000 + 2 gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene exon 4164141 4164301 0.000000 + . gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene CDS 4167390 4167479 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene exon 4167390 4167479 0.000000 + . gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene CDS 4167917 4168051 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene exon 4167917 4168369 0.000000 + . gene_id "SMOX"; transcript_id "NM_175842:uc002wkk.1"; -chr20 hg19_knownGene exon 4129450 4129624 0.000000 + . gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene CDS 4155703 4155910 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene exon 4155677 4155910 0.000000 + . gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene CDS 4157998 4158224 0.000000 + 2 gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene exon 4157998 4158224 0.000000 + . gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene CDS 4162450 4162623 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene exon 4162450 4162623 0.000000 + . gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene CDS 4162736 4162970 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene exon 4162736 4162970 0.000000 + . gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene CDS 4163130 4163495 0.000000 + 2 gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene exon 4163130 4163495 0.000000 + . gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene CDS 4164141 4164301 0.000000 + 2 gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene exon 4164141 4164301 0.000000 + . gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene CDS 4167917 4168051 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene exon 4167917 4168369 0.000000 + . gene_id "SMOX"; transcript_id "NM_175840:uc002wkl.1"; -chr20 hg19_knownGene exon 4129450 4129624 0.000000 + . gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene CDS 4155703 4155910 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene exon 4155677 4155910 0.000000 + . gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene CDS 4157998 4158224 0.000000 + 2 gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene exon 4157998 4158224 0.000000 + . gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene CDS 4162450 4162623 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene exon 4162450 4162623 0.000000 + . gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene CDS 4162736 4163495 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene exon 4162736 4163495 0.000000 + . gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene CDS 4164141 4164301 0.000000 + 2 gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene exon 4164141 4164301 0.000000 + . gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene CDS 4167917 4168051 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene exon 4167917 4168369 0.000000 + . gene_id "SMOX"; transcript_id "NM_175839:uc002wkm.1"; -chr20 hg19_knownGene exon 4129450 4129624 0.000000 + . gene_id "SMOX"; transcript_id "NM_175841:uc002wkn.1"; -chr20 hg19_knownGene CDS 4155703 4155910 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175841:uc002wkn.1"; -chr20 hg19_knownGene exon 4155677 4155910 0.000000 + . gene_id "SMOX"; transcript_id "NM_175841:uc002wkn.1"; -chr20 hg19_knownGene CDS 4157998 4158224 0.000000 + 2 gene_id "SMOX"; transcript_id "NM_175841:uc002wkn.1"; -chr20 hg19_knownGene exon 4157998 4158224 0.000000 + . gene_id "SMOX"; transcript_id "NM_175841:uc002wkn.1"; -chr20 hg19_knownGene CDS 4167917 4168051 0.000000 + 0 gene_id "SMOX"; transcript_id "NM_175841:uc002wkn.1"; -chr20 hg19_knownGene exon 4167917 4168369 0.000000 + . gene_id "SMOX"; transcript_id "NM_175841:uc002wkn.1"; -chr20 hg19_knownGene exon 4129450 4129624 0.000000 + . gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene CDS 4155703 4155910 0.000000 + 0 gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene exon 4155677 4155910 0.000000 + . gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene CDS 4157998 4158224 0.000000 + 2 gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene exon 4157998 4158224 0.000000 + . gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene CDS 4162450 4162623 0.000000 + 0 gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene exon 4162450 4162623 0.000000 + . gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene CDS 4162736 4163495 0.000000 + 0 gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene exon 4162736 4163495 0.000000 + . gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene CDS 4164141 4164301 0.000000 + 2 gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene exon 4164141 4164301 0.000000 + . gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene CDS 4167390 4167479 0.000000 + 0 gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene exon 4167390 4167479 0.000000 + . gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene CDS 4167917 4168051 0.000000 + 0 gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene exon 4167917 4168369 0.000000 + . gene_id "SMOX"; transcript_id "EF032141:uc002wkp.2"; -chr20 hg19_knownGene exon 4129450 4129624 0.000000 + . gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene CDS 4155703 4155910 0.000000 + 0 gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene exon 4155677 4155910 0.000000 + . gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene CDS 4158067 4158224 0.000000 + 2 gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene exon 4158067 4158224 0.000000 + . gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene CDS 4162450 4162623 0.000000 + 0 gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene exon 4162450 4162623 0.000000 + . gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene CDS 4162736 4162970 0.000000 + 0 gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene exon 4162736 4162970 0.000000 + . gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene CDS 4163130 4163495 0.000000 + 2 gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene exon 4163130 4163495 0.000000 + . gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene CDS 4164141 4164301 0.000000 + 2 gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene exon 4164141 4164301 0.000000 + . gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene CDS 4167917 4168051 0.000000 + 0 gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene exon 4167917 4168369 0.000000 + . gene_id "SMOX"; transcript_id "AK293485:uc010zqo.1"; -chr20 hg19_knownGene exon 4152357 4152552 0.000000 + . gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene CDS 4155703 4155910 0.000000 + 0 gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene exon 4155677 4155910 0.000000 + . gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene CDS 4157998 4158224 0.000000 + 2 gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene exon 4157998 4158224 0.000000 + . gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene CDS 4162450 4162623 0.000000 + 0 gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene exon 4162450 4162623 0.000000 + . gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene CDS 4162736 4163495 0.000000 + 0 gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene exon 4162736 4163495 0.000000 + . gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene CDS 4164141 4164301 0.000000 + 2 gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene exon 4164141 4164301 0.000000 + . gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene CDS 4167917 4168051 0.000000 + 0 gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene exon 4167917 4168369 0.000000 + . gene_id "SMOX"; transcript_id "AK000753:uc002wko.1"; -chr20 hg19_knownGene exon 4173737 4173893 0.000000 + . gene_id "LOC728228"; transcript_id "NR_033917:uc002wkq.3"; -chr20 hg19_knownGene exon 4175929 4176025 0.000000 + . gene_id "LOC728228"; transcript_id "NR_033917:uc002wkq.3"; -chr20 hg19_knownGene exon 4176173 4176600 0.000000 + . gene_id "LOC728228"; transcript_id "NR_033917:uc002wkq.3"; -chr20 hg19_knownGene CDS 4202173 4202777 0.000000 - 2 gene_id "ADRA1D"; transcript_id "NM_000678:uc002wkr.2"; -chr20 hg19_knownGene exon 4201278 4202777 0.000000 - . gene_id "ADRA1D"; transcript_id "NM_000678:uc002wkr.2"; -chr20 hg19_knownGene CDS 4228494 4229604 0.000000 - 0 gene_id "ADRA1D"; transcript_id "NM_000678:uc002wkr.2"; -chr20 hg19_knownGene exon 4228494 4229659 0.000000 - . gene_id "ADRA1D"; transcript_id "NM_000678:uc002wkr.2"; -chr20 hg19_knownGene exon 4409711 4410331 0.000000 - . gene_id "BC039673"; transcript_id "BC039673:uc002wks.3"; -chr20 hg19_knownGene exon 4411993 4412133 0.000000 - . gene_id "BC039673"; transcript_id "BC039673:uc002wks.3"; -chr20 hg19_knownGene exon 4412250 4412358 0.000000 - . gene_id "BC039673"; transcript_id "BC039673:uc002wks.3"; -chr20 hg19_knownGene CDS 4679867 4680625 0.000000 + 0 gene_id "PRNP"; transcript_id "CCDS13080:uc021wae.1"; -chr20 hg19_knownGene exon 4679867 4680628 0.000000 + . gene_id "PRNP"; transcript_id "CCDS13080:uc021wae.1"; -chr20 hg19_knownGene CDS 4679867 4680516 0.000000 + 0 gene_id "PRNP"; transcript_id "AB300826:uc010gbe.1"; -chr20 hg19_knownGene exon 4679857 4680516 0.000000 + . gene_id "PRNP"; transcript_id "AB300826:uc010gbe.1"; -chr20 hg19_knownGene CDS 4680749 4680788 0.000000 + 1 gene_id "PRNP"; transcript_id "AB300826:uc010gbe.1"; -chr20 hg19_knownGene exon 4680749 4681289 0.000000 + . gene_id "PRNP"; transcript_id "AB300826:uc010gbe.1"; -chr20 hg19_knownGene exon 4666797 4667154 0.000000 + . gene_id "PRNP"; transcript_id "AX746518:uc002wkt.1"; -chr20 hg19_knownGene CDS 4679867 4680125 0.000000 + 0 gene_id "PRNP"; transcript_id "AX746518:uc002wkt.1"; -chr20 hg19_knownGene exon 4679857 4680125 0.000000 + . gene_id "PRNP"; transcript_id "AX746518:uc002wkt.1"; -chr20 hg19_knownGene CDS 4680216 4680625 0.000000 + 2 gene_id "PRNP"; transcript_id "AX746518:uc002wkt.1"; -chr20 hg19_knownGene exon 4680216 4682233 0.000000 + . gene_id "PRNP"; transcript_id "AX746518:uc002wkt.1"; -chr20 hg19_knownGene exon 4666797 4667154 0.000000 + . gene_id "PRNP"; transcript_id "NM_001080122:uc002wku.3"; -chr20 hg19_knownGene CDS 4679867 4680625 0.000000 + 0 gene_id "PRNP"; transcript_id "NM_001080122:uc002wku.3"; -chr20 hg19_knownGene exon 4679862 4682234 0.000000 + . gene_id "PRNP"; transcript_id "NM_001080122:uc002wku.3"; -chr20 hg19_knownGene exon 4666797 4667158 0.000000 + . gene_id "PRNP"; transcript_id "NM_001080121:uc002wkv.3"; -chr20 hg19_knownGene CDS 4679867 4680625 0.000000 + 0 gene_id "PRNP"; transcript_id "NM_001080121:uc002wkv.3"; -chr20 hg19_knownGene exon 4679862 4682234 0.000000 + . gene_id "PRNP"; transcript_id "NM_001080121:uc002wkv.3"; -chr20 hg19_knownGene exon 4666797 4667158 0.000000 + . gene_id "PRNP"; transcript_id "NM_000311:uc002wkw.3"; -chr20 hg19_knownGene CDS 4679867 4680625 0.000000 + 0 gene_id "PRNP"; transcript_id "NM_000311:uc002wkw.3"; -chr20 hg19_knownGene exon 4679857 4682234 0.000000 + . gene_id "PRNP"; transcript_id "NM_000311:uc002wkw.3"; -chr20 hg19_knownGene exon 4666797 4667154 0.000000 + . gene_id "PRNP"; transcript_id "NM_183079:uc002wkx.3"; -chr20 hg19_knownGene CDS 4679867 4680625 0.000000 + 0 gene_id "PRNP"; transcript_id "NM_183079:uc002wkx.3"; -chr20 hg19_knownGene exon 4679857 4682234 0.000000 + . gene_id "PRNP"; transcript_id "NM_183079:uc002wkx.3"; -chr20 hg19_knownGene exon 4667157 4667382 0.000000 + . gene_id "PRNP"; transcript_id "NM_001080123:uc002wky.3"; -chr20 hg19_knownGene CDS 4679867 4680625 0.000000 + 0 gene_id "PRNP"; transcript_id "NM_001080123:uc002wky.3"; -chr20 hg19_knownGene exon 4679857 4682234 0.000000 + . gene_id "PRNP"; transcript_id "NM_001080123:uc002wky.3"; -chr20 hg19_knownGene CDS 4705198 4705725 0.000000 + 0 gene_id "PRND"; transcript_id "CCDS13081:uc021waf.1"; -chr20 hg19_knownGene exon 4705198 4705728 0.000000 + . gene_id "PRND"; transcript_id "CCDS13081:uc021waf.1"; -chr20 hg19_knownGene exon 4702556 4702615 0.000000 + . gene_id "PRND"; transcript_id "NM_012409:uc002wkz.3"; -chr20 hg19_knownGene CDS 4705198 4705725 0.000000 + 0 gene_id "PRND"; transcript_id "NM_012409:uc002wkz.3"; -chr20 hg19_knownGene exon 4705187 4709106 0.000000 + . gene_id "PRND"; transcript_id "NM_012409:uc002wkz.3"; -chr20 hg19_knownGene exon 4711928 4713731 0.000000 - . gene_id "PRNT"; transcript_id "NR_024268:uc002wlb.3"; -chr20 hg19_knownGene exon 4721023 4721314 0.000000 - . gene_id "PRNT"; transcript_id "NR_024268:uc002wlb.3"; -chr20 hg19_knownGene exon 4711928 4713731 0.000000 - . gene_id "PRNT"; transcript_id "NR_024269:uc010zqp.2"; -chr20 hg19_knownGene exon 4721246 4721314 0.000000 - . gene_id "PRNT"; transcript_id "NR_024269:uc010zqp.2"; -chr20 hg19_knownGene exon 4711928 4713731 0.000000 - . gene_id "PRNT"; transcript_id "NR_024267:uc010zqq.2"; -chr20 hg19_knownGene exon 4720786 4721314 0.000000 - . gene_id "PRNT"; transcript_id "NR_024267:uc010zqq.2"; -chr20 hg19_knownGene exon 4760669 4764988 0.000000 - . gene_id "RASSF2"; transcript_id "BC110385:uc002wlc.3"; -chr20 hg19_knownGene exon 4766877 4766974 0.000000 - . gene_id "RASSF2"; transcript_id "BC110385:uc002wlc.3"; -chr20 hg19_knownGene exon 4768279 4768347 0.000000 - . gene_id "RASSF2"; transcript_id "BC110385:uc002wlc.3"; -chr20 hg19_knownGene exon 4768863 4768914 0.000000 - . gene_id "RASSF2"; transcript_id "BC110385:uc002wlc.3"; -chr20 hg19_knownGene exon 4770242 4770343 0.000000 - . gene_id "RASSF2"; transcript_id "BC110385:uc002wlc.3"; -chr20 hg19_knownGene exon 4771097 4771257 0.000000 - . gene_id "RASSF2"; transcript_id "BC110385:uc002wlc.3"; -chr20 hg19_knownGene exon 4773185 4773273 0.000000 - . gene_id "RASSF2"; transcript_id "BC110385:uc002wlc.3"; -chr20 hg19_knownGene exon 4773640 4773700 0.000000 - . gene_id "RASSF2"; transcript_id "BC110385:uc002wlc.3"; -chr20 hg19_knownGene exon 4775902 4776150 0.000000 - . gene_id "RASSF2"; transcript_id "BC110385:uc002wlc.3"; -chr20 hg19_knownGene CDS 4764922 4764988 0.000000 - 1 gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4760669 4764988 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene CDS 4766877 4766974 0.000000 - 0 gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4766877 4766974 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene CDS 4768279 4768400 0.000000 - 2 gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4768279 4768400 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene CDS 4768863 4768914 0.000000 - 0 gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4768863 4768914 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene CDS 4770242 4770343 0.000000 - 0 gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4770242 4770343 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene CDS 4771097 4771257 0.000000 - 2 gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4771097 4771257 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene CDS 4773185 4773273 0.000000 - 1 gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4773185 4773273 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene CDS 4776461 4776612 0.000000 - 0 gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4776461 4776612 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene CDS 4778656 4778731 0.000000 - 1 gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4778656 4778731 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene CDS 4781618 4781676 0.000000 - 0 gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4781618 4781708 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene exon 4795748 4795769 0.000000 - . gene_id "RASSF2"; transcript_id "NM_170774:uc002wld.3"; -chr20 hg19_knownGene CDS 4764922 4764988 0.000000 - 1 gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4760669 4764988 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene CDS 4766877 4766974 0.000000 - 0 gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4766877 4766974 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene CDS 4768279 4768400 0.000000 - 2 gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4768279 4768400 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene CDS 4768863 4768914 0.000000 - 0 gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4768863 4768914 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene CDS 4770242 4770343 0.000000 - 0 gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4770242 4770343 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene CDS 4771097 4771257 0.000000 - 2 gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4771097 4771257 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene CDS 4773185 4773273 0.000000 - 1 gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4773185 4773273 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene CDS 4776461 4776612 0.000000 - 0 gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4776461 4776612 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene CDS 4778656 4778731 0.000000 - 1 gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4778656 4778731 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene CDS 4781618 4781676 0.000000 - 0 gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4781618 4781708 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4802975 4803049 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4804203 4804291 0.000000 - . gene_id "RASSF2"; transcript_id "NM_014737:uc002wlf.3"; -chr20 hg19_knownGene exon 4849630 4849764 0.000000 + . gene_id "SNORA31"; transcript_id ":uc021wag.1"; -chr20 hg19_knownGene CDS 4837621 4837850 0.000000 - 2 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4833002 4837850 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4839935 4840030 0.000000 - 2 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4839935 4840030 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4842594 4842731 0.000000 - 2 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4842594 4842731 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4843424 4843553 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4843424 4843553 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4848416 4848521 0.000000 - 1 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4848416 4848521 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4850552 4850699 0.000000 - 2 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4850552 4850699 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4854582 4854738 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4854582 4854738 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4855222 4855342 0.000000 - 1 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4855222 4855342 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4864288 4864469 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4864288 4864469 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4865399 4865469 0.000000 - 2 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4865399 4865469 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4866467 4866555 0.000000 - 1 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4866467 4866555 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4880201 4880358 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4880201 4880358 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4883088 4883204 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4883088 4883204 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4893526 4893624 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4893526 4893624 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4913101 4913208 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4913101 4913362 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4951439 4951565 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene exon 4982052 4982145 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_005116:uc002wlg.1"; -chr20 hg19_knownGene CDS 4837621 4837850 0.000000 - 2 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4833002 4837850 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4839935 4840030 0.000000 - 2 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4839935 4840030 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4842594 4842731 0.000000 - 2 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4842594 4842731 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4843424 4843553 0.000000 - 0 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4843424 4843553 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4848416 4848521 0.000000 - 1 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4848416 4848521 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4850552 4850699 0.000000 - 2 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4850552 4850699 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4854582 4854738 0.000000 - 0 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4854582 4854738 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4855222 4855342 0.000000 - 1 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4855222 4855342 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4880201 4880358 0.000000 - 0 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4880201 4880358 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4883088 4883204 0.000000 - 0 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4883088 4883204 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4893526 4893624 0.000000 - 0 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4893526 4893624 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene CDS 4913101 4913205 0.000000 - 0 gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4913101 4913362 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4951439 4951565 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4982052 4982145 0.000000 - . gene_id "SLC23A2"; transcript_id "AK296304:uc010zqr.1"; -chr20 hg19_knownGene exon 4913101 4913362 0.000000 - . gene_id "SLC23A2"; transcript_id "DQ011866:uc002wlj.1"; -chr20 hg19_knownGene exon 4951439 4951561 0.000000 - . gene_id "SLC23A2"; transcript_id "DQ011866:uc002wlj.1"; -chr20 hg19_knownGene exon 4982052 4982145 0.000000 - . gene_id "SLC23A2"; transcript_id "DQ011866:uc002wlj.1"; -chr20 hg19_knownGene CDS 4837621 4837850 0.000000 - 2 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4833002 4837850 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4839935 4840030 0.000000 - 2 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4839935 4840030 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4842594 4842731 0.000000 - 2 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4842594 4842731 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4843424 4843553 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4843424 4843553 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4848416 4848521 0.000000 - 1 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4848416 4848521 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4850552 4850699 0.000000 - 2 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4850552 4850699 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4854582 4854738 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4854582 4854738 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4855222 4855342 0.000000 - 1 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4855222 4855342 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4864288 4864469 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4864288 4864469 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4865399 4865469 0.000000 - 2 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4865399 4865469 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4866467 4866555 0.000000 - 1 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4866467 4866555 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4880201 4880358 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4880201 4880358 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4883088 4883204 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4883088 4883204 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4893526 4893624 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4893526 4893624 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4913101 4913208 0.000000 - 0 gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4913101 4913362 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4951439 4951565 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene exon 4990828 4990939 0.000000 - . gene_id "SLC23A2"; transcript_id "NM_203327:uc002wlh.1"; -chr20 hg19_knownGene CDS 4850527 4850699 0.000000 - 2 gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4850234 4850699 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene CDS 4854582 4854738 0.000000 - 0 gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4854582 4854738 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene CDS 4855222 4855342 0.000000 - 1 gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4855222 4855342 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene CDS 4864288 4864469 0.000000 - 0 gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4864288 4864469 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene CDS 4865399 4865469 0.000000 - 2 gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4865399 4865469 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene CDS 4866467 4866555 0.000000 - 1 gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4866467 4866555 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene CDS 4880201 4880358 0.000000 - 0 gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4880201 4880358 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene CDS 4883088 4883204 0.000000 - 0 gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4883088 4883204 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene CDS 4893526 4893624 0.000000 - 0 gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4893526 4893624 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene CDS 4913101 4913205 0.000000 - 0 gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4913101 4913362 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4951439 4951561 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 4990828 4990939 0.000000 - . gene_id "SLC23A2"; transcript_id "BC013112:uc002wli.3"; -chr20 hg19_knownGene exon 5079033 5079122 0.000000 - . gene_id "5S_rRNA"; transcript_id ":uc021wah.1"; -chr20 hg19_knownGene CDS 5049837 5049995 0.000000 - 0 gene_id "C20orf30"; transcript_id "AK309823:uc010gbi.3"; -chr20 hg19_knownGene exon 5049129 5049995 0.000000 - . gene_id "C20orf30"; transcript_id "AK309823:uc010gbi.3"; -chr20 hg19_knownGene CDS 5086834 5086956 0.000000 - 0 gene_id "C20orf30"; transcript_id "AK309823:uc010gbi.3"; -chr20 hg19_knownGene exon 5086834 5086956 0.000000 - . gene_id "C20orf30"; transcript_id "AK309823:uc010gbi.3"; -chr20 hg19_knownGene CDS 5089978 5090076 0.000000 - 0 gene_id "C20orf30"; transcript_id "AK309823:uc010gbi.3"; -chr20 hg19_knownGene exon 5089978 5090091 0.000000 - . gene_id "C20orf30"; transcript_id "AK309823:uc010gbi.3"; -chr20 hg19_knownGene exon 5093607 5093733 0.000000 - . gene_id "C20orf30"; transcript_id "AK309823:uc010gbi.3"; -chr20 hg19_knownGene CDS 5081440 5081577 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_001009923:uc002wlk.3"; -chr20 hg19_knownGene exon 5080484 5081577 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009923:uc002wlk.3"; -chr20 hg19_knownGene CDS 5086834 5086956 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_001009923:uc002wlk.3"; -chr20 hg19_knownGene exon 5086834 5086956 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009923:uc002wlk.3"; -chr20 hg19_knownGene CDS 5089978 5090091 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_001009923:uc002wlk.3"; -chr20 hg19_knownGene exon 5089978 5090091 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009923:uc002wlk.3"; -chr20 hg19_knownGene CDS 5092146 5092251 0.000000 - 1 gene_id "C20orf30"; transcript_id "NM_001009923:uc002wlk.3"; -chr20 hg19_knownGene exon 5092146 5092251 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009923:uc002wlk.3"; -chr20 hg19_knownGene CDS 5093607 5093674 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_001009923:uc002wlk.3"; -chr20 hg19_knownGene exon 5093607 5093733 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009923:uc002wlk.3"; -chr20 hg19_knownGene CDS 5081440 5081577 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_001009924:uc002wll.3"; -chr20 hg19_knownGene exon 5080484 5081577 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009924:uc002wll.3"; -chr20 hg19_knownGene CDS 5086834 5086956 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_001009924:uc002wll.3"; -chr20 hg19_knownGene exon 5086834 5086956 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009924:uc002wll.3"; -chr20 hg19_knownGene CDS 5089978 5090076 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_001009924:uc002wll.3"; -chr20 hg19_knownGene exon 5089978 5090091 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009924:uc002wll.3"; -chr20 hg19_knownGene exon 5092146 5092251 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009924:uc002wll.3"; -chr20 hg19_knownGene exon 5093389 5093733 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009924:uc002wll.3"; -chr20 hg19_knownGene CDS 5081440 5081577 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_001009925:uc002wlm.3"; -chr20 hg19_knownGene exon 5080484 5081577 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009925:uc002wlm.3"; -chr20 hg19_knownGene CDS 5086834 5086956 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_001009925:uc002wlm.3"; -chr20 hg19_knownGene exon 5086834 5086956 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009925:uc002wlm.3"; -chr20 hg19_knownGene CDS 5089978 5090076 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_001009925:uc002wlm.3"; -chr20 hg19_knownGene exon 5089978 5090091 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009925:uc002wlm.3"; -chr20 hg19_knownGene exon 5093607 5093733 0.000000 - . gene_id "C20orf30"; transcript_id "NM_001009925:uc002wlm.3"; -chr20 hg19_knownGene CDS 5081440 5081577 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_014145:uc002wln.3"; -chr20 hg19_knownGene exon 5080484 5081577 0.000000 - . gene_id "C20orf30"; transcript_id "NM_014145:uc002wln.3"; -chr20 hg19_knownGene CDS 5086834 5086956 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_014145:uc002wln.3"; -chr20 hg19_knownGene exon 5086834 5086956 0.000000 - . gene_id "C20orf30"; transcript_id "NM_014145:uc002wln.3"; -chr20 hg19_knownGene CDS 5089978 5090076 0.000000 - 0 gene_id "C20orf30"; transcript_id "NM_014145:uc002wln.3"; -chr20 hg19_knownGene exon 5089978 5090091 0.000000 - . gene_id "C20orf30"; transcript_id "NM_014145:uc002wln.3"; -chr20 hg19_knownGene exon 5093376 5093733 0.000000 - . gene_id "C20orf30"; transcript_id "NM_014145:uc002wln.3"; -chr20 hg19_knownGene exon 5100232 5100615 0.000000 + . gene_id "PCNA-AS1"; transcript_id "NR_028370:uc021wai.1"; -chr20 hg19_knownGene CDS 5095932 5096008 0.000000 - 2 gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene exon 5095599 5096008 0.000000 - . gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene CDS 5096095 5096218 0.000000 - 0 gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene exon 5096095 5096218 0.000000 - . gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene CDS 5098116 5098310 0.000000 - 0 gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene exon 5098116 5098310 0.000000 - . gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene CDS 5099256 5099323 0.000000 - 2 gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene exon 5099256 5099323 0.000000 - . gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene CDS 5099415 5099512 0.000000 - 1 gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene exon 5099415 5099512 0.000000 - . gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene CDS 5100224 5100444 0.000000 - 0 gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene exon 5100224 5100647 0.000000 - . gene_id "PCNA"; transcript_id "NM_182649:uc002wlp.3"; -chr20 hg19_knownGene CDS 5095932 5096008 0.000000 - 2 gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene exon 5095599 5096008 0.000000 - . gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene CDS 5096095 5096218 0.000000 - 0 gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene exon 5096095 5096218 0.000000 - . gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene CDS 5098116 5098310 0.000000 - 0 gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene exon 5098116 5098310 0.000000 - . gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene CDS 5099256 5099323 0.000000 - 2 gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene exon 5099256 5099323 0.000000 - . gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene CDS 5099415 5099512 0.000000 - 1 gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene exon 5099415 5099512 0.000000 - . gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene CDS 5100224 5100444 0.000000 - 0 gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene exon 5100224 5100560 0.000000 - . gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene exon 5107146 5107268 0.000000 - . gene_id "PCNA"; transcript_id "NM_002592:uc002wlq.3"; -chr20 hg19_knownGene CDS 5099302 5099512 0.000000 - 1 gene_id "PCNA"; transcript_id "AK300558:uc010zqs.1"; -chr20 hg19_knownGene exon 5098692 5099512 0.000000 - . gene_id "PCNA"; transcript_id "AK300558:uc010zqs.1"; -chr20 hg19_knownGene CDS 5100224 5100444 0.000000 - 0 gene_id "PCNA"; transcript_id "AK300558:uc010zqs.1"; -chr20 hg19_knownGene exon 5100224 5100560 0.000000 - . gene_id "PCNA"; transcript_id "AK300558:uc010zqs.1"; -chr20 hg19_knownGene exon 5107146 5107268 0.000000 - . gene_id "PCNA"; transcript_id "AK300558:uc010zqs.1"; -chr20 hg19_knownGene exon 5107407 5107795 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene exon 5108796 5109396 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene exon 5154169 5154305 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene CDS 5155869 5155925 0.000000 + 0 gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene exon 5155829 5155925 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene CDS 5157294 5157391 0.000000 + 0 gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene exon 5157294 5157391 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene CDS 5159463 5159602 0.000000 + 1 gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene exon 5159463 5159602 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene CDS 5163033 5163091 0.000000 + 2 gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene exon 5163033 5163091 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene CDS 5163707 5163789 0.000000 + 0 gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene exon 5163707 5163789 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene CDS 5165504 5165591 0.000000 + 1 gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene exon 5165504 5165591 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene CDS 5166404 5166472 0.000000 + 0 gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene exon 5166404 5166472 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene CDS 5167333 5167506 0.000000 + 0 gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene exon 5167333 5168525 0.000000 + . gene_id "CDS2"; transcript_id "AK091045:uc002wlr.2"; -chr20 hg19_knownGene CDS 5107739 5107795 0.000000 + 0 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5107407 5107795 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5154169 5154305 0.000000 + 0 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5154169 5154305 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5155829 5155925 0.000000 + 1 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5155829 5155925 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5157294 5157391 0.000000 + 0 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5157294 5157391 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5159463 5159602 0.000000 + 1 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5159463 5159602 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5163033 5163091 0.000000 + 2 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5163033 5163091 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5163707 5163789 0.000000 + 0 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5163707 5163789 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5165504 5165591 0.000000 + 1 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5165504 5165591 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5166404 5166472 0.000000 + 0 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5166404 5166472 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5167333 5167485 0.000000 + 0 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5167333 5167485 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5169713 5169832 0.000000 + 0 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5169713 5169832 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5170381 5170484 0.000000 + 0 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5170381 5170484 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5170748 5170877 0.000000 + 1 gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene exon 5170748 5178533 0.000000 + . gene_id "CDS2"; transcript_id "NM_003818:uc002wls.3"; -chr20 hg19_knownGene CDS 5107767 5107795 0.000000 + 0 gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene exon 5107407 5107795 0.000000 + . gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene CDS 5159463 5159602 0.000000 + 1 gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene exon 5159463 5159602 0.000000 + . gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene CDS 5163033 5163091 0.000000 + 2 gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene exon 5163033 5163091 0.000000 + . gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene CDS 5163707 5163789 0.000000 + 0 gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene exon 5163707 5163789 0.000000 + . gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene CDS 5165504 5165591 0.000000 + 1 gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene exon 5165504 5165591 0.000000 + . gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene CDS 5166404 5166472 0.000000 + 0 gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene exon 5166404 5166472 0.000000 + . gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene CDS 5167333 5167485 0.000000 + 0 gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene exon 5167333 5167485 0.000000 + . gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene CDS 5169713 5169832 0.000000 + 0 gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene exon 5169713 5169832 0.000000 + . gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene CDS 5170381 5170484 0.000000 + 0 gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene exon 5170381 5170484 0.000000 + . gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene CDS 5170748 5170877 0.000000 + 1 gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene exon 5170748 5178533 0.000000 + . gene_id "CDS2"; transcript_id "AK304763:uc002wlw.3"; -chr20 hg19_knownGene CDS 5157297 5157391 0.000000 + 0 gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5156748 5157391 0.000000 + . gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene CDS 5159463 5159602 0.000000 + 1 gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5159463 5159602 0.000000 + . gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene CDS 5163033 5163091 0.000000 + 2 gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5163033 5163091 0.000000 + . gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene CDS 5163707 5163789 0.000000 + 0 gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5163707 5163789 0.000000 + . gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene CDS 5165504 5165591 0.000000 + 1 gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5165504 5165591 0.000000 + . gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene CDS 5166404 5166472 0.000000 + 0 gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5166404 5166472 0.000000 + . gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene CDS 5167333 5167485 0.000000 + 0 gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5167333 5167485 0.000000 + . gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene CDS 5169713 5169832 0.000000 + 0 gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5169713 5169832 0.000000 + . gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene CDS 5170381 5170484 0.000000 + 0 gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5170381 5170484 0.000000 + . gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene CDS 5170748 5170877 0.000000 + 1 gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5170748 5178533 0.000000 + . gene_id "CDS2"; transcript_id "AK095430:uc002wlv.3"; -chr20 hg19_knownGene exon 5159463 5159602 0.000000 + . gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene CDS 5163041 5163091 0.000000 + 0 gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene exon 5163033 5163091 0.000000 + . gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene CDS 5163707 5163789 0.000000 + 0 gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene exon 5163707 5163789 0.000000 + . gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene CDS 5165504 5165591 0.000000 + 1 gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene exon 5165504 5165591 0.000000 + . gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene CDS 5166404 5166472 0.000000 + 0 gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene exon 5166404 5166472 0.000000 + . gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene CDS 5169713 5169832 0.000000 + 0 gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene exon 5169713 5169832 0.000000 + . gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene CDS 5170381 5170484 0.000000 + 0 gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene exon 5170381 5170484 0.000000 + . gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene CDS 5170748 5170877 0.000000 + 1 gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene exon 5170748 5178533 0.000000 + . gene_id "CDS2"; transcript_id "AK303426:uc010zqv.2"; -chr20 hg19_knownGene CDS 5282689 5283382 0.000000 - 1 gene_id "PROKR2"; transcript_id "NM_144773:uc010zqw.2"; -chr20 hg19_knownGene exon 5282686 5283382 0.000000 - . gene_id "PROKR2"; transcript_id "NM_144773:uc010zqw.2"; -chr20 hg19_knownGene CDS 5294558 5295015 0.000000 - 0 gene_id "PROKR2"; transcript_id "NM_144773:uc010zqw.2"; -chr20 hg19_knownGene exon 5294558 5295023 0.000000 - . gene_id "PROKR2"; transcript_id "NM_144773:uc010zqw.2"; -chr20 hg19_knownGene CDS 5282689 5283382 0.000000 - 1 gene_id "PROKR2"; transcript_id "BC104961:uc010zqx.2"; -chr20 hg19_knownGene exon 5282686 5283382 0.000000 - . gene_id "PROKR2"; transcript_id "BC104961:uc010zqx.2"; -chr20 hg19_knownGene CDS 5294558 5295015 0.000000 - 0 gene_id "PROKR2"; transcript_id "BC104961:uc010zqx.2"; -chr20 hg19_knownGene exon 5294558 5295059 0.000000 - . gene_id "PROKR2"; transcript_id "BC104961:uc010zqx.2"; -chr20 hg19_knownGene CDS 5282689 5283382 0.000000 - 1 gene_id "PROKR2"; transcript_id "AK289995:uc010zqy.2"; -chr20 hg19_knownGene exon 5282686 5283382 0.000000 - . gene_id "PROKR2"; transcript_id "AK289995:uc010zqy.2"; -chr20 hg19_knownGene CDS 5294558 5295015 0.000000 - 0 gene_id "PROKR2"; transcript_id "AK289995:uc010zqy.2"; -chr20 hg19_knownGene exon 5294558 5295023 0.000000 - . gene_id "PROKR2"; transcript_id "AK289995:uc010zqy.2"; -chr20 hg19_knownGene exon 5297140 5297378 0.000000 - . gene_id "PROKR2"; transcript_id "AK289995:uc010zqy.2"; -chr20 hg19_knownGene CDS 5296377 5297081 0.000000 + 0 gene_id "AX746654"; transcript_id "AX746654:uc002wly.1"; -chr20 hg19_knownGene exon 5296222 5298369 0.000000 + . gene_id "AX746654"; transcript_id "AX746654:uc002wly.1"; -chr20 hg19_knownGene exon 5412603 5413284 0.000000 - . gene_id "LOC100507629"; transcript_id "NR_038239:uc021waj.1"; -chr20 hg19_knownGene exon 5414435 5414738 0.000000 - . gene_id "LOC100507629"; transcript_id "NR_038239:uc021waj.1"; -chr20 hg19_knownGene exon 5414818 5415051 0.000000 - . gene_id "LOC100507629"; transcript_id "NR_038239:uc021waj.1"; -chr20 hg19_knownGene exon 5417746 5417919 0.000000 - . gene_id "LOC100507629"; transcript_id "NR_038239:uc021waj.1"; -chr20 hg19_knownGene exon 5426150 5426394 0.000000 - . gene_id "LOC100507629"; transcript_id "NR_038239:uc021waj.1"; -chr20 hg19_knownGene exon 5412603 5413284 0.000000 - . gene_id "LOC100507629"; transcript_id "NR_038240:uc010gbl.2"; -chr20 hg19_knownGene exon 5414435 5414716 0.000000 - . gene_id "LOC100507629"; transcript_id "NR_038240:uc010gbl.2"; -chr20 hg19_knownGene exon 5414818 5415051 0.000000 - . gene_id "LOC100507629"; transcript_id "NR_038240:uc010gbl.2"; -chr20 hg19_knownGene exon 5417746 5417919 0.000000 - . gene_id "LOC100507629"; transcript_id "NR_038240:uc010gbl.2"; -chr20 hg19_knownGene exon 5426150 5426394 0.000000 - . gene_id "LOC100507629"; transcript_id "NR_038240:uc010gbl.2"; -chr20 hg19_knownGene exon 5451842 5452139 0.000000 + . gene_id "LOC643406"; transcript_id "NR_029405:uc002wmb.2"; -chr20 hg19_knownGene CDS 5454289 5454582 0.000000 + 0 gene_id "LOC643406"; transcript_id "NR_029405:uc002wmb.2"; -chr20 hg19_knownGene exon 5454280 5457780 0.000000 + . gene_id "LOC643406"; transcript_id "NR_029405:uc002wmb.2"; -chr20 hg19_knownGene exon 5479218 5482509 0.000000 - . gene_id "LOC149837"; transcript_id "NR_015406:uc002wmc.3"; -chr20 hg19_knownGene exon 5484944 5485242 0.000000 - . gene_id "LOC149837"; transcript_id "NR_015406:uc002wmc.3"; -chr20 hg19_knownGene CDS 5528310 5528496 0.000000 - 1 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5525080 5528496 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5538591 5538751 0.000000 - 0 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5538591 5538751 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5539330 5539465 0.000000 - 1 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5539330 5539465 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5540586 5540722 0.000000 - 0 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5540586 5540722 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5542111 5542176 0.000000 - 0 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5542111 5542176 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5545663 5545724 0.000000 - 2 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5545663 5545724 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5547379 5547418 0.000000 - 0 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5547379 5547418 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5548129 5548206 0.000000 - 0 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5548129 5548206 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5550793 5550885 0.000000 - 0 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5550793 5550885 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5554561 5554615 0.000000 - 1 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5554561 5554615 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5556059 5556191 0.000000 - 2 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5556059 5556191 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5556462 5556624 0.000000 - 0 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5556462 5556624 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5559026 5559187 0.000000 - 0 gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5559026 5559257 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5560654 5560777 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene exon 5564927 5566683 0.000000 - . gene_id "GPCPD1"; transcript_id "AL833069:uc002wmd.4"; -chr20 hg19_knownGene CDS 5528310 5528496 0.000000 - 1 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5525080 5528496 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5538591 5538751 0.000000 - 0 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5538591 5538751 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5539330 5539465 0.000000 - 1 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5539330 5539465 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5540586 5540722 0.000000 - 0 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5540586 5540722 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5542111 5542176 0.000000 - 0 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5542111 5542176 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5545663 5545724 0.000000 - 2 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5545663 5545724 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5547379 5547418 0.000000 - 0 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5547379 5547418 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5548129 5548206 0.000000 - 0 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5548129 5548206 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5550793 5550885 0.000000 - 0 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5550793 5550885 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5554561 5554615 0.000000 - 1 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5554561 5554615 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5556059 5556191 0.000000 - 2 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5556059 5556191 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5556462 5556624 0.000000 - 0 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5556462 5556624 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5559026 5559257 0.000000 - 1 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5559026 5559257 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5560654 5560777 0.000000 - 2 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5560654 5560777 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5564927 5564968 0.000000 - 2 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5564927 5564968 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5566840 5566915 0.000000 - 0 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5566840 5566915 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5573973 5574057 0.000000 - 1 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5573973 5574057 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5579371 5579467 0.000000 - 2 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5579371 5579467 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene CDS 5585010 5585058 0.000000 - 0 gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5585010 5585086 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5591488 5591672 0.000000 - . gene_id "GPCPD1"; transcript_id "NM_019593:uc002wme.4"; -chr20 hg19_knownGene exon 5731043 5731125 0.000000 + . gene_id "C20orf196"; transcript_id "NM_152504:uc002wmf.3"; -chr20 hg19_knownGene CDS 5753512 5753689 0.000000 + 0 gene_id "C20orf196"; transcript_id "NM_152504:uc002wmf.3"; -chr20 hg19_knownGene exon 5753508 5753689 0.000000 + . gene_id "C20orf196"; transcript_id "NM_152504:uc002wmf.3"; -chr20 hg19_knownGene CDS 5843670 5844106 0.000000 + 2 gene_id "C20orf196"; transcript_id "NM_152504:uc002wmf.3"; -chr20 hg19_knownGene exon 5843670 5844559 0.000000 + . gene_id "C20orf196"; transcript_id "NM_152504:uc002wmf.3"; -chr20 hg19_knownGene CDS 5892280 5892328 0.000000 + 0 gene_id "CHGB"; transcript_id "NM_001819:uc002wmg.3"; -chr20 hg19_knownGene exon 5891974 5892328 0.000000 + . gene_id "CHGB"; transcript_id "NM_001819:uc002wmg.3"; -chr20 hg19_knownGene CDS 5896972 5897018 0.000000 + 2 gene_id "CHGB"; transcript_id "NM_001819:uc002wmg.3"; -chr20 hg19_knownGene exon 5896972 5897018 0.000000 + . gene_id "CHGB"; transcript_id "NM_001819:uc002wmg.3"; -chr20 hg19_knownGene CDS 5897472 5897565 0.000000 + 0 gene_id "CHGB"; transcript_id "NM_001819:uc002wmg.3"; -chr20 hg19_knownGene exon 5897472 5897565 0.000000 + . gene_id "CHGB"; transcript_id "NM_001819:uc002wmg.3"; -chr20 hg19_knownGene CDS 5902981 5904746 0.000000 + 2 gene_id "CHGB"; transcript_id "NM_001819:uc002wmg.3"; -chr20 hg19_knownGene exon 5902981 5904746 0.000000 + . gene_id "CHGB"; transcript_id "NM_001819:uc002wmg.3"; -chr20 hg19_knownGene CDS 5905618 5905692 0.000000 + 0 gene_id "CHGB"; transcript_id "NM_001819:uc002wmg.3"; -chr20 hg19_knownGene exon 5905618 5906005 0.000000 + . gene_id "CHGB"; transcript_id "NM_001819:uc002wmg.3"; -chr20 hg19_knownGene exon 5891974 5892328 0.000000 + . gene_id "CHGB"; transcript_id "AK293536:uc010zqz.2"; -chr20 hg19_knownGene exon 5896972 5897018 0.000000 + . gene_id "CHGB"; transcript_id "AK293536:uc010zqz.2"; -chr20 hg19_knownGene exon 5897472 5897552 0.000000 + . gene_id "CHGB"; transcript_id "AK293536:uc010zqz.2"; -chr20 hg19_knownGene CDS 5903742 5904746 0.000000 + 0 gene_id "CHGB"; transcript_id "AK293536:uc010zqz.2"; -chr20 hg19_knownGene exon 5903233 5904746 0.000000 + . gene_id "CHGB"; transcript_id "AK293536:uc010zqz.2"; -chr20 hg19_knownGene CDS 5905618 5905692 0.000000 + 0 gene_id "CHGB"; transcript_id "AK293536:uc010zqz.2"; -chr20 hg19_knownGene exon 5905618 5906005 0.000000 + . gene_id "CHGB"; transcript_id "AK293536:uc010zqz.2"; -chr20 hg19_knownGene CDS 5919184 5919372 0.000000 - 0 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5918486 5919372 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5921699 5921785 0.000000 - 0 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5921699 5921785 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5921889 5921991 0.000000 - 1 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5921889 5921991 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5922597 5922682 0.000000 - 0 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5922597 5922682 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5923074 5923432 0.000000 - 2 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5923074 5923432 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5924205 5924329 0.000000 - 1 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5924205 5924329 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5924594 5924677 0.000000 - 1 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5924594 5924677 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5924808 5924899 0.000000 - 0 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5924808 5924899 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5925451 5925560 0.000000 - 2 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5925451 5925560 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5927052 5927179 0.000000 - 1 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5927052 5927179 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5930924 5931051 0.000000 - 0 gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene exon 5930924 5931173 0.000000 - . gene_id "TRMT6"; transcript_id "NM_015939:uc002wmh.1"; -chr20 hg19_knownGene CDS 5919184 5919372 0.000000 - 0 gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene exon 5918486 5919372 0.000000 - . gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene CDS 5921699 5921785 0.000000 - 0 gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene exon 5921699 5921785 0.000000 - . gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene CDS 5921889 5921991 0.000000 - 1 gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene exon 5921889 5921991 0.000000 - . gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene CDS 5922597 5922682 0.000000 - 0 gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene exon 5922597 5922682 0.000000 - . gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene CDS 5923074 5923432 0.000000 - 2 gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene exon 5923074 5923432 0.000000 - . gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene CDS 5924205 5924329 0.000000 - 1 gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene exon 5924205 5924329 0.000000 - . gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene CDS 5924594 5924625 0.000000 - 0 gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene exon 5924594 5924677 0.000000 - . gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene exon 5924808 5924899 0.000000 - . gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene exon 5927052 5927179 0.000000 - . gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene exon 5930924 5931173 0.000000 - . gene_id "TRMT6"; transcript_id "AK300812:uc010zra.1"; -chr20 hg19_knownGene CDS 5923008 5923432 0.000000 - 2 gene_id "TRMT6"; transcript_id "AK308648:uc010gbn.1"; -chr20 hg19_knownGene exon 5922499 5923432 0.000000 - . gene_id "TRMT6"; transcript_id "AK308648:uc010gbn.1"; -chr20 hg19_knownGene CDS 5924205 5924329 0.000000 - 1 gene_id "TRMT6"; transcript_id "AK308648:uc010gbn.1"; -chr20 hg19_knownGene exon 5924205 5924329 0.000000 - . gene_id "TRMT6"; transcript_id "AK308648:uc010gbn.1"; -chr20 hg19_knownGene CDS 5924594 5924625 0.000000 - 0 gene_id "TRMT6"; transcript_id "AK308648:uc010gbn.1"; -chr20 hg19_knownGene exon 5924594 5924677 0.000000 - . gene_id "TRMT6"; transcript_id "AK308648:uc010gbn.1"; -chr20 hg19_knownGene exon 5924808 5924899 0.000000 - . gene_id "TRMT6"; transcript_id "AK308648:uc010gbn.1"; -chr20 hg19_knownGene exon 5927052 5927179 0.000000 - . gene_id "TRMT6"; transcript_id "AK308648:uc010gbn.1"; -chr20 hg19_knownGene exon 5930924 5931173 0.000000 - . gene_id "TRMT6"; transcript_id "AK308648:uc010gbn.1"; -chr20 hg19_knownGene exon 5923074 5923432 0.000000 - . gene_id "TRMT6"; transcript_id "AK309205:uc010gbo.1"; -chr20 hg19_knownGene exon 5924205 5924329 0.000000 - . gene_id "TRMT6"; transcript_id "AK309205:uc010gbo.1"; -chr20 hg19_knownGene exon 5924473 5924677 0.000000 - . gene_id "TRMT6"; transcript_id "AK309205:uc010gbo.1"; -chr20 hg19_knownGene exon 5924808 5924899 0.000000 - . gene_id "TRMT6"; transcript_id "AK309205:uc010gbo.1"; -chr20 hg19_knownGene exon 5925451 5925560 0.000000 - . gene_id "TRMT6"; transcript_id "AK309205:uc010gbo.1"; -chr20 hg19_knownGene exon 5927052 5927179 0.000000 - . gene_id "TRMT6"; transcript_id "AK309205:uc010gbo.1"; -chr20 hg19_knownGene exon 5930924 5931173 0.000000 - . gene_id "TRMT6"; transcript_id "AK309205:uc010gbo.1"; -chr20 hg19_knownGene exon 5931298 5931669 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5932662 5932809 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5932657 5932809 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5933070 5933174 0.000000 + 2 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5933070 5933174 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5935254 5935336 0.000000 + 2 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5935254 5935336 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5935748 5935897 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5935748 5935897 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5937772 5937875 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5937772 5937875 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5939174 5939372 0.000000 + 1 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5939174 5939372 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5943920 5944005 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5943920 5944005 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5948082 5948233 0.000000 + 1 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5948082 5948233 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5948476 5948671 0.000000 + 2 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5948476 5948671 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5952653 5952683 0.000000 + 1 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5952653 5952683 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5953702 5953842 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5953702 5953842 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5958522 5958663 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5958522 5958663 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5963616 5963811 0.000000 + 2 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5963616 5963811 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5965427 5965646 0.000000 + 1 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5965427 5965646 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5966568 5966777 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5966568 5966777 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5967928 5968004 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5967928 5968004 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5974152 5974341 0.000000 + 1 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5974152 5974341 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene CDS 5974945 5975034 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5974945 5975831 0.000000 + . gene_id "MCM8"; transcript_id "NM_032485:uc002wmi.3"; -chr20 hg19_knownGene exon 5931298 5931723 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5932662 5932809 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5932657 5932809 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5933070 5933174 0.000000 + 2 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5933070 5933174 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5935254 5935336 0.000000 + 2 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5935254 5935336 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5935748 5935897 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5935748 5935897 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5937772 5937875 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5937772 5937875 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5939174 5939372 0.000000 + 1 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5939174 5939372 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5943920 5944005 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5943920 5944005 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5948082 5948233 0.000000 + 1 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5948082 5948233 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5948524 5948671 0.000000 + 2 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5948524 5948671 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5952653 5952683 0.000000 + 1 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5952653 5952683 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5953702 5953842 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5953702 5953842 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5958522 5958663 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5958522 5958663 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5963616 5963811 0.000000 + 2 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5963616 5963811 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5965427 5965646 0.000000 + 1 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5965427 5965646 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5966568 5966777 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5966568 5966777 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5967928 5968004 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5967928 5968004 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5974152 5974341 0.000000 + 1 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5974152 5974341 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene CDS 5974945 5975034 0.000000 + 0 gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5974945 5975831 0.000000 + . gene_id "MCM8"; transcript_id "NM_182802:uc002wmj.3"; -chr20 hg19_knownGene exon 5931298 5931669 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5932662 5932809 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5932657 5932809 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5933070 5933174 0.000000 + 2 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5933070 5933174 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5935254 5935336 0.000000 + 2 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5935254 5935336 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5935748 5935897 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5935748 5935897 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5937772 5937875 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5937772 5937875 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5939174 5939372 0.000000 + 1 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5939174 5939372 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5943920 5944005 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5943920 5944005 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5948082 5948233 0.000000 + 1 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5948082 5948233 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5948476 5948671 0.000000 + 2 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5948476 5948671 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5953222 5953372 0.000000 + 1 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5953222 5953372 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5953702 5953842 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5953702 5953842 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5958522 5958663 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5958522 5958663 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5963616 5963811 0.000000 + 2 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5963616 5963811 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5965427 5965646 0.000000 + 1 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5965427 5965646 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5966568 5966777 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5966568 5966777 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5967928 5968004 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5967928 5968004 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5974152 5974341 0.000000 + 1 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5974152 5974341 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene CDS 5974945 5975034 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5974945 5975831 0.000000 + . gene_id "MCM8"; transcript_id "BC101055:uc002wmk.3"; -chr20 hg19_knownGene exon 5931298 5931723 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5932662 5932809 0.000000 + 0 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5932657 5932809 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5933070 5933174 0.000000 + 2 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5933070 5933174 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5935254 5935336 0.000000 + 2 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5935254 5935336 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5935748 5935897 0.000000 + 0 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5935748 5935897 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5937772 5937875 0.000000 + 0 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5937772 5937875 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5939174 5939372 0.000000 + 1 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5939174 5939372 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5943920 5944005 0.000000 + 0 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5943920 5944005 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5948082 5948233 0.000000 + 1 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5948082 5948233 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5948476 5948671 0.000000 + 2 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5948476 5948671 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5952653 5952683 0.000000 + 1 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5952653 5952683 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5953702 5953842 0.000000 + 0 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5953702 5953842 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5958522 5958663 0.000000 + 0 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5958522 5958663 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5963616 5963811 0.000000 + 2 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5963616 5963811 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5965427 5965646 0.000000 + 1 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5965427 5965646 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5966568 5966777 0.000000 + 0 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5966568 5966777 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5967928 5968004 0.000000 + 0 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5967928 5968004 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5974152 5974341 0.000000 + 1 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5974152 5974341 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene CDS 5974945 5975034 0.000000 + 0 gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5974945 5975831 0.000000 + . gene_id "MCM8"; transcript_id "AK314654:uc002wml.3"; -chr20 hg19_knownGene exon 5931298 5931669 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5932662 5932809 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5932657 5932809 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5933070 5933174 0.000000 + 2 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5933070 5933174 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5935254 5935336 0.000000 + 2 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5935254 5935336 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5935748 5935897 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5935748 5935897 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5937772 5937875 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5937772 5937875 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5939174 5939372 0.000000 + 1 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5939174 5939372 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5943920 5944005 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5943920 5944005 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5948082 5948233 0.000000 + 1 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5948082 5948233 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5948476 5948671 0.000000 + 2 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5948476 5948671 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5952653 5952683 0.000000 + 1 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5952653 5952683 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5958522 5958663 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5958522 5958663 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5963616 5963811 0.000000 + 2 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5963616 5963811 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5965427 5965646 0.000000 + 1 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5965427 5965646 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5966568 5966777 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5966568 5966777 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5967928 5968004 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5967928 5968004 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5974152 5974341 0.000000 + 1 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5974152 5974341 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5974945 5975034 0.000000 + 0 gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene exon 5974945 5975831 0.000000 + . gene_id "MCM8"; transcript_id "BC101054:uc010gbp.3"; -chr20 hg19_knownGene CDS 5953834 5953842 0.000000 + 0 gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene exon 5951348 5953842 0.000000 + . gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene CDS 5958522 5958663 0.000000 + 0 gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene exon 5958522 5958663 0.000000 + . gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene CDS 5963616 5963811 0.000000 + 2 gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene exon 5963616 5963811 0.000000 + . gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene CDS 5965427 5965646 0.000000 + 1 gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene exon 5965427 5965646 0.000000 + . gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene CDS 5966568 5966777 0.000000 + 0 gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene exon 5966568 5966777 0.000000 + . gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene CDS 5967928 5968004 0.000000 + 0 gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene exon 5967928 5968004 0.000000 + . gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene CDS 5974152 5974341 0.000000 + 1 gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene exon 5974152 5974341 0.000000 + . gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene CDS 5974945 5975034 0.000000 + 0 gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene exon 5974945 5975831 0.000000 + . gene_id "MCM8"; transcript_id "AK160378:uc002wmm.3"; -chr20 hg19_knownGene exon 5987902 5988045 0.000000 + . gene_id "CRLS1"; transcript_id "AK310368:uc010gbs.1"; -chr20 hg19_knownGene CDS 5990448 5990558 0.000000 + 0 gene_id "CRLS1"; transcript_id "AK310368:uc010gbs.1"; -chr20 hg19_knownGene exon 5990421 5990558 0.000000 + . gene_id "CRLS1"; transcript_id "AK310368:uc010gbs.1"; -chr20 hg19_knownGene CDS 5996007 5996237 0.000000 + 0 gene_id "CRLS1"; transcript_id "AK310368:uc010gbs.1"; -chr20 hg19_knownGene exon 5996007 5996701 0.000000 + . gene_id "CRLS1"; transcript_id "AK310368:uc010gbs.1"; -chr20 hg19_knownGene CDS 5986893 5987198 0.000000 + 0 gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene exon 5986739 5987198 0.000000 + . gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene CDS 5990421 5990558 0.000000 + 0 gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene exon 5990421 5990558 0.000000 + . gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene CDS 5996007 5996136 0.000000 + 0 gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene exon 5996007 5996136 0.000000 + . gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene CDS 6011931 6012016 0.000000 + 2 gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene exon 6011931 6012016 0.000000 + . gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene CDS 6012658 6012726 0.000000 + 0 gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene exon 6012658 6012726 0.000000 + . gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene CDS 6015110 6015201 0.000000 + 0 gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene exon 6015110 6015201 0.000000 + . gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene CDS 6017720 6017801 0.000000 + 1 gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene exon 6017720 6020697 0.000000 + . gene_id "CRLS1"; transcript_id "NM_019095:uc002wmn.4"; -chr20 hg19_knownGene exon 5986739 5987198 0.000000 + . gene_id "CRLS1"; transcript_id "BC069010:uc010gbq.3"; -chr20 hg19_knownGene exon 5990421 5990558 0.000000 + . gene_id "CRLS1"; transcript_id "BC069010:uc010gbq.3"; -chr20 hg19_knownGene exon 5996007 5996136 0.000000 + . gene_id "CRLS1"; transcript_id "BC069010:uc010gbq.3"; -chr20 hg19_knownGene exon 6012658 6012726 0.000000 + . gene_id "CRLS1"; transcript_id "BC069010:uc010gbq.3"; -chr20 hg19_knownGene exon 6015110 6015201 0.000000 + . gene_id "CRLS1"; transcript_id "BC069010:uc010gbq.3"; -chr20 hg19_knownGene exon 6017720 6020697 0.000000 + . gene_id "CRLS1"; transcript_id "BC069010:uc010gbq.3"; -chr20 hg19_knownGene CDS 5988048 5988056 0.000000 + 0 gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene exon 5987898 5988056 0.000000 + . gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene CDS 5990421 5990558 0.000000 + 0 gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene exon 5990421 5990558 0.000000 + . gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene CDS 5996007 5996136 0.000000 + 0 gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene exon 5996007 5996136 0.000000 + . gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene CDS 6011931 6012016 0.000000 + 2 gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene exon 6011931 6012016 0.000000 + . gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene CDS 6012658 6012726 0.000000 + 0 gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene exon 6012658 6012726 0.000000 + . gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene CDS 6015110 6015201 0.000000 + 0 gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene exon 6015110 6015201 0.000000 + . gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene CDS 6017720 6017801 0.000000 + 1 gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene exon 6017720 6020697 0.000000 + . gene_id "CRLS1"; transcript_id "NM_001127458:uc010gbr.3"; -chr20 hg19_knownGene CDS 6021671 6022892 0.000000 - 1 gene_id "LRRN4"; transcript_id "NM_152611:uc002wmo.2"; -chr20 hg19_knownGene exon 6021425 6022892 0.000000 - . gene_id "LRRN4"; transcript_id "NM_152611:uc002wmo.2"; -chr20 hg19_knownGene CDS 6025189 6025326 0.000000 - 1 gene_id "LRRN4"; transcript_id "NM_152611:uc002wmo.2"; -chr20 hg19_knownGene exon 6025189 6025326 0.000000 - . gene_id "LRRN4"; transcript_id "NM_152611:uc002wmo.2"; -chr20 hg19_knownGene CDS 6031425 6031629 0.000000 - 2 gene_id "LRRN4"; transcript_id "NM_152611:uc002wmo.2"; -chr20 hg19_knownGene exon 6031425 6031629 0.000000 - . gene_id "LRRN4"; transcript_id "NM_152611:uc002wmo.2"; -chr20 hg19_knownGene CDS 6032791 6033445 0.000000 - 0 gene_id "LRRN4"; transcript_id "NM_152611:uc002wmo.2"; -chr20 hg19_knownGene exon 6032791 6033450 0.000000 - . gene_id "LRRN4"; transcript_id "NM_152611:uc002wmo.2"; -chr20 hg19_knownGene exon 6034476 6034694 0.000000 - . gene_id "LRRN4"; transcript_id "NM_152611:uc002wmo.2"; -chr20 hg19_knownGene CDS 6031424 6031629 0.000000 - 2 gene_id "LRRN4"; transcript_id "AK172833:uc002wmp.3"; -chr20 hg19_knownGene exon 6030851 6031629 0.000000 - . gene_id "LRRN4"; transcript_id "AK172833:uc002wmp.3"; -chr20 hg19_knownGene CDS 6032791 6033445 0.000000 - 0 gene_id "LRRN4"; transcript_id "AK172833:uc002wmp.3"; -chr20 hg19_knownGene exon 6032791 6033450 0.000000 - . gene_id "LRRN4"; transcript_id "AK172833:uc002wmp.3"; -chr20 hg19_knownGene exon 6034476 6034694 0.000000 - . gene_id "LRRN4"; transcript_id "AK172833:uc002wmp.3"; -chr20 hg19_knownGene CDS 6057823 6057993 0.000000 - 0 gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene exon 6055492 6057993 0.000000 - . gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene CDS 6060083 6060224 0.000000 - 1 gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene exon 6060083 6060224 0.000000 - . gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene CDS 6064687 6064811 0.000000 - 0 gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene exon 6064687 6064811 0.000000 - . gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene CDS 6065713 6065934 0.000000 - 0 gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene exon 6065713 6065934 0.000000 - . gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene CDS 6068424 6068453 0.000000 - 0 gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene exon 6068424 6068530 0.000000 - . gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene exon 6069612 6069736 0.000000 - . gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene exon 6074721 6074819 0.000000 - . gene_id "FERMT1"; transcript_id "AK225216:uc002wmq.3"; -chr20 hg19_knownGene CDS 6077546 6077680 0.000000 - 0 gene_id "FERMT1"; transcript_id "AK025365:uc002wmt.3"; -chr20 hg19_knownGene exon 6075976 6077680 0.000000 - . gene_id "FERMT1"; transcript_id "AK025365:uc002wmt.3"; -chr20 hg19_knownGene CDS 6078171 6078278 0.000000 - 0 gene_id "FERMT1"; transcript_id "AK025365:uc002wmt.3"; -chr20 hg19_knownGene exon 6078171 6078278 0.000000 - . gene_id "FERMT1"; transcript_id "AK025365:uc002wmt.3"; -chr20 hg19_knownGene CDS 6088179 6088256 0.000000 - 0 gene_id "FERMT1"; transcript_id "AK025365:uc002wmt.3"; -chr20 hg19_knownGene exon 6088179 6088281 0.000000 - . gene_id "FERMT1"; transcript_id "AK025365:uc002wmt.3"; -chr20 hg19_knownGene CDS 6057823 6057993 0.000000 - 0 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6055492 6057993 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6060083 6060224 0.000000 - 1 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6060083 6060224 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6064687 6064811 0.000000 - 0 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6064687 6064811 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6065713 6065934 0.000000 - 0 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6065713 6065934 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6068424 6068530 0.000000 - 2 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6068424 6068530 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6069612 6069736 0.000000 - 1 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6069612 6069736 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6075586 6075635 0.000000 - 0 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6075586 6075635 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6077549 6077680 0.000000 - 0 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6077549 6077680 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6078171 6078278 0.000000 - 0 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6078171 6078278 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6088179 6088281 0.000000 - 1 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6088179 6088281 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6090945 6091158 0.000000 - 2 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6090945 6091158 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6093124 6093270 0.000000 - 2 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6093124 6093270 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6096458 6096691 0.000000 - 2 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6096458 6096691 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6100051 6100201 0.000000 - 0 gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6100051 6100219 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene exon 6103421 6104191 0.000000 - . gene_id "FERMT1"; transcript_id "NM_017671:uc002wmr.3"; -chr20 hg19_knownGene CDS 6057823 6057993 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6055492 6057993 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene CDS 6060083 6060224 0.000000 - 1 gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6060083 6060224 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene CDS 6064687 6064811 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6064687 6064811 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene CDS 6065713 6065934 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6065713 6065934 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene CDS 6068424 6068530 0.000000 - 2 gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6068424 6068530 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene CDS 6069612 6069736 0.000000 - 1 gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6069612 6069736 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene CDS 6075586 6075635 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6075586 6075635 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene CDS 6077549 6077680 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6077549 6077680 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene CDS 6078171 6078278 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6078171 6078278 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene CDS 6088179 6088256 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6088179 6088281 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6093124 6093270 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6096458 6096691 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6100068 6100219 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene exon 6103421 6104191 0.000000 - . gene_id "FERMT1"; transcript_id "BC040545:uc010gbt.3"; -chr20 hg19_knownGene CDS 6068310 6068530 0.000000 - 2 gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6067966 6068530 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene CDS 6069612 6069736 0.000000 - 1 gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6069612 6069736 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene CDS 6075586 6075635 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6075586 6075635 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene CDS 6077549 6077680 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6077549 6077680 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene CDS 6078171 6078278 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6078171 6078278 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene CDS 6088179 6088281 0.000000 - 1 gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6088179 6088281 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene CDS 6090945 6091158 0.000000 - 2 gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6090945 6091158 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene CDS 6093124 6093270 0.000000 - 2 gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6093124 6093270 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene CDS 6096458 6096691 0.000000 - 2 gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6096458 6096691 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene CDS 6100051 6100201 0.000000 - 0 gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6100051 6100222 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6103421 6104191 0.000000 - . gene_id "FERMT1"; transcript_id "BC035882:uc002wms.3"; -chr20 hg19_knownGene exon 6748745 6749522 0.000000 + . gene_id "BMP2"; transcript_id "NM_001200:uc002wmu.1"; -chr20 hg19_knownGene CDS 6750774 6751119 0.000000 + 0 gene_id "BMP2"; transcript_id "NM_001200:uc002wmu.1"; -chr20 hg19_knownGene exon 6750767 6751119 0.000000 + . gene_id "BMP2"; transcript_id "NM_001200:uc002wmu.1"; -chr20 hg19_knownGene CDS 6758892 6759733 0.000000 + 2 gene_id "BMP2"; transcript_id "NM_001200:uc002wmu.1"; -chr20 hg19_knownGene exon 6758892 6760910 0.000000 + . gene_id "BMP2"; transcript_id "NM_001200:uc002wmu.1"; -chr20 hg19_knownGene exon 7328114 7328323 0.000000 + . gene_id "BC043288"; transcript_id "BC043288:uc002wmv.3"; -chr20 hg19_knownGene exon 7341268 7341452 0.000000 + . gene_id "BC043288"; transcript_id "BC043288:uc002wmv.3"; -chr20 hg19_knownGene exon 7347927 7349146 0.000000 + . gene_id "BC043288"; transcript_id "BC043288:uc002wmv.3"; -chr20 hg19_knownGene exon 7614208 7614498 0.000000 - . gene_id "Metazoa_SRP"; transcript_id ":uc021wak.1"; -chr20 hg19_knownGene CDS 7864243 7864310 0.000000 - 2 gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene exon 7863631 7864310 0.000000 - . gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene CDS 7866168 7866237 0.000000 - 0 gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene exon 7866168 7866237 0.000000 - . gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene CDS 7866353 7866511 0.000000 - 0 gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene exon 7866353 7866511 0.000000 - . gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene CDS 7875780 7875871 0.000000 - 2 gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene exon 7875780 7875871 0.000000 - . gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene CDS 7886801 7886976 0.000000 - 1 gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene exon 7886801 7886976 0.000000 - . gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene CDS 7894811 7895066 0.000000 - 2 gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene exon 7894811 7895066 0.000000 - . gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene CDS 7915131 7915282 0.000000 - 1 gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene exon 7915131 7915282 0.000000 - . gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene CDS 7920933 7921069 0.000000 - 0 gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene exon 7920933 7921093 0.000000 - . gene_id "HAO1"; transcript_id "NM_017545:uc002wmw.1"; -chr20 hg19_knownGene CDS 7866130 7866237 0.000000 - 0 gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene exon 7866021 7866237 0.000000 - . gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene CDS 7866353 7866511 0.000000 - 0 gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene exon 7866353 7866511 0.000000 - . gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene CDS 7875780 7875871 0.000000 - 2 gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene exon 7875780 7875871 0.000000 - . gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene CDS 7886801 7886976 0.000000 - 1 gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene exon 7886801 7886976 0.000000 - . gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene CDS 7894811 7895066 0.000000 - 2 gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene exon 7894811 7895066 0.000000 - . gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene CDS 7915131 7915282 0.000000 - 1 gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene exon 7915131 7915282 0.000000 - . gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene CDS 7920933 7921069 0.000000 - 0 gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene exon 7920933 7921093 0.000000 - . gene_id "HAO1"; transcript_id "AK308963:uc010gbu.3"; -chr20 hg19_knownGene CDS 7962901 7963268 0.000000 - 2 gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene exon 7961716 7963268 0.000000 - . gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene CDS 7964441 7964504 0.000000 - 0 gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene exon 7964441 7964504 0.000000 - . gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene CDS 7967935 7968036 0.000000 - 0 gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene exon 7967935 7968036 0.000000 - . gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene CDS 7976673 7976718 0.000000 - 1 gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene exon 7976673 7976718 0.000000 - . gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene CDS 7980379 7980507 0.000000 - 1 gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene exon 7980379 7980507 0.000000 - . gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene CDS 7982143 7982188 0.000000 - 2 gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene exon 7982143 7982188 0.000000 - . gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene CDS 7990847 7990962 0.000000 - 1 gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene exon 7990847 7990962 0.000000 - . gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene CDS 8000085 8000260 0.000000 - 0 gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene exon 8000085 8000393 0.000000 - . gene_id "TMX4"; transcript_id "NM_021156:uc002wmx.1"; -chr20 hg19_knownGene exon 8000549 8000751 0.000000 + . gene_id "AK097836"; transcript_id "AK097836:uc002wmy.1"; -chr20 hg19_knownGene exon 8001038 8001908 0.000000 + . gene_id "AK097836"; transcript_id "AK097836:uc002wmy.1"; -chr20 hg19_knownGene exon 8002706 8002802 0.000000 + . gene_id "AK097836"; transcript_id "AK097836:uc002wmy.1"; -chr20 hg19_knownGene exon 8003028 8003096 0.000000 + . gene_id "AK097836"; transcript_id "AK097836:uc002wmy.1"; -chr20 hg19_knownGene exon 8003204 8003414 0.000000 + . gene_id "AK097836"; transcript_id "AK097836:uc002wmy.1"; -chr20 hg19_knownGene exon 8003918 8004099 0.000000 + . gene_id "AK097836"; transcript_id "AK097836:uc002wmy.1"; -chr20 hg19_knownGene exon 8008308 8008603 0.000000 + . gene_id "AK097836"; transcript_id "AK097836:uc002wmy.1"; -chr20 hg19_knownGene CDS 8113299 8113397 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene exon 8113296 8113397 0.000000 + . gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene CDS 8130941 8131018 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene exon 8130941 8131018 0.000000 + . gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene CDS 8352029 8352097 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene exon 8352029 8352097 0.000000 + . gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene CDS 8608941 8609078 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene exon 8608941 8609078 0.000000 + . gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene CDS 8626749 8626828 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene exon 8626749 8626828 0.000000 + . gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene CDS 8628547 8628600 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene exon 8628547 8628600 0.000000 + . gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene CDS 8630021 8630117 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene exon 8630021 8630636 0.000000 + . gene_id "PLCB1"; transcript_id "AK310597:uc010gbv.1"; -chr20 hg19_knownGene CDS 8113299 8113397 0.000000 + 0 gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene exon 8113296 8113397 0.000000 + . gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene CDS 8130941 8131018 0.000000 + 0 gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene exon 8130941 8131018 0.000000 + . gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene CDS 8352029 8352097 0.000000 + 0 gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene exon 8352029 8352097 0.000000 + . gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene CDS 8608941 8609078 0.000000 + 0 gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene exon 8608941 8609078 0.000000 + . gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene CDS 8626749 8626828 0.000000 + 0 gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene exon 8626749 8626828 0.000000 + . gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene CDS 8628547 8628600 0.000000 + 1 gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene exon 8628547 8628600 0.000000 + . gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene CDS 8630021 8630096 0.000000 + 1 gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene exon 8630021 8630096 0.000000 + . gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene CDS 8632060 8632161 0.000000 + 0 gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene exon 8632060 8632165 0.000000 + . gene_id "PLCB1"; transcript_id "AX721082:uc002wmz.1"; -chr20 hg19_knownGene exon 8095100 8095220 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8130941 8131018 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8352029 8352097 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8608998 8609078 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8608941 8609078 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8626749 8626828 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8626749 8626828 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8628547 8628600 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8628547 8628600 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8630021 8630096 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8630021 8630096 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8637831 8637931 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8637831 8637931 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8639185 8639351 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8639185 8639351 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8665579 8665725 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8665579 8665725 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8678273 8678430 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8678273 8678430 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8689317 8689399 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8689317 8689399 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8696911 8696995 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8696911 8696995 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8698318 8698495 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8698318 8698495 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8703001 8703068 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8703001 8703068 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8705303 8705399 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8705303 8705399 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8707956 8708040 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8707956 8708040 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8709697 8709821 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8709697 8709821 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8713885 8714039 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8713885 8714039 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8717675 8717839 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8717675 8717839 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8719908 8720007 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8719908 8720007 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8720991 8721095 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8720991 8721095 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8722111 8722220 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8722111 8722220 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8737693 8737825 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8737693 8737825 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8741054 8741107 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8741054 8741107 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8745786 8746005 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8745786 8746005 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8755186 8755366 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8755186 8755366 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene CDS 8769096 8769167 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8769096 8769172 0.000000 + . gene_id "PLCB1"; transcript_id "AK299195:uc010zrb.1"; -chr20 hg19_knownGene exon 8581381 8581428 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8608998 8609078 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8608941 8609078 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8626749 8626828 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8626749 8626828 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8628547 8628600 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8628547 8628600 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8630021 8630096 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8630021 8630096 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8637831 8637931 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8637831 8637931 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8639185 8639351 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8639185 8639351 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8665579 8665725 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8665579 8665725 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8678273 8678430 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8678273 8678430 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8689317 8689399 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8689317 8689399 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8696911 8696995 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8696911 8696995 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8698318 8698495 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8698318 8698495 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8703001 8703068 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8703001 8703068 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8705303 8705399 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8705303 8705399 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8707956 8708040 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8707956 8708040 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8709697 8709821 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8709697 8709821 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8713885 8714039 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8713885 8714039 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8717675 8717839 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8717675 8717839 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8719908 8720007 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8719908 8720007 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8720991 8721095 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8720991 8721095 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8722111 8722220 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8722111 8722220 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8737693 8737825 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8737693 8737825 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8741054 8741107 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8741054 8741107 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8745786 8746005 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8745786 8746005 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8755186 8755366 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8755186 8755366 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8769096 8769167 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene exon 8769096 8769172 0.000000 + . gene_id "PLCB1"; transcript_id "AK127693:uc002wnc.1"; -chr20 hg19_knownGene CDS 8696930 8696995 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8696509 8696995 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8698318 8698495 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8698318 8698495 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8703001 8703068 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8703001 8703068 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8705303 8705399 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8705303 8705399 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8707956 8708040 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8707956 8708040 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8709697 8709821 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8709697 8709821 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8713885 8714039 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8713885 8714039 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8717675 8717839 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8717675 8717839 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8719908 8720007 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8719908 8720007 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8720991 8721095 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8720991 8721095 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8722111 8722220 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8722111 8722220 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8737693 8737825 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8737693 8737825 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8741054 8741107 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8741054 8741107 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8745786 8746005 0.000000 + 2 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8745786 8746005 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8755186 8755366 0.000000 + 1 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8755186 8755366 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8769096 8769167 0.000000 + 0 gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene exon 8769096 8769172 0.000000 + . gene_id "PLCB1"; transcript_id "AK023689:uc002wnd.1"; -chr20 hg19_knownGene CDS 8113299 8113397 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8113296 8113397 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8130941 8131018 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8130941 8131018 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8352029 8352097 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8352029 8352097 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8608941 8609078 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8608941 8609078 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8626749 8626828 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8626749 8626828 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8628547 8628600 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8628547 8628600 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8630021 8630096 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8630021 8630096 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8637831 8637931 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8637831 8637931 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8639185 8639351 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8639185 8639351 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8665579 8665725 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8665579 8665725 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8678273 8678430 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8678273 8678430 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8689317 8689399 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8689317 8689399 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8696911 8696995 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8696911 8696995 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8698318 8698495 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8698318 8698495 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8703001 8703068 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8703001 8703068 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8705303 8705399 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8705303 8705399 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8707956 8708040 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8707956 8708040 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8709697 8709821 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8709697 8709821 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8713885 8714039 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8713885 8714039 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8717675 8717839 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8717675 8717839 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8719908 8720007 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8719908 8720007 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8720991 8721095 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8720991 8721095 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8722111 8722220 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8722111 8722220 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8737693 8737825 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8737693 8737825 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8741054 8741107 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8741054 8741107 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8745786 8746005 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8745786 8746005 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8755186 8755366 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8755186 8755366 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8769096 8769172 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8769096 8769172 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8769280 8769369 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8769280 8769369 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8770165 8770222 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8770165 8770222 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8770822 8770908 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8770822 8770908 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8782703 8782798 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8782703 8782820 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene exon 8862269 8865547 0.000000 + . gene_id "PLCB1"; transcript_id "NM_182734:uc002wna.3"; -chr20 hg19_knownGene CDS 8113299 8113397 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8113296 8113397 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8130941 8131018 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8130941 8131018 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8352029 8352097 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8352029 8352097 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8608941 8609078 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8608941 8609078 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8626749 8626828 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8626749 8626828 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8628547 8628600 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8628547 8628600 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8630021 8630096 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8630021 8630096 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8637831 8637931 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8637831 8637931 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8639185 8639351 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8639185 8639351 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8665579 8665725 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8665579 8665725 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8678273 8678430 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8678273 8678430 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8689317 8689399 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8689317 8689399 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8696911 8696995 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8696911 8696995 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8698318 8698495 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8698318 8698495 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8703001 8703068 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8703001 8703068 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8705303 8705399 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8705303 8705399 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8707956 8708040 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8707956 8708040 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8709697 8709821 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8709697 8709821 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8713885 8714039 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8713885 8714039 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8717675 8717839 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8717675 8717839 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8719908 8720007 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8719908 8720007 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8720991 8721095 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8720991 8721095 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8722111 8722220 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8722111 8722220 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8737693 8737825 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8737693 8737825 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8741054 8741107 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8741054 8741107 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8745786 8746005 0.000000 + 2 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8745786 8746005 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8755186 8755366 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8755186 8755366 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8769096 8769172 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8769096 8769172 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8769280 8769369 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8769280 8769369 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8770165 8770222 0.000000 + 1 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8770165 8770222 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8770822 8770908 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8770822 8770908 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene CDS 8862269 8862493 0.000000 + 0 gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 8862269 8865547 0.000000 + . gene_id "PLCB1"; transcript_id "NM_015192:uc002wnb.3"; -chr20 hg19_knownGene exon 9049701 9049853 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9198037 9198099 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9288462 9288545 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9288447 9288545 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9317773 9317853 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9317773 9317853 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9318655 9318714 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9318655 9318714 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9319541 9319684 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9319541 9319684 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9343543 9343622 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9343543 9343622 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9346108 9346161 0.000000 + 1 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9346108 9346161 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9351861 9351942 0.000000 + 1 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9351861 9351942 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9352950 9353050 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9352950 9353050 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9353694 9353751 0.000000 + 1 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9353694 9353751 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9360701 9360809 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9360701 9360809 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9364848 9365058 0.000000 + 2 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9364848 9365058 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9368110 9368203 0.000000 + 1 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9368110 9368203 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9370526 9370605 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9370526 9370605 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9371178 9371262 0.000000 + 1 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9371178 9371262 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9374235 9374325 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9374235 9374325 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9376170 9376265 0.000000 + 2 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9376170 9376265 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9382137 9382237 0.000000 + 2 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9382137 9382237 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9388564 9388705 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9388564 9388705 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9389280 9389364 0.000000 + 2 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9389280 9389364 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9389704 9389828 0.000000 + 1 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9389704 9389828 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9391684 9391735 0.000000 + 2 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9391684 9391735 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9400454 9400556 0.000000 + 1 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9400454 9400556 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9401944 9402108 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9401944 9402108 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9404395 9404599 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9404395 9404599 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9416207 9416295 0.000000 + 2 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9416207 9416295 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9417649 9417799 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9417649 9417799 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9424628 9424677 0.000000 + 2 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9424628 9424677 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9424825 9424890 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9424825 9424890 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9433994 9434109 0.000000 + 0 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9433994 9434109 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene CDS 9438061 9438133 0.000000 + 1 gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9438061 9438136 0.000000 + . gene_id "PLCB4"; transcript_id "AK307482:uc010gbw.1"; -chr20 hg19_knownGene exon 9049701 9049853 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9198037 9198099 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9288462 9288545 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9288447 9288545 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9317773 9317853 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9317773 9317853 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9318655 9318714 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9318655 9318714 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9319541 9319684 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9319541 9319684 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9343543 9343622 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9343543 9343622 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9346108 9346161 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9346108 9346161 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9351861 9351942 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9351861 9351942 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9352950 9353050 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9352950 9353050 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9353694 9353751 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9353694 9353751 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9360701 9360809 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9360701 9360809 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9364848 9365058 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9364848 9365058 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9368110 9368203 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9368110 9368203 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9370526 9370605 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9370526 9370605 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9371178 9371262 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9371178 9371262 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9374235 9374325 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9374235 9374325 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9376170 9376265 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9376170 9376265 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9382137 9382237 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9382137 9382237 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9385960 9385995 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9385960 9385995 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9388564 9388705 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9388564 9388705 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9389280 9389364 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9389280 9389364 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9389704 9389828 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9389704 9389828 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9391684 9391735 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9391684 9391735 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9400454 9400556 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9400454 9400556 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9401944 9402108 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9401944 9402108 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9404395 9404599 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9404395 9404599 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9416207 9416295 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9416207 9416295 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9417649 9417799 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9417649 9417799 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9424628 9424677 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9424628 9424677 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9424825 9424890 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9424825 9424890 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9433994 9434109 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9433994 9434109 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9438061 9438136 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9438061 9438136 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9440282 9440457 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9440282 9440457 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9449218 9449319 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9449218 9449319 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9453437 9453494 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9453437 9453494 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9453926 9454012 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9453926 9454012 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene CDS 9459568 9459633 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9459568 9461462 0.000000 + . gene_id "PLCB4"; transcript_id "NM_001172646:uc010gbx.3"; -chr20 hg19_knownGene exon 9198037 9198099 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9288462 9288545 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9288447 9288545 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9317773 9317853 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9317773 9317853 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9318655 9318714 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9318655 9318714 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9319541 9319684 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9319541 9319684 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9343543 9343622 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9343543 9343622 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9346108 9346161 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9346108 9346161 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9351861 9351942 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9351861 9351942 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9352950 9353050 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9352950 9353050 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9353694 9353751 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9353694 9353751 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9360701 9360809 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9360701 9360809 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9364848 9365058 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9364848 9365058 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9368110 9368203 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9368110 9368203 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9370526 9370605 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9370526 9370605 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9371178 9371262 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9371178 9371262 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9374235 9374325 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9374235 9374325 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9376170 9376265 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9376170 9376265 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9382137 9382237 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9382137 9382237 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9388564 9388705 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9388564 9388705 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9389280 9389364 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9389280 9389364 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9389704 9389828 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9389704 9389828 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9391684 9391735 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9391684 9391735 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9400454 9400556 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9400454 9400556 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9401944 9402108 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9401944 9402108 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9404395 9404599 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9404395 9404599 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9416207 9416295 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9416207 9416295 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9417649 9417799 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9417649 9417799 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9424628 9424677 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9424628 9424677 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9424825 9424890 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9424825 9424890 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9433994 9434109 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9433994 9434109 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9438061 9438136 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9438061 9438136 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9440282 9440457 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9440282 9440457 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9449218 9449319 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9449218 9449319 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9453437 9453494 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9453437 9453494 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9453926 9454012 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9453926 9454012 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9459568 9459633 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene exon 9459568 9461462 0.000000 + . gene_id "PLCB4"; transcript_id "NM_182797:uc021wal.1"; -chr20 hg19_knownGene CDS 9288462 9288545 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9288447 9288545 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9317773 9317853 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9317773 9317853 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9318655 9318714 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9318655 9318714 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9319541 9319684 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9319541 9319684 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9343543 9343622 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9343543 9343622 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9346108 9346161 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9346108 9346161 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9351861 9351942 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9351861 9351942 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9352950 9353050 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9352950 9353050 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9353694 9353751 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9353694 9353751 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9360701 9360809 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9360701 9360809 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9364848 9365058 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9364848 9365058 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9368110 9368203 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9368110 9368203 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9370526 9370605 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9370526 9370605 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9371178 9371262 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9371178 9371262 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9374235 9374325 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9374235 9374325 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9376170 9376265 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9376170 9376265 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9382137 9382237 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9382137 9382237 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9388564 9388705 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9388564 9388705 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9389280 9389364 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9389280 9389364 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9389704 9389828 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9389704 9389828 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9391684 9391735 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9391684 9391735 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9400454 9400556 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9400454 9400556 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9401944 9402108 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9401944 9402108 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9404395 9404599 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9404395 9404599 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9416207 9416295 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9416207 9416295 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9417649 9417799 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9417649 9417799 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9424628 9424677 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9424628 9424677 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9424825 9424890 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9424825 9424890 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9433994 9434109 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9433994 9434109 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9438061 9438136 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9438061 9438136 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9440282 9440457 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9440282 9440457 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9449218 9449319 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9449218 9449319 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9453437 9453494 0.000000 + 1 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9453437 9453494 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9453926 9454012 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9453926 9454012 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9457364 9457400 0.000000 + 0 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9457364 9457400 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9459568 9459653 0.000000 + 2 gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene exon 9459568 9461462 0.000000 + . gene_id "PLCB4"; transcript_id "NM_000933:uc021wam.1"; -chr20 hg19_knownGene CDS 9351817 9351942 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9351581 9351942 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9352950 9353050 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9352950 9353050 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9353694 9353751 0.000000 + 1 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9353694 9353751 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9360701 9360809 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9360701 9360809 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9364848 9365058 0.000000 + 2 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9364848 9365058 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9368110 9368203 0.000000 + 1 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9368110 9368203 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9370526 9370605 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9370526 9370605 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9371178 9371262 0.000000 + 1 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9371178 9371262 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9374235 9374325 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9374235 9374325 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9376170 9376265 0.000000 + 2 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9376170 9376265 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9382137 9382237 0.000000 + 2 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9382137 9382237 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9388564 9388705 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9388564 9388705 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9389280 9389364 0.000000 + 2 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9389280 9389364 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9389704 9389828 0.000000 + 1 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9389704 9389828 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9391684 9391735 0.000000 + 2 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9391684 9391735 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9400454 9400556 0.000000 + 1 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9400454 9400556 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9401944 9402108 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9401944 9402108 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9404395 9404599 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9404395 9404599 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9416207 9416295 0.000000 + 2 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9416207 9416295 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9417649 9417799 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9417649 9417799 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9424628 9424677 0.000000 + 2 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9424628 9424677 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9424825 9424890 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9424825 9424890 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9433994 9434109 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9433994 9434109 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9438061 9438136 0.000000 + 1 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9438061 9438136 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9440282 9440457 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9440282 9440457 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9449218 9449319 0.000000 + 1 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9449218 9449319 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9453437 9453494 0.000000 + 1 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9453437 9453494 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9453926 9454012 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9453926 9454012 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9459568 9459633 0.000000 + 0 gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene exon 9459568 9461462 0.000000 + . gene_id "PLCB4"; transcript_id "L41349:uc002wnh.3"; -chr20 hg19_knownGene CDS 9495500 9495563 0.000000 + 0 gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene exon 9495005 9495563 0.000000 + . gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene CDS 9496100 9496272 0.000000 + 2 gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene exon 9496100 9496272 0.000000 + . gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene CDS 9496647 9496778 0.000000 + 0 gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene exon 9496647 9496778 0.000000 + . gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene CDS 9496903 9497008 0.000000 + 0 gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene exon 9496903 9497008 0.000000 + . gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene CDS 9498687 9498875 0.000000 + 2 gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene exon 9498687 9498875 0.000000 + . gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene CDS 9510289 9510464 0.000000 + 2 gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene exon 9510289 9511171 0.000000 + . gene_id "LAMP5"; transcript_id "NM_012261:uc002wni.2"; -chr20 hg19_knownGene CDS 9495500 9495563 0.000000 + 0 gene_id "LAMP5"; transcript_id "NM_001199897:uc010zrc.2"; -chr20 hg19_knownGene exon 9495005 9495563 0.000000 + . gene_id "LAMP5"; transcript_id "NM_001199897:uc010zrc.2"; -chr20 hg19_knownGene CDS 9496100 9496272 0.000000 + 2 gene_id "LAMP5"; transcript_id "NM_001199897:uc010zrc.2"; -chr20 hg19_knownGene exon 9496100 9496272 0.000000 + . gene_id "LAMP5"; transcript_id "NM_001199897:uc010zrc.2"; -chr20 hg19_knownGene CDS 9496903 9497008 0.000000 + 0 gene_id "LAMP5"; transcript_id "NM_001199897:uc010zrc.2"; -chr20 hg19_knownGene exon 9496903 9497008 0.000000 + . gene_id "LAMP5"; transcript_id "NM_001199897:uc010zrc.2"; -chr20 hg19_knownGene CDS 9498687 9498875 0.000000 + 2 gene_id "LAMP5"; transcript_id "NM_001199897:uc010zrc.2"; -chr20 hg19_knownGene exon 9498687 9498875 0.000000 + . gene_id "LAMP5"; transcript_id "NM_001199897:uc010zrc.2"; -chr20 hg19_knownGene CDS 9510289 9510464 0.000000 + 2 gene_id "LAMP5"; transcript_id "NM_001199897:uc010zrc.2"; -chr20 hg19_knownGene exon 9510289 9511171 0.000000 + . gene_id "LAMP5"; transcript_id "NM_001199897:uc010zrc.2"; -chr20 hg19_knownGene exon 9748764 9751753 0.000000 - . gene_id "AX747070"; transcript_id "AX747070:uc002wnm.1"; -chr20 hg19_knownGene CDS 9520112 9520264 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9518037 9520264 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene CDS 9523233 9523367 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9523233 9523367 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene CDS 9525016 9525141 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9525016 9525141 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene CDS 9538255 9538381 0.000000 - 1 gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9538255 9538381 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene CDS 9543538 9543671 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9543538 9543671 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene CDS 9546540 9547031 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9546540 9547031 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene CDS 9560792 9561577 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9560792 9561577 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene CDS 9624773 9624976 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9624773 9624987 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9691934 9692083 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9799328 9799433 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene exon 9819410 9819687 0.000000 - . gene_id "PAK7"; transcript_id "NM_020341:uc002wnl.2"; -chr20 hg19_knownGene CDS 9520112 9520264 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene exon 9518037 9520264 0.000000 - . gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene CDS 9523233 9523367 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene exon 9523233 9523367 0.000000 - . gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene CDS 9525016 9525141 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene exon 9525016 9525141 0.000000 - . gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene CDS 9538255 9538381 0.000000 - 1 gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene exon 9538255 9538381 0.000000 - . gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene CDS 9543538 9543671 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene exon 9543538 9543671 0.000000 - . gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene CDS 9546540 9547031 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene exon 9546540 9547031 0.000000 - . gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene CDS 9560792 9561577 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene exon 9560792 9561577 0.000000 - . gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene CDS 9624773 9624976 0.000000 - 0 gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene exon 9624773 9624987 0.000000 - . gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene exon 9691934 9692083 0.000000 - . gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene exon 9819410 9819687 0.000000 - . gene_id "PAK7"; transcript_id "NM_177990:uc002wnk.2"; -chr20 hg19_knownGene CDS 9520112 9520264 0.000000 - 0 gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9518037 9520264 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene CDS 9523233 9523367 0.000000 - 0 gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9523233 9523367 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene CDS 9525016 9525141 0.000000 - 0 gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9525016 9525141 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene CDS 9538255 9538381 0.000000 - 1 gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9538255 9538381 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene CDS 9543538 9543671 0.000000 - 0 gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9543538 9543671 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene CDS 9546540 9547031 0.000000 - 0 gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9546540 9547031 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene CDS 9560792 9561577 0.000000 - 0 gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9560792 9561577 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene CDS 9624773 9624976 0.000000 - 0 gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9624773 9624987 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9691934 9692083 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9765006 9765154 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene exon 9819410 9819687 0.000000 - . gene_id "PAK7"; transcript_id "AB040812:uc002wnj.2"; -chr20 hg19_knownGene CDS 9520112 9520264 0.000000 - 0 gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene exon 9518037 9520264 0.000000 - . gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene CDS 9538255 9538381 0.000000 - 1 gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene exon 9538255 9538381 0.000000 - . gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene CDS 9543538 9543671 0.000000 - 0 gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene exon 9543538 9543671 0.000000 - . gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene CDS 9546540 9547031 0.000000 - 0 gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene exon 9546540 9547031 0.000000 - . gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene CDS 9560792 9561577 0.000000 - 0 gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene exon 9560792 9561577 0.000000 - . gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene CDS 9624773 9624976 0.000000 - 0 gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene exon 9624773 9624987 0.000000 - . gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene exon 9691934 9692083 0.000000 - . gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene exon 9819410 9819687 0.000000 - . gene_id "PAK7"; transcript_id "AK095674:uc010gby.1"; -chr20 hg19_knownGene exon 10015697 10015981 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10016227 10016290 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene CDS 10018950 10019295 0.000000 + 0 gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10018906 10019295 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene CDS 10023770 10023969 0.000000 + 2 gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10023770 10023969 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene CDS 10025042 10025191 0.000000 + 0 gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10025042 10025191 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene CDS 10026222 10026345 0.000000 + 0 gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10026222 10026345 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene CDS 10030038 10030860 0.000000 + 2 gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10030038 10030860 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene CDS 10032311 10032537 0.000000 + 1 gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10032311 10032537 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene CDS 10033760 10033923 0.000000 + 2 gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10033760 10033923 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene CDS 10035110 10035247 0.000000 + 0 gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10035110 10035247 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene CDS 10036150 10036305 0.000000 + 0 gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10036150 10037407 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_022096:uc002wno.3"; -chr20 hg19_knownGene exon 10015697 10015981 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene CDS 10018950 10019295 0.000000 + 0 gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene exon 10018906 10019295 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene CDS 10023770 10023969 0.000000 + 2 gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene exon 10023770 10023969 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene CDS 10025042 10025191 0.000000 + 0 gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene exon 10025042 10025191 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene CDS 10026222 10026345 0.000000 + 0 gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene exon 10026222 10026345 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene CDS 10030038 10030860 0.000000 + 2 gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene exon 10030038 10030860 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene CDS 10032311 10032537 0.000000 + 1 gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene exon 10032311 10032537 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene CDS 10033760 10033923 0.000000 + 2 gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene exon 10033760 10033923 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene CDS 10035110 10035247 0.000000 + 0 gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene exon 10035110 10035247 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene CDS 10036150 10036305 0.000000 + 0 gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene exon 10036150 10037407 0.000000 + . gene_id "ANKRD5"; transcript_id "NM_198798:uc002wnp.3"; -chr20 hg19_knownGene exon 10015697 10015981 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10018906 10019295 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10021273 10021318 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10023770 10023969 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene CDS 10025063 10025191 0.000000 + 0 gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10025042 10025191 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene CDS 10026222 10026345 0.000000 + 0 gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10026222 10026345 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene CDS 10030038 10030860 0.000000 + 2 gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10030038 10030860 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene CDS 10032311 10032537 0.000000 + 1 gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10032311 10032537 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene CDS 10033760 10033923 0.000000 + 2 gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10033760 10033923 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene CDS 10035110 10035247 0.000000 + 0 gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10035110 10035247 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene CDS 10036150 10036305 0.000000 + 0 gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10036150 10037407 0.000000 + . gene_id "ANKRD5"; transcript_id "BC028189:uc010gbz.3"; -chr20 hg19_knownGene exon 10004460 10006814 0.000000 - . gene_id "LOC100131208"; transcript_id "NR_040710:uc002wnn.2"; -chr20 hg19_knownGene exon 10007192 10007296 0.000000 - . gene_id "LOC100131208"; transcript_id "NR_040710:uc002wnn.2"; -chr20 hg19_knownGene exon 10084934 10085042 0.000000 - . gene_id "LOC100131208"; transcript_id "NR_040710:uc002wnn.2"; -chr20 hg19_knownGene exon 10177466 10177585 0.000000 - . gene_id "LOC100131208"; transcript_id "NR_040710:uc002wnn.2"; -chr20 hg19_knownGene exon 10199885 10200154 0.000000 - . gene_id "LOC100131208"; transcript_id "NR_040710:uc002wnn.2"; -chr20 hg19_knownGene exon 10199477 10199625 0.000000 + . gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene CDS 10256140 10256211 0.000000 + 0 gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene exon 10256077 10256211 0.000000 + . gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene CDS 10258333 10258374 0.000000 + 0 gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene exon 10258333 10258374 0.000000 + . gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene CDS 10265372 10265420 0.000000 + 0 gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene exon 10265372 10265420 0.000000 + . gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene CDS 10273809 10273926 0.000000 + 2 gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene exon 10273809 10273926 0.000000 + . gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene CDS 10277573 10277698 0.000000 + 1 gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene exon 10277573 10277698 0.000000 + . gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene CDS 10279916 10280060 0.000000 + 1 gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene exon 10279916 10280060 0.000000 + . gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene CDS 10286777 10286842 0.000000 + 0 gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene exon 10286777 10288066 0.000000 + . gene_id "SNAP25"; transcript_id "NM_130811:uc002wnq.2"; -chr20 hg19_knownGene exon 10199477 10199625 0.000000 + . gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene CDS 10256140 10256211 0.000000 + 0 gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene exon 10256077 10256211 0.000000 + . gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene CDS 10258333 10258374 0.000000 + 0 gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene exon 10258333 10258374 0.000000 + . gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene CDS 10265372 10265420 0.000000 + 0 gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene exon 10265372 10265420 0.000000 + . gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene CDS 10273530 10273647 0.000000 + 2 gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene exon 10273530 10273647 0.000000 + . gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene CDS 10277573 10277698 0.000000 + 1 gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene exon 10277573 10277698 0.000000 + . gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene CDS 10279916 10280060 0.000000 + 1 gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene exon 10279916 10280060 0.000000 + . gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene CDS 10286777 10286842 0.000000 + 0 gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene exon 10286777 10288066 0.000000 + . gene_id "SNAP25"; transcript_id "NM_003081:uc002wnr.2"; -chr20 hg19_knownGene exon 10199477 10199625 0.000000 + . gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene exon 10256077 10256211 0.000000 + . gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene exon 10258333 10258374 0.000000 + . gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene exon 10265372 10265420 0.000000 + . gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene exon 10273530 10273647 0.000000 + . gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene CDS 10273835 10273926 0.000000 + 0 gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene exon 10273809 10273926 0.000000 + . gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene CDS 10277573 10277698 0.000000 + 1 gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene exon 10277573 10277698 0.000000 + . gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene CDS 10279916 10280060 0.000000 + 1 gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene exon 10279916 10280060 0.000000 + . gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene CDS 10286777 10286842 0.000000 + 0 gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene exon 10286777 10288066 0.000000 + . gene_id "SNAP25"; transcript_id "AK094560:uc002wns.2"; -chr20 hg19_knownGene exon 10199477 10199625 0.000000 + . gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene exon 10207326 10207428 0.000000 + . gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene exon 10207935 10208086 0.000000 + . gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene CDS 10256140 10256211 0.000000 + 0 gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene exon 10256077 10256211 0.000000 + . gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene CDS 10258333 10258374 0.000000 + 0 gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene exon 10258333 10258374 0.000000 + . gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene CDS 10265372 10265420 0.000000 + 0 gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene exon 10265372 10265420 0.000000 + . gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene CDS 10273530 10273647 0.000000 + 2 gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene exon 10273530 10273647 0.000000 + . gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene CDS 10277573 10277698 0.000000 + 1 gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene exon 10277573 10277698 0.000000 + . gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene CDS 10279916 10280060 0.000000 + 1 gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene exon 10279916 10280060 0.000000 + . gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene CDS 10286777 10286842 0.000000 + 0 gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene exon 10286777 10288066 0.000000 + . gene_id "SNAP25"; transcript_id "AK289647:uc010gca.2"; -chr20 hg19_knownGene CDS 10385898 10386335 0.000000 - 0 gene_id "MKKS"; transcript_id "NM_018848:uc002wnt.1"; -chr20 hg19_knownGene exon 10385833 10386335 0.000000 - . gene_id "MKKS"; transcript_id "NM_018848:uc002wnt.1"; -chr20 hg19_knownGene CDS 10388264 10388374 0.000000 - 0 gene_id "MKKS"; transcript_id "NM_018848:uc002wnt.1"; -chr20 hg19_knownGene exon 10388264 10388374 0.000000 - . gene_id "MKKS"; transcript_id "NM_018848:uc002wnt.1"; -chr20 hg19_knownGene CDS 10389276 10389451 0.000000 - 2 gene_id "MKKS"; transcript_id "NM_018848:uc002wnt.1"; -chr20 hg19_knownGene exon 10389276 10389451 0.000000 - . gene_id "MKKS"; transcript_id "NM_018848:uc002wnt.1"; -chr20 hg19_knownGene CDS 10393178 10394162 0.000000 - 0 gene_id "MKKS"; transcript_id "NM_018848:uc002wnt.1"; -chr20 hg19_knownGene exon 10393178 10394579 0.000000 - . gene_id "MKKS"; transcript_id "NM_018848:uc002wnt.1"; -chr20 hg19_knownGene exon 10401176 10401406 0.000000 - . gene_id "MKKS"; transcript_id "NM_018848:uc002wnt.1"; -chr20 hg19_knownGene exon 10412332 10412570 0.000000 - . gene_id "MKKS"; transcript_id "NM_018848:uc002wnt.1"; -chr20 hg19_knownGene CDS 10385898 10386335 0.000000 - 0 gene_id "MKKS"; transcript_id "NM_170784:uc002wnu.1"; -chr20 hg19_knownGene exon 10385833 10386335 0.000000 - . gene_id "MKKS"; transcript_id "NM_170784:uc002wnu.1"; -chr20 hg19_knownGene CDS 10388264 10388374 0.000000 - 0 gene_id "MKKS"; transcript_id "NM_170784:uc002wnu.1"; -chr20 hg19_knownGene exon 10388264 10388374 0.000000 - . gene_id "MKKS"; transcript_id "NM_170784:uc002wnu.1"; -chr20 hg19_knownGene CDS 10389276 10389451 0.000000 - 2 gene_id "MKKS"; transcript_id "NM_170784:uc002wnu.1"; -chr20 hg19_knownGene exon 10389276 10389451 0.000000 - . gene_id "MKKS"; transcript_id "NM_170784:uc002wnu.1"; -chr20 hg19_knownGene CDS 10393178 10394162 0.000000 - 0 gene_id "MKKS"; transcript_id "NM_170784:uc002wnu.1"; -chr20 hg19_knownGene exon 10393178 10394579 0.000000 - . gene_id "MKKS"; transcript_id "NM_170784:uc002wnu.1"; -chr20 hg19_knownGene exon 10401176 10401406 0.000000 - . gene_id "MKKS"; transcript_id "NM_170784:uc002wnu.1"; -chr20 hg19_knownGene exon 10414756 10414866 0.000000 - . gene_id "MKKS"; transcript_id "NM_170784:uc002wnu.1"; -chr20 hg19_knownGene exon 10385833 10386335 0.000000 - . gene_id "MKKS"; transcript_id "AK296439:uc010zrd.1"; -chr20 hg19_knownGene exon 10388264 10388374 0.000000 - . gene_id "MKKS"; transcript_id "AK296439:uc010zrd.1"; -chr20 hg19_knownGene exon 10389276 10389451 0.000000 - . gene_id "MKKS"; transcript_id "AK296439:uc010zrd.1"; -chr20 hg19_knownGene exon 10401176 10401406 0.000000 - . gene_id "MKKS"; transcript_id "AK296439:uc010zrd.1"; -chr20 hg19_knownGene exon 10414756 10414866 0.000000 - . gene_id "MKKS"; transcript_id "AK296439:uc010zrd.1"; -chr20 hg19_knownGene exon 10415951 10416101 0.000000 + . gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene CDS 10438853 10438879 0.000000 + 0 gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene exon 10438824 10438879 0.000000 + . gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene CDS 10536879 10536968 0.000000 + 0 gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene exon 10536879 10536968 0.000000 + . gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene CDS 10541348 10541468 0.000000 + 0 gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene exon 10541348 10541468 0.000000 + . gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene CDS 10579323 10579400 0.000000 + 2 gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene exon 10579323 10579400 0.000000 + . gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene CDS 10582379 10582467 0.000000 + 2 gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene exon 10582379 10582467 0.000000 + . gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene CDS 10601962 10602062 0.000000 + 0 gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene exon 10601962 10602062 0.000000 + . gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene CDS 10603307 10604024 0.000000 + 1 gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene exon 10603307 10604027 0.000000 + . gene_id "C20orf94"; transcript_id "NM_001009608:uc010zre.2"; -chr20 hg19_knownGene CDS 10622111 10622341 0.000000 - 0 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10622108 10622341 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10622431 10622540 0.000000 - 2 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10622431 10622540 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10623136 10623249 0.000000 - 2 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10623136 10623249 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10624426 10624511 0.000000 - 1 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10624426 10624511 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10625005 10625032 0.000000 - 2 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10625005 10625032 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10625511 10625627 0.000000 - 2 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10625511 10625627 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10625791 10625904 0.000000 - 2 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10625791 10625904 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10626004 10626117 0.000000 - 2 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10626004 10626117 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10626619 10626732 0.000000 - 2 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10626619 10626732 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10627587 10627751 0.000000 - 2 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10627587 10627751 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10628608 10628758 0.000000 - 0 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10628608 10628758 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10629197 10629370 0.000000 - 0 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10629197 10629370 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10629709 10629755 0.000000 - 2 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10629709 10629755 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10630170 10630191 0.000000 - 0 gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10630170 10630283 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene exon 10630895 10632062 0.000000 - . gene_id "JAG1"; transcript_id "BC111753:uc010gcd.1"; -chr20 hg19_knownGene CDS 10620149 10620603 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10618332 10620603 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10621431 10621581 0.000000 - 0 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10621431 10621581 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10621761 10621892 0.000000 - 0 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10621761 10621892 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10622108 10622341 0.000000 - 0 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10622108 10622341 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10622431 10622540 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10622431 10622540 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10623136 10623249 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10623136 10623249 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10624426 10624511 0.000000 - 1 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10624426 10624511 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10625005 10625032 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10625005 10625032 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10625511 10625627 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10625511 10625627 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10625791 10625904 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10625791 10625904 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10626004 10626117 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10626004 10626117 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10626619 10626732 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10626619 10626732 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10627587 10627751 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10627587 10627751 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10628608 10628758 0.000000 - 0 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10628608 10628758 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10629197 10629370 0.000000 - 0 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10629197 10629370 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10629709 10629755 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10629709 10629755 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10630170 10630283 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10630170 10630283 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10630895 10631008 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10630895 10631008 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10632229 10632342 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10632229 10632342 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10632779 10632898 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10632779 10632898 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10633116 10633246 0.000000 - 1 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10633116 10633246 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10637046 10637106 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10637046 10637106 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10639116 10639370 0.000000 - 2 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10639116 10639370 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10644611 10644662 0.000000 - 0 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10644611 10644662 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10653349 10653654 0.000000 - 0 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10653349 10653654 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene CDS 10654098 10654178 0.000000 - 0 gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 10654098 10654694 0.000000 - . gene_id "JAG1"; transcript_id "NM_000214:uc002wnw.2"; -chr20 hg19_knownGene exon 11036257 11036493 0.000000 - . gene_id "7SK"; transcript_id ":uc021wan.1"; -chr20 hg19_knownGene exon 11247307 11249530 0.000000 - . gene_id "LOC339593"; transcript_id "NR_038972:uc002wnx.3"; -chr20 hg19_knownGene exon 11253982 11254031 0.000000 - . gene_id "LOC339593"; transcript_id "NR_038972:uc002wnx.3"; -chr20 hg19_knownGene exon 11871477 11871602 0.000000 + . gene_id "BTBD3"; transcript_id "NM_181443:uc002wny.3"; -chr20 hg19_knownGene CDS 11899107 11899249 0.000000 + 0 gene_id "BTBD3"; transcript_id "NM_181443:uc002wny.3"; -chr20 hg19_knownGene exon 11898982 11899249 0.000000 + . gene_id "BTBD3"; transcript_id "NM_181443:uc002wny.3"; -chr20 hg19_knownGene CDS 11899734 11899824 0.000000 + 1 gene_id "BTBD3"; transcript_id "NM_181443:uc002wny.3"; -chr20 hg19_knownGene exon 11899734 11899824 0.000000 + . gene_id "BTBD3"; transcript_id "NM_181443:uc002wny.3"; -chr20 hg19_knownGene CDS 11900366 11900484 0.000000 + 0 gene_id "BTBD3"; transcript_id "NM_181443:uc002wny.3"; -chr20 hg19_knownGene exon 11900366 11900484 0.000000 + . gene_id "BTBD3"; transcript_id "NM_181443:uc002wny.3"; -chr20 hg19_knownGene CDS 11903282 11904311 0.000000 + 1 gene_id "BTBD3"; transcript_id "NM_181443:uc002wny.3"; -chr20 hg19_knownGene exon 11903282 11907243 0.000000 + . gene_id "BTBD3"; transcript_id "NM_181443:uc002wny.3"; -chr20 hg19_knownGene exon 11898537 11898659 0.000000 + . gene_id "BTBD3"; transcript_id "BC109316:uc002woa.3"; -chr20 hg19_knownGene CDS 11899107 11899249 0.000000 + 0 gene_id "BTBD3"; transcript_id "BC109316:uc002woa.3"; -chr20 hg19_knownGene exon 11898982 11899249 0.000000 + . gene_id "BTBD3"; transcript_id "BC109316:uc002woa.3"; -chr20 hg19_knownGene CDS 11899734 11899824 0.000000 + 1 gene_id "BTBD3"; transcript_id "BC109316:uc002woa.3"; -chr20 hg19_knownGene exon 11899734 11899824 0.000000 + . gene_id "BTBD3"; transcript_id "BC109316:uc002woa.3"; -chr20 hg19_knownGene CDS 11900366 11900484 0.000000 + 0 gene_id "BTBD3"; transcript_id "BC109316:uc002woa.3"; -chr20 hg19_knownGene exon 11900366 11900484 0.000000 + . gene_id "BTBD3"; transcript_id "BC109316:uc002woa.3"; -chr20 hg19_knownGene CDS 11903282 11904311 0.000000 + 1 gene_id "BTBD3"; transcript_id "BC109316:uc002woa.3"; -chr20 hg19_knownGene exon 11903282 11907243 0.000000 + . gene_id "BTBD3"; transcript_id "BC109316:uc002woa.3"; -chr20 hg19_knownGene exon 11898537 11898659 0.000000 + . gene_id "BTBD3"; transcript_id "AK316256:uc010zrf.2"; -chr20 hg19_knownGene exon 11898982 11899249 0.000000 + . gene_id "BTBD3"; transcript_id "AK316256:uc010zrf.2"; -chr20 hg19_knownGene CDS 11900402 11900484 0.000000 + 0 gene_id "BTBD3"; transcript_id "AK316256:uc010zrf.2"; -chr20 hg19_knownGene exon 11900366 11900484 0.000000 + . gene_id "BTBD3"; transcript_id "AK316256:uc010zrf.2"; -chr20 hg19_knownGene CDS 11903282 11904311 0.000000 + 1 gene_id "BTBD3"; transcript_id "AK316256:uc010zrf.2"; -chr20 hg19_knownGene exon 11903282 11907243 0.000000 + . gene_id "BTBD3"; transcript_id "AK316256:uc010zrf.2"; -chr20 hg19_knownGene CDS 11898924 11899249 0.000000 + 0 gene_id "BTBD3"; transcript_id "NM_014962:uc002wnz.3"; -chr20 hg19_knownGene exon 11898565 11899249 0.000000 + . gene_id "BTBD3"; transcript_id "NM_014962:uc002wnz.3"; -chr20 hg19_knownGene CDS 11899734 11899824 0.000000 + 1 gene_id "BTBD3"; transcript_id "NM_014962:uc002wnz.3"; -chr20 hg19_knownGene exon 11899734 11899824 0.000000 + . gene_id "BTBD3"; transcript_id "NM_014962:uc002wnz.3"; -chr20 hg19_knownGene CDS 11900366 11900484 0.000000 + 0 gene_id "BTBD3"; transcript_id "NM_014962:uc002wnz.3"; -chr20 hg19_knownGene exon 11900366 11900484 0.000000 + . gene_id "BTBD3"; transcript_id "NM_014962:uc002wnz.3"; -chr20 hg19_knownGene CDS 11903282 11904311 0.000000 + 1 gene_id "BTBD3"; transcript_id "NM_014962:uc002wnz.3"; -chr20 hg19_knownGene exon 11903282 11907243 0.000000 + . gene_id "BTBD3"; transcript_id "NM_014962:uc002wnz.3"; -chr20 hg19_knownGene exon 11899925 11900258 0.000000 + . gene_id "BTBD3"; transcript_id "AK316519:uc010zrg.2"; -chr20 hg19_knownGene CDS 11900402 11900484 0.000000 + 0 gene_id "BTBD3"; transcript_id "AK316519:uc010zrg.2"; -chr20 hg19_knownGene exon 11900366 11900484 0.000000 + . gene_id "BTBD3"; transcript_id "AK316519:uc010zrg.2"; -chr20 hg19_knownGene CDS 11903282 11904311 0.000000 + 1 gene_id "BTBD3"; transcript_id "AK316519:uc010zrg.2"; -chr20 hg19_knownGene exon 11903282 11907243 0.000000 + . gene_id "BTBD3"; transcript_id "AK316519:uc010zrg.2"; -chr20 hg19_knownGene exon 11900018 11900071 0.000000 + . gene_id "BTBD3"; transcript_id "AK296364:uc010zrh.2"; -chr20 hg19_knownGene CDS 11900402 11900484 0.000000 + 0 gene_id "BTBD3"; transcript_id "AK296364:uc010zrh.2"; -chr20 hg19_knownGene exon 11900366 11900484 0.000000 + . gene_id "BTBD3"; transcript_id "AK296364:uc010zrh.2"; -chr20 hg19_knownGene CDS 11903282 11904311 0.000000 + 1 gene_id "BTBD3"; transcript_id "AK296364:uc010zrh.2"; -chr20 hg19_knownGene exon 11903282 11907243 0.000000 + . gene_id "BTBD3"; transcript_id "AK296364:uc010zrh.2"; -chr20 hg19_knownGene CDS 12989916 12990032 0.000000 + 0 gene_id "SPTLC3"; transcript_id "CU676611:uc002woc.3"; -chr20 hg19_knownGene exon 12989627 12990032 0.000000 + . gene_id "SPTLC3"; transcript_id "CU676611:uc002woc.3"; -chr20 hg19_knownGene CDS 13029593 13030000 0.000000 + 0 gene_id "SPTLC3"; transcript_id "CU676611:uc002woc.3"; -chr20 hg19_knownGene exon 13029593 13030816 0.000000 + . gene_id "SPTLC3"; transcript_id "CU676611:uc002woc.3"; -chr20 hg19_knownGene CDS 12989916 12990032 0.000000 + 0 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 12989627 12990032 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13029593 13029778 0.000000 + 0 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13029593 13029778 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13052904 13053058 0.000000 + 0 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13052904 13053058 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13054997 13055145 0.000000 + 1 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13054997 13055145 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13071731 13071855 0.000000 + 2 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13071731 13071855 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13074131 13074224 0.000000 + 0 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13074131 13074224 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13090759 13090864 0.000000 + 2 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13090759 13090864 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13098153 13098372 0.000000 + 1 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13098153 13098372 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13107238 13107364 0.000000 + 0 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13107238 13107364 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13134650 13134785 0.000000 + 2 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13134650 13134785 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13140650 13140779 0.000000 + 1 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13140650 13140779 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene CDS 13145401 13145511 0.000000 + 0 gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13145401 13147411 0.000000 + . gene_id "SPTLC3"; transcript_id "NM_018327:uc002wod.1"; -chr20 hg19_knownGene exon 13200350 13200970 0.000000 + . gene_id "AY927515"; transcript_id "AY927515:uc002woe.1"; -chr20 hg19_knownGene exon 13218067 13218756 0.000000 - . gene_id "LOC100505536"; transcript_id "NR_040043:uc002wof.2"; -chr20 hg19_knownGene exon 13219631 13219751 0.000000 - . gene_id "LOC100505536"; transcript_id "NR_040043:uc002wof.2"; -chr20 hg19_knownGene exon 13220100 13220334 0.000000 - . gene_id "LOC100505536"; transcript_id "NR_040043:uc002wof.2"; -chr20 hg19_knownGene CDS 13202424 13202561 0.000000 + 0 gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene exon 13202418 13202561 0.000000 + . gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene CDS 13251151 13251390 0.000000 + 0 gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene exon 13251151 13251390 0.000000 + . gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene CDS 13260281 13260545 0.000000 + 0 gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene exon 13260281 13260545 0.000000 + . gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene CDS 13269187 13269330 0.000000 + 2 gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene exon 13269187 13269330 0.000000 + . gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene CDS 13273021 13273110 0.000000 + 2 gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene exon 13273021 13273110 0.000000 + . gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene CDS 13279589 13280103 0.000000 + 2 gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene exon 13279589 13281297 0.000000 + . gene_id "ISM1"; transcript_id "NM_080826:uc010gce.1"; -chr20 hg19_knownGene exon 13246709 13246829 0.000000 - . gene_id "TASP1"; transcript_id "AK299940:uc010zri.1"; -chr20 hg19_knownGene exon 13296617 13296702 0.000000 - . gene_id "TASP1"; transcript_id "AK299940:uc010zri.1"; -chr20 hg19_knownGene exon 13371042 13371099 0.000000 - . gene_id "TASP1"; transcript_id "AK299940:uc010zri.1"; -chr20 hg19_knownGene exon 13398095 13398168 0.000000 - . gene_id "TASP1"; transcript_id "AK299940:uc010zri.1"; -chr20 hg19_knownGene exon 13415691 13415801 0.000000 - . gene_id "TASP1"; transcript_id "AK299940:uc010zri.1"; -chr20 hg19_knownGene exon 13463874 13463984 0.000000 - . gene_id "TASP1"; transcript_id "AK299940:uc010zri.1"; -chr20 hg19_knownGene exon 13604093 13604161 0.000000 - . gene_id "TASP1"; transcript_id "AK299940:uc010zri.1"; -chr20 hg19_knownGene exon 13605832 13605899 0.000000 - . gene_id "TASP1"; transcript_id "AK299940:uc010zri.1"; -chr20 hg19_knownGene exon 13610581 13610799 0.000000 - . gene_id "TASP1"; transcript_id "AK299940:uc010zri.1"; -chr20 hg19_knownGene exon 13619541 13619583 0.000000 - . gene_id "TASP1"; transcript_id "AK299940:uc010zri.1"; -chr20 hg19_knownGene CDS 13371010 13371099 0.000000 - 0 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13370036 13371099 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13398095 13398168 0.000000 - 2 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13398095 13398168 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13415691 13415801 0.000000 - 2 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13415691 13415801 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13463874 13463984 0.000000 - 2 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13463874 13463984 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13509080 13509158 0.000000 - 0 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13509080 13509158 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13514669 13514788 0.000000 - 0 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13514669 13514788 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13539655 13539761 0.000000 - 2 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13539655 13539761 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13550154 13550233 0.000000 - 1 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13550154 13550233 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13561544 13561628 0.000000 - 2 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13561544 13561628 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13567897 13568017 0.000000 - 0 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13567897 13568017 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13604093 13604161 0.000000 - 0 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13604093 13604161 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13605832 13605899 0.000000 - 2 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13605832 13605899 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene CDS 13610581 13610725 0.000000 - 0 gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13610581 13610799 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13619541 13619583 0.000000 - . gene_id "TASP1"; transcript_id "NM_017714:uc002woi.3"; -chr20 hg19_knownGene exon 13463874 13463984 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene exon 13509093 13509158 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene exon 13514669 13514788 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene exon 13539655 13539761 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene exon 13561544 13561628 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene exon 13567897 13568017 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene exon 13597504 13597770 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene exon 13604093 13604161 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene exon 13605832 13605899 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene exon 13610581 13610799 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene exon 13619541 13619583 0.000000 - . gene_id "TASP1"; transcript_id "AK304488:uc010zrj.1"; -chr20 hg19_knownGene CDS 13597666 13597770 0.000000 - 0 gene_id "TASP1"; transcript_id "AK316311:uc010zrk.2"; -chr20 hg19_knownGene exon 13597251 13597770 0.000000 - . gene_id "TASP1"; transcript_id "AK316311:uc010zrk.2"; -chr20 hg19_knownGene CDS 13604093 13604161 0.000000 - 0 gene_id "TASP1"; transcript_id "AK316311:uc010zrk.2"; -chr20 hg19_knownGene exon 13604093 13604161 0.000000 - . gene_id "TASP1"; transcript_id "AK316311:uc010zrk.2"; -chr20 hg19_knownGene CDS 13605832 13605899 0.000000 - 2 gene_id "TASP1"; transcript_id "AK316311:uc010zrk.2"; -chr20 hg19_knownGene exon 13605832 13605899 0.000000 - . gene_id "TASP1"; transcript_id "AK316311:uc010zrk.2"; -chr20 hg19_knownGene CDS 13610581 13610725 0.000000 - 0 gene_id "TASP1"; transcript_id "AK316311:uc010zrk.2"; -chr20 hg19_knownGene exon 13610581 13610799 0.000000 - . gene_id "TASP1"; transcript_id "AK316311:uc010zrk.2"; -chr20 hg19_knownGene exon 13619541 13619583 0.000000 - . gene_id "TASP1"; transcript_id "AK316311:uc010zrk.2"; -chr20 hg19_knownGene CDS 13695524 13695814 0.000000 - 0 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13694969 13695814 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13698015 13698161 0.000000 - 0 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13698015 13698161 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13699555 13699631 0.000000 - 2 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13699555 13699631 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13709025 13709112 0.000000 - 0 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13709025 13709112 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13714368 13714489 0.000000 - 2 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13714368 13714489 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13740339 13740500 0.000000 - 2 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13740339 13740500 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13747424 13747571 0.000000 - 0 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13747424 13747571 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13750553 13750667 0.000000 - 1 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13750553 13750667 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13751977 13752129 0.000000 - 1 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13751977 13752129 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13753161 13753261 0.000000 - 0 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13753161 13753261 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13755803 13755916 0.000000 - 0 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13755803 13755916 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13756519 13756916 0.000000 - 2 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13756519 13756916 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13763150 13763786 0.000000 - 0 gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13763150 13763829 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene exon 13765468 13765532 0.000000 - . gene_id "ESF1"; transcript_id "NM_016649:uc002woj.3"; -chr20 hg19_knownGene CDS 13740343 13740500 0.000000 - 2 gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene exon 13740339 13740500 0.000000 - . gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene CDS 13747424 13747571 0.000000 - 0 gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene exon 13747424 13747571 0.000000 - . gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene CDS 13750553 13750667 0.000000 - 1 gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene exon 13750553 13750667 0.000000 - . gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene CDS 13751977 13752129 0.000000 - 1 gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene exon 13751977 13752129 0.000000 - . gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene CDS 13753161 13753261 0.000000 - 0 gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene exon 13753161 13753261 0.000000 - . gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene CDS 13755803 13755916 0.000000 - 0 gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene exon 13755803 13755916 0.000000 - . gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene CDS 13756519 13756916 0.000000 - 2 gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene exon 13756519 13756916 0.000000 - . gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene CDS 13763150 13763786 0.000000 - 0 gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene exon 13763150 13763829 0.000000 - . gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene exon 13765526 13765565 0.000000 - . gene_id "ESF1"; transcript_id "AK022369:uc002wok.1"; -chr20 hg19_knownGene exon 13765672 13765936 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13767958 13767998 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13769235 13769298 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13773826 13773873 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13775484 13775587 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13779107 13779146 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13782132 13782329 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13789488 13789548 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13795064 13795161 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13797109 13797192 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13797521 13797603 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene exon 13797764 13799067 0.000000 + . gene_id "C20orf7"; transcript_id "NR_029377:uc002woo.3"; -chr20 hg19_knownGene CDS 13765715 13765936 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13765672 13765936 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13767958 13767998 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13767958 13767998 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13769235 13769298 0.000000 + 1 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13769235 13769298 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13773826 13773873 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13773826 13773873 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13775484 13775587 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13775484 13775587 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13779107 13779146 0.000000 + 1 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13779107 13779146 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13782132 13782329 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13782132 13782329 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13789488 13789548 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13789488 13789548 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13797109 13797192 0.000000 + 2 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13797109 13797192 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13797521 13797603 0.000000 + 2 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13797521 13797603 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13797764 13797853 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene exon 13797764 13799067 0.000000 + . gene_id "C20orf7"; transcript_id "NM_024120:uc002wom.3"; -chr20 hg19_knownGene CDS 13765715 13765936 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13765672 13765936 0.000000 + . gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene CDS 13767958 13767998 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13767958 13767998 0.000000 + . gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene CDS 13769235 13769298 0.000000 + 1 gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13769235 13769298 0.000000 + . gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene CDS 13773806 13773873 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13773806 13773873 0.000000 + . gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene CDS 13779107 13779146 0.000000 + 1 gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13779107 13779146 0.000000 + . gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene CDS 13782132 13782329 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13782132 13782329 0.000000 + . gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene CDS 13789488 13789548 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13789488 13789548 0.000000 + . gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene CDS 13797109 13797192 0.000000 + 2 gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13797109 13797192 0.000000 + . gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene CDS 13797521 13797603 0.000000 + 2 gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13797521 13797603 0.000000 + . gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene CDS 13797764 13797853 0.000000 + 0 gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13797764 13799067 0.000000 + . gene_id "C20orf7"; transcript_id "NM_001039375:uc002won.3"; -chr20 hg19_knownGene exon 13953962 13954070 0.000000 - . gene_id "U6"; transcript_id ":uc021wao.1"; -chr20 hg19_knownGene exon 13970470 13970541 0.000000 - . gene_id "TRNA_Pseudo"; transcript_id ":uc021wap.1"; -chr20 hg19_knownGene CDS 13830134 13830250 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13830050 13830250 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13830837 13830965 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13830837 13830965 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13839908 13840080 0.000000 - 2 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13839908 13840080 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13845813 13845887 0.000000 - 2 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13845813 13845887 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13845995 13846160 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13845995 13846160 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13847348 13847496 0.000000 - 2 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13847348 13847496 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13850149 13850236 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13850149 13850236 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13850787 13850849 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13850787 13850849 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13856684 13856761 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13856684 13856761 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13858166 13858234 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13858166 13858234 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13865993 13866049 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13865993 13866049 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13866934 13867088 0.000000 - 2 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13866934 13867088 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13868415 13868496 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13868415 13868496 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13868588 13868647 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13868588 13868647 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13869105 13869158 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13869105 13869158 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13894428 13894590 0.000000 - 1 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13894428 13894590 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13899667 13899769 0.000000 - 2 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13899667 13899769 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13912249 13912417 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13912249 13912417 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13936722 13936777 0.000000 - 2 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13936722 13936777 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13971123 13971180 0.000000 - 0 gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene exon 13971123 13971262 0.000000 - . gene_id "SEL1L2"; transcript_id "NM_025229:uc010gcf.3"; -chr20 hg19_knownGene CDS 13830134 13830250 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13830050 13830250 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13830837 13830965 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13830837 13830965 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13839908 13840080 0.000000 - 2 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13839908 13840080 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13845813 13845887 0.000000 - 2 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13845813 13845887 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13845995 13846160 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13845995 13846160 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13847348 13847496 0.000000 - 2 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13847348 13847496 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13850149 13850236 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13850149 13850236 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13850787 13850849 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13850787 13850849 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13856684 13856761 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13856684 13856761 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13858166 13858234 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13858166 13858234 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13865993 13866049 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13865993 13866049 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13866934 13867088 0.000000 - 2 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13866934 13867088 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13868415 13868496 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13868415 13868496 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13868588 13868647 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13868588 13868647 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13869105 13869158 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13869105 13869158 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13894428 13894559 0.000000 - 0 gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13894428 13894590 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13895767 13895887 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13899667 13899769 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13912249 13912417 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13936722 13936777 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene exon 13971123 13971262 0.000000 - . gene_id "SEL1L2"; transcript_id "BC035741:uc002woq.4"; -chr20 hg19_knownGene CDS 13830134 13830250 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13830050 13830250 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13830837 13830965 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13830837 13830965 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13845813 13845887 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13845813 13845887 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13847348 13847496 0.000000 - 2 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13847348 13847496 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13850149 13850236 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13850149 13850236 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13850787 13850849 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13850787 13850849 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13856684 13856761 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13856684 13856761 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13858166 13858234 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13858166 13858234 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13865993 13866049 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13865993 13866049 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13866934 13867088 0.000000 - 2 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13866934 13867088 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13868415 13868496 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13868415 13868496 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13868588 13868647 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13868588 13868647 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13869105 13869158 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13869105 13869158 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13894428 13894590 0.000000 - 1 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13894428 13894590 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13899667 13899769 0.000000 - 2 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13899667 13899769 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13912249 13912417 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13912249 13912417 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13936722 13936777 0.000000 - 2 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13936722 13936777 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene CDS 13971123 13971180 0.000000 - 0 gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13971123 13971262 0.000000 - . gene_id "SEL1L2"; transcript_id "AK302170:uc010zrl.2"; -chr20 hg19_knownGene exon 13830050 13830250 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13830837 13830965 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13839908 13840080 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13845813 13845887 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13847348 13847496 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13850149 13850236 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13850787 13850849 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13856684 13856761 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13858166 13858234 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13865993 13866049 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13866934 13867088 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13868415 13868496 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13868588 13868647 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13869105 13869158 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13894428 13894590 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13899667 13899769 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13912249 13912417 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13936722 13936777 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13975669 13975863 0.000000 - . gene_id "SEL1L2"; transcript_id "AL137678:uc002wor.3"; -chr20 hg19_knownGene exon 13976146 13976455 0.000000 + . gene_id "MACROD2"; transcript_id "BC128036:uc002wos.3"; -chr20 hg19_knownGene exon 13982934 13983050 0.000000 + . gene_id "MACROD2"; transcript_id "BC128036:uc002wos.3"; -chr20 hg19_knownGene exon 14032568 14032666 0.000000 + . gene_id "MACROD2"; transcript_id "BC128036:uc002wos.3"; -chr20 hg19_knownGene exon 14033745 14034092 0.000000 + . gene_id "MACROD2"; transcript_id "BC128036:uc002wos.3"; -chr20 hg19_knownGene exon 14203691 14203973 0.000000 + . gene_id "Metazoa_SRP"; transcript_id ":uc021waq.1"; -chr20 hg19_knownGene CDS 14306206 14308152 0.000000 - 0 gene_id "FLRT3"; transcript_id "CCDS13121:uc021war.1"; -chr20 hg19_knownGene exon 14306203 14308152 0.000000 - . gene_id "FLRT3"; transcript_id "CCDS13121:uc021war.1"; -chr20 hg19_knownGene CDS 14306206 14308152 0.000000 - 0 gene_id "FLRT3"; transcript_id "NM_198391:uc002wov.2"; -chr20 hg19_knownGene exon 14304639 14308204 0.000000 - . gene_id "FLRT3"; transcript_id "NM_198391:uc002wov.2"; -chr20 hg19_knownGene exon 14309780 14309973 0.000000 - . gene_id "FLRT3"; transcript_id "NM_198391:uc002wov.2"; -chr20 hg19_knownGene exon 14318050 14318313 0.000000 - . gene_id "FLRT3"; transcript_id "NM_198391:uc002wov.2"; -chr20 hg19_knownGene CDS 14306206 14308152 0.000000 - 0 gene_id "FLRT3"; transcript_id "NM_013281:uc002wow.2"; -chr20 hg19_knownGene exon 14304639 14308204 0.000000 - . gene_id "FLRT3"; transcript_id "NM_013281:uc002wow.2"; -chr20 hg19_knownGene exon 14318050 14318313 0.000000 - . gene_id "FLRT3"; transcript_id "NM_013281:uc002wow.2"; -chr20 hg19_knownGene exon 14504037 14504100 0.000000 + . gene_id "MACROD2"; transcript_id "BC036403:uc002wox.3"; -chr20 hg19_knownGene exon 14665489 14665605 0.000000 + . gene_id "MACROD2"; transcript_id "BC036403:uc002wox.3"; -chr20 hg19_knownGene exon 14873349 14876227 0.000000 + . gene_id "MACROD2"; transcript_id "BC036403:uc002wox.3"; -chr20 hg19_knownGene exon 14864899 14865240 0.000000 - . gene_id "MACROD2-AS1"; transcript_id "NR_037841:uc002woy.3"; -chr20 hg19_knownGene exon 14868742 14868950 0.000000 - . gene_id "MACROD2-AS1"; transcript_id "NR_037841:uc002woy.3"; -chr20 hg19_knownGene exon 14910021 14910142 0.000000 - . gene_id "MACROD2-AS1"; transcript_id "NR_037841:uc002woy.3"; -chr20 hg19_knownGene exon 15002199 15002305 0.000000 - . gene_id "U6"; transcript_id ":uc021was.1"; -chr20 hg19_knownGene CDS 15874286 15874657 0.000000 - 0 gene_id "AK125594"; transcript_id "AK125594:uc002wpc.3"; -chr20 hg19_knownGene exon 15872979 15874922 0.000000 - . gene_id "AK125594"; transcript_id "AK125594:uc002wpc.3"; -chr20 hg19_knownGene exon 15903877 15903959 0.000000 - . gene_id "AK125594"; transcript_id "AK125594:uc002wpc.3"; -chr20 hg19_knownGene exon 15966433 15966607 0.000000 + . gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene CDS 15967434 15967446 0.000000 + 0 gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene exon 15967372 15967446 0.000000 + . gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene CDS 15967711 15967803 0.000000 + 2 gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene exon 15967711 15967803 0.000000 + . gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene CDS 16021846 16021923 0.000000 + 2 gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene exon 16021846 16021923 0.000000 + . gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene CDS 16025216 16025284 0.000000 + 2 gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene exon 16025216 16025284 0.000000 + . gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene CDS 16030478 16030518 0.000000 + 2 gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene exon 16030478 16030707 0.000000 + . gene_id "MACROD2"; transcript_id "BC035876:uc002wpd.3"; -chr20 hg19_knownGene CDS 13976410 13976455 0.000000 + 0 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 13976146 13976455 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 13982934 13983050 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 13982934 13983050 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 14066267 14066374 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 14066267 14066374 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 14474125 14474154 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 14474125 14474154 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 14665489 14665605 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 14665489 14665605 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 15210586 15210707 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 15210586 15210707 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 15412050 15412080 0.000000 + 0 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 15412050 15412080 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 15480419 15480492 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 15480419 15480492 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 15843390 15843471 0.000000 + 0 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 15843390 15843471 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 15866409 15866456 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 15866409 15866456 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 15913921 15913983 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 15913921 15913983 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 15918121 15918189 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 15918121 15918189 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 15948198 15948275 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 15948198 15948275 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 15967372 15967446 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 15967372 15967446 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 15967711 15967803 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 15967711 15967803 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 16021846 16021923 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 16021846 16021923 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 16030475 16030518 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene exon 16030475 16033841 0.000000 + . gene_id "MACROD2"; transcript_id "NM_080676:uc002wot.3"; -chr20 hg19_knownGene CDS 13976410 13976455 0.000000 + 0 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 13976146 13976455 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 13982934 13983050 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 13982934 13983050 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 14066267 14066374 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 14066267 14066374 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 14474125 14474154 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 14474125 14474154 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 14665489 14665605 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 14665489 14665605 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 15210586 15210707 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15210586 15210707 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 15412050 15412080 0.000000 + 0 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15412050 15412080 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 15480419 15480492 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15480419 15480492 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 15843390 15843471 0.000000 + 0 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15843390 15843471 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 15866409 15866456 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15866409 15866456 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 15913921 15913983 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15913921 15913983 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 15918121 15918189 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15918121 15918189 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 15948198 15948275 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15948198 15948275 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 15967372 15967446 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15967372 15967446 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 15967711 15967803 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15967711 15967803 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 16021846 16021923 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 16021846 16021923 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 16025216 16025284 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 16025216 16025284 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene CDS 16030475 16030518 0.000000 + 2 gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 16030475 16033841 0.000000 + . gene_id "MACROD2"; transcript_id "EF159161:uc002wou.3"; -chr20 hg19_knownGene exon 15177504 15177678 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15210586 15210707 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15412050 15412080 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15480419 15480492 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene CDS 15843450 15843471 0.000000 + 0 gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15843390 15843471 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene CDS 15866409 15866456 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15866409 15866456 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene CDS 15913921 15913983 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15913921 15913983 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene CDS 15918121 15918189 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15918121 15918189 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene CDS 15948198 15948275 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15948198 15948275 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene CDS 15967372 15967446 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15967372 15967446 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene CDS 15967711 15967803 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15967711 15967803 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene CDS 16021846 16021923 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 16021846 16021923 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene CDS 16025216 16025284 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 16025216 16025284 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene CDS 16030475 16030518 0.000000 + 2 gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 16030475 16033841 0.000000 + . gene_id "MACROD2"; transcript_id "NM_001033087:uc002woz.3"; -chr20 hg19_knownGene exon 15680501 15680636 0.000000 + . gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene CDS 15843450 15843471 0.000000 + 0 gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene exon 15843390 15843471 0.000000 + . gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene CDS 15866409 15866456 0.000000 + 2 gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene exon 15866409 15866456 0.000000 + . gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene CDS 15913921 15913983 0.000000 + 2 gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene exon 15913921 15913983 0.000000 + . gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene CDS 15918121 15918189 0.000000 + 2 gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene exon 15918121 15918189 0.000000 + . gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene CDS 15948198 15948275 0.000000 + 2 gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene exon 15948198 15948275 0.000000 + . gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene CDS 15967372 15967446 0.000000 + 2 gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene exon 15967372 15967446 0.000000 + . gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene CDS 15967711 15967803 0.000000 + 2 gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene exon 15967711 15967803 0.000000 + . gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene CDS 16021846 16021923 0.000000 + 2 gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene exon 16021846 16021923 0.000000 + . gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene CDS 16030475 16030518 0.000000 + 2 gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene exon 16030475 16033841 0.000000 + . gene_id "MACROD2"; transcript_id "AK125899:uc002wpb.3"; -chr20 hg19_knownGene exon 16336618 16336736 0.000000 + . gene_id "Mir_584"; transcript_id ":uc021wat.1"; -chr20 hg19_knownGene CDS 16253901 16254056 0.000000 - 0 gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene exon 16252749 16254056 0.000000 - . gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene CDS 16292980 16293063 0.000000 - 0 gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene exon 16292980 16293063 0.000000 - . gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene CDS 16336975 16337097 0.000000 - 0 gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene exon 16336975 16337097 0.000000 - . gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene CDS 16351231 16351281 0.000000 - 0 gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene exon 16351231 16351281 0.000000 - . gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene CDS 16352310 16352406 0.000000 - 1 gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene exon 16352310 16352406 0.000000 - . gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene CDS 16354902 16355054 0.000000 - 1 gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene exon 16354902 16355054 0.000000 - . gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene CDS 16359450 16360792 0.000000 - 0 gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene exon 16359450 16360808 0.000000 - . gene_id "KIF16B"; transcript_id "BC034984:uc002wpe.1"; -chr20 hg19_knownGene CDS 16253901 16254056 0.000000 - 0 gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene exon 16252749 16254056 0.000000 - . gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene CDS 16292980 16293063 0.000000 - 0 gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene exon 16292980 16293063 0.000000 - . gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene CDS 16316571 16316660 0.000000 - 0 gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene exon 16316571 16316660 0.000000 - . gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene CDS 16351231 16351281 0.000000 - 0 gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene exon 16351231 16351281 0.000000 - . gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene CDS 16352310 16352406 0.000000 - 1 gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene exon 16352310 16352406 0.000000 - . gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene CDS 16354902 16355054 0.000000 - 1 gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene exon 16354902 16355054 0.000000 - . gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene CDS 16359450 16360792 0.000000 - 0 gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene exon 16359450 16360808 0.000000 - . gene_id "KIF16B"; transcript_id "BC110317:uc002wpf.1"; -chr20 hg19_knownGene CDS 16253901 16254056 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16252749 16254056 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16292980 16293063 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16292980 16293063 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16316571 16316660 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16316571 16316660 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16336975 16337097 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16336975 16337097 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16351231 16351281 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16351231 16351281 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16352310 16352406 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16352310 16352406 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16354902 16355054 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16354902 16355054 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16359450 16360808 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16359450 16360808 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16362339 16362392 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16362339 16362392 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16385458 16385546 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16385458 16385546 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16387019 16387101 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16387019 16387101 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16407749 16407886 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16407749 16407886 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16409598 16409649 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16409598 16409649 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16410508 16410627 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16410508 16410627 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16474936 16474995 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16474936 16474995 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16478258 16478323 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16478258 16478323 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16485017 16485192 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16485017 16485192 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16486367 16486498 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16486367 16486498 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16486667 16486835 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16486667 16486835 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16488603 16488745 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16488603 16488745 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16492063 16492172 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16492063 16492172 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16493471 16493568 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16493471 16493568 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16496193 16496309 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16496193 16496309 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16506737 16506850 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16506737 16506850 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16509016 16509085 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16509016 16509085 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16553874 16553920 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene exon 16553874 16554079 0.000000 - . gene_id "KIF16B"; transcript_id "NM_024704:uc002wpg.2"; -chr20 hg19_knownGene CDS 16253901 16254056 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16252749 16254056 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16292980 16293063 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16292980 16293063 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16316571 16316660 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16316571 16316660 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16336975 16337097 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16336975 16337097 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16351231 16351281 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16351231 16351281 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16352310 16352406 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16352310 16352406 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16359450 16360808 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16359450 16360808 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16362339 16362392 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16362339 16362392 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16385458 16385546 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16385458 16385546 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16387019 16387101 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16387019 16387101 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16407749 16407886 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16407749 16407886 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16409598 16409649 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16409598 16409649 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16410508 16410627 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16410508 16410627 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16474936 16474995 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16474936 16474995 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16478258 16478323 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16478258 16478323 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16485017 16485192 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16485017 16485192 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16486367 16486498 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16486367 16486498 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16486667 16486835 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16486667 16486835 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16488603 16488745 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16488603 16488745 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16492063 16492172 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16492063 16492172 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16493471 16493568 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16493471 16493568 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16496193 16496309 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16496193 16496309 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16506737 16506850 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16506737 16506850 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16509016 16509085 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16509016 16509085 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16553874 16553920 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene exon 16553874 16554079 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199865:uc010gch.2"; -chr20 hg19_knownGene CDS 16347794 16348471 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16347488 16348471 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16351231 16351281 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16351231 16351281 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16352310 16352406 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16352310 16352406 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16354902 16355054 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16354902 16355054 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16359450 16360808 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16359450 16360808 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16362339 16362392 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16362339 16362392 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16385458 16385546 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16385458 16385546 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16387019 16387101 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16387019 16387101 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16407749 16407886 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16407749 16407886 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16409598 16409649 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16409598 16409649 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16410508 16410627 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16410508 16410627 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16474936 16474995 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16474936 16474995 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16478258 16478323 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16478258 16478323 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16485017 16485192 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16485017 16485192 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16486367 16486498 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16486367 16486498 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16486667 16486835 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16486667 16486835 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16488603 16488745 0.000000 - 2 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16488603 16488745 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16492063 16492172 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16492063 16492172 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16493471 16493568 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16493471 16493568 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16496193 16496309 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16496193 16496309 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16506737 16506850 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16506737 16506850 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16509016 16509085 0.000000 - 1 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16509016 16509085 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16553874 16553920 0.000000 - 0 gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene exon 16553874 16554079 0.000000 - . gene_id "KIF16B"; transcript_id "NM_001199866:uc010gci.2"; -chr20 hg19_knownGene CDS 16359455 16360808 0.000000 - 1 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16359450 16360808 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16362339 16362392 0.000000 - 1 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16362339 16362392 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16362743 16362775 0.000000 - 1 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16362743 16362775 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16385458 16385546 0.000000 - 0 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16385458 16385546 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16387019 16387101 0.000000 - 2 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16387019 16387101 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16407749 16407886 0.000000 - 2 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16407749 16407886 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16409598 16409649 0.000000 - 0 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16409598 16409649 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16410508 16410627 0.000000 - 0 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16410508 16410627 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16474936 16474995 0.000000 - 0 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16474936 16474995 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16478258 16478323 0.000000 - 0 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16478258 16478323 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16485017 16485192 0.000000 - 2 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16485017 16485192 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16486367 16486498 0.000000 - 2 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16486367 16486498 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16486667 16486835 0.000000 - 0 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16486667 16486835 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16488603 16488745 0.000000 - 2 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16488603 16488745 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16492063 16492172 0.000000 - 1 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16492063 16492172 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16493471 16493568 0.000000 - 0 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16493471 16493568 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16496193 16496309 0.000000 - 0 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16496193 16496309 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16506737 16506850 0.000000 - 0 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16506737 16506850 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16509016 16509085 0.000000 - 1 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16509016 16509085 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene CDS 16553874 16553920 0.000000 - 0 gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16553874 16554079 0.000000 - . gene_id "KIF16B"; transcript_id "AK307399:uc010gcj.2"; -chr20 hg19_knownGene exon 16674398 16674516 0.000000 + . gene_id "Mir_584"; transcript_id ":uc021wau.1"; -chr20 hg19_knownGene exon 16710609 16710809 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene CDS 16712348 16712411 0.000000 + 0 gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene exon 16712313 16712411 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene CDS 16712809 16712981 0.000000 + 2 gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene exon 16712809 16712981 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene CDS 16717906 16718046 0.000000 + 0 gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene exon 16717906 16718046 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene CDS 16719497 16719547 0.000000 + 0 gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene exon 16719497 16719547 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene CDS 16720970 16721058 0.000000 + 0 gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene exon 16720970 16721058 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene CDS 16721491 16721647 0.000000 + 1 gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene exon 16721491 16722417 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_003092:uc002wph.2"; -chr20 hg19_knownGene exon 16710609 16710709 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene CDS 16712348 16712411 0.000000 + 0 gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene exon 16712313 16712411 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene CDS 16712809 16712981 0.000000 + 2 gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene exon 16712809 16712981 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene CDS 16717906 16718046 0.000000 + 0 gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene exon 16717906 16718046 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene CDS 16719497 16719547 0.000000 + 0 gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene exon 16719497 16719547 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene CDS 16720970 16721058 0.000000 + 0 gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene exon 16720970 16721058 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene CDS 16721491 16721647 0.000000 + 1 gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene exon 16721491 16722417 0.000000 + . gene_id "SNRPB2"; transcript_id "NM_198220:uc002wpi.2"; -chr20 hg19_knownGene CDS 16729047 16729161 0.000000 + 0 gene_id "OTOR"; transcript_id "NM_020157:uc002wpj.3"; -chr20 hg19_knownGene exon 16729003 16729161 0.000000 + . gene_id "OTOR"; transcript_id "NM_020157:uc002wpj.3"; -chr20 hg19_knownGene CDS 16729512 16729651 0.000000 + 2 gene_id "OTOR"; transcript_id "NM_020157:uc002wpj.3"; -chr20 hg19_knownGene exon 16729512 16729651 0.000000 + . gene_id "OTOR"; transcript_id "NM_020157:uc002wpj.3"; -chr20 hg19_knownGene CDS 16730548 16730655 0.000000 + 0 gene_id "OTOR"; transcript_id "NM_020157:uc002wpj.3"; -chr20 hg19_knownGene exon 16730548 16730655 0.000000 + . gene_id "OTOR"; transcript_id "NM_020157:uc002wpj.3"; -chr20 hg19_knownGene CDS 16731740 16731760 0.000000 + 0 gene_id "OTOR"; transcript_id "NM_020157:uc002wpj.3"; -chr20 hg19_knownGene exon 16731740 16732809 0.000000 + . gene_id "OTOR"; transcript_id "NM_020157:uc002wpj.3"; -chr20 hg19_knownGene exon 17206752 17207024 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17208008 17208127 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17207975 17208127 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17240885 17240989 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17240885 17240989 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17338972 17339085 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17338972 17339085 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17341177 17341285 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17341177 17341285 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17349885 17349922 0.000000 + 2 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17349885 17349922 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17389908 17389984 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17389908 17389984 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17410080 17410168 0.000000 + 1 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17410080 17410168 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17417353 17417528 0.000000 + 2 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17417353 17417528 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17434387 17434602 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17434387 17434602 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17436993 17437093 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17436993 17437093 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17445971 17446198 0.000000 + 1 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17445971 17446198 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17462229 17462712 0.000000 + 1 gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene exon 17462229 17465222 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201528:uc002wpl.3"; -chr20 hg19_knownGene CDS 17207951 17208127 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17207597 17208127 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17240885 17240989 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17240885 17240989 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17338972 17339085 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17338972 17339085 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17341177 17341285 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17341177 17341285 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17349885 17349922 0.000000 + 2 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17349885 17349922 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17389908 17389984 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17389908 17389984 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17410080 17410168 0.000000 + 1 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17410080 17410168 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17417353 17417528 0.000000 + 2 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17417353 17417528 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17434387 17434602 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17434387 17434602 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17436993 17437093 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17436993 17437093 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17445971 17446198 0.000000 + 1 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17445971 17446198 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17462229 17462712 0.000000 + 1 gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene exon 17462229 17465222 0.000000 + . gene_id "PCSK2"; transcript_id "NM_002594:uc002wpm.3"; -chr20 hg19_knownGene CDS 17207951 17208127 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17207597 17208127 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17338972 17339085 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17338972 17339085 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17341177 17341285 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17341177 17341285 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17349885 17349922 0.000000 + 2 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17349885 17349922 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17389908 17389984 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17389908 17389984 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17410080 17410168 0.000000 + 1 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17410080 17410168 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17417353 17417528 0.000000 + 2 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17417353 17417528 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17434387 17434602 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17434387 17434602 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17436993 17437093 0.000000 + 0 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17436993 17437093 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17445971 17446198 0.000000 + 1 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17445971 17446198 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17462229 17462712 0.000000 + 1 gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene exon 17462229 17465222 0.000000 + . gene_id "PCSK2"; transcript_id "NM_001201529:uc010zrm.2"; -chr20 hg19_knownGene CDS 17445807 17446198 0.000000 + 0 gene_id "PCSK2"; transcript_id "AX747025:uc002wpn.3"; -chr20 hg19_knownGene exon 17444078 17446198 0.000000 + . gene_id "PCSK2"; transcript_id "AX747025:uc002wpn.3"; -chr20 hg19_knownGene CDS 17462229 17462712 0.000000 + 1 gene_id "PCSK2"; transcript_id "AX747025:uc002wpn.3"; -chr20 hg19_knownGene exon 17462229 17465222 0.000000 + . gene_id "PCSK2"; transcript_id "AX747025:uc002wpn.3"; -chr20 hg19_knownGene CDS 17474722 17475674 0.000000 - 2 gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene exon 17474550 17475674 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene CDS 17477583 17477668 0.000000 - 1 gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene exon 17477583 17477668 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene CDS 17479465 17479685 0.000000 - 0 gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene exon 17479465 17479685 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene CDS 17489534 17489641 0.000000 - 0 gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene exon 17489534 17489641 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene CDS 17492621 17492713 0.000000 - 0 gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene exon 17492621 17492713 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene CDS 17495366 17495461 0.000000 - 0 gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene exon 17495366 17495461 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene CDS 17505493 17505553 0.000000 - 1 gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene exon 17505493 17505553 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene CDS 17511598 17511974 0.000000 - 0 gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene exon 17511598 17512013 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001195:uc002wpo.3"; -chr20 hg19_knownGene CDS 17474722 17475674 0.000000 - 2 gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene exon 17474550 17475674 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene CDS 17477583 17477668 0.000000 - 1 gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene exon 17477583 17477668 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene CDS 17479465 17479685 0.000000 - 0 gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene exon 17479465 17479685 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene CDS 17489534 17489641 0.000000 - 0 gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene exon 17489534 17489641 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene CDS 17492621 17492713 0.000000 - 0 gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene exon 17492621 17492713 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene CDS 17495366 17495461 0.000000 - 0 gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene exon 17495366 17495461 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene CDS 17505493 17505553 0.000000 - 1 gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene exon 17505493 17505553 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene CDS 17539333 17539334 0.000000 - 0 gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene exon 17539333 17539605 0.000000 - . gene_id "BFSP1"; transcript_id "NM_001161705:uc002wpp.3"; -chr20 hg19_knownGene CDS 17474722 17475674 0.000000 - 2 gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene exon 17474550 17475674 0.000000 - . gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene CDS 17477583 17477668 0.000000 - 1 gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene exon 17477583 17477668 0.000000 - . gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene CDS 17479465 17479685 0.000000 - 0 gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene exon 17479465 17479685 0.000000 - . gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene CDS 17489534 17489641 0.000000 - 0 gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene exon 17489534 17489641 0.000000 - . gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene CDS 17492621 17492713 0.000000 - 0 gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene exon 17492621 17492713 0.000000 - . gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene CDS 17495366 17495461 0.000000 - 0 gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene exon 17495366 17495461 0.000000 - . gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene CDS 17505493 17505513 0.000000 - 0 gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene exon 17505493 17505553 0.000000 - . gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene exon 17521710 17521844 0.000000 - . gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene exon 17539333 17539605 0.000000 - . gene_id "BFSP1"; transcript_id "AK316247:uc010zrn.2"; -chr20 hg19_knownGene CDS 17474722 17475674 0.000000 - 2 gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17474550 17475674 0.000000 - . gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene CDS 17477583 17477668 0.000000 - 1 gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17477583 17477668 0.000000 - . gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene CDS 17479465 17479685 0.000000 - 0 gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17479465 17479685 0.000000 - . gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene CDS 17489534 17489641 0.000000 - 0 gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17489534 17489641 0.000000 - . gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene CDS 17492621 17492713 0.000000 - 0 gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17492621 17492713 0.000000 - . gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene CDS 17495366 17495461 0.000000 - 0 gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17495366 17495461 0.000000 - . gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene CDS 17505493 17505513 0.000000 - 0 gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17505493 17505553 0.000000 - . gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17541002 17541223 0.000000 - . gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17543619 17543740 0.000000 - . gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17549816 17549865 0.000000 - . gene_id "BFSP1"; transcript_id "AK304673:uc010zro.2"; -chr20 hg19_knownGene exon 17556851 17557155 0.000000 - . gene_id "7SK"; transcript_id ":uc021wav.1"; -chr20 hg19_knownGene exon 17550599 17550856 0.000000 + . gene_id "DSTN"; transcript_id "NM_001011546:uc002wpq.3"; -chr20 hg19_knownGene exon 17572577 17572708 0.000000 + . gene_id "DSTN"; transcript_id "NM_001011546:uc002wpq.3"; -chr20 hg19_knownGene CDS 17581431 17581690 0.000000 + 0 gene_id "DSTN"; transcript_id "NM_001011546:uc002wpq.3"; -chr20 hg19_knownGene exon 17581383 17581690 0.000000 + . gene_id "DSTN"; transcript_id "NM_001011546:uc002wpq.3"; -chr20 hg19_knownGene CDS 17585200 17585276 0.000000 + 1 gene_id "DSTN"; transcript_id "NM_001011546:uc002wpq.3"; -chr20 hg19_knownGene exon 17585200 17585276 0.000000 + . gene_id "DSTN"; transcript_id "NM_001011546:uc002wpq.3"; -chr20 hg19_knownGene CDS 17587682 17587788 0.000000 + 2 gene_id "DSTN"; transcript_id "NM_001011546:uc002wpq.3"; -chr20 hg19_knownGene exon 17587682 17588652 0.000000 + . gene_id "DSTN"; transcript_id "NM_001011546:uc002wpq.3"; -chr20 hg19_knownGene CDS 17550854 17550856 0.000000 + 0 gene_id "DSTN"; transcript_id "NM_006870:uc002wpr.3"; -chr20 hg19_knownGene exon 17550599 17550856 0.000000 + . gene_id "DSTN"; transcript_id "NM_006870:uc002wpr.3"; -chr20 hg19_knownGene CDS 17581383 17581690 0.000000 + 0 gene_id "DSTN"; transcript_id "NM_006870:uc002wpr.3"; -chr20 hg19_knownGene exon 17581383 17581690 0.000000 + . gene_id "DSTN"; transcript_id "NM_006870:uc002wpr.3"; -chr20 hg19_knownGene CDS 17585200 17585276 0.000000 + 1 gene_id "DSTN"; transcript_id "NM_006870:uc002wpr.3"; -chr20 hg19_knownGene exon 17585200 17585276 0.000000 + . gene_id "DSTN"; transcript_id "NM_006870:uc002wpr.3"; -chr20 hg19_knownGene CDS 17587682 17587788 0.000000 + 2 gene_id "DSTN"; transcript_id "NM_006870:uc002wpr.3"; -chr20 hg19_knownGene exon 17587682 17588652 0.000000 + . gene_id "DSTN"; transcript_id "NM_006870:uc002wpr.3"; -chr20 hg19_knownGene exon 17577343 17577435 0.000000 + . gene_id "DSTN"; transcript_id "AK308562:uc010gck.3"; -chr20 hg19_knownGene CDS 17581431 17581690 0.000000 + 0 gene_id "DSTN"; transcript_id "AK308562:uc010gck.3"; -chr20 hg19_knownGene exon 17581383 17581690 0.000000 + . gene_id "DSTN"; transcript_id "AK308562:uc010gck.3"; -chr20 hg19_knownGene CDS 17585200 17585276 0.000000 + 1 gene_id "DSTN"; transcript_id "AK308562:uc010gck.3"; -chr20 hg19_knownGene exon 17585200 17585276 0.000000 + . gene_id "DSTN"; transcript_id "AK308562:uc010gck.3"; -chr20 hg19_knownGene CDS 17587682 17587788 0.000000 + 2 gene_id "DSTN"; transcript_id "AK308562:uc010gck.3"; -chr20 hg19_knownGene exon 17587682 17588652 0.000000 + . gene_id "DSTN"; transcript_id "AK308562:uc010gck.3"; -chr20 hg19_knownGene CDS 17594830 17594865 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene exon 17594323 17594865 0.000000 - . gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene CDS 17595382 17595525 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene exon 17595382 17595525 0.000000 - . gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene CDS 17596076 17596174 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene exon 17596076 17596174 0.000000 - . gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene CDS 17596571 17596654 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene exon 17596571 17596654 0.000000 - . gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene CDS 17597377 17597463 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene exon 17597377 17597484 0.000000 - . gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene exon 17599241 17600462 0.000000 - . gene_id "RRBP1"; transcript_id "AK098319:uc010zrp.1"; -chr20 hg19_knownGene CDS 17594830 17594865 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17594323 17594865 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17595385 17595525 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17595385 17595525 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17596076 17596174 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17596076 17596174 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17596571 17596654 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17596571 17596654 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17597377 17597484 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17597377 17597484 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17599241 17599324 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17599241 17599324 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17600278 17600373 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17600278 17600373 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17600944 17601015 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17600944 17601015 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17601360 17601452 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17601360 17601452 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17602103 17602192 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17602103 17602192 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17602335 17602418 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17602335 17602418 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17602500 17602550 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17602500 17602592 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene exon 17603493 17603975 0.000000 - . gene_id "RRBP1"; transcript_id "AK093465:uc002wpt.1"; -chr20 hg19_knownGene CDS 17601153 17601452 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene exon 17600883 17601452 0.000000 - . gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene CDS 17602103 17602192 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene exon 17602103 17602192 0.000000 - . gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene CDS 17602335 17602418 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene exon 17602335 17602418 0.000000 - . gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene CDS 17602500 17602592 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene exon 17602500 17602592 0.000000 - . gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene CDS 17610468 17610606 0.000000 - 1 gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene exon 17610468 17610606 0.000000 - . gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene CDS 17614105 17614172 0.000000 - 0 gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene exon 17614105 17614258 0.000000 - . gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene exon 17616191 17616309 0.000000 - . gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene exon 17617222 17617374 0.000000 - . gene_id "RRBP1"; transcript_id "AK309197:uc010gcm.1"; -chr20 hg19_knownGene CDS 17594830 17594865 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17594323 17594865 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17595382 17595525 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17595382 17595525 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17596076 17596174 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17596076 17596174 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17596571 17596654 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17596571 17596654 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17597377 17597484 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17597377 17597484 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17599241 17599324 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17599241 17599324 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17600278 17600373 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17600278 17600373 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17600944 17601015 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17600944 17601015 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17601360 17601452 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17601360 17601452 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17602103 17602192 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17602103 17602192 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17602335 17602418 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17602335 17602418 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17602500 17602592 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17602500 17602592 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17605221 17605313 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17605221 17605313 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17606157 17606247 0.000000 - 1 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17606157 17606247 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17607993 17608027 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17607993 17608027 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17608149 17608327 0.000000 - 2 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17608149 17608327 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17610468 17610606 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17610468 17610606 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17614105 17614258 0.000000 - 1 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17614105 17614258 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17616191 17616309 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17616191 17616309 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17617222 17617374 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17617222 17617374 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17622442 17622564 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17622442 17622564 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17623624 17623707 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17623624 17623772 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene exon 17639241 17639743 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc002wpu.3"; -chr20 hg19_knownGene CDS 17639338 17641152 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB384598:uc021waw.1"; -chr20 hg19_knownGene exon 17639335 17641152 0.000000 - . gene_id "RRBP1"; transcript_id "AB384598:uc021waw.1"; -chr20 hg19_knownGene CDS 17594830 17594865 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17594323 17594865 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17595382 17595525 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17595382 17595525 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17596076 17596174 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17596076 17596174 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17596571 17596654 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17596571 17596654 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17597377 17597484 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17597377 17597484 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17599241 17599324 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17599241 17599324 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17600278 17600373 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17600278 17600373 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17600944 17601015 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17600944 17601015 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17601360 17601452 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17601360 17601452 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17602103 17602192 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17602103 17602192 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17602335 17602418 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17602335 17602418 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17602500 17602592 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17602500 17602592 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17605221 17605313 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17605221 17605313 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17606157 17606247 0.000000 - 1 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17606157 17606247 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17607993 17608027 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17607993 17608027 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17608149 17608327 0.000000 - 2 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17608149 17608327 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17610468 17610606 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17610468 17610606 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17614105 17614258 0.000000 - 1 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17614105 17614258 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17616191 17616309 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17616191 17616309 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17617222 17617374 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17617222 17617374 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17622442 17622564 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17622442 17622564 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17623624 17623772 0.000000 - 2 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17623624 17623772 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17639250 17639334 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17639250 17639334 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17640625 17641152 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17640625 17641173 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17660644 17660720 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene exon 17662673 17662928 0.000000 - . gene_id "RRBP1"; transcript_id "NM_001042576:uc002wpv.1"; -chr20 hg19_knownGene CDS 17594830 17594865 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17594323 17594865 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17595382 17595525 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17595382 17595525 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17596076 17596174 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17596076 17596174 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17596571 17596654 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17596571 17596654 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17597377 17597484 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17597377 17597484 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17599241 17599324 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17599241 17599324 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17600278 17600373 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17600278 17600373 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17600944 17601015 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17600944 17601015 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17601360 17601452 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17601360 17601452 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17602103 17602192 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17602103 17602192 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17602335 17602418 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17602335 17602418 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17602500 17602592 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17602500 17602592 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17605221 17605313 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17605221 17605313 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17606157 17606247 0.000000 - 1 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17606157 17606247 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17607993 17608027 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17607993 17608027 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17608149 17608327 0.000000 - 2 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17608149 17608327 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17610468 17610606 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17610468 17610606 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17614105 17614258 0.000000 - 1 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17614105 17614258 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17616191 17616309 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17616191 17616309 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17617222 17617374 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17617222 17617374 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17622442 17622564 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17622442 17622564 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17623624 17623772 0.000000 - 2 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17623624 17623772 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17639250 17639334 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17639250 17639334 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17640625 17641152 0.000000 - 0 gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17640625 17641173 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene exon 17662673 17662928 0.000000 - . gene_id "RRBP1"; transcript_id "NM_004587:uc002wpw.1"; -chr20 hg19_knownGene CDS 17594830 17594865 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17594323 17594865 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17595382 17595525 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17595382 17595525 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17596076 17596174 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17596076 17596174 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17596571 17596654 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17596571 17596654 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17597377 17597484 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17597377 17597484 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17599241 17599324 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17599241 17599324 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17600278 17600373 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17600278 17600373 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17600944 17601015 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17600944 17601015 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17601360 17601452 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17601360 17601452 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17602103 17602192 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17602103 17602192 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17602335 17602418 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17602335 17602418 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17602500 17602592 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17602500 17602592 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17605221 17605313 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17605221 17605313 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17606157 17606247 0.000000 - 1 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17606157 17606247 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17607993 17608027 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17607993 17608027 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17608149 17608327 0.000000 - 2 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17608149 17608327 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17610468 17610606 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17610468 17610606 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17614105 17614258 0.000000 - 1 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17614105 17614258 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17616191 17616309 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17616191 17616309 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17617222 17617374 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17617222 17617374 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17622442 17622564 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17622442 17622564 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17623624 17623707 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17623624 17623772 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17660644 17660720 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene exon 17662673 17662928 0.000000 - . gene_id "RRBP1"; transcript_id "BC128578:uc010gcl.1"; -chr20 hg19_knownGene CDS 17639986 17641152 0.000000 - 0 gene_id "RRBP1"; transcript_id "AB037819:uc010zrq.1"; -chr20 hg19_knownGene exon 17639981 17641173 0.000000 - . gene_id "RRBP1"; transcript_id "AB037819:uc010zrq.1"; -chr20 hg19_knownGene exon 17660644 17660720 0.000000 - . gene_id "RRBP1"; transcript_id "AB037819:uc010zrq.1"; -chr20 hg19_knownGene exon 17662673 17662928 0.000000 - . gene_id "RRBP1"; transcript_id "AB037819:uc010zrq.1"; -chr20 hg19_knownGene CDS 17639986 17641152 0.000000 - 0 gene_id "RRBP1"; transcript_id "BC128577:uc010zrr.1"; -chr20 hg19_knownGene exon 17639981 17641173 0.000000 - . gene_id "RRBP1"; transcript_id "BC128577:uc010zrr.1"; -chr20 hg19_knownGene exon 17662673 17662928 0.000000 - . gene_id "RRBP1"; transcript_id "BC128577:uc010zrr.1"; -chr20 hg19_knownGene CDS 17674334 17674351 0.000000 + 0 gene_id "BANF2"; transcript_id "NM_001159495:uc010zrs.1"; -chr20 hg19_knownGene exon 17674320 17674351 0.000000 + . gene_id "BANF2"; transcript_id "NM_001159495:uc010zrs.1"; -chr20 hg19_knownGene CDS 17705668 17705796 0.000000 + 0 gene_id "BANF2"; transcript_id "NM_001159495:uc010zrs.1"; -chr20 hg19_knownGene exon 17705668 17705796 0.000000 + . gene_id "BANF2"; transcript_id "NM_001159495:uc010zrs.1"; -chr20 hg19_knownGene CDS 17716310 17716453 0.000000 + 0 gene_id "BANF2"; transcript_id "NM_001159495:uc010zrs.1"; -chr20 hg19_knownGene exon 17716310 17716517 0.000000 + . gene_id "BANF2"; transcript_id "NM_001159495:uc010zrs.1"; -chr20 hg19_knownGene exon 17680593 17680700 0.000000 + . gene_id "BANF2"; transcript_id "NM_178477:uc002wpz.2"; -chr20 hg19_knownGene exon 17703361 17703523 0.000000 + . gene_id "BANF2"; transcript_id "NM_178477:uc002wpz.2"; -chr20 hg19_knownGene CDS 17705671 17705796 0.000000 + 0 gene_id "BANF2"; transcript_id "NM_178477:uc002wpz.2"; -chr20 hg19_knownGene exon 17705668 17705796 0.000000 + . gene_id "BANF2"; transcript_id "NM_178477:uc002wpz.2"; -chr20 hg19_knownGene CDS 17716310 17716453 0.000000 + 0 gene_id "BANF2"; transcript_id "NM_178477:uc002wpz.2"; -chr20 hg19_knownGene exon 17716310 17716517 0.000000 + . gene_id "BANF2"; transcript_id "NM_178477:uc002wpz.2"; -chr20 hg19_knownGene exon 17680593 17680700 0.000000 + . gene_id "BANF2"; transcript_id "NM_001014977:uc002wqa.2"; -chr20 hg19_knownGene CDS 17705671 17705796 0.000000 + 0 gene_id "BANF2"; transcript_id "NM_001014977:uc002wqa.2"; -chr20 hg19_knownGene exon 17705668 17705796 0.000000 + . gene_id "BANF2"; transcript_id "NM_001014977:uc002wqa.2"; -chr20 hg19_knownGene CDS 17716310 17716453 0.000000 + 0 gene_id "BANF2"; transcript_id "NM_001014977:uc002wqa.2"; -chr20 hg19_knownGene exon 17716310 17716517 0.000000 + . gene_id "BANF2"; transcript_id "NM_001014977:uc002wqa.2"; -chr20 hg19_knownGene exon 17855142 17855219 0.000000 + . gene_id "TRNA_Gln"; transcript_id ":uc021wax.1"; -chr20 hg19_knownGene exon 17922244 17923051 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17923754 17923839 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17928130 17928289 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17929534 17929620 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17929708 17929747 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17930776 17930851 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17930935 17931040 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17931665 17931971 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17932144 17932239 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17933231 17933354 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17934640 17934761 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17936009 17936119 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17937577 17937681 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17941783 17942638 0.000000 - . gene_id "SNX5"; transcript_id "AK054634:uc002wqb.3"; -chr20 hg19_knownGene exon 17943353 17943589 0.000000 - . gene_id "SNORD17"; transcript_id "NR_003045:uc002wqf.1"; -chr20 hg19_knownGene CDS 17923004 17923051 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17922244 17923051 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17923754 17923839 0.000000 - 2 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17923754 17923839 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17928130 17928289 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17928130 17928289 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17929534 17929620 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17929534 17929620 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17929708 17929747 0.000000 - 1 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17929708 17929747 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17930776 17930851 0.000000 - 2 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17930776 17930851 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17930935 17931040 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17930935 17931040 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17932144 17932239 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17932144 17932239 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17933231 17933354 0.000000 - 1 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17933231 17933354 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17934640 17934761 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17934640 17934761 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17936009 17936119 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17936009 17936119 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17937577 17937681 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17937577 17937681 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17949018 17949068 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene exon 17949018 17949154 0.000000 - . gene_id "SNX5"; transcript_id "NM_014426:uc002wqc.3"; -chr20 hg19_knownGene CDS 17928128 17928289 0.000000 - 0 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17927812 17928289 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17929534 17929620 0.000000 - 0 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17929534 17929620 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17929708 17929747 0.000000 - 1 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17929708 17929747 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17930776 17930851 0.000000 - 2 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17930776 17930851 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17930935 17931040 0.000000 - 0 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17930935 17931040 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17932144 17932239 0.000000 - 0 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17932144 17932239 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17933231 17933354 0.000000 - 1 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17933231 17933354 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17934640 17934761 0.000000 - 0 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17934640 17934761 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17936009 17936119 0.000000 - 0 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17936009 17936119 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17937577 17937681 0.000000 - 0 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17937577 17937681 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17949018 17949068 0.000000 - 0 gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene exon 17949018 17949154 0.000000 - . gene_id "SNX5"; transcript_id "AK296947:uc010zrt.1"; -chr20 hg19_knownGene CDS 17949017 17949307 0.000000 - 0 gene_id "AK296947"; transcript_id "AK296947:uc021way.1"; -chr20 hg19_knownGene exon 17948333 17949436 0.000000 - . gene_id "AK296947"; transcript_id "AK296947:uc021way.1"; -chr20 hg19_knownGene CDS 17923004 17923051 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17922244 17923051 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17923754 17923839 0.000000 - 2 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17923754 17923839 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17928130 17928289 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17928130 17928289 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17929534 17929620 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17929534 17929620 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17929708 17929747 0.000000 - 1 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17929708 17929747 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17930776 17930851 0.000000 - 2 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17930776 17930851 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17930935 17931040 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17930935 17931040 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17932144 17932239 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17932144 17932239 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17933231 17933354 0.000000 - 1 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17933231 17933354 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17934640 17934761 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17934640 17934761 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17936009 17936119 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17936009 17936119 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17937577 17937681 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17937577 17937681 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17949018 17949068 0.000000 - 0 gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17949018 17949100 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene exon 17949343 17949490 0.000000 - . gene_id "SNX5"; transcript_id "NM_152227:uc002wqd.3"; -chr20 hg19_knownGene CDS 17923004 17923051 0.000000 - 0 gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17922244 17923051 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene CDS 17923754 17923839 0.000000 - 2 gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17923754 17923839 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene CDS 17928130 17928289 0.000000 - 0 gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17928130 17928289 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene CDS 17929534 17929620 0.000000 - 0 gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17929534 17929620 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene CDS 17929708 17929747 0.000000 - 1 gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17929708 17929747 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene CDS 17930776 17930851 0.000000 - 2 gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17930776 17930851 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene CDS 17930935 17931040 0.000000 - 0 gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17930935 17931040 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene CDS 17932144 17932239 0.000000 - 0 gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17932144 17932239 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene CDS 17933231 17933354 0.000000 - 1 gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17933231 17933354 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene CDS 17934640 17934713 0.000000 - 0 gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17934640 17934761 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17936009 17936119 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17937577 17937681 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17949343 17949490 0.000000 - . gene_id "SNX5"; transcript_id "BC062638:uc002wqe.3"; -chr20 hg19_knownGene exon 17949762 17949784 0.000000 + . gene_id "C20orf72"; transcript_id "NM_052865:uc002wqh.3"; -chr20 hg19_knownGene CDS 17950503 17951013 0.000000 + 0 gene_id "C20orf72"; transcript_id "NM_052865:uc002wqh.3"; -chr20 hg19_knownGene exon 17950444 17951013 0.000000 + . gene_id "C20orf72"; transcript_id "NM_052865:uc002wqh.3"; -chr20 hg19_knownGene CDS 17956327 17956546 0.000000 + 2 gene_id "C20orf72"; transcript_id "NM_052865:uc002wqh.3"; -chr20 hg19_knownGene exon 17956327 17956546 0.000000 + . gene_id "C20orf72"; transcript_id "NM_052865:uc002wqh.3"; -chr20 hg19_knownGene CDS 17968809 17968941 0.000000 + 1 gene_id "C20orf72"; transcript_id "NM_052865:uc002wqh.3"; -chr20 hg19_knownGene exon 17968809 17968941 0.000000 + . gene_id "C20orf72"; transcript_id "NM_052865:uc002wqh.3"; -chr20 hg19_knownGene CDS 17970582 17970749 0.000000 + 0 gene_id "C20orf72"; transcript_id "NM_052865:uc002wqh.3"; -chr20 hg19_knownGene exon 17970582 17971762 0.000000 + . gene_id "C20orf72"; transcript_id "NM_052865:uc002wqh.3"; -chr20 hg19_knownGene exon 17950444 17951013 0.000000 + . gene_id "C20orf72"; transcript_id "AK309995:uc010gco.3"; -chr20 hg19_knownGene exon 17968809 17968941 0.000000 + . gene_id "C20orf72"; transcript_id "AK309995:uc010gco.3"; -chr20 hg19_knownGene exon 17970582 17971762 0.000000 + . gene_id "C20orf72"; transcript_id "AK309995:uc010gco.3"; -chr20 hg19_knownGene exon 17950637 17950773 0.000000 + . gene_id "C20orf72"; transcript_id "AK310282:uc010gcp.3"; -chr20 hg19_knownGene exon 17956327 17956546 0.000000 + . gene_id "C20orf72"; transcript_id "AK310282:uc010gcp.3"; -chr20 hg19_knownGene exon 17968809 17968941 0.000000 + . gene_id "C20orf72"; transcript_id "AK310282:uc010gcp.3"; -chr20 hg19_knownGene exon 17970582 17971762 0.000000 + . gene_id "C20orf72"; transcript_id "AK310282:uc010gcp.3"; -chr20 hg19_knownGene exon 17993521 17993546 0.000000 + . gene_id "JA429722"; transcript_id "JA429722:uc021waz.1"; -chr20 hg19_knownGene CDS 18005283 18005596 0.000000 - 2 gene_id "OVOL2"; transcript_id "NM_021220:uc002wqi.1"; -chr20 hg19_knownGene exon 18004796 18005596 0.000000 - . gene_id "OVOL2"; transcript_id "NM_021220:uc002wqi.1"; -chr20 hg19_knownGene CDS 18022178 18022367 0.000000 - 0 gene_id "OVOL2"; transcript_id "NM_021220:uc002wqi.1"; -chr20 hg19_knownGene exon 18022178 18022367 0.000000 - . gene_id "OVOL2"; transcript_id "NM_021220:uc002wqi.1"; -chr20 hg19_knownGene CDS 18037301 18037521 0.000000 - 2 gene_id "OVOL2"; transcript_id "NM_021220:uc002wqi.1"; -chr20 hg19_knownGene exon 18037301 18037521 0.000000 - . gene_id "OVOL2"; transcript_id "NM_021220:uc002wqi.1"; -chr20 hg19_knownGene CDS 18038179 18038278 0.000000 - 0 gene_id "OVOL2"; transcript_id "NM_021220:uc002wqi.1"; -chr20 hg19_knownGene exon 18038179 18038521 0.000000 - . gene_id "OVOL2"; transcript_id "NM_021220:uc002wqi.1"; -chr20 hg19_knownGene CDS 18118600 18118695 0.000000 + 0 gene_id "PET117"; transcript_id "NM_001164811:uc021wba.1"; -chr20 hg19_knownGene exon 18118499 18118695 0.000000 + . gene_id "PET117"; transcript_id "NM_001164811:uc021wba.1"; -chr20 hg19_knownGene CDS 18122852 18122998 0.000000 + 0 gene_id "PET117"; transcript_id "NM_001164811:uc021wba.1"; -chr20 hg19_knownGene exon 18122852 18123812 0.000000 + . gene_id "PET117"; transcript_id "NM_001164811:uc021wba.1"; -chr20 hg19_knownGene CDS 18123305 18123563 0.000000 + 0 gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18122868 18123563 0.000000 + . gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene CDS 18125877 18125995 0.000000 + 2 gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18125877 18125995 0.000000 + . gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene CDS 18131465 18131586 0.000000 + 0 gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18131465 18131586 0.000000 + . gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene CDS 18139728 18139909 0.000000 + 1 gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18139728 18139909 0.000000 + . gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene CDS 18142464 18142883 0.000000 + 2 gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18142464 18142883 0.000000 + . gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene CDS 18143021 18143589 0.000000 + 2 gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18143021 18143589 0.000000 + . gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene CDS 18162354 18162490 0.000000 + 0 gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18162354 18162490 0.000000 + . gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene CDS 18163767 18163942 0.000000 + 1 gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18163767 18163942 0.000000 + . gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene CDS 18165246 18165436 0.000000 + 2 gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18165246 18165436 0.000000 + . gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene CDS 18167930 18168100 0.000000 + 0 gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18167930 18169031 0.000000 + . gene_id "CSRP2BP"; transcript_id "NM_020536:uc021wbb.1"; -chr20 hg19_knownGene exon 18125743 18125995 0.000000 + . gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene CDS 18131471 18131586 0.000000 + 0 gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene exon 18131465 18131586 0.000000 + . gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene CDS 18139728 18139909 0.000000 + 1 gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene exon 18139728 18139909 0.000000 + . gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene CDS 18142464 18142883 0.000000 + 2 gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene exon 18142464 18142883 0.000000 + . gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene CDS 18143021 18143589 0.000000 + 2 gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene exon 18143021 18143589 0.000000 + . gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene CDS 18162354 18162490 0.000000 + 0 gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene exon 18162354 18162490 0.000000 + . gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene CDS 18163767 18163942 0.000000 + 1 gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene exon 18163767 18163942 0.000000 + . gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene CDS 18165246 18165436 0.000000 + 2 gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene exon 18165246 18165436 0.000000 + . gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene CDS 18167930 18168100 0.000000 + 0 gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene exon 18167930 18169031 0.000000 + . gene_id "CSRP2BP"; transcript_id "NR_028402:uc002wqk.3"; -chr20 hg19_knownGene CDS 18131471 18131586 0.000000 + 0 gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene exon 18131465 18131586 0.000000 + . gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene CDS 18139728 18139909 0.000000 + 1 gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene exon 18139728 18139909 0.000000 + . gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene CDS 18142467 18142883 0.000000 + 2 gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene exon 18142467 18142883 0.000000 + . gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene CDS 18143021 18143589 0.000000 + 2 gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene exon 18143021 18143589 0.000000 + . gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene CDS 18162354 18162490 0.000000 + 0 gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene exon 18162354 18162490 0.000000 + . gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene CDS 18163767 18163942 0.000000 + 1 gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene exon 18163767 18163942 0.000000 + . gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene CDS 18165246 18165436 0.000000 + 2 gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene exon 18165246 18165436 0.000000 + . gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene CDS 18167930 18168100 0.000000 + 0 gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene exon 18167930 18169031 0.000000 + . gene_id "CSRP2BP"; transcript_id "AK297597:uc010zru.2"; -chr20 hg19_knownGene exon 18269121 18269248 0.000000 + . gene_id "ZNF133"; transcript_id "AK291389:uc010gcq.2"; -chr20 hg19_knownGene exon 18285652 18285822 0.000000 + . gene_id "ZNF133"; transcript_id "AK291389:uc010gcq.2"; -chr20 hg19_knownGene CDS 18286331 18286451 0.000000 + 0 gene_id "ZNF133"; transcript_id "AK291389:uc010gcq.2"; -chr20 hg19_knownGene exon 18286325 18286451 0.000000 + . gene_id "ZNF133"; transcript_id "AK291389:uc010gcq.2"; -chr20 hg19_knownGene CDS 18286942 18287037 0.000000 + 2 gene_id "ZNF133"; transcript_id "AK291389:uc010gcq.2"; -chr20 hg19_knownGene exon 18286942 18287037 0.000000 + . gene_id "ZNF133"; transcript_id "AK291389:uc010gcq.2"; -chr20 hg19_knownGene CDS 18295713 18297457 0.000000 + 2 gene_id "ZNF133"; transcript_id "AK291389:uc010gcq.2"; -chr20 hg19_knownGene exon 18295713 18297635 0.000000 + . gene_id "ZNF133"; transcript_id "AK291389:uc010gcq.2"; -chr20 hg19_knownGene exon 18269121 18269248 0.000000 + . gene_id "ZNF133"; transcript_id "AK295273:uc010zrv.1"; -chr20 hg19_knownGene CDS 18278704 18278706 0.000000 + 0 gene_id "ZNF133"; transcript_id "AK295273:uc010zrv.1"; -chr20 hg19_knownGene exon 18278629 18278706 0.000000 + . gene_id "ZNF133"; transcript_id "AK295273:uc010zrv.1"; -chr20 hg19_knownGene CDS 18286325 18286451 0.000000 + 0 gene_id "ZNF133"; transcript_id "AK295273:uc010zrv.1"; -chr20 hg19_knownGene exon 18286325 18286451 0.000000 + . gene_id "ZNF133"; transcript_id "AK295273:uc010zrv.1"; -chr20 hg19_knownGene CDS 18286942 18287037 0.000000 + 2 gene_id "ZNF133"; transcript_id "AK295273:uc010zrv.1"; -chr20 hg19_knownGene exon 18286942 18287037 0.000000 + . gene_id "ZNF133"; transcript_id "AK295273:uc010zrv.1"; -chr20 hg19_knownGene CDS 18295713 18297457 0.000000 + 2 gene_id "ZNF133"; transcript_id "AK295273:uc010zrv.1"; -chr20 hg19_knownGene exon 18295713 18297635 0.000000 + . gene_id "ZNF133"; transcript_id "AK295273:uc010zrv.1"; -chr20 hg19_knownGene exon 18269121 18269248 0.000000 + . gene_id "ZNF133"; transcript_id "AK295513:uc010zrw.1"; -chr20 hg19_knownGene exon 18286312 18286451 0.000000 + . gene_id "ZNF133"; transcript_id "AK295513:uc010zrw.1"; -chr20 hg19_knownGene exon 18286942 18287037 0.000000 + . gene_id "ZNF133"; transcript_id "AK295513:uc010zrw.1"; -chr20 hg19_knownGene CDS 18290923 18290950 0.000000 + 0 gene_id "ZNF133"; transcript_id "AK295513:uc010zrw.1"; -chr20 hg19_knownGene exon 18290813 18290950 0.000000 + . gene_id "ZNF133"; transcript_id "AK295513:uc010zrw.1"; -chr20 hg19_knownGene CDS 18295713 18297457 0.000000 + 2 gene_id "ZNF133"; transcript_id "AK295513:uc010zrw.1"; -chr20 hg19_knownGene exon 18295713 18297635 0.000000 + . gene_id "ZNF133"; transcript_id "AK295513:uc010zrw.1"; -chr20 hg19_knownGene exon 18269121 18269248 0.000000 + . gene_id "ZNF133"; transcript_id "AK313525:uc010gcr.2"; -chr20 hg19_knownGene CDS 18286331 18286451 0.000000 + 0 gene_id "ZNF133"; transcript_id "AK313525:uc010gcr.2"; -chr20 hg19_knownGene exon 18286325 18286451 0.000000 + . gene_id "ZNF133"; transcript_id "AK313525:uc010gcr.2"; -chr20 hg19_knownGene CDS 18286942 18287037 0.000000 + 2 gene_id "ZNF133"; transcript_id "AK313525:uc010gcr.2"; -chr20 hg19_knownGene exon 18286942 18287037 0.000000 + . gene_id "ZNF133"; transcript_id "AK313525:uc010gcr.2"; -chr20 hg19_knownGene CDS 18295713 18297457 0.000000 + 2 gene_id "ZNF133"; transcript_id "AK313525:uc010gcr.2"; -chr20 hg19_knownGene exon 18295713 18297635 0.000000 + . gene_id "ZNF133"; transcript_id "AK313525:uc010gcr.2"; -chr20 hg19_knownGene exon 18269121 18269248 0.000000 + . gene_id "ZNF133"; transcript_id "AK294263:uc010zrx.1"; -chr20 hg19_knownGene exon 18286963 18287037 0.000000 + . gene_id "ZNF133"; transcript_id "AK294263:uc010zrx.1"; -chr20 hg19_knownGene CDS 18295781 18297457 0.000000 + 0 gene_id "ZNF133"; transcript_id "AK294263:uc010zrx.1"; -chr20 hg19_knownGene exon 18295713 18297635 0.000000 + . gene_id "ZNF133"; transcript_id "AK294263:uc010zrx.1"; -chr20 hg19_knownGene exon 18278629 18278706 0.000000 + . gene_id "ZNF133"; transcript_id "U09366:uc002wqm.2"; -chr20 hg19_knownGene CDS 18286331 18286451 0.000000 + 0 gene_id "ZNF133"; transcript_id "U09366:uc002wqm.2"; -chr20 hg19_knownGene exon 18286312 18286451 0.000000 + . gene_id "ZNF133"; transcript_id "U09366:uc002wqm.2"; -chr20 hg19_knownGene CDS 18286942 18287037 0.000000 + 2 gene_id "ZNF133"; transcript_id "U09366:uc002wqm.2"; -chr20 hg19_knownGene exon 18286942 18287037 0.000000 + . gene_id "ZNF133"; transcript_id "U09366:uc002wqm.2"; -chr20 hg19_knownGene CDS 18295713 18297457 0.000000 + 2 gene_id "ZNF133"; transcript_id "U09366:uc002wqm.2"; -chr20 hg19_knownGene exon 18295713 18297635 0.000000 + . gene_id "ZNF133"; transcript_id "U09366:uc002wqm.2"; -chr20 hg19_knownGene exon 18269121 18269248 0.000000 + . gene_id "ZNF133"; transcript_id "NM_003434:uc002wql.4"; -chr20 hg19_knownGene exon 18278629 18278706 0.000000 + . gene_id "ZNF133"; transcript_id "NM_003434:uc002wql.4"; -chr20 hg19_knownGene exon 18278933 18279108 0.000000 + . gene_id "ZNF133"; transcript_id "NM_003434:uc002wql.4"; -chr20 hg19_knownGene exon 18285652 18285822 0.000000 + . gene_id "ZNF133"; transcript_id "NM_003434:uc002wql.4"; -chr20 hg19_knownGene CDS 18286331 18286451 0.000000 + 0 gene_id "ZNF133"; transcript_id "NM_003434:uc002wql.4"; -chr20 hg19_knownGene exon 18286325 18286451 0.000000 + . gene_id "ZNF133"; transcript_id "NM_003434:uc002wql.4"; -chr20 hg19_knownGene CDS 18286942 18287037 0.000000 + 2 gene_id "ZNF133"; transcript_id "NM_003434:uc002wql.4"; -chr20 hg19_knownGene exon 18286942 18287037 0.000000 + . gene_id "ZNF133"; transcript_id "NM_003434:uc002wql.4"; -chr20 hg19_knownGene CDS 18295716 18297457 0.000000 + 2 gene_id "ZNF133"; transcript_id "NM_003434:uc002wql.4"; -chr20 hg19_knownGene exon 18295716 18297640 0.000000 + . gene_id "ZNF133"; transcript_id "NM_003434:uc002wql.4"; -chr20 hg19_knownGene exon 18269121 18269248 0.000000 + . gene_id "ZNF133"; transcript_id "NM_001083330:uc010gcs.3"; -chr20 hg19_knownGene CDS 18286331 18286451 0.000000 + 0 gene_id "ZNF133"; transcript_id "NM_001083330:uc010gcs.3"; -chr20 hg19_knownGene exon 18286312 18286451 0.000000 + . gene_id "ZNF133"; transcript_id "NM_001083330:uc010gcs.3"; -chr20 hg19_knownGene CDS 18286942 18287037 0.000000 + 2 gene_id "ZNF133"; transcript_id "NM_001083330:uc010gcs.3"; -chr20 hg19_knownGene exon 18286942 18287037 0.000000 + . gene_id "ZNF133"; transcript_id "NM_001083330:uc010gcs.3"; -chr20 hg19_knownGene CDS 18295716 18297457 0.000000 + 2 gene_id "ZNF133"; transcript_id "NM_001083330:uc010gcs.3"; -chr20 hg19_knownGene exon 18295716 18297640 0.000000 + . gene_id "ZNF133"; transcript_id "NM_001083330:uc010gcs.3"; -chr20 hg19_knownGene exon 18269121 18269248 0.000000 + . gene_id "ZNF133"; transcript_id "AK316386:uc010zry.2"; -chr20 hg19_knownGene CDS 18295781 18297457 0.000000 + 0 gene_id "ZNF133"; transcript_id "AK316386:uc010zry.2"; -chr20 hg19_knownGene exon 18295716 18297640 0.000000 + . gene_id "ZNF133"; transcript_id "AK316386:uc010zry.2"; -chr20 hg19_knownGene exon 18303196 18303623 0.000000 - . gene_id "BC043266"; transcript_id "BC043266:uc002wqn.3"; -chr20 hg19_knownGene exon 18304288 18305878 0.000000 - . gene_id "BC043266"; transcript_id "BC043266:uc002wqn.3"; -chr20 hg19_knownGene exon 18309342 18309619 0.000000 - . gene_id "BC043266"; transcript_id "BC043266:uc002wqn.3"; -chr20 hg19_knownGene exon 18326134 18326190 0.000000 - . gene_id "BC043266"; transcript_id "BC043266:uc002wqn.3"; -chr20 hg19_knownGene exon 18339809 18339944 0.000000 - . gene_id "BC043266"; transcript_id "BC043266:uc002wqn.3"; -chr20 hg19_knownGene exon 18359693 18359713 0.000000 + . gene_id "DZANK1-AS1"; transcript_id "NR_034167:uc021wbc.1"; -chr20 hg19_knownGene CDS 18361515 18362009 0.000000 + 0 gene_id "DZANK1-AS1"; transcript_id "NR_034167:uc021wbc.1"; -chr20 hg19_knownGene exon 18361423 18362127 0.000000 + . gene_id "DZANK1-AS1"; transcript_id "NR_034167:uc021wbc.1"; -chr20 hg19_knownGene CDS 18365046 18365208 0.000000 - 1 gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene exon 18364011 18365208 0.000000 - . gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene CDS 18365660 18365734 0.000000 - 1 gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene exon 18365660 18365734 0.000000 - . gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene CDS 18370345 18370472 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene exon 18370345 18370472 0.000000 - . gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene CDS 18371023 18371103 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene exon 18371023 18371103 0.000000 - . gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene CDS 18374355 18374455 0.000000 - 2 gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene exon 18374355 18374455 0.000000 - . gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene CDS 18374898 18374994 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene exon 18374898 18374994 0.000000 - . gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene CDS 18377116 18377190 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene exon 18377116 18377190 0.000000 - . gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene CDS 18379167 18379270 0.000000 - 2 gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene exon 18379167 18379270 0.000000 - . gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene CDS 18393290 18393335 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene exon 18393290 18393497 0.000000 - . gene_id "DZANK1"; transcript_id "AK295073:uc010zrz.2"; -chr20 hg19_knownGene CDS 18365046 18365208 0.000000 - 1 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18364011 18365208 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18365660 18365734 0.000000 - 1 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18365660 18365734 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18370345 18370472 0.000000 - 0 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18370345 18370472 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18371023 18371103 0.000000 - 0 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18371023 18371103 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18374355 18374455 0.000000 - 2 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18374355 18374455 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18374898 18374994 0.000000 - 0 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18374898 18374994 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18377116 18377190 0.000000 - 0 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18377116 18377190 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18379167 18379270 0.000000 - 2 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18379167 18379270 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18393290 18393479 0.000000 - 0 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18393290 18393479 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18394992 18395156 0.000000 - 0 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18394992 18395156 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18407711 18407803 0.000000 - 0 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18407711 18407803 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene CDS 18414296 18414409 0.000000 - 0 gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18414296 18414409 0.000000 - . gene_id "DZANK1"; transcript_id "DQ104738:uc002wqp.4"; -chr20 hg19_knownGene exon 18364011 18365208 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18365660 18365734 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18370345 18370472 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18371023 18371103 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18374355 18374455 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18374898 18374994 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18375319 18375502 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18377116 18377190 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18379167 18379270 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18393290 18393479 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18394992 18395156 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18395971 18396093 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18407711 18407803 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18414296 18414409 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18423991 18424108 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18429628 18429713 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18433259 18433326 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18434375 18434471 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18435891 18436005 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18440797 18440950 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18445894 18446050 0.000000 - . gene_id "DZANK1"; transcript_id "AK131451:uc002wqr.4"; -chr20 hg19_knownGene exon 18394992 18395156 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene exon 18395971 18396093 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene exon 18407711 18407803 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene exon 18409264 18409363 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene exon 18413139 18414409 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene exon 18423991 18424108 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene exon 18429628 18429713 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene exon 18434375 18434471 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene exon 18435891 18436005 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene exon 18440797 18440950 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene exon 18445894 18446050 0.000000 - . gene_id "DZANK1"; transcript_id "BC036231:uc002wqu.1"; -chr20 hg19_knownGene CDS 18365046 18365208 0.000000 - 1 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18364011 18365208 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18365660 18365734 0.000000 - 1 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18365660 18365734 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18370345 18370472 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18370345 18370472 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18371023 18371103 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18371023 18371103 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18374355 18374455 0.000000 - 2 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18374355 18374455 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18374898 18374994 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18374898 18374994 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18377116 18377190 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18377116 18377190 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18379167 18379270 0.000000 - 2 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18379167 18379270 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18393290 18393479 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18393290 18393479 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18394992 18395156 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18394992 18395156 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18395971 18396093 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18395971 18396093 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18407711 18407803 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18407711 18407803 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18414296 18414409 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18414296 18414409 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18423991 18424108 0.000000 - 1 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18423991 18424108 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18429628 18429713 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18429628 18429713 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18432498 18432606 0.000000 - 1 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18432498 18432606 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18433259 18433326 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18433259 18433326 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18434375 18434398 0.000000 - 0 gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18434375 18434471 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18435891 18436005 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18440797 18440950 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18445894 18446021 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene exon 18447506 18447645 0.000000 - . gene_id "DZANK1"; transcript_id "CR749327:uc002wqs.4"; -chr20 hg19_knownGene CDS 18365046 18365208 0.000000 - 1 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18364011 18365208 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18365660 18365734 0.000000 - 1 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18365660 18365734 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18370345 18370472 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18370345 18370472 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18371023 18371103 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18371023 18371103 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18374355 18374455 0.000000 - 2 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18374355 18374455 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18374898 18374994 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18374898 18374994 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18377116 18377190 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18377116 18377190 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18379167 18379270 0.000000 - 2 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18379167 18379270 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18393290 18393479 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18393290 18393479 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18394992 18395156 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18394992 18395156 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18395971 18396093 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18395971 18396093 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18407711 18407803 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18407711 18407803 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18414296 18414409 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18414296 18414409 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18423991 18424108 0.000000 - 1 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18423991 18424108 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18429628 18429713 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18429628 18429713 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18433259 18433326 0.000000 - 2 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18433259 18433326 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18434375 18434471 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18434375 18434471 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18435891 18436005 0.000000 - 1 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18435891 18436005 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18440797 18440950 0.000000 - 2 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18440797 18440950 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18445894 18446002 0.000000 - 0 gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18445894 18446021 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene exon 18447640 18447829 0.000000 - . gene_id "DZANK1"; transcript_id "NM_001099407:uc002wqq.4"; -chr20 hg19_knownGene CDS 18365046 18365208 0.000000 - 1 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18364011 18365208 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18365660 18365734 0.000000 - 1 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18365660 18365734 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18370345 18370472 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18370345 18370472 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18371023 18371103 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18371023 18371103 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18374355 18374455 0.000000 - 2 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18374355 18374455 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18374898 18374994 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18374898 18374994 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18377116 18377190 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18377116 18377190 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18379167 18379270 0.000000 - 2 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18379167 18379270 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18393290 18393479 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18393290 18393479 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18394992 18395156 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18394992 18395156 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18395971 18396093 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18395971 18396093 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18407711 18407803 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18407711 18407803 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18414296 18414409 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18414296 18414409 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18423991 18424108 0.000000 - 1 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18423991 18424108 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18429628 18429713 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18429628 18429713 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18433259 18433383 0.000000 - 2 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18433259 18433383 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18434375 18434471 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18434375 18434471 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18435891 18436005 0.000000 - 1 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18435891 18436005 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18440797 18440950 0.000000 - 2 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18440797 18440950 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene CDS 18445894 18446002 0.000000 - 0 gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18445894 18446021 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18447640 18447829 0.000000 - . gene_id "DZANK1"; transcript_id "AK299746:uc010zsa.2"; -chr20 hg19_knownGene exon 18394992 18395156 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18395971 18396093 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18407711 18407803 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18414296 18414409 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18423991 18424108 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18429628 18429713 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18434375 18434471 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18435891 18436005 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18440797 18440950 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18445894 18446021 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18447640 18447829 0.000000 - . gene_id "DZANK1"; transcript_id "AK055544:uc010gct.1"; -chr20 hg19_knownGene exon 18451259 18451335 0.000000 + . gene_id "MIR3192"; transcript_id "NR_036160:uc021wbd.1"; -chr20 hg19_knownGene CDS 18448151 18448212 0.000000 + 0 gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene exon 18448033 18448212 0.000000 + . gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene CDS 18449588 18449705 0.000000 + 1 gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene exon 18449588 18449705 0.000000 + . gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene CDS 18453486 18453553 0.000000 + 0 gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene exon 18453486 18453553 0.000000 + . gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene CDS 18454035 18454102 0.000000 + 1 gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene exon 18454035 18454102 0.000000 + . gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene CDS 18455719 18455831 0.000000 + 2 gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene exon 18455719 18455831 0.000000 + . gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene CDS 18460682 18460825 0.000000 + 0 gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene exon 18460682 18460825 0.000000 + . gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene CDS 18461046 18461153 0.000000 + 0 gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene exon 18461046 18461153 0.000000 + . gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene CDS 18462263 18462454 0.000000 + 0 gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene exon 18462263 18462454 0.000000 + . gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene CDS 18464125 18464199 0.000000 + 0 gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene exon 18464125 18465286 0.000000 + . gene_id "POLR3F"; transcript_id "NM_006466:uc002wqv.3"; -chr20 hg19_knownGene exon 18448033 18448212 0.000000 + . gene_id "POLR3F"; transcript_id "AK096684:uc002wqw.3"; -chr20 hg19_knownGene exon 18449588 18449705 0.000000 + . gene_id "POLR3F"; transcript_id "AK096684:uc002wqw.3"; -chr20 hg19_knownGene exon 18451948 18452009 0.000000 + . gene_id "POLR3F"; transcript_id "AK096684:uc002wqw.3"; -chr20 hg19_knownGene exon 18453486 18453553 0.000000 + . gene_id "POLR3F"; transcript_id "AK096684:uc002wqw.3"; -chr20 hg19_knownGene exon 18454035 18454102 0.000000 + . gene_id "POLR3F"; transcript_id "AK096684:uc002wqw.3"; -chr20 hg19_knownGene exon 18455719 18455831 0.000000 + . gene_id "POLR3F"; transcript_id "AK096684:uc002wqw.3"; -chr20 hg19_knownGene exon 18460682 18460825 0.000000 + . gene_id "POLR3F"; transcript_id "AK096684:uc002wqw.3"; -chr20 hg19_knownGene exon 18461046 18461153 0.000000 + . gene_id "POLR3F"; transcript_id "AK096684:uc002wqw.3"; -chr20 hg19_knownGene exon 18462267 18462454 0.000000 + . gene_id "POLR3F"; transcript_id "AK096684:uc002wqw.3"; -chr20 hg19_knownGene exon 18464125 18465286 0.000000 + . gene_id "POLR3F"; transcript_id "AK096684:uc002wqw.3"; -chr20 hg19_knownGene exon 18448033 18448315 0.000000 + . gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene CDS 18449649 18449705 0.000000 + 0 gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene exon 18449588 18449705 0.000000 + . gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene CDS 18453486 18453553 0.000000 + 0 gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene exon 18453486 18453553 0.000000 + . gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene CDS 18454035 18454102 0.000000 + 1 gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene exon 18454035 18454102 0.000000 + . gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene CDS 18455719 18455831 0.000000 + 2 gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene exon 18455719 18455831 0.000000 + . gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene CDS 18460682 18460825 0.000000 + 0 gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene exon 18460682 18460825 0.000000 + . gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene CDS 18461046 18461153 0.000000 + 0 gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene exon 18461046 18461153 0.000000 + . gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene CDS 18462263 18462454 0.000000 + 0 gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene exon 18462263 18462454 0.000000 + . gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene CDS 18464125 18464199 0.000000 + 0 gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene exon 18464125 18465286 0.000000 + . gene_id "POLR3F"; transcript_id "AK314838:uc002wqx.3"; -chr20 hg19_knownGene CDS 18470411 18470634 0.000000 - 2 gene_id "RBBP9"; transcript_id "NM_006606:uc002wqy.3"; -chr20 hg19_knownGene exon 18467188 18470634 0.000000 - . gene_id "RBBP9"; transcript_id "NM_006606:uc002wqy.3"; -chr20 hg19_knownGene CDS 18471039 18471124 0.000000 - 1 gene_id "RBBP9"; transcript_id "NM_006606:uc002wqy.3"; -chr20 hg19_knownGene exon 18471039 18471124 0.000000 - . gene_id "RBBP9"; transcript_id "NM_006606:uc002wqy.3"; -chr20 hg19_knownGene CDS 18474602 18474707 0.000000 - 2 gene_id "RBBP9"; transcript_id "NM_006606:uc002wqy.3"; -chr20 hg19_knownGene exon 18474602 18474707 0.000000 - . gene_id "RBBP9"; transcript_id "NM_006606:uc002wqy.3"; -chr20 hg19_knownGene CDS 18476482 18476524 0.000000 - 0 gene_id "RBBP9"; transcript_id "NM_006606:uc002wqy.3"; -chr20 hg19_knownGene exon 18476482 18476524 0.000000 - . gene_id "RBBP9"; transcript_id "NM_006606:uc002wqy.3"; -chr20 hg19_knownGene CDS 18477713 18477811 0.000000 - 0 gene_id "RBBP9"; transcript_id "NM_006606:uc002wqy.3"; -chr20 hg19_knownGene exon 18477713 18477887 0.000000 - . gene_id "RBBP9"; transcript_id "NM_006606:uc002wqy.3"; -chr20 hg19_knownGene exon 18488188 18488634 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18491480 18491700 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18491466 18491700 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18492869 18492926 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18492869 18492926 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18496294 18496380 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18496294 18496380 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18505131 18505313 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18505131 18505313 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18505579 18505664 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18505579 18505664 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18506432 18506576 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18506432 18506576 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18507017 18507175 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18507017 18507175 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18508140 18508255 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18508140 18508255 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18511324 18511447 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18511324 18511447 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18513308 18513388 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18513308 18513388 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18516297 18516386 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18516297 18516386 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18522940 18523046 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18522940 18523046 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18523663 18523816 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18523663 18523816 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18526600 18526677 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18526600 18526677 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18529253 18529414 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18529253 18529414 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18531733 18531819 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18531733 18531819 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18534879 18535034 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18534879 18535034 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18535752 18535817 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18535752 18535817 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene CDS 18541295 18541381 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18541295 18542059 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172746:uc010zsb.2"; -chr20 hg19_knownGene exon 18488188 18488634 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18491480 18491700 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18491466 18491700 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18492869 18492926 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18492869 18492926 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18496294 18496380 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18496294 18496380 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18505077 18505313 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18505077 18505313 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18505579 18505664 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18505579 18505664 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18506432 18506576 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18506432 18506576 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18507017 18507175 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18507017 18507175 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18508140 18508255 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18508140 18508255 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18511324 18511447 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18511324 18511447 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18513308 18513388 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18513308 18513388 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18516297 18516386 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18516297 18516386 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18522940 18523046 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18522940 18523046 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18523663 18523816 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18523663 18523816 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18526600 18526677 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18526600 18526677 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18529253 18529414 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18529253 18529414 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18531733 18531819 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18531733 18531819 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18534879 18535034 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18534879 18535034 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18535752 18535817 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18535752 18535817 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene CDS 18541295 18541381 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18541295 18542059 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032985:uc002wra.2"; -chr20 hg19_knownGene exon 18488188 18488313 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18491480 18491700 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18491466 18491700 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18492869 18492926 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18492869 18492926 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18496294 18496380 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18496294 18496380 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18505077 18505313 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18505077 18505313 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18505579 18505664 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18505579 18505664 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18506432 18506576 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18506432 18506576 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18507017 18507175 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18507017 18507175 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18508140 18508255 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18508140 18508255 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18511324 18511447 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18511324 18511447 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18513308 18513388 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18513308 18513388 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18516297 18516386 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18516297 18516386 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18522940 18523046 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18522940 18523046 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18523663 18523816 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18523663 18523816 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18526600 18526677 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18526600 18526677 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18529253 18529414 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18529253 18529414 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18531733 18531819 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18531733 18531819 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18534879 18535034 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18534879 18535034 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18535752 18535817 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18535752 18535817 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene CDS 18541295 18541381 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18541295 18542059 0.000000 + . gene_id "SEC23B"; transcript_id "NM_032986:uc002wrb.2"; -chr20 hg19_knownGene exon 18488188 18488616 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18491480 18491700 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18491466 18491700 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18492869 18492926 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18492869 18492926 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18496294 18496380 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18496294 18496380 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18505077 18505313 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18505077 18505313 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18505579 18505664 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18505579 18505664 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18506432 18506576 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18506432 18506576 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18507017 18507175 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18507017 18507175 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18508140 18508255 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18508140 18508255 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18511324 18511447 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18511324 18511447 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18513308 18513388 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18513308 18513388 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18516297 18516386 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18516297 18516386 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18522940 18523046 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18522940 18523046 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18523663 18523816 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18523663 18523816 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18526600 18526677 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18526600 18526677 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18529253 18529414 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18529253 18529414 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18531733 18531819 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18531733 18531819 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18534879 18535034 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18534879 18535034 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18535752 18535817 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18535752 18535817 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene CDS 18541295 18541381 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18541295 18542059 0.000000 + . gene_id "SEC23B"; transcript_id "NM_006363:uc002wqz.2"; -chr20 hg19_knownGene exon 18488607 18488941 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18491480 18491700 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18491466 18491700 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18492869 18492926 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18492869 18492926 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18496294 18496380 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18496294 18496380 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18505077 18505313 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18505077 18505313 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18505579 18505664 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18505579 18505664 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18506432 18506576 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18506432 18506576 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18507017 18507175 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18507017 18507175 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18508140 18508255 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18508140 18508255 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18511324 18511447 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18511324 18511447 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18513308 18513388 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18513308 18513388 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18516297 18516386 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18516297 18516386 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18522940 18523046 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18522940 18523046 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18523663 18523816 0.000000 + 1 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18523663 18523816 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18526600 18526677 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18526600 18526677 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18529253 18529414 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18529253 18529414 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18531733 18531819 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18531733 18531819 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18534879 18535034 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18534879 18535034 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18535752 18535817 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18535752 18535817 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18541295 18541381 0.000000 + 0 gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene exon 18541295 18542059 0.000000 + . gene_id "SEC23B"; transcript_id "NM_001172745:uc002wrc.2"; -chr20 hg19_knownGene CDS 18548123 18548240 0.000000 + 0 gene_id "LINC00493"; transcript_id "NR_015432:uc002wrd.4"; -chr20 hg19_knownGene exon 18548073 18548240 0.000000 + . gene_id "LINC00493"; transcript_id "NR_015432:uc002wrd.4"; -chr20 hg19_knownGene CDS 18549880 18550046 0.000000 + 2 gene_id "LINC00493"; transcript_id "NR_015432:uc002wrd.4"; -chr20 hg19_knownGene exon 18549880 18550203 0.000000 + . gene_id "LINC00493"; transcript_id "NR_015432:uc002wrd.4"; -chr20 hg19_knownGene CDS 18548133 18548240 0.000000 + 0 gene_id "LINC00493"; transcript_id "AF147354:uc002wre.4"; -chr20 hg19_knownGene exon 18548073 18548240 0.000000 + . gene_id "LINC00493"; transcript_id "AF147354:uc002wre.4"; -chr20 hg19_knownGene CDS 18549883 18550128 0.000000 + 0 gene_id "LINC00493"; transcript_id "AF147354:uc002wre.4"; -chr20 hg19_knownGene exon 18549883 18550203 0.000000 + . gene_id "LINC00493"; transcript_id "AF147354:uc002wre.4"; -chr20 hg19_knownGene CDS 18568717 18568759 0.000000 + 0 gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene exon 18568556 18568759 0.000000 + . gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene CDS 18574375 18574465 0.000000 + 2 gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene exon 18574375 18574465 0.000000 + . gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene CDS 18576650 18576885 0.000000 + 1 gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene exon 18576650 18576885 0.000000 + . gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene CDS 18608771 18608877 0.000000 + 2 gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene exon 18608771 18608877 0.000000 + . gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene CDS 18724744 18724893 0.000000 + 0 gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene exon 18724744 18724915 0.000000 + . gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene exon 18744004 18744560 0.000000 + . gene_id "DTD1"; transcript_id "NM_080820:uc002wrf.4"; -chr20 hg19_knownGene exon 18768615 18769542 0.000000 - . gene_id "HSPC072"; transcript_id "NR_026884:uc002wrg.2"; -chr20 hg19_knownGene exon 18770218 18770353 0.000000 - . gene_id "HSPC072"; transcript_id "NR_026884:uc002wrg.2"; -chr20 hg19_knownGene exon 18774309 18774626 0.000000 - . gene_id "HSPC072"; transcript_id "NR_026884:uc002wrg.2"; -chr20 hg19_knownGene exon 18768615 18769481 0.000000 - . gene_id "HSPC072"; transcript_id "NR_026883:uc002wri.3"; -chr20 hg19_knownGene exon 18770218 18770353 0.000000 - . gene_id "HSPC072"; transcript_id "NR_026883:uc002wri.3"; -chr20 hg19_knownGene exon 18774309 18774447 0.000000 - . gene_id "HSPC072"; transcript_id "NR_026883:uc002wri.3"; -chr20 hg19_knownGene exon 18774812 18775228 0.000000 - . gene_id "HSPC072"; transcript_id "NR_026883:uc002wri.3"; -chr20 hg19_knownGene exon 18768615 18769481 0.000000 - . gene_id "HSPC072"; transcript_id "AF161557:uc002wrh.3"; -chr20 hg19_knownGene exon 18770218 18770353 0.000000 - . gene_id "HSPC072"; transcript_id "AF161557:uc002wrh.3"; -chr20 hg19_knownGene exon 18772386 18772777 0.000000 - . gene_id "HSPC072"; transcript_id "AF161557:uc002wrh.3"; -chr20 hg19_knownGene exon 18774309 18774447 0.000000 - . gene_id "HSPC072"; transcript_id "AF161557:uc002wrh.3"; -chr20 hg19_knownGene exon 18774812 18775228 0.000000 - . gene_id "HSPC072"; transcript_id "AF161557:uc002wrh.3"; -chr20 hg19_knownGene exon 18774693 18776709 0.000000 + . gene_id "LOC100270804"; transcript_id "NR_026885:uc010zsc.2"; -chr20 hg19_knownGene CDS 18794460 18794927 0.000000 + 0 gene_id "C20orf79"; transcript_id "NM_178483:uc002wrk.3"; -chr20 hg19_knownGene exon 18794370 18795035 0.000000 + . gene_id "C20orf79"; transcript_id "NM_178483:uc002wrk.3"; -chr20 hg19_knownGene CDS 18790423 18790759 0.000000 - 1 gene_id "LOC100128496"; transcript_id "NM_001242671:uc002wrj.2"; -chr20 hg19_knownGene exon 18790372 18790759 0.000000 - . gene_id "LOC100128496"; transcript_id "NM_001242671:uc002wrj.2"; -chr20 hg19_knownGene CDS 18805910 18805992 0.000000 - 0 gene_id "LOC100128496"; transcript_id "NM_001242671:uc002wrj.2"; -chr20 hg19_knownGene exon 18805910 18805992 0.000000 - . gene_id "LOC100128496"; transcript_id "NM_001242671:uc002wrj.2"; -chr20 hg19_knownGene CDS 18810663 18810695 0.000000 - 0 gene_id "LOC100128496"; transcript_id "NM_001242671:uc002wrj.2"; -chr20 hg19_knownGene exon 18810663 18810839 0.000000 - . gene_id "LOC100128496"; transcript_id "NM_001242671:uc002wrj.2"; -chr20 hg19_knownGene exon 19222946 19223218 0.000000 - . gene_id "LOC100130264"; transcript_id "NR_024564:uc010zsd.1"; -chr20 hg19_knownGene exon 19224521 19224932 0.000000 - . gene_id "LOC100130264"; transcript_id "NR_024564:uc010zsd.1"; -chr20 hg19_knownGene exon 19238273 19238339 0.000000 - . gene_id "LOC100130264"; transcript_id "NR_024564:uc010zsd.1"; -chr20 hg19_knownGene exon 19242353 19242517 0.000000 - . gene_id "LOC100130264"; transcript_id "NR_024564:uc010zsd.1"; -chr20 hg19_knownGene exon 19244722 19244797 0.000000 - . gene_id "LOC100130264"; transcript_id "NR_024564:uc010zsd.1"; -chr20 hg19_knownGene exon 19246377 19246643 0.000000 - . gene_id "LOC100130264"; transcript_id "NR_024564:uc010zsd.1"; -chr20 hg19_knownGene exon 19263783 19263859 0.000000 - . gene_id "LOC100130264"; transcript_id "NR_024564:uc010zsd.1"; -chr20 hg19_knownGene exon 19264789 19265240 0.000000 - . gene_id "LOC100130264"; transcript_id "NR_024564:uc010zsd.1"; -chr20 hg19_knownGene exon 19570748 19570831 0.000000 + . gene_id "Mir_548"; transcript_id ":uc021wbe.1"; -chr20 hg19_knownGene CDS 19193487 19193628 0.000000 + 0 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19193290 19193628 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19261603 19261731 0.000000 + 2 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19261603 19261731 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19496132 19496208 0.000000 + 2 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19496132 19496208 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19560644 19560718 0.000000 + 0 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19560644 19560718 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19565615 19565699 0.000000 + 0 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19565615 19565699 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19566085 19566188 0.000000 + 2 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19566085 19566188 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19634706 19634780 0.000000 + 0 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19634706 19634780 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19646508 19646533 0.000000 + 0 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19646508 19646533 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19654245 19654298 0.000000 + 1 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19654245 19654298 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19662502 19662635 0.000000 + 1 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19662502 19662635 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19664820 19664980 0.000000 + 2 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19664820 19664980 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19665744 19666005 0.000000 + 0 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19665744 19666005 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19673903 19674069 0.000000 + 2 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19673903 19674069 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19677441 19677555 0.000000 + 0 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19677441 19677555 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19679212 19679324 0.000000 + 2 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19679212 19679324 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19698172 19698237 0.000000 + 0 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19698172 19698237 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene CDS 19701635 19701781 0.000000 + 0 gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19701635 19703541 0.000000 + . gene_id "SLC24A3"; transcript_id "NM_020689:uc002wrl.3"; -chr20 hg19_knownGene exon 19789172 19789201 0.000000 - . gene_id "DQ594620"; transcript_id "DQ594620:uc021wbf.1"; -chr20 hg19_knownGene exon 19789763 19789790 0.000000 - . gene_id "DQ573663"; transcript_id "DQ573663:uc002wrn.1"; -chr20 hg19_knownGene exon 19780218 19780391 0.000000 + . gene_id "BC090059"; transcript_id "BC090059:uc002wrm.1"; -chr20 hg19_knownGene exon 19789818 19790937 0.000000 + . gene_id "BC090059"; transcript_id "BC090059:uc002wrm.1"; -chr20 hg19_knownGene CDS 19867314 19867424 0.000000 + 0 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19867165 19867424 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19870210 19870302 0.000000 + 0 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19870210 19870302 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19915743 19915843 0.000000 + 0 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19915743 19915843 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19937259 19937451 0.000000 + 1 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19937259 19937451 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19941344 19941455 0.000000 + 0 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19941344 19941455 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19945596 19945668 0.000000 + 2 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19945596 19945668 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19951482 19951573 0.000000 + 1 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19951482 19951573 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19955298 19956431 0.000000 + 2 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19955298 19956431 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19970650 19970955 0.000000 + 2 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19970650 19970955 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19972812 19972943 0.000000 + 2 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19972812 19972943 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19977323 19977486 0.000000 + 2 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19977323 19977486 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19981257 19981577 0.000000 + 0 gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene exon 19981257 19983103 0.000000 + . gene_id "RIN2"; transcript_id "NM_001242581:uc002wro.2"; -chr20 hg19_knownGene CDS 19870246 19870302 0.000000 + 0 gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene exon 19870210 19870302 0.000000 + . gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene CDS 19915743 19915843 0.000000 + 0 gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene exon 19915743 19915843 0.000000 + . gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene CDS 19937259 19937451 0.000000 + 1 gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene exon 19937259 19937451 0.000000 + . gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene CDS 19941344 19941455 0.000000 + 0 gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene exon 19941344 19941455 0.000000 + . gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene CDS 19970650 19970955 0.000000 + 2 gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene exon 19970650 19970955 0.000000 + . gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene CDS 19972812 19972943 0.000000 + 2 gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene exon 19972812 19972943 0.000000 + . gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene CDS 19977323 19977486 0.000000 + 2 gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene exon 19977323 19977486 0.000000 + . gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene CDS 19981257 19981577 0.000000 + 0 gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene exon 19981257 19983103 0.000000 + . gene_id "RIN2"; transcript_id "BC128065:uc010gcu.2"; -chr20 hg19_knownGene exon 19915743 19915843 0.000000 + . gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene exon 19937259 19937451 0.000000 + . gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene exon 19941344 19941455 0.000000 + . gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene CDS 19951564 19951573 0.000000 + 0 gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene exon 19951482 19951573 0.000000 + . gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene CDS 19955298 19956431 0.000000 + 2 gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene exon 19955298 19956431 0.000000 + . gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene CDS 19970650 19970955 0.000000 + 2 gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene exon 19970650 19970955 0.000000 + . gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene CDS 19972812 19972943 0.000000 + 2 gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene exon 19972812 19972943 0.000000 + . gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene CDS 19977323 19977486 0.000000 + 2 gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene exon 19977323 19977486 0.000000 + . gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene CDS 19981257 19981577 0.000000 + 0 gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene exon 19981257 19983103 0.000000 + . gene_id "RIN2"; transcript_id "BC034698:uc010gcv.2"; -chr20 hg19_knownGene CDS 19998041 19998093 0.000000 + 0 gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene exon 19997934 19998093 0.000000 + . gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene CDS 20003100 20003124 0.000000 + 1 gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene exon 20003100 20003124 0.000000 + . gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene CDS 20006321 20006411 0.000000 + 0 gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene exon 20006321 20006411 0.000000 + . gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene CDS 20007428 20007563 0.000000 + 2 gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene exon 20007428 20007563 0.000000 + . gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene CDS 20013152 20013297 0.000000 + 1 gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene exon 20013152 20013297 0.000000 + . gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene CDS 20013746 20013828 0.000000 + 2 gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene exon 20013746 20014273 0.000000 + . gene_id "NAA20"; transcript_id "NM_016100:uc002wrp.3"; -chr20 hg19_knownGene CDS 19998041 19998093 0.000000 + 0 gene_id "NAA20"; transcript_id "NM_181528:uc002wrq.3"; -chr20 hg19_knownGene exon 19997934 19998093 0.000000 + . gene_id "NAA20"; transcript_id "NM_181528:uc002wrq.3"; -chr20 hg19_knownGene CDS 20003100 20003124 0.000000 + 1 gene_id "NAA20"; transcript_id "NM_181528:uc002wrq.3"; -chr20 hg19_knownGene exon 20003100 20003124 0.000000 + . gene_id "NAA20"; transcript_id "NM_181528:uc002wrq.3"; -chr20 hg19_knownGene CDS 20006321 20006411 0.000000 + 0 gene_id "NAA20"; transcript_id "NM_181528:uc002wrq.3"; -chr20 hg19_knownGene exon 20006321 20006411 0.000000 + . gene_id "NAA20"; transcript_id "NM_181528:uc002wrq.3"; -chr20 hg19_knownGene CDS 20007428 20007563 0.000000 + 2 gene_id "NAA20"; transcript_id "NM_181528:uc002wrq.3"; -chr20 hg19_knownGene exon 20007428 20007563 0.000000 + . gene_id "NAA20"; transcript_id "NM_181528:uc002wrq.3"; -chr20 hg19_knownGene CDS 20013746 20013773 0.000000 + 1 gene_id "NAA20"; transcript_id "NM_181528:uc002wrq.3"; -chr20 hg19_knownGene exon 20013746 20014273 0.000000 + . gene_id "NAA20"; transcript_id "NM_181528:uc002wrq.3"; -chr20 hg19_knownGene CDS 19998669 19998685 0.000000 + 0 gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene exon 19998439 19998685 0.000000 + . gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene CDS 20003100 20003124 0.000000 + 1 gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene exon 20003100 20003124 0.000000 + . gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene CDS 20006321 20006411 0.000000 + 0 gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene exon 20006321 20006411 0.000000 + . gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene CDS 20007428 20007563 0.000000 + 2 gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene exon 20007428 20007563 0.000000 + . gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene CDS 20013152 20013297 0.000000 + 1 gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene exon 20013152 20013297 0.000000 + . gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene CDS 20013746 20013828 0.000000 + 2 gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene exon 20013746 20014273 0.000000 + . gene_id "NAA20"; transcript_id "NM_181527:uc002wrr.3"; -chr20 hg19_knownGene CDS 20016842 20017006 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20015012 20017006 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20017967 20018215 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20017967 20018215 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20018993 20019094 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20018993 20019094 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20020253 20020492 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20020253 20020492 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20021330 20021410 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20021330 20021410 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20022210 20022269 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20022210 20022269 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20022969 20023160 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20022969 20023160 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20024136 20024306 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20024136 20024306 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20025952 20026130 0.000000 - 2 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20025952 20026130 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20028409 20028575 0.000000 - 1 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20028409 20028575 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20028987 20029145 0.000000 - 1 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20028987 20029145 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20029984 20030075 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20029984 20030075 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20031114 20031266 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20031114 20031266 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20032936 20033402 0.000000 - 2 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20032936 20033402 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20036592 20036658 0.000000 - 0 gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene exon 20036592 20036690 0.000000 - . gene_id "CRNKL1"; transcript_id "NM_016652:uc002wrs.3"; -chr20 hg19_knownGene CDS 20028413 20028575 0.000000 - 1 gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene exon 20028409 20028575 0.000000 - . gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene CDS 20028987 20029145 0.000000 - 1 gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene exon 20028987 20029145 0.000000 - . gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene CDS 20029984 20030075 0.000000 - 0 gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene exon 20029984 20030075 0.000000 - . gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene CDS 20031114 20031266 0.000000 - 0 gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene exon 20031114 20031266 0.000000 - . gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene CDS 20032936 20033366 0.000000 - 2 gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene exon 20032936 20033366 0.000000 - . gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene CDS 20036592 20036658 0.000000 - 0 gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene exon 20036592 20036690 0.000000 - . gene_id "CRNKL1"; transcript_id "AF255443:uc002wrt.1"; -chr20 hg19_knownGene CDS 20033231 20033235 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20033158 20033235 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20051498 20051648 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20051498 20051648 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20054946 20055022 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20054946 20055022 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20055833 20055900 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20055833 20055900 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20056133 20056259 0.000000 + 2 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20056133 20056259 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20071488 20071620 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20071488 20071620 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20079299 20079458 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20079299 20079458 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20123501 20123592 0.000000 + 2 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20123501 20123592 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20140014 20140088 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20140014 20140088 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20144694 20144872 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20144694 20144872 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20147041 20147077 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene exon 20147041 20147080 0.000000 + . gene_id "C20orf26"; transcript_id "AK307817:uc010gcw.2"; -chr20 hg19_knownGene CDS 20037298 20037440 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20037290 20037440 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20051498 20051648 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20051498 20051648 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20054946 20055022 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20054946 20055022 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20055833 20055900 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20055833 20055900 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20056133 20056259 0.000000 + 2 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20056133 20056259 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20071488 20071620 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20071488 20071620 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20079299 20079458 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20079299 20079458 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20123501 20123592 0.000000 + 2 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20123501 20123592 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20140014 20140088 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20140014 20140088 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20144694 20144872 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20144694 20144872 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20147041 20147080 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20147041 20147080 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20149965 20150104 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20149965 20150104 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene CDS 20152425 20152449 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20152425 20152977 0.000000 + . gene_id "C20orf26"; transcript_id "NM_001167816:uc010zsf.1"; -chr20 hg19_knownGene exon 20202584 20202652 0.000000 + . gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene CDS 20208893 20209020 0.000000 + 0 gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene exon 20208893 20209020 0.000000 + . gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene CDS 20226761 20226859 0.000000 + 1 gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene exon 20226761 20226859 0.000000 + . gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene CDS 20232239 20232407 0.000000 + 1 gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene exon 20232239 20232407 0.000000 + . gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene CDS 20243600 20243774 0.000000 + 0 gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene exon 20243600 20243774 0.000000 + . gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene CDS 20246059 20246087 0.000000 + 2 gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene exon 20246059 20246261 0.000000 + . gene_id "C20orf26"; transcript_id "BC031674:uc002wrv.3"; -chr20 hg19_knownGene exon 20033158 20033235 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20037298 20037440 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20037290 20037440 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20051498 20051648 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20051498 20051648 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20054946 20055022 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20054946 20055022 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20055833 20055900 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20055833 20055900 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20056133 20056259 0.000000 + 2 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20056133 20056259 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20071488 20071620 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20071488 20071620 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20079299 20079458 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20079299 20079458 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20123501 20123592 0.000000 + 2 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20123501 20123592 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20140014 20140088 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20140014 20140088 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20144694 20144872 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20144694 20144872 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20147041 20147080 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20147041 20147080 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20150025 20150104 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20150025 20150104 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20168574 20168700 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20168574 20168700 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20171986 20172063 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20171986 20172063 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20177214 20177420 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20177214 20177420 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20180412 20180546 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20180412 20180546 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20208893 20209020 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20208893 20209020 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20226761 20226859 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20226761 20226859 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20232239 20232407 0.000000 + 1 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20232239 20232407 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20243600 20243774 0.000000 + 0 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20243600 20243774 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene CDS 20257810 20258099 0.000000 + 2 gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20257810 20258102 0.000000 + . gene_id "C20orf26"; transcript_id "AK304174:uc010zse.2"; -chr20 hg19_knownGene exon 20033158 20033235 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20037298 20037440 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20037262 20037440 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20051498 20051648 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20051498 20051648 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20054946 20055022 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20054946 20055022 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20055833 20055900 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20055833 20055900 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20056133 20056259 0.000000 + 2 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20056133 20056259 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20071488 20071620 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20071488 20071620 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20079299 20079458 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20079299 20079458 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20123501 20123592 0.000000 + 2 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20123501 20123592 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20140014 20140088 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20140014 20140088 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20144694 20144872 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20144694 20144872 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20147041 20147080 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20147041 20147080 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20149965 20150104 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20149965 20150104 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20168574 20168700 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20168574 20168700 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20171986 20172063 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20171986 20172063 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20177214 20177420 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20177214 20177420 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20180412 20180546 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20180412 20180546 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20208893 20209020 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20208893 20209020 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20226761 20226859 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20226761 20226859 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20232239 20232407 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20232239 20232407 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20243600 20243774 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20243600 20243774 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20257810 20258102 0.000000 + 2 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20257810 20258102 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20269253 20269580 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20269253 20269580 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20270944 20271035 0.000000 + 2 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20270944 20271035 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20278825 20279030 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20278825 20279030 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20322475 20322565 0.000000 + 1 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20322475 20322565 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene CDS 20340854 20341051 0.000000 + 0 gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20340854 20341346 0.000000 + . gene_id "C20orf26"; transcript_id "NM_015585:uc002wru.3"; -chr20 hg19_knownGene exon 20206175 20206233 0.000000 + . gene_id "C20orf26"; transcript_id "AK057364:uc002wrw.3"; -chr20 hg19_knownGene exon 20208893 20209020 0.000000 + . gene_id "C20orf26"; transcript_id "AK057364:uc002wrw.3"; -chr20 hg19_knownGene exon 20226761 20226859 0.000000 + . gene_id "C20orf26"; transcript_id "AK057364:uc002wrw.3"; -chr20 hg19_knownGene exon 20232239 20232407 0.000000 + . gene_id "C20orf26"; transcript_id "AK057364:uc002wrw.3"; -chr20 hg19_knownGene exon 20243600 20243774 0.000000 + . gene_id "C20orf26"; transcript_id "AK057364:uc002wrw.3"; -chr20 hg19_knownGene exon 20257810 20258102 0.000000 + . gene_id "C20orf26"; transcript_id "AK057364:uc002wrw.3"; -chr20 hg19_knownGene exon 20270944 20271035 0.000000 + . gene_id "C20orf26"; transcript_id "AK057364:uc002wrw.3"; -chr20 hg19_knownGene exon 20278825 20279030 0.000000 + . gene_id "C20orf26"; transcript_id "AK057364:uc002wrw.3"; -chr20 hg19_knownGene exon 20322475 20322565 0.000000 + . gene_id "C20orf26"; transcript_id "AK057364:uc002wrw.3"; -chr20 hg19_knownGene exon 20340854 20341346 0.000000 + . gene_id "C20orf26"; transcript_id "AK057364:uc002wrw.3"; -chr20 hg19_knownGene CDS 20348912 20350441 0.000000 + 0 gene_id "INSM1"; transcript_id "NM_002196:uc002wrx.3"; -chr20 hg19_knownGene exon 20348765 20351592 0.000000 + . gene_id "INSM1"; transcript_id "NM_002196:uc002wrx.3"; -chr20 hg19_knownGene CDS 20453451 20453600 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene exon 20452081 20453600 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene CDS 20475761 20475919 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene exon 20475761 20475919 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene CDS 20483995 20484150 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene exon 20483995 20484150 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene CDS 20486055 20486178 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene exon 20486055 20486178 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene CDS 20491898 20491969 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene exon 20491898 20491969 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene CDS 20493157 20493928 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene exon 20493157 20493928 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene CDS 20501561 20501744 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene exon 20501561 20501744 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene CDS 20505050 20505187 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene exon 20505050 20505187 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene CDS 20505474 20505542 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene exon 20505474 20505542 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene CDS 20506896 20506904 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene exon 20506896 20508902 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK127228:uc002wsa.1"; -chr20 hg19_knownGene CDS 20373746 20373897 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20370272 20373897 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20392671 20392792 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20392671 20392792 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20453473 20453600 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20453473 20453600 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20475761 20475919 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20475761 20475919 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20483995 20484150 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20483995 20484150 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20486055 20486178 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20486055 20486178 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20491898 20491969 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20491898 20491969 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20493157 20493928 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20493157 20493928 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20501561 20501744 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20501561 20501744 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20505050 20505187 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20505050 20505187 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20505474 20505542 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20505474 20505542 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20506896 20507006 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20506896 20507006 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20512331 20512439 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20512331 20512439 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20516389 20516447 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20516389 20516447 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20517300 20517428 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20517300 20517428 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20527348 20527476 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20527348 20527476 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20552102 20552257 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20552102 20552257 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20552492 20552590 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20552492 20552590 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20553519 20553712 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20553519 20553712 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20563694 20563870 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20563694 20563870 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20565509 20565599 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20565509 20565599 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20569912 20570009 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20569912 20570009 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20571821 20571958 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20571821 20571958 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20582326 20582490 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20582326 20582490 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20585819 20586056 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20585819 20586056 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20591959 20592070 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20591959 20592070 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20596687 20596835 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20596687 20596835 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20599921 20600058 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20599921 20600058 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20601107 20601274 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20601107 20601274 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene CDS 20610007 20610084 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20610007 20610234 0.000000 - . gene_id "RALGAPA2"; transcript_id "AK002211:uc002wry.3"; -chr20 hg19_knownGene exon 20370272 20373897 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20377377 20377378 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20377339 20377378 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20392671 20392792 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20392671 20392792 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20453473 20453600 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20453473 20453600 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20475761 20475919 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20475761 20475919 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20483995 20484150 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20483995 20484150 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20486055 20486178 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20486055 20486178 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20491898 20491969 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20491898 20491969 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20493157 20493928 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20493157 20493928 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20501561 20501744 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20501561 20501744 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20505050 20505187 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20505050 20505187 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20505474 20505542 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20505474 20505542 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20506896 20507006 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20506896 20507006 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20512331 20512439 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20512331 20512439 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20516389 20516447 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20516389 20516447 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20517300 20517428 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20517300 20517428 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20527348 20527476 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20527348 20527476 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20552102 20552257 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20552102 20552257 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20552492 20552590 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20552492 20552590 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20553519 20553712 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20553519 20553712 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20563694 20563870 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20563694 20563870 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20565509 20565599 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20565509 20565599 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20569912 20570009 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20569912 20570009 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20571821 20571958 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20571821 20571958 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20582326 20582490 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20582326 20582490 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20585819 20586056 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20585819 20586056 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20591959 20592070 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20591959 20592070 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20596687 20596835 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20596687 20596835 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20599921 20600058 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20599921 20600058 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20601107 20601274 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20601107 20601274 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20610007 20610234 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20610007 20610234 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20616062 20616261 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20616062 20616261 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20618007 20618145 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20618007 20618145 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20620429 20620544 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20620429 20620544 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20621345 20621522 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20621345 20621522 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20624150 20624193 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20624150 20624193 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20634174 20634231 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20634174 20634231 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20656880 20656932 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20656880 20656932 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20661335 20661445 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20661335 20661445 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene CDS 20693018 20693123 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20693018 20693266 0.000000 - . gene_id "RALGAPA2"; transcript_id "NM_020343:uc002wrz.3"; -chr20 hg19_knownGene exon 20370272 20373897 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20377377 20377378 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20377339 20377378 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20392671 20392792 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20392671 20392792 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20453473 20453600 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20453473 20453600 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20475761 20475919 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20475761 20475919 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20483995 20484150 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20483995 20484150 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20486055 20486178 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20486055 20486178 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20491898 20491969 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20491898 20491969 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20493157 20493928 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20493157 20493928 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20501561 20501744 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20501561 20501744 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20505050 20505187 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20505050 20505187 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20505474 20505542 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20505474 20505542 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20506896 20507006 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20506896 20507006 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20512331 20512439 0.000000 - 1 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20512331 20512439 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20516389 20516447 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20516389 20516447 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20517300 20517428 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20517300 20517428 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20527348 20527476 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20527348 20527476 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20552102 20552257 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20552102 20552257 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20552492 20552590 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20552492 20552590 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20553519 20553712 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20553519 20553712 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20563694 20563870 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20563694 20563870 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20565509 20565599 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20565509 20565599 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20569912 20570009 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20569912 20570009 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20571821 20571958 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20571821 20571958 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20579323 20579463 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20579323 20579463 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20582326 20582490 0.000000 - 2 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20582326 20582490 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20585819 20586056 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20585819 20586056 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene CDS 20596687 20596689 0.000000 - 0 gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20596687 20596835 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20599921 20600058 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20601107 20601274 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20610007 20610234 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20616062 20616261 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20618007 20618145 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20620429 20620544 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20621345 20621522 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20624150 20624193 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20634174 20634231 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 20693018 20693266 0.000000 - . gene_id "RALGAPA2"; transcript_id "BC171842:uc010zsg.2"; -chr20 hg19_knownGene exon 21134667 21134835 0.000000 - . gene_id "BC042893"; transcript_id "BC042893:uc002wsc.3"; -chr20 hg19_knownGene exon 21141535 21141589 0.000000 - . gene_id "BC042893"; transcript_id "BC042893:uc002wsc.3"; -chr20 hg19_knownGene exon 21143437 21143527 0.000000 - . gene_id "BC042893"; transcript_id "BC042893:uc002wsc.3"; -chr20 hg19_knownGene exon 21174683 21179443 0.000000 - . gene_id "BC042893"; transcript_id "BC042893:uc002wsc.3"; -chr20 hg19_knownGene exon 21182953 21183011 0.000000 - . gene_id "BC042893"; transcript_id "BC042893:uc002wsc.3"; -chr20 hg19_knownGene exon 21194549 21194660 0.000000 - . gene_id "BC042893"; transcript_id "BC042893:uc002wsc.3"; -chr20 hg19_knownGene exon 21198785 21198927 0.000000 - . gene_id "BC042893"; transcript_id "BC042893:uc002wsc.3"; -chr20 hg19_knownGene exon 21175044 21175595 0.000000 - . gene_id "BC034426"; transcript_id "BC034426:uc002wse.3"; -chr20 hg19_knownGene exon 21176077 21176157 0.000000 - . gene_id "BC034426"; transcript_id "BC034426:uc002wse.3"; -chr20 hg19_knownGene exon 21176611 21176730 0.000000 - . gene_id "BC034426"; transcript_id "BC034426:uc002wse.3"; -chr20 hg19_knownGene exon 21178179 21178215 0.000000 - . gene_id "BC034426"; transcript_id "BC034426:uc002wse.3"; -chr20 hg19_knownGene exon 21182953 21183011 0.000000 - . gene_id "BC034426"; transcript_id "BC034426:uc002wse.3"; -chr20 hg19_knownGene exon 21194174 21194230 0.000000 - . gene_id "BC034426"; transcript_id "BC034426:uc002wse.3"; -chr20 hg19_knownGene exon 21194549 21194660 0.000000 - . gene_id "BC034426"; transcript_id "BC034426:uc002wse.3"; -chr20 hg19_knownGene exon 21198785 21198927 0.000000 - . gene_id "BC034426"; transcript_id "BC034426:uc002wse.3"; -chr20 hg19_knownGene CDS 21106757 21106845 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21106624 21106845 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21112738 21112800 0.000000 + 1 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21112738 21112800 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21117031 21117193 0.000000 + 1 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21117031 21117193 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21126206 21126295 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21126206 21126295 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21142512 21143148 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21142512 21143148 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21143491 21143800 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21143491 21143800 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21186130 21186160 0.000000 + 1 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21186130 21186160 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21186163 21186222 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21186163 21186222 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21195173 21195338 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21195173 21195338 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21196221 21196286 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21196221 21196286 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21209649 21209753 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21209649 21209753 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21213372 21213468 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21213372 21213468 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21224883 21224926 0.000000 + 1 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21224883 21224926 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene CDS 21227117 21227211 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21227117 21227258 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_018474:uc002wsb.3"; -chr20 hg19_knownGene exon 21106624 21106845 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21112795 21112800 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21112738 21112800 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21126206 21126295 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21126206 21126295 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21142512 21143148 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21142512 21143148 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21143491 21143800 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21143491 21143800 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21186130 21186160 0.000000 + 1 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21186130 21186160 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21186163 21186222 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21186163 21186222 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21195173 21195338 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21195173 21195338 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21196221 21196286 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21196221 21196286 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21209649 21209753 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21209649 21209753 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21213372 21213468 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21213372 21213468 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21224883 21224926 0.000000 + 1 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21224883 21224926 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene CDS 21227117 21227211 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21227117 21227258 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163022:uc010zsh.2"; -chr20 hg19_knownGene exon 21106624 21106845 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21112795 21112800 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21112738 21112800 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21142512 21143148 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21142512 21143148 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21143491 21143800 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21143491 21143800 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21186130 21186160 0.000000 + 1 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21186130 21186160 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21186163 21186222 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21186163 21186222 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21195173 21195338 0.000000 + 0 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21195173 21195338 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21196221 21196286 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21196221 21196286 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21209649 21209753 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21209649 21209753 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21213372 21213468 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21213372 21213468 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21224883 21224926 0.000000 + 1 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21224883 21224926 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene CDS 21227117 21227211 0.000000 + 2 gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21227117 21227258 0.000000 + . gene_id "PLK1S1"; transcript_id "NM_001163023:uc010zsi.2"; -chr20 hg19_knownGene exon 21106624 21106845 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21126206 21126295 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21142512 21143148 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21143491 21143800 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21186130 21186222 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21195173 21195338 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21196221 21196286 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21209649 21209753 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21213372 21213468 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21224883 21224926 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21227117 21227258 0.000000 + . gene_id "PLK1S1"; transcript_id "AK293567:uc010zsj.2"; -chr20 hg19_knownGene exon 21142512 21143148 0.000000 + . gene_id "PLK1S1"; transcript_id "AL110196:uc002wsd.3"; -chr20 hg19_knownGene exon 21143491 21143800 0.000000 + . gene_id "PLK1S1"; transcript_id "AL110196:uc002wsd.3"; -chr20 hg19_knownGene exon 21186130 21186168 0.000000 + . gene_id "PLK1S1"; transcript_id "AL110196:uc002wsd.3"; -chr20 hg19_knownGene exon 21195173 21195338 0.000000 + . gene_id "PLK1S1"; transcript_id "AL110196:uc002wsd.3"; -chr20 hg19_knownGene exon 21196221 21196286 0.000000 + . gene_id "PLK1S1"; transcript_id "AL110196:uc002wsd.3"; -chr20 hg19_knownGene exon 21209649 21209753 0.000000 + . gene_id "PLK1S1"; transcript_id "AL110196:uc002wsd.3"; -chr20 hg19_knownGene exon 21213372 21213468 0.000000 + . gene_id "PLK1S1"; transcript_id "AL110196:uc002wsd.3"; -chr20 hg19_knownGene exon 21224883 21224926 0.000000 + . gene_id "PLK1S1"; transcript_id "AL110196:uc002wsd.3"; -chr20 hg19_knownGene exon 21227117 21227258 0.000000 + . gene_id "PLK1S1"; transcript_id "AL110196:uc002wsd.3"; -chr20 hg19_knownGene CDS 21284037 21284111 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21283942 21284111 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21306917 21307044 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21306917 21307044 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21307128 21307239 0.000000 + 1 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21307128 21307239 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21309197 21309308 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21309197 21309308 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21311119 21311177 0.000000 + 2 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21311119 21311177 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21311254 21311343 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21311254 21311343 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21312199 21312271 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21312199 21312271 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21312406 21312456 0.000000 + 2 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21312406 21312456 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21312921 21313078 0.000000 + 2 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21312921 21313078 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21314182 21314256 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21314182 21314256 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21314342 21314475 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21314342 21314475 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21314575 21314632 0.000000 + 1 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21314575 21314632 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21314716 21314823 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21314716 21314823 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21319682 21319726 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21319682 21319726 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21321359 21321490 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21321359 21321490 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21324728 21324846 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21324728 21324846 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21327053 21327188 0.000000 + 1 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21327053 21327188 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21328784 21328891 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21328784 21328891 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21328979 21329068 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21328979 21329068 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21330027 21330099 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21330027 21330099 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21335427 21335510 0.000000 + 2 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21335427 21335510 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21336718 21336815 0.000000 + 2 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21336718 21336815 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21337224 21337303 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21337224 21337303 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21338374 21338430 0.000000 + 1 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21338374 21338430 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21346059 21346127 0.000000 + 1 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21346059 21346127 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21346211 21346342 0.000000 + 1 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21346211 21346342 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21349101 21349228 0.000000 + 1 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21349101 21349228 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21362632 21362695 0.000000 + 2 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21362632 21362695 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21367506 21367644 0.000000 + 1 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21367506 21367644 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene CDS 21369911 21369973 0.000000 + 0 gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21369911 21370463 0.000000 + . gene_id "XRN2"; transcript_id "NM_012255:uc002wsf.1"; -chr20 hg19_knownGene exon 21283942 21284111 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21307153 21307239 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21307128 21307239 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21309197 21309308 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21309197 21309308 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21311119 21311177 0.000000 + 2 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21311119 21311177 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21311254 21311343 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21311254 21311343 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21312199 21312271 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21312199 21312271 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21312406 21312456 0.000000 + 2 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21312406 21312456 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21312921 21313078 0.000000 + 2 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21312921 21313078 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21314182 21314256 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21314182 21314256 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21314342 21314475 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21314342 21314475 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21314575 21314632 0.000000 + 1 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21314575 21314632 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21314716 21314823 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21314716 21314823 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21319682 21319726 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21319682 21319726 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21321359 21321490 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21321359 21321490 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21324728 21324846 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21324728 21324846 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21327053 21327188 0.000000 + 1 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21327053 21327188 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21328784 21328891 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21328784 21328891 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21328979 21329068 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21328979 21329068 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21330027 21330099 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21330027 21330099 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21335427 21335510 0.000000 + 2 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21335427 21335510 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21336718 21336815 0.000000 + 2 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21336718 21336815 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21337224 21337303 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21337224 21337303 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21338374 21338430 0.000000 + 1 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21338374 21338430 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21346059 21346127 0.000000 + 1 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21346059 21346127 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21346211 21346342 0.000000 + 1 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21346211 21346342 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21349101 21349228 0.000000 + 1 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21349101 21349228 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21362632 21362695 0.000000 + 2 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21362632 21362695 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21367506 21367644 0.000000 + 1 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21367506 21367644 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene CDS 21369911 21369973 0.000000 + 0 gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21369911 21370463 0.000000 + . gene_id "XRN2"; transcript_id "AK303312:uc002wsg.1"; -chr20 hg19_knownGene exon 21284432 21284485 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21307004 21307044 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21306917 21307044 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21307128 21307239 0.000000 + 1 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21307128 21307239 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21309197 21309308 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21309197 21309308 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21311119 21311177 0.000000 + 2 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21311119 21311177 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21311254 21311343 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21311254 21311343 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21312199 21312271 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21312199 21312271 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21312406 21312456 0.000000 + 2 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21312406 21312456 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21312921 21313078 0.000000 + 2 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21312921 21313078 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21314182 21314256 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21314182 21314256 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21314342 21314475 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21314342 21314475 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21314575 21314632 0.000000 + 1 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21314575 21314632 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21314716 21314823 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21314716 21314823 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21319682 21319726 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21319682 21319726 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21321359 21321490 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21321359 21321490 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21324728 21324846 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21324728 21324846 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21327053 21327188 0.000000 + 1 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21327053 21327188 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21328784 21328891 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21328784 21328891 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21328979 21329068 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21328979 21329068 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21330027 21330099 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21330027 21330099 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21335427 21335510 0.000000 + 2 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21335427 21335510 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21336718 21336815 0.000000 + 2 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21336718 21336815 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21337224 21337303 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21337224 21337303 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21338374 21338430 0.000000 + 1 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21338374 21338430 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21346059 21346127 0.000000 + 1 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21346059 21346127 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21346211 21346342 0.000000 + 1 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21346211 21346342 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21349101 21349228 0.000000 + 1 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21349101 21349228 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21362632 21362695 0.000000 + 2 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21362632 21362695 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21367506 21367644 0.000000 + 1 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21367506 21367644 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21369911 21369973 0.000000 + 0 gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene exon 21369911 21370463 0.000000 + . gene_id "XRN2"; transcript_id "AK302846:uc010zsk.1"; -chr20 hg19_knownGene CDS 21362634 21362695 0.000000 + 0 gene_id "XRN2"; transcript_id "AK172858:uc002wsh.1"; -chr20 hg19_knownGene exon 21362358 21362695 0.000000 + . gene_id "XRN2"; transcript_id "AK172858:uc002wsh.1"; -chr20 hg19_knownGene CDS 21367506 21367644 0.000000 + 1 gene_id "XRN2"; transcript_id "AK172858:uc002wsh.1"; -chr20 hg19_knownGene exon 21367506 21367644 0.000000 + . gene_id "XRN2"; transcript_id "AK172858:uc002wsh.1"; -chr20 hg19_knownGene CDS 21369911 21369973 0.000000 + 0 gene_id "XRN2"; transcript_id "AK172858:uc002wsh.1"; -chr20 hg19_knownGene exon 21369911 21370463 0.000000 + . gene_id "XRN2"; transcript_id "AK172858:uc002wsh.1"; -chr20 hg19_knownGene CDS 21376552 21377171 0.000000 - 2 gene_id "NKX2-4"; transcript_id "NM_033176:uc010gcz.3"; -chr20 hg19_knownGene exon 21376005 21377171 0.000000 - . gene_id "NKX2-4"; transcript_id "NM_033176:uc010gcz.3"; -chr20 hg19_knownGene CDS 21377596 21378037 0.000000 - 0 gene_id "NKX2-4"; transcript_id "NM_033176:uc010gcz.3"; -chr20 hg19_knownGene exon 21377596 21378047 0.000000 - . gene_id "NKX2-4"; transcript_id "NM_033176:uc010gcz.3"; -chr20 hg19_knownGene CDS 21492564 21493123 0.000000 - 2 gene_id "NKX2-2"; transcript_id "NM_002509:uc002wsi.3"; -chr20 hg19_knownGene exon 21491660 21493123 0.000000 - . gene_id "NKX2-2"; transcript_id "NM_002509:uc002wsi.3"; -chr20 hg19_knownGene CDS 21494049 21494307 0.000000 - 0 gene_id "NKX2-2"; transcript_id "NM_002509:uc002wsi.3"; -chr20 hg19_knownGene exon 21494049 21494664 0.000000 - . gene_id "NKX2-2"; transcript_id "NM_002509:uc002wsi.3"; -chr20 hg19_knownGene exon 21595616 21596073 0.000000 + . gene_id "Nkx2_2as"; transcript_id ":uc021wbg.1"; -chr20 hg19_knownGene CDS 21686351 21686636 0.000000 + 0 gene_id "PAX1"; transcript_id "BC143793:uc010zsl.2"; -chr20 hg19_knownGene exon 21686297 21686636 0.000000 + . gene_id "PAX1"; transcript_id "BC143793:uc010zsl.2"; -chr20 hg19_knownGene CDS 21687076 21687705 0.000000 + 2 gene_id "PAX1"; transcript_id "BC143793:uc010zsl.2"; -chr20 hg19_knownGene exon 21687076 21687705 0.000000 + . gene_id "PAX1"; transcript_id "BC143793:uc010zsl.2"; -chr20 hg19_knownGene CDS 21689196 21689338 0.000000 + 2 gene_id "PAX1"; transcript_id "BC143793:uc010zsl.2"; -chr20 hg19_knownGene exon 21689196 21689338 0.000000 + . gene_id "PAX1"; transcript_id "BC143793:uc010zsl.2"; -chr20 hg19_knownGene CDS 21689860 21690082 0.000000 + 0 gene_id "PAX1"; transcript_id "BC143793:uc010zsl.2"; -chr20 hg19_knownGene exon 21689860 21690082 0.000000 + . gene_id "PAX1"; transcript_id "BC143793:uc010zsl.2"; -chr20 hg19_knownGene CDS 21695109 21695197 0.000000 + 2 gene_id "PAX1"; transcript_id "BC143793:uc010zsl.2"; -chr20 hg19_knownGene exon 21695109 21695747 0.000000 + . gene_id "PAX1"; transcript_id "BC143793:uc010zsl.2"; -chr20 hg19_knownGene CDS 21686862 21687705 0.000000 + 0 gene_id "PAX1"; transcript_id "AK303335:uc010zsm.2"; -chr20 hg19_knownGene exon 21686861 21687705 0.000000 + . gene_id "PAX1"; transcript_id "AK303335:uc010zsm.2"; -chr20 hg19_knownGene CDS 21689196 21689338 0.000000 + 2 gene_id "PAX1"; transcript_id "AK303335:uc010zsm.2"; -chr20 hg19_knownGene exon 21689196 21689338 0.000000 + . gene_id "PAX1"; transcript_id "AK303335:uc010zsm.2"; -chr20 hg19_knownGene CDS 21689860 21690082 0.000000 + 0 gene_id "PAX1"; transcript_id "AK303335:uc010zsm.2"; -chr20 hg19_knownGene exon 21689860 21690082 0.000000 + . gene_id "PAX1"; transcript_id "AK303335:uc010zsm.2"; -chr20 hg19_knownGene CDS 21695109 21695197 0.000000 + 2 gene_id "PAX1"; transcript_id "AK303335:uc010zsm.2"; -chr20 hg19_knownGene exon 21695109 21695747 0.000000 + . gene_id "PAX1"; transcript_id "AK303335:uc010zsm.2"; -chr20 hg19_knownGene CDS 21686351 21686636 0.000000 + 0 gene_id "PAX1"; transcript_id "NM_006192:uc002wsj.2"; -chr20 hg19_knownGene exon 21686297 21686636 0.000000 + . gene_id "PAX1"; transcript_id "NM_006192:uc002wsj.2"; -chr20 hg19_knownGene CDS 21687076 21687705 0.000000 + 2 gene_id "PAX1"; transcript_id "NM_006192:uc002wsj.2"; -chr20 hg19_knownGene exon 21687076 21687705 0.000000 + . gene_id "PAX1"; transcript_id "NM_006192:uc002wsj.2"; -chr20 hg19_knownGene CDS 21689196 21689338 0.000000 + 2 gene_id "PAX1"; transcript_id "NM_006192:uc002wsj.2"; -chr20 hg19_knownGene exon 21689196 21689338 0.000000 + . gene_id "PAX1"; transcript_id "NM_006192:uc002wsj.2"; -chr20 hg19_knownGene CDS 21689860 21690082 0.000000 + 0 gene_id "PAX1"; transcript_id "NM_006192:uc002wsj.2"; -chr20 hg19_knownGene exon 21689860 21690082 0.000000 + . gene_id "PAX1"; transcript_id "NM_006192:uc002wsj.2"; -chr20 hg19_knownGene CDS 21695119 21695438 0.000000 + 2 gene_id "PAX1"; transcript_id "NM_006192:uc002wsj.2"; -chr20 hg19_knownGene exon 21695119 21696620 0.000000 + . gene_id "PAX1"; transcript_id "NM_006192:uc002wsj.2"; -chr20 hg19_knownGene exon 22034728 22034922 0.000000 + . gene_id "LOC100270679"; transcript_id "NR_038394:uc021wbh.1"; -chr20 hg19_knownGene exon 22049077 22049326 0.000000 + . gene_id "LOC100270679"; transcript_id "NR_038394:uc021wbh.1"; -chr20 hg19_knownGene exon 22054026 22054104 0.000000 + . gene_id "LOC100270679"; transcript_id "NR_038394:uc021wbh.1"; -chr20 hg19_knownGene exon 22055140 22055292 0.000000 + . gene_id "LOC100270679"; transcript_id "NR_038394:uc021wbh.1"; -chr20 hg19_knownGene exon 22255046 22255184 0.000000 - . gene_id "CR627206"; transcript_id "CR627206:uc002wsk.1"; -chr20 hg19_knownGene exon 22257059 22261178 0.000000 - . gene_id "CR627206"; transcript_id "CR627206:uc002wsk.1"; -chr20 hg19_knownGene exon 22262992 22263124 0.000000 - . gene_id "CR627206"; transcript_id "CR627206:uc002wsk.1"; -chr20 hg19_knownGene exon 22380971 22381749 0.000000 - . gene_id "LOC284788"; transcript_id "NR_027089:uc010zsn.1"; -chr20 hg19_knownGene exon 22381964 22382100 0.000000 - . gene_id "LOC284788"; transcript_id "NR_027089:uc010zsn.1"; -chr20 hg19_knownGene exon 22387267 22387350 0.000000 - . gene_id "LOC284788"; transcript_id "NR_027089:uc010zsn.1"; -chr20 hg19_knownGene exon 22400598 22401281 0.000000 - . gene_id "LOC284788"; transcript_id "NR_027089:uc010zsn.1"; -chr20 hg19_knownGene exon 22380971 22381749 0.000000 - . gene_id "LOC284788"; transcript_id "NR_027090:uc010zso.1"; -chr20 hg19_knownGene exon 22381964 22382100 0.000000 - . gene_id "LOC284788"; transcript_id "NR_027090:uc010zso.1"; -chr20 hg19_knownGene exon 22400598 22401281 0.000000 - . gene_id "LOC284788"; transcript_id "NR_027090:uc010zso.1"; -chr20 hg19_knownGene exon 22541192 22545754 0.000000 - . gene_id "LINC00261"; transcript_id "NR_001558:uc010zsp.2"; -chr20 hg19_knownGene exon 22547321 22547443 0.000000 - . gene_id "LINC00261"; transcript_id "NR_001558:uc010zsp.2"; -chr20 hg19_knownGene exon 22548432 22548523 0.000000 - . gene_id "LINC00261"; transcript_id "NR_001558:uc010zsp.2"; -chr20 hg19_knownGene exon 22559148 22559280 0.000000 - . gene_id "LINC00261"; transcript_id "NR_001558:uc010zsp.2"; -chr20 hg19_knownGene CDS 22562491 22563792 0.000000 - 0 gene_id "FOXA2"; transcript_id "NM_021784:uc002wsm.3"; -chr20 hg19_knownGene exon 22561642 22563792 0.000000 - . gene_id "FOXA2"; transcript_id "NM_021784:uc002wsm.3"; -chr20 hg19_knownGene CDS 22564830 22564916 0.000000 - 0 gene_id "FOXA2"; transcript_id "NM_021784:uc002wsm.3"; -chr20 hg19_knownGene exon 22564830 22565101 0.000000 - . gene_id "FOXA2"; transcript_id "NM_021784:uc002wsm.3"; -chr20 hg19_knownGene CDS 22562491 22563792 0.000000 - 0 gene_id "FOXA2"; transcript_id "NM_153675:uc002wsn.3"; -chr20 hg19_knownGene exon 22561642 22563792 0.000000 - . gene_id "FOXA2"; transcript_id "NM_153675:uc002wsn.3"; -chr20 hg19_knownGene CDS 22564830 22564898 0.000000 - 0 gene_id "FOXA2"; transcript_id "NM_153675:uc002wsn.3"; -chr20 hg19_knownGene exon 22564830 22564899 0.000000 - . gene_id "FOXA2"; transcript_id "NM_153675:uc002wsn.3"; -chr20 hg19_knownGene exon 22565913 22566101 0.000000 - . gene_id "FOXA2"; transcript_id "NM_153675:uc002wsn.3"; -chr20 hg19_knownGene exon 22656710 22658895 0.000000 - . gene_id "AK055550"; transcript_id "AK055550:uc002wso.1"; -chr20 hg19_knownGene exon 22665383 22665514 0.000000 - . gene_id "AK055550"; transcript_id "AK055550:uc002wso.1"; -chr20 hg19_knownGene exon 22989742 22990906 0.000000 - . gene_id "BC045663"; transcript_id "BC045663:uc002wsq.2"; -chr20 hg19_knownGene exon 22991221 22991533 0.000000 - . gene_id "BC045663"; transcript_id "BC045663:uc002wsq.2"; -chr20 hg19_knownGene exon 22997393 22997495 0.000000 - . gene_id "BC045663"; transcript_id "BC045663:uc002wsq.2"; -chr20 hg19_knownGene exon 23011181 23011422 0.000000 - . gene_id "BC045663"; transcript_id "BC045663:uc002wsq.2"; -chr20 hg19_knownGene CDS 23016121 23017284 0.000000 + 0 gene_id "SSTR4"; transcript_id "NM_001052:uc002wsr.2"; -chr20 hg19_knownGene exon 23016057 23017314 0.000000 + . gene_id "SSTR4"; transcript_id "NM_001052:uc002wsr.2"; -chr20 hg19_knownGene exon 23026628 23027446 0.000000 - . gene_id "AX747264"; transcript_id "AX747264:uc002wst.1"; -chr20 hg19_knownGene exon 23027933 23028780 0.000000 - . gene_id "AX747264"; transcript_id "AX747264:uc002wst.1"; -chr20 hg19_knownGene CDS 23028597 23029964 0.000000 - 0 gene_id "THBD"; transcript_id "E38847:uc002wsu.1"; -chr20 hg19_knownGene exon 23028594 23030045 0.000000 - . gene_id "THBD"; transcript_id "E38847:uc002wsu.1"; -chr20 hg19_knownGene exon 23030095 23030141 0.000000 - . gene_id "THBD"; transcript_id "E38847:uc002wsu.1"; -chr20 hg19_knownGene CDS 23028417 23030141 0.000000 - 0 gene_id "THBD"; transcript_id "NM_000361:uc002wss.3"; -chr20 hg19_knownGene exon 23026270 23030301 0.000000 - . gene_id "THBD"; transcript_id "NM_000361:uc002wss.3"; -chr20 hg19_knownGene CDS 23064590 23064611 0.000000 - 1 gene_id "CD93"; transcript_id "NM_012072:uc002wsv.3"; -chr20 hg19_knownGene exon 23059993 23064611 0.000000 - . gene_id "CD93"; transcript_id "NM_012072:uc002wsv.3"; -chr20 hg19_knownGene CDS 23064896 23066829 0.000000 - 0 gene_id "CD93"; transcript_id "NM_012072:uc002wsv.3"; -chr20 hg19_knownGene exon 23064896 23066977 0.000000 - . gene_id "CD93"; transcript_id "NM_012072:uc002wsv.3"; -chr20 hg19_knownGene exon 23105705 23107175 0.000000 - . gene_id "LOC200261"; transcript_id "NR_034149:uc021wbi.1"; -chr20 hg19_knownGene exon 23109266 23109366 0.000000 - . gene_id "LOC200261"; transcript_id "NR_034149:uc021wbi.1"; -chr20 hg19_knownGene exon 23109602 23109802 0.000000 - . gene_id "LOC200261"; transcript_id "NR_034149:uc021wbi.1"; -chr20 hg19_knownGene exon 23113136 23113273 0.000000 - . gene_id "LOC200261"; transcript_id "NR_034149:uc021wbi.1"; -chr20 hg19_knownGene exon 23168598 23170942 0.000000 + . gene_id "AX747171"; transcript_id "AX747171:uc002wsw.1"; -chr20 hg19_knownGene CDS 23334679 23335098 0.000000 + 0 gene_id "NXT1"; transcript_id "CCDS13150:uc021wbj.1"; -chr20 hg19_knownGene exon 23334679 23335101 0.000000 + . gene_id "NXT1"; transcript_id "CCDS13150:uc021wbj.1"; -chr20 hg19_knownGene exon 23331373 23331698 0.000000 + . gene_id "NXT1"; transcript_id "NM_013248:uc002wsx.1"; -chr20 hg19_knownGene CDS 23334679 23335098 0.000000 + 0 gene_id "NXT1"; transcript_id "NM_013248:uc002wsx.1"; -chr20 hg19_knownGene exon 23334618 23335408 0.000000 + . gene_id "NXT1"; transcript_id "NM_013248:uc002wsx.1"; -chr20 hg19_knownGene exon 23342819 23342874 0.000000 + . gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene exon 23343858 23343954 0.000000 + . gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene CDS 23345021 23346384 0.000000 + 0 gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene exon 23345000 23346384 0.000000 + . gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene CDS 23347640 23347734 0.000000 + 1 gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene exon 23347640 23347734 0.000000 + . gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene CDS 23349399 23349566 0.000000 + 2 gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene exon 23349399 23349566 0.000000 + . gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene CDS 23350221 23350378 0.000000 + 2 gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene exon 23350221 23350378 0.000000 + . gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene CDS 23350728 23351075 0.000000 + 0 gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene exon 23350728 23353683 0.000000 + . gene_id "GZF1"; transcript_id "AK289814:uc010gdb.3"; -chr20 hg19_knownGene exon 23342819 23342874 0.000000 + . gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene CDS 23345021 23346384 0.000000 + 0 gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene exon 23345000 23346384 0.000000 + . gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene CDS 23347640 23347734 0.000000 + 1 gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene exon 23347640 23347734 0.000000 + . gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene CDS 23349399 23349566 0.000000 + 2 gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene exon 23349399 23349566 0.000000 + . gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene CDS 23350221 23350378 0.000000 + 2 gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene exon 23350221 23350378 0.000000 + . gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene CDS 23350728 23351075 0.000000 + 0 gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene exon 23350728 23353683 0.000000 + . gene_id "GZF1"; transcript_id "AK056477:uc002wsy.3"; -chr20 hg19_knownGene exon 23342819 23342874 0.000000 + . gene_id "GZF1"; transcript_id "AK295362:uc010zsq.2"; -chr20 hg19_knownGene CDS 23347704 23347734 0.000000 + 0 gene_id "GZF1"; transcript_id "AK295362:uc010zsq.2"; -chr20 hg19_knownGene exon 23347640 23347734 0.000000 + . gene_id "GZF1"; transcript_id "AK295362:uc010zsq.2"; -chr20 hg19_knownGene CDS 23349399 23349566 0.000000 + 2 gene_id "GZF1"; transcript_id "AK295362:uc010zsq.2"; -chr20 hg19_knownGene exon 23349399 23349566 0.000000 + . gene_id "GZF1"; transcript_id "AK295362:uc010zsq.2"; -chr20 hg19_knownGene CDS 23350221 23350378 0.000000 + 2 gene_id "GZF1"; transcript_id "AK295362:uc010zsq.2"; -chr20 hg19_knownGene exon 23350221 23350378 0.000000 + . gene_id "GZF1"; transcript_id "AK295362:uc010zsq.2"; -chr20 hg19_knownGene CDS 23350728 23351075 0.000000 + 0 gene_id "GZF1"; transcript_id "AK295362:uc010zsq.2"; -chr20 hg19_knownGene exon 23350728 23353683 0.000000 + . gene_id "GZF1"; transcript_id "AK295362:uc010zsq.2"; -chr20 hg19_knownGene exon 23342819 23342874 0.000000 + . gene_id "GZF1"; transcript_id "AK293942:uc010zsr.2"; -chr20 hg19_knownGene CDS 23349413 23349566 0.000000 + 0 gene_id "GZF1"; transcript_id "AK293942:uc010zsr.2"; -chr20 hg19_knownGene exon 23349399 23349566 0.000000 + . gene_id "GZF1"; transcript_id "AK293942:uc010zsr.2"; -chr20 hg19_knownGene CDS 23350221 23350378 0.000000 + 2 gene_id "GZF1"; transcript_id "AK293942:uc010zsr.2"; -chr20 hg19_knownGene exon 23350221 23350378 0.000000 + . gene_id "GZF1"; transcript_id "AK293942:uc010zsr.2"; -chr20 hg19_knownGene CDS 23350728 23351075 0.000000 + 0 gene_id "GZF1"; transcript_id "AK293942:uc010zsr.2"; -chr20 hg19_knownGene exon 23350728 23353683 0.000000 + . gene_id "GZF1"; transcript_id "AK293942:uc010zsr.2"; -chr20 hg19_knownGene CDS 23345021 23346384 0.000000 + 0 gene_id "GZF1"; transcript_id "NM_022482:uc002wsz.3"; -chr20 hg19_knownGene exon 23345000 23346384 0.000000 + . gene_id "GZF1"; transcript_id "NM_022482:uc002wsz.3"; -chr20 hg19_knownGene CDS 23347640 23347734 0.000000 + 1 gene_id "GZF1"; transcript_id "NM_022482:uc002wsz.3"; -chr20 hg19_knownGene exon 23347640 23347734 0.000000 + . gene_id "GZF1"; transcript_id "NM_022482:uc002wsz.3"; -chr20 hg19_knownGene CDS 23349399 23349566 0.000000 + 2 gene_id "GZF1"; transcript_id "NM_022482:uc002wsz.3"; -chr20 hg19_knownGene exon 23349399 23349566 0.000000 + . gene_id "GZF1"; transcript_id "NM_022482:uc002wsz.3"; -chr20 hg19_knownGene CDS 23350221 23350378 0.000000 + 2 gene_id "GZF1"; transcript_id "NM_022482:uc002wsz.3"; -chr20 hg19_knownGene exon 23350221 23350378 0.000000 + . gene_id "GZF1"; transcript_id "NM_022482:uc002wsz.3"; -chr20 hg19_knownGene CDS 23350728 23351075 0.000000 + 0 gene_id "GZF1"; transcript_id "NM_022482:uc002wsz.3"; -chr20 hg19_knownGene exon 23350728 23353683 0.000000 + . gene_id "GZF1"; transcript_id "NM_022482:uc002wsz.3"; -chr20 hg19_knownGene CDS 23358016 23358123 0.000000 - 0 gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene exon 23356710 23358123 0.000000 - . gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene CDS 23360082 23360132 0.000000 - 0 gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene exon 23360082 23360132 0.000000 - . gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene CDS 23360504 23360572 0.000000 - 0 gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene exon 23360504 23360572 0.000000 - . gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene CDS 23361850 23361954 0.000000 - 0 gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene exon 23361850 23361954 0.000000 - . gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene CDS 23370583 23370667 0.000000 - 1 gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene exon 23370583 23370667 0.000000 - . gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene CDS 23370846 23370901 0.000000 - 0 gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene exon 23370846 23370901 0.000000 - . gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene CDS 23375559 23375636 0.000000 - 0 gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene exon 23375559 23375636 0.000000 - . gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene CDS 23375776 23375778 0.000000 - 0 gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene exon 23375776 23375834 0.000000 - . gene_id "NAPB"; transcript_id "AK295791:uc010zss.1"; -chr20 hg19_knownGene CDS 23358016 23358123 0.000000 - 0 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23355156 23358123 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23360082 23360132 0.000000 - 0 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23360082 23360132 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23360504 23360572 0.000000 - 0 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23360504 23360572 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23361850 23361954 0.000000 - 0 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23361850 23361954 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23370583 23370667 0.000000 - 1 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23370583 23370667 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23370846 23370901 0.000000 - 0 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23370846 23370901 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23375559 23375636 0.000000 - 0 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23375559 23375636 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23375776 23375822 0.000000 - 2 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23375776 23375822 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23377709 23377825 0.000000 - 2 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23377709 23377825 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23383630 23383709 0.000000 - 1 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23383630 23383709 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23401942 23402039 0.000000 - 0 gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene exon 23401942 23402156 0.000000 - . gene_id "NAPB"; transcript_id "NM_022080:uc002wta.3"; -chr20 hg19_knownGene CDS 23358016 23358123 0.000000 - 0 gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene exon 23355156 23358123 0.000000 - . gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene CDS 23360082 23360132 0.000000 - 0 gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene exon 23360082 23360132 0.000000 - . gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene CDS 23360504 23360572 0.000000 - 0 gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene exon 23360504 23360572 0.000000 - . gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene CDS 23361850 23361954 0.000000 - 0 gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene exon 23361850 23361954 0.000000 - . gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene CDS 23370583 23370667 0.000000 - 1 gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene exon 23370583 23370667 0.000000 - . gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene CDS 23370846 23370901 0.000000 - 0 gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene exon 23370846 23370901 0.000000 - . gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene CDS 23375559 23375636 0.000000 - 0 gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene exon 23375559 23375636 0.000000 - . gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene CDS 23377709 23377768 0.000000 - 0 gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene exon 23377709 23377825 0.000000 - . gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene exon 23383630 23383709 0.000000 - . gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene exon 23401942 23402156 0.000000 - . gene_id "NAPB"; transcript_id "BC047426:uc002wtc.3"; -chr20 hg19_knownGene CDS 23358016 23358123 0.000000 - 0 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23355156 23358123 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene CDS 23360082 23360132 0.000000 - 0 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23360082 23360132 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene CDS 23360504 23360572 0.000000 - 0 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23360504 23360572 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene CDS 23361850 23361954 0.000000 - 0 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23361850 23361954 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene CDS 23370583 23370667 0.000000 - 1 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23370583 23370667 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene CDS 23370846 23370901 0.000000 - 0 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23370846 23370901 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene CDS 23375559 23375636 0.000000 - 0 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23375559 23375636 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene CDS 23375776 23375822 0.000000 - 2 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23375776 23375822 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene CDS 23377709 23377837 0.000000 - 2 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23377709 23377837 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene CDS 23383630 23383709 0.000000 - 1 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23383630 23383709 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene CDS 23401942 23402039 0.000000 - 0 gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23401942 23402156 0.000000 - . gene_id "NAPB"; transcript_id "AK124876:uc002wtb.3"; -chr20 hg19_knownGene exon 23355829 23356289 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene exon 23356710 23358123 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene exon 23360082 23360132 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene exon 23360504 23360572 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene exon 23361850 23361954 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene exon 23370583 23370667 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene exon 23370846 23370901 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene exon 23375559 23375636 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene exon 23377709 23377819 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene exon 23383630 23383709 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene exon 23401942 23402156 0.000000 - . gene_id "NAPB"; transcript_id "BX648330:uc002wtd.4"; -chr20 hg19_knownGene CDS 23358016 23358123 0.000000 - 0 gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23356710 23358123 0.000000 - . gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene CDS 23360082 23360132 0.000000 - 0 gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23360082 23360132 0.000000 - . gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene CDS 23360504 23360572 0.000000 - 0 gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23360504 23360572 0.000000 - . gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene CDS 23361850 23361954 0.000000 - 0 gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23361850 23361954 0.000000 - . gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene CDS 23370583 23370667 0.000000 - 1 gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23370583 23370667 0.000000 - . gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene CDS 23370846 23370901 0.000000 - 0 gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23370846 23370901 0.000000 - . gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene CDS 23375559 23375636 0.000000 - 0 gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23375559 23375636 0.000000 - . gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene CDS 23375776 23375822 0.000000 - 2 gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23375776 23375822 0.000000 - . gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene CDS 23383630 23383709 0.000000 - 1 gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23383630 23383709 0.000000 - . gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene CDS 23401942 23402039 0.000000 - 0 gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23401942 23402156 0.000000 - . gene_id "NAPB"; transcript_id "AK296385:uc010zst.1"; -chr20 hg19_knownGene exon 23420322 23420443 0.000000 + . gene_id "CSTL1"; transcript_id "NM_138283:uc002wte.3"; -chr20 hg19_knownGene CDS 23420905 23421123 0.000000 + 0 gene_id "CSTL1"; transcript_id "NM_138283:uc002wte.3"; -chr20 hg19_knownGene exon 23420781 23421123 0.000000 + . gene_id "CSTL1"; transcript_id "NM_138283:uc002wte.3"; -chr20 hg19_knownGene CDS 23424571 23424681 0.000000 + 0 gene_id "CSTL1"; transcript_id "NM_138283:uc002wte.3"; -chr20 hg19_knownGene exon 23424571 23424681 0.000000 + . gene_id "CSTL1"; transcript_id "NM_138283:uc002wte.3"; -chr20 hg19_knownGene CDS 23425408 23425512 0.000000 + 0 gene_id "CSTL1"; transcript_id "NM_138283:uc002wte.3"; -chr20 hg19_knownGene exon 23425408 23425567 0.000000 + . gene_id "CSTL1"; transcript_id "NM_138283:uc002wte.3"; -chr20 hg19_knownGene exon 23420781 23421123 0.000000 + . gene_id "CSTL1"; transcript_id "FJ895879:uc010zsu.2"; -chr20 hg19_knownGene exon 23421414 23421536 0.000000 + . gene_id "CSTL1"; transcript_id "FJ895879:uc010zsu.2"; -chr20 hg19_knownGene exon 23424571 23424681 0.000000 + . gene_id "CSTL1"; transcript_id "FJ895879:uc010zsu.2"; -chr20 hg19_knownGene exon 23425408 23425567 0.000000 + . gene_id "CSTL1"; transcript_id "FJ895879:uc010zsu.2"; -chr20 hg19_knownGene exon 23420781 23421123 0.000000 + . gene_id "CSTL1"; transcript_id "FJ895880:uc010zsv.2"; -chr20 hg19_knownGene exon 23421489 23421536 0.000000 + . gene_id "CSTL1"; transcript_id "FJ895880:uc010zsv.2"; -chr20 hg19_knownGene exon 23424571 23424681 0.000000 + . gene_id "CSTL1"; transcript_id "FJ895880:uc010zsv.2"; -chr20 hg19_knownGene exon 23425408 23425567 0.000000 + . gene_id "CSTL1"; transcript_id "FJ895880:uc010zsv.2"; -chr20 hg19_knownGene CDS 23431146 23431226 0.000000 - 0 gene_id "CST11"; transcript_id "NM_130794:uc002wtf.1"; -chr20 hg19_knownGene exon 23431041 23431226 0.000000 - . gene_id "CST11"; transcript_id "NM_130794:uc002wtf.1"; -chr20 hg19_knownGene CDS 23432453 23432557 0.000000 - 0 gene_id "CST11"; transcript_id "NM_130794:uc002wtf.1"; -chr20 hg19_knownGene exon 23432453 23432557 0.000000 - . gene_id "CST11"; transcript_id "NM_130794:uc002wtf.1"; -chr20 hg19_knownGene CDS 23433221 23433448 0.000000 - 0 gene_id "CST11"; transcript_id "NM_130794:uc002wtf.1"; -chr20 hg19_knownGene exon 23433221 23433482 0.000000 - . gene_id "CST11"; transcript_id "NM_130794:uc002wtf.1"; -chr20 hg19_knownGene CDS 23431146 23431226 0.000000 - 0 gene_id "CST11"; transcript_id "NM_080830:uc002wtg.1"; -chr20 hg19_knownGene exon 23431041 23431226 0.000000 - . gene_id "CST11"; transcript_id "NM_080830:uc002wtg.1"; -chr20 hg19_knownGene CDS 23433221 23433448 0.000000 - 0 gene_id "CST11"; transcript_id "NM_080830:uc002wtg.1"; -chr20 hg19_knownGene exon 23433221 23433482 0.000000 - . gene_id "CST11"; transcript_id "NM_080830:uc002wtg.1"; -chr20 hg19_knownGene exon 23471766 23471979 0.000000 + . gene_id "CST8"; transcript_id "NM_005492:uc002wth.1"; -chr20 hg19_knownGene CDS 23472305 23472535 0.000000 + 0 gene_id "CST8"; transcript_id "NM_005492:uc002wth.1"; -chr20 hg19_knownGene exon 23472162 23472535 0.000000 + . gene_id "CST8"; transcript_id "NM_005492:uc002wth.1"; -chr20 hg19_knownGene CDS 23473595 23473708 0.000000 + 0 gene_id "CST8"; transcript_id "NM_005492:uc002wth.1"; -chr20 hg19_knownGene exon 23473595 23473708 0.000000 + . gene_id "CST8"; transcript_id "NM_005492:uc002wth.1"; -chr20 hg19_knownGene CDS 23476468 23476548 0.000000 + 0 gene_id "CST8"; transcript_id "NM_005492:uc002wth.1"; -chr20 hg19_knownGene exon 23476468 23476655 0.000000 + . gene_id "CST8"; transcript_id "NM_005492:uc002wth.1"; -chr20 hg19_knownGene exon 23499783 23500121 0.000000 + . gene_id "CSTT"; transcript_id "NR_001279:uc002wti.3"; -chr20 hg19_knownGene exon 23501384 23501745 0.000000 + . gene_id "CSTT"; transcript_id "NR_001279:uc002wti.3"; -chr20 hg19_knownGene exon 23514835 23514945 0.000000 + . gene_id "CSTT"; transcript_id "NR_001279:uc002wti.3"; -chr20 hg19_knownGene exon 23522311 23522655 0.000000 + . gene_id "CSTT"; transcript_id "NR_001279:uc002wti.3"; -chr20 hg19_knownGene exon 23499783 23500121 0.000000 + . gene_id "CSTT"; transcript_id "BC041171:uc002wtj.3"; -chr20 hg19_knownGene exon 23501387 23501745 0.000000 + . gene_id "CSTT"; transcript_id "BC041171:uc002wtj.3"; -chr20 hg19_knownGene exon 23514835 23514945 0.000000 + . gene_id "CSTT"; transcript_id "BC041171:uc002wtj.3"; -chr20 hg19_knownGene exon 23522311 23522655 0.000000 + . gene_id "CSTT"; transcript_id "BC041171:uc002wtj.3"; -chr20 hg19_knownGene CDS 23545588 23545674 0.000000 - 0 gene_id "CST9L"; transcript_id "NM_080610:uc002wtk.4"; -chr20 hg19_knownGene exon 23545370 23545674 0.000000 - . gene_id "CST9L"; transcript_id "NM_080610:uc002wtk.4"; -chr20 hg19_knownGene CDS 23546611 23546724 0.000000 - 0 gene_id "CST9L"; transcript_id "NM_080610:uc002wtk.4"; -chr20 hg19_knownGene exon 23546611 23546724 0.000000 - . gene_id "CST9L"; transcript_id "NM_080610:uc002wtk.4"; -chr20 hg19_knownGene CDS 23548848 23549087 0.000000 - 0 gene_id "CST9L"; transcript_id "NM_080610:uc002wtk.4"; -chr20 hg19_knownGene exon 23548848 23549386 0.000000 - . gene_id "CST9L"; transcript_id "NM_080610:uc002wtk.4"; -chr20 hg19_knownGene CDS 23584150 23584371 0.000000 - 0 gene_id "CST9"; transcript_id "NM_001008693:uc002wtl.3"; -chr20 hg19_knownGene exon 23583047 23584371 0.000000 - . gene_id "CST9"; transcript_id "NM_001008693:uc002wtl.3"; -chr20 hg19_knownGene CDS 23586247 23586501 0.000000 - 0 gene_id "CST9"; transcript_id "NM_001008693:uc002wtl.3"; -chr20 hg19_knownGene exon 23586247 23586610 0.000000 - . gene_id "CST9"; transcript_id "NM_001008693:uc002wtl.3"; -chr20 hg19_knownGene exon 23608534 23610102 0.000000 - . gene_id "CST3"; transcript_id "BX647523:uc002wtm.3"; -chr20 hg19_knownGene CDS 23614556 23614636 0.000000 - 0 gene_id "CST3"; transcript_id "BX647523:uc002wtm.3"; -chr20 hg19_knownGene exon 23614551 23614636 0.000000 - . gene_id "CST3"; transcript_id "BX647523:uc002wtm.3"; -chr20 hg19_knownGene CDS 23615891 23616004 0.000000 - 0 gene_id "CST3"; transcript_id "BX647523:uc002wtm.3"; -chr20 hg19_knownGene exon 23615891 23616004 0.000000 - . gene_id "CST3"; transcript_id "BX647523:uc002wtm.3"; -chr20 hg19_knownGene CDS 23618257 23618499 0.000000 - 0 gene_id "CST3"; transcript_id "BX647523:uc002wtm.3"; -chr20 hg19_knownGene exon 23618257 23618574 0.000000 - . gene_id "CST3"; transcript_id "BX647523:uc002wtm.3"; -chr20 hg19_knownGene CDS 23614556 23614636 0.000000 - 0 gene_id "CST3"; transcript_id "NM_000099:uc002wtn.1"; -chr20 hg19_knownGene exon 23614294 23614636 0.000000 - . gene_id "CST3"; transcript_id "NM_000099:uc002wtn.1"; -chr20 hg19_knownGene CDS 23615891 23616004 0.000000 - 0 gene_id "CST3"; transcript_id "NM_000099:uc002wtn.1"; -chr20 hg19_knownGene exon 23615891 23616004 0.000000 - . gene_id "CST3"; transcript_id "NM_000099:uc002wtn.1"; -chr20 hg19_knownGene CDS 23618257 23618499 0.000000 - 0 gene_id "CST3"; transcript_id "NM_000099:uc002wtn.1"; -chr20 hg19_knownGene exon 23618257 23618574 0.000000 - . gene_id "CST3"; transcript_id "NM_000099:uc002wtn.1"; -chr20 hg19_knownGene CDS 23666534 23666614 0.000000 - 0 gene_id "CST4"; transcript_id "NM_001899:uc002wto.1"; -chr20 hg19_knownGene exon 23666277 23666614 0.000000 - . gene_id "CST4"; transcript_id "NM_001899:uc002wto.1"; -chr20 hg19_knownGene CDS 23667725 23667838 0.000000 - 0 gene_id "CST4"; transcript_id "NM_001899:uc002wto.1"; -chr20 hg19_knownGene exon 23667725 23667838 0.000000 - . gene_id "CST4"; transcript_id "NM_001899:uc002wto.1"; -chr20 hg19_knownGene CDS 23669379 23669606 0.000000 - 0 gene_id "CST4"; transcript_id "NM_001899:uc002wto.1"; -chr20 hg19_knownGene exon 23669379 23669662 0.000000 - . gene_id "CST4"; transcript_id "NM_001899:uc002wto.1"; -chr20 hg19_knownGene CDS 23728456 23728536 0.000000 - 0 gene_id "CST1"; transcript_id "NM_001898:uc002wtp.3"; -chr20 hg19_knownGene exon 23728190 23728536 0.000000 - . gene_id "CST1"; transcript_id "NM_001898:uc002wtp.3"; -chr20 hg19_knownGene CDS 23729653 23729766 0.000000 - 0 gene_id "CST1"; transcript_id "NM_001898:uc002wtp.3"; -chr20 hg19_knownGene exon 23729653 23729766 0.000000 - . gene_id "CST1"; transcript_id "NM_001898:uc002wtp.3"; -chr20 hg19_knownGene CDS 23731276 23731503 0.000000 - 0 gene_id "CST1"; transcript_id "NM_001898:uc002wtp.3"; -chr20 hg19_knownGene exon 23731276 23731574 0.000000 - . gene_id "CST1"; transcript_id "NM_001898:uc002wtp.3"; -chr20 hg19_knownGene CDS 23804660 23804740 0.000000 - 0 gene_id "CST2"; transcript_id "NM_001322:uc002wtq.1"; -chr20 hg19_knownGene exon 23804404 23804740 0.000000 - . gene_id "CST2"; transcript_id "NM_001322:uc002wtq.1"; -chr20 hg19_knownGene CDS 23805847 23805960 0.000000 - 0 gene_id "CST2"; transcript_id "NM_001322:uc002wtq.1"; -chr20 hg19_knownGene exon 23805847 23805960 0.000000 - . gene_id "CST2"; transcript_id "NM_001322:uc002wtq.1"; -chr20 hg19_knownGene CDS 23807070 23807297 0.000000 - 0 gene_id "CST2"; transcript_id "NM_001322:uc002wtq.1"; -chr20 hg19_knownGene exon 23807070 23807312 0.000000 - . gene_id "CST2"; transcript_id "NM_001322:uc002wtq.1"; -chr20 hg19_knownGene CDS 23856828 23856908 0.000000 - 0 gene_id "CST5"; transcript_id "NM_001900:uc002wtr.1"; -chr20 hg19_knownGene exon 23856572 23856908 0.000000 - . gene_id "CST5"; transcript_id "NM_001900:uc002wtr.1"; -chr20 hg19_knownGene CDS 23858142 23858255 0.000000 - 0 gene_id "CST5"; transcript_id "NM_001900:uc002wtr.1"; -chr20 hg19_knownGene exon 23858142 23858255 0.000000 - . gene_id "CST5"; transcript_id "NM_001900:uc002wtr.1"; -chr20 hg19_knownGene CDS 23860083 23860313 0.000000 - 0 gene_id "CST5"; transcript_id "NM_001900:uc002wtr.1"; -chr20 hg19_knownGene exon 23860083 23860380 0.000000 - . gene_id "CST5"; transcript_id "NM_001900:uc002wtr.1"; -chr20 hg19_knownGene CDS 23965856 23965999 0.000000 - 0 gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene exon 23965690 23965999 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene CDS 23966304 23966417 0.000000 - 0 gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene exon 23966304 23966417 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene CDS 23966499 23966611 0.000000 - 2 gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene exon 23966499 23966611 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene CDS 23966713 23966840 0.000000 - 1 gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene exon 23966713 23966840 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene CDS 23967073 23967248 0.000000 - 0 gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene exon 23967073 23967282 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene exon 23967414 23967512 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178312:uc002wts.3"; -chr20 hg19_knownGene CDS 23965856 23965999 0.000000 - 0 gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene exon 23965690 23965999 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene CDS 23966304 23966417 0.000000 - 0 gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene exon 23966304 23966417 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene CDS 23966499 23966611 0.000000 - 2 gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene exon 23966499 23966611 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene CDS 23966713 23966840 0.000000 - 1 gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene exon 23966713 23966840 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene CDS 23967073 23967248 0.000000 - 0 gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene exon 23967073 23967282 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene exon 23969246 23969416 0.000000 - . gene_id "GGTLC1"; transcript_id "NM_178311:uc002wtu.3"; -chr20 hg19_knownGene exon 23969723 23969753 0.000000 + . gene_id "DQ583395"; transcript_id "DQ583395:uc021wbk.1"; -chr20 hg19_knownGene exon 24180403 24180470 0.000000 + . gene_id "FLJ33581"; transcript_id "NR_040102:uc002wtv.1"; -chr20 hg19_knownGene exon 24191985 24193327 0.000000 + . gene_id "FLJ33581"; transcript_id "NR_040102:uc002wtv.1"; -chr20 hg19_knownGene exon 24200259 24200338 0.000000 + . gene_id "FLJ33581"; transcript_id "NR_040102:uc002wtv.1"; -chr20 hg19_knownGene exon 24204340 24205224 0.000000 + . gene_id "FLJ33581"; transcript_id "NR_040102:uc002wtv.1"; -chr20 hg19_knownGene exon 24449835 24450389 0.000000 + . gene_id "SYNDIG1"; transcript_id "NM_024893:uc002wtw.1"; -chr20 hg19_knownGene CDS 24523734 24524213 0.000000 + 0 gene_id "SYNDIG1"; transcript_id "NM_024893:uc002wtw.1"; -chr20 hg19_knownGene exon 24523656 24524213 0.000000 + . gene_id "SYNDIG1"; transcript_id "NM_024893:uc002wtw.1"; -chr20 hg19_knownGene CDS 24565492 24565629 0.000000 + 0 gene_id "SYNDIG1"; transcript_id "NM_024893:uc002wtw.1"; -chr20 hg19_knownGene exon 24565492 24565629 0.000000 + . gene_id "SYNDIG1"; transcript_id "NM_024893:uc002wtw.1"; -chr20 hg19_knownGene CDS 24645982 24646137 0.000000 + 0 gene_id "SYNDIG1"; transcript_id "NM_024893:uc002wtw.1"; -chr20 hg19_knownGene exon 24645982 24647167 0.000000 + . gene_id "SYNDIG1"; transcript_id "NM_024893:uc002wtw.1"; -chr20 hg19_knownGene CDS 24930142 24930211 0.000000 + 0 gene_id "CST7"; transcript_id "NM_003650:uc002wtx.2"; -chr20 hg19_knownGene exon 24929866 24930211 0.000000 + . gene_id "CST7"; transcript_id "NM_003650:uc002wtx.2"; -chr20 hg19_knownGene CDS 24937923 24938095 0.000000 + 2 gene_id "CST7"; transcript_id "NM_003650:uc002wtx.2"; -chr20 hg19_knownGene exon 24937923 24938095 0.000000 + . gene_id "CST7"; transcript_id "NM_003650:uc002wtx.2"; -chr20 hg19_knownGene CDS 24939564 24939680 0.000000 + 0 gene_id "CST7"; transcript_id "NM_003650:uc002wtx.2"; -chr20 hg19_knownGene exon 24939564 24939680 0.000000 + . gene_id "CST7"; transcript_id "NM_003650:uc002wtx.2"; -chr20 hg19_knownGene CDS 24940271 24940345 0.000000 + 0 gene_id "CST7"; transcript_id "NM_003650:uc002wtx.2"; -chr20 hg19_knownGene exon 24940271 24940564 0.000000 + . gene_id "CST7"; transcript_id "NM_003650:uc002wtx.2"; -chr20 hg19_knownGene CDS 24944452 24944658 0.000000 - 0 gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene exon 24943580 24944658 0.000000 - . gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene CDS 24949528 24949720 0.000000 - 1 gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene exon 24949528 24949720 0.000000 - . gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene CDS 24950162 24950296 0.000000 - 1 gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene exon 24950162 24950296 0.000000 - . gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene CDS 24950833 24951007 0.000000 - 2 gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene exon 24950833 24951007 0.000000 - . gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene CDS 24952096 24952212 0.000000 - 2 gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene exon 24952096 24952212 0.000000 - . gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene CDS 24954281 24954373 0.000000 - 2 gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene exon 24954281 24954373 0.000000 - . gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene CDS 24959403 24959518 0.000000 - 1 gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene exon 24959403 24959518 0.000000 - . gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene CDS 24964539 24964655 0.000000 - 1 gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene exon 24964539 24964655 0.000000 - . gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene CDS 24973230 24973324 0.000000 - 0 gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene exon 24973230 24973425 0.000000 - . gene_id "C20orf3"; transcript_id "NM_020531:uc002wty.3"; -chr20 hg19_knownGene CDS 24944452 24944658 0.000000 - 0 gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene exon 24943580 24944658 0.000000 - . gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene CDS 24945011 24945034 0.000000 - 0 gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene exon 24945011 24945034 0.000000 - . gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene CDS 24949528 24949720 0.000000 - 1 gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene exon 24949528 24949720 0.000000 - . gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene CDS 24950162 24950296 0.000000 - 1 gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene exon 24950162 24950296 0.000000 - . gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene CDS 24950833 24951007 0.000000 - 2 gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene exon 24950833 24951007 0.000000 - . gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene CDS 24952096 24952212 0.000000 - 2 gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene exon 24952096 24952212 0.000000 - . gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene CDS 24954281 24954373 0.000000 - 2 gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene exon 24954281 24954373 0.000000 - . gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene CDS 24959403 24959518 0.000000 - 1 gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene exon 24959403 24959518 0.000000 - . gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene CDS 24964539 24964655 0.000000 - 1 gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene exon 24964539 24964655 0.000000 - . gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene CDS 24973230 24973324 0.000000 - 0 gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene exon 24973230 24973425 0.000000 - . gene_id "C20orf3"; transcript_id "AF090935:uc002wtz.3"; -chr20 hg19_knownGene CDS 24944640 24944658 0.000000 - 1 gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene exon 24943580 24944658 0.000000 - . gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene CDS 24950162 24950296 0.000000 - 1 gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene exon 24950162 24950296 0.000000 - . gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene CDS 24950833 24951007 0.000000 - 2 gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene exon 24950833 24951007 0.000000 - . gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene CDS 24952096 24952212 0.000000 - 2 gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene exon 24952096 24952212 0.000000 - . gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene CDS 24954281 24954373 0.000000 - 2 gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene exon 24954281 24954373 0.000000 - . gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene CDS 24959403 24959518 0.000000 - 1 gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene exon 24959403 24959518 0.000000 - . gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene CDS 24964539 24964655 0.000000 - 1 gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene exon 24964539 24964655 0.000000 - . gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene CDS 24973230 24973324 0.000000 - 0 gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene exon 24973230 24973425 0.000000 - . gene_id "C20orf3"; transcript_id "AK301959:uc010zsw.2"; -chr20 hg19_knownGene exon 24986874 24987233 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene exon 24987266 24988577 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene exon 24989906 24990024 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene exon 24993237 24993300 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene exon 24993448 24993575 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene exon 24994172 24994298 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene exon 24994597 24994709 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene exon 24995774 24995866 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene exon 25000646 25000783 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene exon 25002025 25002172 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene exon 25003576 25003728 0.000000 - . gene_id "ACSS1"; transcript_id "AX747458:uc002wud.1"; -chr20 hg19_knownGene CDS 24988401 24988577 0.000000 - 0 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 24986866 24988577 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 24989906 24990024 0.000000 - 2 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 24989906 24990024 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 24993237 24993300 0.000000 - 0 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 24993237 24993300 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 24993448 24993575 0.000000 - 2 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 24993448 24993575 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 24994172 24994298 0.000000 - 0 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 24994172 24994298 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 24994597 24994709 0.000000 - 2 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 24994597 24994709 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 24995774 24995866 0.000000 - 2 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 24995774 24995866 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 25000646 25000783 0.000000 - 2 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 25000646 25000783 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 25002025 25002172 0.000000 - 0 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 25002025 25002172 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 25003576 25003728 0.000000 - 0 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 25003576 25003728 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 25004102 25004277 0.000000 - 2 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 25004102 25004277 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 25011395 25011776 0.000000 - 0 gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene exon 25011395 25013308 0.000000 - . gene_id "ACSS1"; transcript_id "AK125058:uc002wua.3"; -chr20 hg19_knownGene CDS 24988401 24988577 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 24986866 24988577 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 24989906 24990024 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 24989906 24990024 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 24993237 24993300 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 24993237 24993300 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 24993448 24993575 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 24993448 24993575 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 24994172 24994298 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 24994172 24994298 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 24994597 24994709 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 24994597 24994709 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 24995774 24995866 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 24995774 24995866 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 25000646 25000783 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 25000646 25000783 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 25002025 25002172 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 25002025 25002172 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 25003576 25003728 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 25003576 25003728 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 25004102 25004277 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 25004102 25004277 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 25011395 25011594 0.000000 - 1 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 25011395 25011594 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 25013005 25013072 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene exon 25013005 25013342 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252676:uc021wbl.1"; -chr20 hg19_knownGene CDS 24988401 24988577 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 24986866 24988577 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 24989906 24990024 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 24989906 24990024 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 24993237 24993300 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 24993237 24993300 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 24993448 24993575 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 24993448 24993575 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 24994172 24994298 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 24994172 24994298 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 24994597 24994709 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 24994597 24994709 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 24995774 24995866 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 24995774 24995866 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 25000646 25000783 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 25000646 25000783 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 25002025 25002172 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 25002025 25002172 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 25003576 25003728 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 25003576 25003728 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 25004102 25004277 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 25004102 25004277 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 25011395 25011594 0.000000 - 1 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 25011395 25011594 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 25028721 25028817 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 25028721 25028817 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 25038405 25038738 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene exon 25038405 25038818 0.000000 - . gene_id "ACSS1"; transcript_id "NM_032501:uc002wub.3"; -chr20 hg19_knownGene CDS 24988401 24988577 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 24986866 24988577 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 24989906 24990024 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 24989906 24990024 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 24993237 24993300 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 24993237 24993300 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 24993448 24993575 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 24993448 24993575 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 24994172 24994298 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 24994172 24994298 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 24994597 24994703 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 24994597 24994703 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 24995774 24995866 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 24995774 24995866 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 25000646 25000783 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 25000646 25000783 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 25002025 25002172 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 25002025 25002172 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 25003576 25003728 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 25003576 25003728 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 25004102 25004277 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 25004102 25004277 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 25011395 25011594 0.000000 - 1 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 25011395 25011594 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 25028721 25028817 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 25028721 25028817 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 25038405 25038738 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene exon 25038405 25038818 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252675:uc002wuc.3"; -chr20 hg19_knownGene CDS 24987499 24987561 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 24986866 24987561 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 24993448 24993575 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 24993448 24993575 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 24994172 24994298 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 24994172 24994298 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 24994597 24994709 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 24994597 24994709 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 24995774 24995866 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 24995774 24995866 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 25000646 25000783 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 25000646 25000783 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 25002025 25002172 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 25002025 25002172 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 25003576 25003728 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 25003576 25003728 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 25004102 25004277 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 25004102 25004277 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 25011395 25011594 0.000000 - 1 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 25011395 25011594 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 25028721 25028817 0.000000 - 2 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 25028721 25028817 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 25038405 25038738 0.000000 - 0 gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene exon 25038405 25038818 0.000000 - . gene_id "ACSS1"; transcript_id "NM_001252677:uc021wbm.1"; -chr20 hg19_knownGene CDS 24988401 24988577 0.000000 - 0 gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 24986866 24988577 0.000000 - . gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene CDS 24989906 24990024 0.000000 - 2 gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 24989906 24990024 0.000000 - . gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene CDS 24993237 24993300 0.000000 - 0 gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 24993237 24993300 0.000000 - . gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene CDS 24993448 24993575 0.000000 - 2 gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 24993448 24993575 0.000000 - . gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene CDS 24994172 24994298 0.000000 - 0 gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 24994172 24994298 0.000000 - . gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene CDS 24994597 24994709 0.000000 - 2 gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 24994597 24994709 0.000000 - . gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene CDS 24995774 24995866 0.000000 - 2 gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 24995774 24995866 0.000000 - . gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene CDS 25011395 25011594 0.000000 - 1 gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 25011395 25011594 0.000000 - . gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene CDS 25028721 25028817 0.000000 - 2 gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 25028721 25028817 0.000000 - . gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene CDS 25038405 25038738 0.000000 - 0 gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 25038405 25038818 0.000000 - . gene_id "ACSS1"; transcript_id "AL832939:uc010gdc.3"; -chr20 hg19_knownGene exon 25052130 25052654 0.000000 - . gene_id "VSX1"; transcript_id "DQ854809:uc002wue.3"; -chr20 hg19_knownGene exon 25053172 25053279 0.000000 - . gene_id "VSX1"; transcript_id "DQ854809:uc002wue.3"; -chr20 hg19_knownGene exon 25058321 25058501 0.000000 - . gene_id "VSX1"; transcript_id "DQ854809:uc002wue.3"; -chr20 hg19_knownGene exon 25059465 25059588 0.000000 - . gene_id "VSX1"; transcript_id "DQ854809:uc002wue.3"; -chr20 hg19_knownGene exon 25060072 25060150 0.000000 - . gene_id "VSX1"; transcript_id "DQ854809:uc002wue.3"; -chr20 hg19_knownGene exon 25062309 25062767 0.000000 - . gene_id "VSX1"; transcript_id "DQ854809:uc002wue.3"; -chr20 hg19_knownGene CDS 25052560 25052654 0.000000 - 2 gene_id "VSX1"; transcript_id "DQ854812:uc010gdd.2"; -chr20 hg19_knownGene exon 25052130 25052654 0.000000 - . gene_id "VSX1"; transcript_id "DQ854812:uc010gdd.2"; -chr20 hg19_knownGene CDS 25058321 25058501 0.000000 - 0 gene_id "VSX1"; transcript_id "DQ854812:uc010gdd.2"; -chr20 hg19_knownGene exon 25058321 25058501 0.000000 - . gene_id "VSX1"; transcript_id "DQ854812:uc010gdd.2"; -chr20 hg19_knownGene CDS 25059465 25059588 0.000000 - 1 gene_id "VSX1"; transcript_id "DQ854812:uc010gdd.2"; -chr20 hg19_knownGene exon 25059465 25059588 0.000000 - . gene_id "VSX1"; transcript_id "DQ854812:uc010gdd.2"; -chr20 hg19_knownGene CDS 25060072 25060150 0.000000 - 2 gene_id "VSX1"; transcript_id "DQ854812:uc010gdd.2"; -chr20 hg19_knownGene exon 25060072 25060150 0.000000 - . gene_id "VSX1"; transcript_id "DQ854812:uc010gdd.2"; -chr20 hg19_knownGene CDS 25062309 25062732 0.000000 - 0 gene_id "VSX1"; transcript_id "DQ854812:uc010gdd.2"; -chr20 hg19_knownGene exon 25062309 25062767 0.000000 - . gene_id "VSX1"; transcript_id "DQ854812:uc010gdd.2"; -chr20 hg19_knownGene exon 25052130 25052654 0.000000 - . gene_id "VSX1"; transcript_id "DQ854810:uc010gde.2"; -chr20 hg19_knownGene exon 25053172 25053279 0.000000 - . gene_id "VSX1"; transcript_id "DQ854810:uc010gde.2"; -chr20 hg19_knownGene exon 25059465 25059588 0.000000 - . gene_id "VSX1"; transcript_id "DQ854810:uc010gde.2"; -chr20 hg19_knownGene exon 25060072 25060150 0.000000 - . gene_id "VSX1"; transcript_id "DQ854810:uc010gde.2"; -chr20 hg19_knownGene exon 25062309 25062767 0.000000 - . gene_id "VSX1"; transcript_id "DQ854810:uc010gde.2"; -chr20 hg19_knownGene CDS 25052574 25052654 0.000000 - 0 gene_id "VSX1"; transcript_id "DQ854811:uc010gdf.2"; -chr20 hg19_knownGene exon 25052130 25052654 0.000000 - . gene_id "VSX1"; transcript_id "DQ854811:uc010gdf.2"; -chr20 hg19_knownGene CDS 25059465 25059588 0.000000 - 1 gene_id "VSX1"; transcript_id "DQ854811:uc010gdf.2"; -chr20 hg19_knownGene exon 25059465 25059588 0.000000 - . gene_id "VSX1"; transcript_id "DQ854811:uc010gdf.2"; -chr20 hg19_knownGene CDS 25060072 25060150 0.000000 - 2 gene_id "VSX1"; transcript_id "DQ854811:uc010gdf.2"; -chr20 hg19_knownGene exon 25060072 25060150 0.000000 - . gene_id "VSX1"; transcript_id "DQ854811:uc010gdf.2"; -chr20 hg19_knownGene CDS 25062309 25062732 0.000000 - 0 gene_id "VSX1"; transcript_id "DQ854811:uc010gdf.2"; -chr20 hg19_knownGene exon 25062309 25062767 0.000000 - . gene_id "VSX1"; transcript_id "DQ854811:uc010gdf.2"; -chr20 hg19_knownGene CDS 25056900 25057186 0.000000 - 2 gene_id "VSX1"; transcript_id "NM_014588:uc002wuf.3"; -chr20 hg19_knownGene exon 25056099 25057186 0.000000 - . gene_id "VSX1"; transcript_id "NM_014588:uc002wuf.3"; -chr20 hg19_knownGene CDS 25058321 25058501 0.000000 - 0 gene_id "VSX1"; transcript_id "NM_014588:uc002wuf.3"; -chr20 hg19_knownGene exon 25058321 25058501 0.000000 - . gene_id "VSX1"; transcript_id "NM_014588:uc002wuf.3"; -chr20 hg19_knownGene CDS 25059465 25059588 0.000000 - 1 gene_id "VSX1"; transcript_id "NM_014588:uc002wuf.3"; -chr20 hg19_knownGene exon 25059465 25059588 0.000000 - . gene_id "VSX1"; transcript_id "NM_014588:uc002wuf.3"; -chr20 hg19_knownGene CDS 25060072 25060150 0.000000 - 2 gene_id "VSX1"; transcript_id "NM_014588:uc002wuf.3"; -chr20 hg19_knownGene exon 25060072 25060150 0.000000 - . gene_id "VSX1"; transcript_id "NM_014588:uc002wuf.3"; -chr20 hg19_knownGene CDS 25062309 25062732 0.000000 - 0 gene_id "VSX1"; transcript_id "NM_014588:uc002wuf.3"; -chr20 hg19_knownGene exon 25062309 25062767 0.000000 - . gene_id "VSX1"; transcript_id "NM_014588:uc002wuf.3"; -chr20 hg19_knownGene CDS 25059375 25059588 0.000000 - 1 gene_id "VSX1"; transcript_id "NM_199425:uc002wug.1"; -chr20 hg19_knownGene exon 25059195 25059588 0.000000 - . gene_id "VSX1"; transcript_id "NM_199425:uc002wug.1"; -chr20 hg19_knownGene CDS 25060072 25060150 0.000000 - 2 gene_id "VSX1"; transcript_id "NM_199425:uc002wug.1"; -chr20 hg19_knownGene exon 25060072 25060150 0.000000 - . gene_id "VSX1"; transcript_id "NM_199425:uc002wug.1"; -chr20 hg19_knownGene CDS 25062309 25062732 0.000000 - 0 gene_id "VSX1"; transcript_id "NM_199425:uc002wug.1"; -chr20 hg19_knownGene exon 25062309 25062767 0.000000 - . gene_id "VSX1"; transcript_id "NM_199425:uc002wug.1"; -chr20 hg19_knownGene exon 25121434 25123467 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027093:uc010gdg.2"; -chr20 hg19_knownGene exon 25124004 25124149 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027093:uc010gdg.2"; -chr20 hg19_knownGene exon 25124915 25125059 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027093:uc010gdg.2"; -chr20 hg19_knownGene exon 25128396 25128629 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027093:uc010gdg.2"; -chr20 hg19_knownGene exon 25121434 25123467 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027092:uc010gdh.2"; -chr20 hg19_knownGene exon 25124004 25124149 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027092:uc010gdh.2"; -chr20 hg19_knownGene exon 25124915 25125059 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027092:uc010gdh.2"; -chr20 hg19_knownGene exon 25129235 25129361 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027092:uc010gdh.2"; -chr20 hg19_knownGene exon 25123634 25124149 0.000000 - . gene_id "LOC284798"; transcript_id "AK309387:uc010gdi.2"; -chr20 hg19_knownGene exon 25124933 25125059 0.000000 - . gene_id "LOC284798"; transcript_id "AK309387:uc010gdi.2"; -chr20 hg19_knownGene exon 25129235 25129361 0.000000 - . gene_id "LOC284798"; transcript_id "AK309387:uc010gdi.2"; -chr20 hg19_knownGene exon 25121434 25123467 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027091:uc010zsx.1"; -chr20 hg19_knownGene exon 25124004 25124149 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027091:uc010zsx.1"; -chr20 hg19_knownGene exon 25124915 25125059 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027091:uc010zsx.1"; -chr20 hg19_knownGene exon 25128593 25129426 0.000000 - . gene_id "LOC284798"; transcript_id "NR_027091:uc010zsx.1"; -chr20 hg19_knownGene exon 25165308 25166796 0.000000 - . gene_id "AX747658"; transcript_id "AX747658:uc002wui.3"; -chr20 hg19_knownGene exon 25167178 25167335 0.000000 - . gene_id "AX747658"; transcript_id "AX747658:uc002wui.3"; -chr20 hg19_knownGene exon 25167533 25167615 0.000000 - . gene_id "AX747658"; transcript_id "AX747658:uc002wui.3"; -chr20 hg19_knownGene exon 25168489 25168583 0.000000 - . gene_id "AX747658"; transcript_id "AX747658:uc002wui.3"; -chr20 hg19_knownGene exon 25170854 25170938 0.000000 - . gene_id "AX747658"; transcript_id "AX747658:uc002wui.3"; -chr20 hg19_knownGene exon 25177259 25177508 0.000000 - . gene_id "AX747658"; transcript_id "AX747658:uc002wui.3"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene CDS 25187173 25187226 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25187158 25187226 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene CDS 25187712 25188033 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25187712 25188033 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene CDS 25190485 25190561 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene CDS 25193899 25194042 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene CDS 25195503 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene CDS 25201868 25202109 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25201868 25202359 0.000000 + . gene_id "ENTPD6"; transcript_id "AK302395:uc010zsy.1"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene CDS 25187742 25188033 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene exon 25187712 25188033 0.000000 + . gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene CDS 25190485 25190561 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene CDS 25193899 25194042 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene CDS 25195503 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene CDS 25201868 25202109 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene exon 25201868 25202359 0.000000 + . gene_id "ENTPD6"; transcript_id "AK308626:uc010gdj.1"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25187173 25187226 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25187158 25187226 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25187712 25188033 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25187712 25188033 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25190485 25190561 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25193899 25194042 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25195503 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25201868 25201969 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25201868 25201969 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25203474 25203614 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25203474 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25204737 25204793 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25205841 25205953 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25205841 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25206135 25206230 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001247:uc002wuj.2"; -chr20 hg19_knownGene CDS 25176501 25176503 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25187712 25188033 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25187712 25188033 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25190485 25190561 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25193899 25194042 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25195503 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25201868 25201969 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25201868 25201969 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25203474 25203614 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25203474 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25204737 25204793 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25205841 25205953 0.000000 + 2 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25205841 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene CDS 25206135 25206230 0.000000 + 0 gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "NM_001114089:uc002wum.2"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25187173 25187226 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25187158 25187226 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25187712 25188033 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25187712 25188033 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25190485 25190561 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25193899 25194042 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25195503 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25201868 25201969 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25201868 25201969 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25203474 25203614 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25203474 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25204737 25204793 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25205798 25205953 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25205798 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene CDS 25206135 25206148 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "AK297954:uc010zta.1"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25187173 25187226 0.000000 + 0 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25187158 25187226 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25187715 25188033 0.000000 + 0 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25187715 25188033 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25190485 25190561 0.000000 + 2 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25193899 25194042 0.000000 + 0 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25195503 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25201868 25201969 0.000000 + 2 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25201868 25201969 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25203474 25203614 0.000000 + 2 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25203474 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25204737 25204793 0.000000 + 2 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25205841 25205953 0.000000 + 2 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25205841 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene CDS 25206135 25206230 0.000000 + 0 gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "BC025980:uc002wuk.2"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25187173 25187226 0.000000 + 0 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25187158 25187226 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25187715 25188033 0.000000 + 0 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25187715 25188033 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25190485 25190561 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25193899 25194042 0.000000 + 0 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25195503 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25201868 25201969 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25201868 25201969 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25203474 25203614 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25203474 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25204737 25204793 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25205798 25205953 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25205798 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene CDS 25206135 25206148 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936765:uc002wul.2"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25187742 25188033 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25187715 25188033 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25190485 25190561 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25193899 25194042 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25195503 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25201868 25201969 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25201868 25201969 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25203474 25203614 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25203474 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25204737 25204793 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25205798 25205953 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25205798 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene CDS 25206135 25206148 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "AK293256:uc010ztb.1"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25187742 25188033 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25187715 25188033 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25190485 25190561 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25193899 25194042 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25195503 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25201868 25201969 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25201868 25201969 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25203474 25203614 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25203474 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25204737 25204793 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25205841 25205953 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25205841 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene CDS 25206135 25206230 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "AK303786:uc010ztc.1"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene CDS 25197319 25197372 0.000000 + 0 gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25197288 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene CDS 25201868 25201969 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25201868 25201969 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene CDS 25203474 25203614 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25203474 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene CDS 25204737 25204793 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene CDS 25205841 25205953 0.000000 + 2 gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25205841 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene CDS 25206135 25206230 0.000000 + 0 gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "CR936750:uc002wuo.2"; -chr20 hg19_knownGene exon 25176339 25176503 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25190485 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene CDS 25195560 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene CDS 25201868 25201969 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25201868 25201969 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene CDS 25203474 25203614 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25203474 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene CDS 25204737 25204793 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene CDS 25205841 25205953 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25205841 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene CDS 25206135 25206230 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300514:uc010zsz.1"; -chr20 hg19_knownGene exon 25190472 25190561 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25193899 25194042 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene CDS 25195560 25195578 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25195503 25195578 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene CDS 25196312 25196347 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25196312 25196347 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene CDS 25197284 25197372 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25197284 25197372 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene CDS 25198138 25198217 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25198138 25198217 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene CDS 25199186 25199250 0.000000 + 1 gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25199186 25199250 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene CDS 25203474 25203614 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25203474 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene CDS 25204737 25204793 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene CDS 25205841 25205953 0.000000 + 2 gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25205841 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene CDS 25206135 25206230 0.000000 + 0 gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "AK300028:uc010ztd.1"; -chr20 hg19_knownGene exon 25202346 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "AX748421:uc010gdk.1"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "AX748421:uc010gdk.1"; -chr20 hg19_knownGene exon 25205841 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "AX748421:uc010gdk.1"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "AX748421:uc010gdk.1"; -chr20 hg19_knownGene exon 25202346 25203614 0.000000 + . gene_id "ENTPD6"; transcript_id "AK128412:uc010gdl.1"; -chr20 hg19_knownGene exon 25204737 25204793 0.000000 + . gene_id "ENTPD6"; transcript_id "AK128412:uc010gdl.1"; -chr20 hg19_knownGene exon 25205798 25205953 0.000000 + . gene_id "ENTPD6"; transcript_id "AK128412:uc010gdl.1"; -chr20 hg19_knownGene exon 25206135 25207360 0.000000 + . gene_id "ENTPD6"; transcript_id "AK128412:uc010gdl.1"; -chr20 hg19_knownGene CDS 25268844 25269209 0.000000 - 0 gene_id "BC128043"; transcript_id "BC128043:uc010gdm.1"; -chr20 hg19_knownGene exon 25268551 25269403 0.000000 - . gene_id "BC128043"; transcript_id "BC128043:uc010gdm.1"; -chr20 hg19_knownGene CDS 25228815 25229057 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25228706 25229057 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25239873 25239974 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25239873 25239974 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25249765 25249843 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25249765 25249843 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25252019 25252122 0.000000 + 2 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25252019 25252122 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25255228 25255359 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25255228 25255359 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25257282 25257393 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25257282 25257393 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25257880 25257962 0.000000 + 2 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25257880 25257962 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25258955 25259098 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25258955 25259098 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25259693 25259785 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25259693 25259785 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25260902 25261048 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25260902 25261048 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25261585 25261748 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25261585 25261748 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25262669 25262783 0.000000 + 1 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25262669 25262783 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25263812 25263913 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25263812 25263913 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25264740 25264887 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25264740 25264887 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25269061 25269119 0.000000 + 2 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25269061 25269119 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25271117 25271258 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25271117 25271258 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25273042 25273249 0.000000 + 2 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25273042 25273249 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25274794 25274928 0.000000 + 1 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25274794 25274928 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25276240 25276306 0.000000 + 1 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25276240 25276306 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25277006 25277155 0.000000 + 0 gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene exon 25277006 25278648 0.000000 + . gene_id "PYGB"; transcript_id "NM_002862:uc002wup.3"; -chr20 hg19_knownGene CDS 25275612 25275666 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25275379 25275666 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25282855 25282982 0.000000 - 0 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25282855 25282982 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25284186 25284264 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25284186 25284264 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25287469 25287551 0.000000 - 0 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25287469 25287551 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25288602 25288681 0.000000 - 2 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25288602 25288681 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25289093 25289130 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25289093 25289130 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25290082 25290211 0.000000 - 2 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25290082 25290211 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25295561 25295606 0.000000 - 0 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25295561 25295606 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25297684 25297714 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25297684 25297714 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25300835 25300954 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25300835 25300954 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25303961 25304066 0.000000 - 2 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25303961 25304066 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25319863 25319987 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25319863 25319987 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25371149 25371339 0.000000 - 0 gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene exon 25371149 25371618 0.000000 - . gene_id "ABHD12"; transcript_id "NM_015600:uc002wuq.3"; -chr20 hg19_knownGene CDS 25281484 25281520 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25280834 25281520 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25282855 25282982 0.000000 - 0 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25282855 25282982 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25284186 25284264 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25284186 25284264 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25287469 25287551 0.000000 - 0 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25287469 25287551 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25288602 25288681 0.000000 - 2 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25288602 25288681 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25289093 25289130 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25289093 25289130 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25290082 25290211 0.000000 - 2 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25290082 25290211 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25295561 25295606 0.000000 - 0 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25295561 25295606 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25297684 25297714 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25297684 25297714 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25300835 25300954 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25300835 25300954 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25303961 25304066 0.000000 - 2 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25303961 25304066 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25319863 25319987 0.000000 - 1 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25319863 25319987 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25371149 25371339 0.000000 - 0 gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene exon 25371149 25371618 0.000000 - . gene_id "ABHD12"; transcript_id "NM_001042472:uc002wus.2"; -chr20 hg19_knownGene CDS 25388457 25388531 0.000000 + 0 gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene exon 25388323 25388531 0.000000 + . gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene CDS 25394426 25394490 0.000000 + 0 gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene exon 25394426 25394490 0.000000 + . gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene CDS 25397740 25397838 0.000000 + 1 gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene exon 25397740 25397838 0.000000 + . gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene CDS 25398741 25398831 0.000000 + 1 gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene exon 25398741 25398831 0.000000 + . gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene CDS 25405847 25405963 0.000000 + 0 gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene exon 25405847 25405963 0.000000 + . gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene CDS 25422338 25422412 0.000000 + 0 gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene exon 25422338 25422412 0.000000 + . gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene CDS 25426559 25426624 0.000000 + 0 gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene exon 25426559 25429191 0.000000 + . gene_id "GINS1"; transcript_id "NM_021067:uc002wuv.1"; -chr20 hg19_knownGene exon 25388323 25388531 0.000000 + . gene_id "GINS1"; transcript_id "AK294593:uc010zte.1"; -chr20 hg19_knownGene exon 25394426 25394490 0.000000 + . gene_id "GINS1"; transcript_id "AK294593:uc010zte.1"; -chr20 hg19_knownGene exon 25397740 25397838 0.000000 + . gene_id "GINS1"; transcript_id "AK294593:uc010zte.1"; -chr20 hg19_knownGene exon 25398741 25398831 0.000000 + . gene_id "GINS1"; transcript_id "AK294593:uc010zte.1"; -chr20 hg19_knownGene exon 25400320 25400441 0.000000 + . gene_id "GINS1"; transcript_id "AK294593:uc010zte.1"; -chr20 hg19_knownGene exon 25405847 25405963 0.000000 + . gene_id "GINS1"; transcript_id "AK294593:uc010zte.1"; -chr20 hg19_knownGene exon 25422338 25422412 0.000000 + . gene_id "GINS1"; transcript_id "AK294593:uc010zte.1"; -chr20 hg19_knownGene exon 25426559 25429191 0.000000 + . gene_id "GINS1"; transcript_id "AK294593:uc010zte.1"; -chr20 hg19_knownGene CDS 25434090 25434278 0.000000 - 0 gene_id "NINL"; transcript_id "AK021854:uc002wuw.1"; -chr20 hg19_knownGene exon 25433338 25434278 0.000000 - . gene_id "NINL"; transcript_id "AK021854:uc002wuw.1"; -chr20 hg19_knownGene CDS 25436309 25436422 0.000000 - 0 gene_id "NINL"; transcript_id "AK021854:uc002wuw.1"; -chr20 hg19_knownGene exon 25436309 25436422 0.000000 - . gene_id "NINL"; transcript_id "AK021854:uc002wuw.1"; -chr20 hg19_knownGene CDS 25439019 25439234 0.000000 - 0 gene_id "NINL"; transcript_id "AK021854:uc002wuw.1"; -chr20 hg19_knownGene exon 25439019 25439612 0.000000 - . gene_id "NINL"; transcript_id "AK021854:uc002wuw.1"; -chr20 hg19_knownGene CDS 25471990 25472161 0.000000 - 1 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25471987 25472161 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25477299 25477439 0.000000 - 1 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25477299 25477439 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25478846 25478982 0.000000 - 0 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25478846 25478982 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25481476 25481646 0.000000 - 0 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25481476 25481646 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25484588 25484740 0.000000 - 0 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25484588 25484740 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25485524 25485714 0.000000 - 2 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25485524 25485714 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25491310 25491376 0.000000 - 0 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25491310 25491376 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25493470 25493642 0.000000 - 2 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25493470 25493642 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25498389 25498485 0.000000 - 0 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25498389 25498485 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25507044 25507234 0.000000 - 2 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25507044 25507234 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25520658 25520694 0.000000 - 0 gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene exon 25520658 25521018 0.000000 - . gene_id "NINL"; transcript_id "AK293991:uc010ztf.1"; -chr20 hg19_knownGene CDS 25434090 25434278 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25433338 25434278 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25436309 25436422 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25436309 25436422 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25439019 25439165 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25439019 25439165 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25442158 25442271 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25442158 25442271 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25443019 25443177 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25443019 25443177 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25448025 25448094 0.000000 - 1 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25448025 25448094 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25450627 25450731 0.000000 - 1 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25450627 25450731 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25456679 25457725 0.000000 - 1 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25456679 25457725 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25459559 25459842 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25459559 25459842 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25460797 25460903 0.000000 - 2 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25460797 25460903 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25462604 25462736 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25462604 25462736 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25469880 25469960 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25469880 25469960 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25470511 25470621 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25470511 25470621 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25471987 25472161 0.000000 - 1 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25471987 25472161 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25477299 25477439 0.000000 - 1 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25477299 25477439 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25478846 25478982 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25478846 25478982 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25481476 25481646 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25481476 25481646 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25484588 25484740 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25484588 25484740 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25485524 25485714 0.000000 - 2 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25485524 25485714 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25491310 25491376 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25491310 25491376 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25493470 25493642 0.000000 - 2 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25493470 25493642 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25498389 25498485 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25498389 25498485 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25507044 25507223 0.000000 - 0 gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25507044 25507234 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene exon 25566091 25566153 0.000000 - . gene_id "NINL"; transcript_id "NM_025176:uc002wux.1"; -chr20 hg19_knownGene CDS 25434090 25434278 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25433338 25434278 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25436309 25436422 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25436309 25436422 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25439019 25439165 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25439019 25439165 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25442158 25442271 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25442158 25442271 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25443019 25443177 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25443019 25443177 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25448025 25448094 0.000000 - 1 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25448025 25448094 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25450627 25450731 0.000000 - 1 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25450627 25450731 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25459559 25459842 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25459559 25459842 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25460797 25460903 0.000000 - 2 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25460797 25460903 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25462604 25462736 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25462604 25462736 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25469880 25469960 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25469880 25469960 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25470511 25470621 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25470511 25470621 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25471987 25472161 0.000000 - 1 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25471987 25472161 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25477299 25477439 0.000000 - 1 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25477299 25477439 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25478846 25478982 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25478846 25478982 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25481476 25481646 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25481476 25481646 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25484588 25484740 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25484588 25484740 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25485524 25485714 0.000000 - 2 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25485524 25485714 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25491310 25491376 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25491310 25491376 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25493470 25493642 0.000000 - 2 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25493470 25493642 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25498389 25498485 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25498389 25498485 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25507044 25507223 0.000000 - 0 gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25507044 25507234 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene exon 25566091 25566153 0.000000 - . gene_id "NINL"; transcript_id "EU718622:uc010gdn.1"; -chr20 hg19_knownGene CDS 25459501 25459842 0.000000 - 0 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25458605 25459842 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25460797 25460903 0.000000 - 2 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25460797 25460903 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25462604 25462736 0.000000 - 0 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25462604 25462736 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25469880 25469960 0.000000 - 0 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25469880 25469960 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25470511 25470621 0.000000 - 0 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25470511 25470621 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25471987 25472161 0.000000 - 1 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25471987 25472161 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25477299 25477439 0.000000 - 1 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25477299 25477439 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25478846 25478982 0.000000 - 0 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25478846 25478982 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25484588 25484740 0.000000 - 0 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25484588 25484740 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25485524 25485714 0.000000 - 2 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25485524 25485714 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25490306 25490342 0.000000 - 0 gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25490306 25490425 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25491310 25491376 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25493470 25493642 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25498389 25498485 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25507044 25507234 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene exon 25566091 25566153 0.000000 - . gene_id "NINL"; transcript_id "AK309298:uc010gdo.1"; -chr20 hg19_knownGene CDS 25596564 25597217 0.000000 - 0 gene_id "NANP"; transcript_id "NM_152667:uc002wuy.3"; -chr20 hg19_knownGene exon 25593573 25597217 0.000000 - . gene_id "NANP"; transcript_id "NM_152667:uc002wuy.3"; -chr20 hg19_knownGene CDS 25604495 25604584 0.000000 - 0 gene_id "NANP"; transcript_id "NM_152667:uc002wuy.3"; -chr20 hg19_knownGene exon 25604495 25604648 0.000000 - . gene_id "NANP"; transcript_id "NM_152667:uc002wuy.3"; -chr20 hg19_knownGene exon 25604681 25604771 0.000000 + . gene_id "ZNF337"; transcript_id "BC034569:uc002wuz.3"; -chr20 hg19_knownGene exon 25612794 25612924 0.000000 + . gene_id "ZNF337"; transcript_id "BC034569:uc002wuz.3"; -chr20 hg19_knownGene exon 25614685 25614806 0.000000 + . gene_id "ZNF337"; transcript_id "BC034569:uc002wuz.3"; -chr20 hg19_knownGene exon 25615365 25615463 0.000000 + . gene_id "ZNF337"; transcript_id "BC034569:uc002wuz.3"; -chr20 hg19_knownGene exon 25654488 25658708 0.000000 + . gene_id "ZNF337"; transcript_id "BC034569:uc002wuz.3"; -chr20 hg19_knownGene CDS 25655671 25657673 0.000000 - 2 gene_id "ZNF337"; transcript_id "AK125455:uc002wva.3"; -chr20 hg19_knownGene exon 25654851 25657673 0.000000 - . gene_id "ZNF337"; transcript_id "AK125455:uc002wva.3"; -chr20 hg19_knownGene CDS 25666203 25666298 0.000000 - 2 gene_id "ZNF337"; transcript_id "AK125455:uc002wva.3"; -chr20 hg19_knownGene exon 25666203 25666298 0.000000 - . gene_id "ZNF337"; transcript_id "AK125455:uc002wva.3"; -chr20 hg19_knownGene CDS 25666632 25666758 0.000000 - 0 gene_id "ZNF337"; transcript_id "AK125455:uc002wva.3"; -chr20 hg19_knownGene exon 25666632 25666758 0.000000 - . gene_id "ZNF337"; transcript_id "AK125455:uc002wva.3"; -chr20 hg19_knownGene CDS 25667027 25667053 0.000000 - 0 gene_id "ZNF337"; transcript_id "AK125455:uc002wva.3"; -chr20 hg19_knownGene exon 25667027 25667575 0.000000 - . gene_id "ZNF337"; transcript_id "AK125455:uc002wva.3"; -chr20 hg19_knownGene CDS 25655671 25657673 0.000000 - 2 gene_id "ZNF337"; transcript_id "AK299811:uc010ztg.2"; -chr20 hg19_knownGene exon 25654851 25657673 0.000000 - . gene_id "ZNF337"; transcript_id "AK299811:uc010ztg.2"; -chr20 hg19_knownGene CDS 25666632 25666758 0.000000 - 0 gene_id "ZNF337"; transcript_id "AK299811:uc010ztg.2"; -chr20 hg19_knownGene exon 25666632 25666758 0.000000 - . gene_id "ZNF337"; transcript_id "AK299811:uc010ztg.2"; -chr20 hg19_knownGene CDS 25667027 25667053 0.000000 - 0 gene_id "ZNF337"; transcript_id "AK299811:uc010ztg.2"; -chr20 hg19_knownGene exon 25667027 25667575 0.000000 - . gene_id "ZNF337"; transcript_id "AK299811:uc010ztg.2"; -chr20 hg19_knownGene CDS 25655671 25657673 0.000000 - 2 gene_id "ZNF337"; transcript_id "NM_015655:uc002wvc.3"; -chr20 hg19_knownGene exon 25654851 25657673 0.000000 - . gene_id "ZNF337"; transcript_id "NM_015655:uc002wvc.3"; -chr20 hg19_knownGene CDS 25666203 25666298 0.000000 - 2 gene_id "ZNF337"; transcript_id "NM_015655:uc002wvc.3"; -chr20 hg19_knownGene exon 25666203 25666298 0.000000 - . gene_id "ZNF337"; transcript_id "NM_015655:uc002wvc.3"; -chr20 hg19_knownGene CDS 25666632 25666758 0.000000 - 0 gene_id "ZNF337"; transcript_id "NM_015655:uc002wvc.3"; -chr20 hg19_knownGene exon 25666632 25666758 0.000000 - . gene_id "ZNF337"; transcript_id "NM_015655:uc002wvc.3"; -chr20 hg19_knownGene CDS 25667027 25667053 0.000000 - 0 gene_id "ZNF337"; transcript_id "NM_015655:uc002wvc.3"; -chr20 hg19_knownGene exon 25667027 25667102 0.000000 - . gene_id "ZNF337"; transcript_id "NM_015655:uc002wvc.3"; -chr20 hg19_knownGene exon 25677395 25677469 0.000000 - . gene_id "ZNF337"; transcript_id "NM_015655:uc002wvc.3"; -chr20 hg19_knownGene exon 25744102 25744340 0.000000 - . gene_id "FAM182B"; transcript_id "NR_027061:uc010zth.1"; -chr20 hg19_knownGene exon 25745530 25745637 0.000000 - . gene_id "FAM182B"; transcript_id "NR_027061:uc010zth.1"; -chr20 hg19_knownGene exon 25755746 25755948 0.000000 - . gene_id "FAM182B"; transcript_id "NR_027061:uc010zth.1"; -chr20 hg19_knownGene exon 25767381 25767624 0.000000 - . gene_id "FAM182B"; transcript_id "NR_027061:uc010zth.1"; -chr20 hg19_knownGene exon 25776681 25776878 0.000000 - . gene_id "FAM182B"; transcript_id "NR_027061:uc010zth.1"; -chr20 hg19_knownGene exon 25750234 25754795 0.000000 - . gene_id "FAM182B"; transcript_id "NR_026714:uc010zti.2"; -chr20 hg19_knownGene exon 25755746 25755948 0.000000 - . gene_id "FAM182B"; transcript_id "NR_026714:uc010zti.2"; -chr20 hg19_knownGene exon 25767381 25767624 0.000000 - . gene_id "FAM182B"; transcript_id "NR_026714:uc010zti.2"; -chr20 hg19_knownGene exon 25781456 25781927 0.000000 - . gene_id "FAM182B"; transcript_id "NR_026714:uc010zti.2"; -chr20 hg19_knownGene exon 25754654 25755948 0.000000 - . gene_id "FAM182B"; transcript_id "AL096727:uc002wve.3"; -chr20 hg19_knownGene exon 25829341 25829584 0.000000 - . gene_id "FAM182B"; transcript_id "AL096727:uc002wve.3"; -chr20 hg19_knownGene exon 25843696 25843837 0.000000 - . gene_id "FAM182B"; transcript_id "AL096727:uc002wve.3"; -chr20 hg19_knownGene exon 25744102 25744340 0.000000 - . gene_id "FAM182B"; transcript_id "BC042812:uc002wvd.1"; -chr20 hg19_knownGene exon 25745530 25745637 0.000000 - . gene_id "FAM182B"; transcript_id "BC042812:uc002wvd.1"; -chr20 hg19_knownGene exon 25755746 25755948 0.000000 - . gene_id "FAM182B"; transcript_id "BC042812:uc002wvd.1"; -chr20 hg19_knownGene exon 25829341 25829584 0.000000 - . gene_id "FAM182B"; transcript_id "BC042812:uc002wvd.1"; -chr20 hg19_knownGene exon 25848589 25848786 0.000000 - . gene_id "FAM182B"; transcript_id "BC042812:uc002wvd.1"; -chr20 hg19_knownGene exon 25936453 25936505 0.000000 + . gene_id "BC052952"; transcript_id "BC052952:uc002wvf.3"; -chr20 hg19_knownGene exon 25936722 25936846 0.000000 + . gene_id "BC052952"; transcript_id "BC052952:uc002wvf.3"; -chr20 hg19_knownGene exon 25943698 25943832 0.000000 + . gene_id "BC052952"; transcript_id "BC052952:uc002wvf.3"; -chr20 hg19_knownGene exon 25945639 25949924 0.000000 + . gene_id "BC052952"; transcript_id "BC052952:uc002wvf.3"; -chr20 hg19_knownGene exon 25990435 25990525 0.000000 + . gene_id "LOC100134868"; transcript_id "NR_004846:uc002wvh.4"; -chr20 hg19_knownGene exon 25999468 25999548 0.000000 + . gene_id "LOC100134868"; transcript_id "NR_004846:uc002wvh.4"; -chr20 hg19_knownGene exon 25999712 25999838 0.000000 + . gene_id "LOC100134868"; transcript_id "NR_004846:uc002wvh.4"; -chr20 hg19_knownGene exon 26000465 26000560 0.000000 + . gene_id "LOC100134868"; transcript_id "NR_004846:uc002wvh.4"; -chr20 hg19_knownGene exon 26001272 26002430 0.000000 + . gene_id "LOC100134868"; transcript_id "NR_004846:uc002wvh.4"; -chr20 hg19_knownGene exon 25990435 25990525 0.000000 + . gene_id "LOC100134868"; transcript_id "BC038849:uc002wvg.4"; -chr20 hg19_knownGene exon 25995486 25995603 0.000000 + . gene_id "LOC100134868"; transcript_id "BC038849:uc002wvg.4"; -chr20 hg19_knownGene exon 25999468 25999548 0.000000 + . gene_id "LOC100134868"; transcript_id "BC038849:uc002wvg.4"; -chr20 hg19_knownGene exon 25999712 25999838 0.000000 + . gene_id "LOC100134868"; transcript_id "BC038849:uc002wvg.4"; -chr20 hg19_knownGene exon 26000465 26000560 0.000000 + . gene_id "LOC100134868"; transcript_id "BC038849:uc002wvg.4"; -chr20 hg19_knownGene exon 26001272 26002430 0.000000 + . gene_id "LOC100134868"; transcript_id "BC038849:uc002wvg.4"; -chr20 hg19_knownGene exon 26035250 26035721 0.000000 + . gene_id "FAM182A"; transcript_id "NR_026713:uc010gdq.3"; -chr20 hg19_knownGene exon 26049553 26049840 0.000000 + . gene_id "FAM182A"; transcript_id "NR_026713:uc010gdq.3"; -chr20 hg19_knownGene exon 26054406 26054505 0.000000 + . gene_id "FAM182A"; transcript_id "NR_026713:uc010gdq.3"; -chr20 hg19_knownGene exon 26061800 26062026 0.000000 + . gene_id "FAM182A"; transcript_id "NR_026713:uc010gdq.3"; -chr20 hg19_knownGene exon 26063530 26067553 0.000000 + . gene_id "FAM182A"; transcript_id "NR_026713:uc010gdq.3"; -chr20 hg19_knownGene CDS 26084110 26084307 0.000000 - 0 gene_id "NCOR1P1"; transcript_id "NR_003678:uc002wvj.4"; -chr20 hg19_knownGene exon 26084052 26084307 0.000000 - . gene_id "NCOR1P1"; transcript_id "NR_003678:uc002wvj.4"; -chr20 hg19_knownGene CDS 26094515 26094622 0.000000 - 0 gene_id "NCOR1P1"; transcript_id "NR_003678:uc002wvj.4"; -chr20 hg19_knownGene exon 26094515 26094677 0.000000 - . gene_id "NCOR1P1"; transcript_id "NR_003678:uc002wvj.4"; -chr20 hg19_knownGene exon 26188822 26188914 0.000000 - . gene_id "MIR663A"; transcript_id "NR_030386:uc021wbn.1"; -chr20 hg19_knownGene exon 26167655 26168473 0.000000 - . gene_id "LOC284801"; transcript_id "NR_040095:uc002wvk.3"; -chr20 hg19_knownGene exon 26172429 26172536 0.000000 - . gene_id "LOC284801"; transcript_id "NR_040095:uc002wvk.3"; -chr20 hg19_knownGene exon 26172769 26172868 0.000000 - . gene_id "LOC284801"; transcript_id "NR_040095:uc002wvk.3"; -chr20 hg19_knownGene exon 26180085 26180159 0.000000 - . gene_id "LOC284801"; transcript_id "NR_040095:uc002wvk.3"; -chr20 hg19_knownGene exon 26189759 26189869 0.000000 - . gene_id "LOC284801"; transcript_id "NR_040095:uc002wvk.3"; -chr20 hg19_knownGene exon 29543691 29543802 0.000000 - . gene_id "Y_RNA"; transcript_id ":uc021wbo.1"; -chr20 hg19_knownGene exon 29612306 29612397 0.000000 + . gene_id "FRG1B"; transcript_id "BC062743:uc010gdr.1"; -chr20 hg19_knownGene exon 29614261 29614327 0.000000 + . gene_id "FRG1B"; transcript_id "BC062743:uc010gdr.1"; -chr20 hg19_knownGene exon 29623129 29623254 0.000000 + . gene_id "FRG1B"; transcript_id "BC062743:uc010gdr.1"; -chr20 hg19_knownGene exon 29625873 29625984 0.000000 + . gene_id "FRG1B"; transcript_id "BC062743:uc010gdr.1"; -chr20 hg19_knownGene exon 29628227 29628331 0.000000 + . gene_id "FRG1B"; transcript_id "BC062743:uc010gdr.1"; -chr20 hg19_knownGene exon 29631538 29631629 0.000000 + . gene_id "FRG1B"; transcript_id "BC062743:uc010gdr.1"; -chr20 hg19_knownGene exon 29611879 29612101 0.000000 + . gene_id "FRG1B"; transcript_id "NR_003579:uc002wvm.1"; -chr20 hg19_knownGene exon 29614261 29614327 0.000000 + . gene_id "FRG1B"; transcript_id "NR_003579:uc002wvm.1"; -chr20 hg19_knownGene exon 29623129 29623254 0.000000 + . gene_id "FRG1B"; transcript_id "NR_003579:uc002wvm.1"; -chr20 hg19_knownGene exon 29625873 29625984 0.000000 + . gene_id "FRG1B"; transcript_id "NR_003579:uc002wvm.1"; -chr20 hg19_knownGene exon 29628227 29628331 0.000000 + . gene_id "FRG1B"; transcript_id "NR_003579:uc002wvm.1"; -chr20 hg19_knownGene exon 29631538 29631629 0.000000 + . gene_id "FRG1B"; transcript_id "NR_003579:uc002wvm.1"; -chr20 hg19_knownGene exon 29632611 29632721 0.000000 + . gene_id "FRG1B"; transcript_id "NR_003579:uc002wvm.1"; -chr20 hg19_knownGene exon 29633898 29634007 0.000000 + . gene_id "FRG1B"; transcript_id "NR_003579:uc002wvm.1"; -chr20 hg19_knownGene exon 29637584 29638138 0.000000 - . gene_id "MLLT10P1"; transcript_id "NR_045115:uc021wbp.1"; -chr20 hg19_knownGene exon 29611879 29612101 0.000000 + . gene_id "FRG1B"; transcript_id "BC095491:uc010ztj.1"; -chr20 hg19_knownGene exon 29614261 29614327 0.000000 + . gene_id "FRG1B"; transcript_id "BC095491:uc010ztj.1"; -chr20 hg19_knownGene exon 29623129 29623254 0.000000 + . gene_id "FRG1B"; transcript_id "BC095491:uc010ztj.1"; -chr20 hg19_knownGene exon 29625873 29625984 0.000000 + . gene_id "FRG1B"; transcript_id "BC095491:uc010ztj.1"; -chr20 hg19_knownGene exon 29628227 29628331 0.000000 + . gene_id "FRG1B"; transcript_id "BC095491:uc010ztj.1"; -chr20 hg19_knownGene exon 29631538 29631629 0.000000 + . gene_id "FRG1B"; transcript_id "BC095491:uc010ztj.1"; -chr20 hg19_knownGene exon 29632611 29632721 0.000000 + . gene_id "FRG1B"; transcript_id "BC095491:uc010ztj.1"; -chr20 hg19_knownGene exon 29652124 29653908 0.000000 + . gene_id "FRG1B"; transcript_id "BC095491:uc010ztj.1"; -chr20 hg19_knownGene exon 29614261 29614327 0.000000 + . gene_id "FRG1B"; transcript_id "AK307061:uc010ztk.1"; -chr20 hg19_knownGene CDS 29628233 29628331 0.000000 + 0 gene_id "FRG1B"; transcript_id "AK307061:uc010ztk.1"; -chr20 hg19_knownGene exon 29628227 29628331 0.000000 + . gene_id "FRG1B"; transcript_id "AK307061:uc010ztk.1"; -chr20 hg19_knownGene CDS 29631538 29631629 0.000000 + 0 gene_id "FRG1B"; transcript_id "AK307061:uc010ztk.1"; -chr20 hg19_knownGene exon 29631538 29631629 0.000000 + . gene_id "FRG1B"; transcript_id "AK307061:uc010ztk.1"; -chr20 hg19_knownGene CDS 29632611 29632721 0.000000 + 1 gene_id "FRG1B"; transcript_id "AK307061:uc010ztk.1"; -chr20 hg19_knownGene exon 29632611 29632721 0.000000 + . gene_id "FRG1B"; transcript_id "AK307061:uc010ztk.1"; -chr20 hg19_knownGene CDS 29652124 29652151 0.000000 + 1 gene_id "FRG1B"; transcript_id "AK307061:uc010ztk.1"; -chr20 hg19_knownGene exon 29652124 29653908 0.000000 + . gene_id "FRG1B"; transcript_id "AK307061:uc010ztk.1"; -chr20 hg19_knownGene CDS 29624067 29624092 0.000000 + 0 gene_id "FRG1B"; transcript_id "AK057099:uc010ztl.1"; -chr20 hg19_knownGene exon 29624035 29624092 0.000000 + . gene_id "FRG1B"; transcript_id "AK057099:uc010ztl.1"; -chr20 hg19_knownGene CDS 29625873 29625984 0.000000 + 1 gene_id "FRG1B"; transcript_id "AK057099:uc010ztl.1"; -chr20 hg19_knownGene exon 29625873 29625984 0.000000 + . gene_id "FRG1B"; transcript_id "AK057099:uc010ztl.1"; -chr20 hg19_knownGene CDS 29628227 29628331 0.000000 + 0 gene_id "FRG1B"; transcript_id "AK057099:uc010ztl.1"; -chr20 hg19_knownGene exon 29628227 29628331 0.000000 + . gene_id "FRG1B"; transcript_id "AK057099:uc010ztl.1"; -chr20 hg19_knownGene CDS 29652124 29652267 0.000000 + 0 gene_id "FRG1B"; transcript_id "AK057099:uc010ztl.1"; -chr20 hg19_knownGene exon 29652124 29653908 0.000000 + . gene_id "FRG1B"; transcript_id "AK057099:uc010ztl.1"; -chr20 hg19_knownGene CDS 29845467 29845560 0.000000 + 0 gene_id "DEFB115"; transcript_id "NM_001037730:uc002wvp.1"; -chr20 hg19_knownGene exon 29845467 29845560 0.000000 + . gene_id "DEFB115"; transcript_id "NM_001037730:uc002wvp.1"; -chr20 hg19_knownGene CDS 29847263 29847432 0.000000 + 2 gene_id "DEFB115"; transcript_id "NM_001037730:uc002wvp.1"; -chr20 hg19_knownGene exon 29847263 29847435 0.000000 + . gene_id "DEFB115"; transcript_id "NM_001037730:uc002wvp.1"; -chr20 hg19_knownGene CDS 29891018 29891256 0.000000 - 2 gene_id "DEFB116"; transcript_id "NM_001037731:uc010ztm.2"; -chr20 hg19_knownGene exon 29891015 29891256 0.000000 - . gene_id "DEFB116"; transcript_id "NM_001037731:uc010ztm.2"; -chr20 hg19_knownGene CDS 29896322 29896388 0.000000 - 0 gene_id "DEFB116"; transcript_id "NM_001037731:uc010ztm.2"; -chr20 hg19_knownGene exon 29896322 29896388 0.000000 - . gene_id "DEFB116"; transcript_id "NM_001037731:uc010ztm.2"; -chr20 hg19_knownGene CDS 29956454 29956511 0.000000 + 0 gene_id "DEFB118"; transcript_id "NM_054112:uc002wvr.3"; -chr20 hg19_knownGene exon 29956421 29956511 0.000000 + . gene_id "DEFB118"; transcript_id "NM_054112:uc002wvr.3"; -chr20 hg19_knownGene CDS 29960660 29960970 0.000000 + 2 gene_id "DEFB118"; transcript_id "NM_054112:uc002wvr.3"; -chr20 hg19_knownGene exon 29960660 29961705 0.000000 + . gene_id "DEFB118"; transcript_id "NM_054112:uc002wvr.3"; -chr20 hg19_knownGene CDS 29965215 29965242 0.000000 - 1 gene_id "DEFB119"; transcript_id "NM_173460:uc002wvs.3"; -chr20 hg19_knownGene exon 29964967 29965242 0.000000 - . gene_id "DEFB119"; transcript_id "NM_173460:uc002wvs.3"; -chr20 hg19_knownGene CDS 29966155 29966194 0.000000 - 2 gene_id "DEFB119"; transcript_id "NM_173460:uc002wvs.3"; -chr20 hg19_knownGene exon 29966155 29966194 0.000000 - . gene_id "DEFB119"; transcript_id "NM_173460:uc002wvs.3"; -chr20 hg19_knownGene CDS 29978226 29978286 0.000000 - 0 gene_id "DEFB119"; transcript_id "NM_173460:uc002wvs.3"; -chr20 hg19_knownGene exon 29978226 29978406 0.000000 - . gene_id "DEFB119"; transcript_id "NM_173460:uc002wvs.3"; -chr20 hg19_knownGene CDS 29965052 29965242 0.000000 - 2 gene_id "DEFB119"; transcript_id "NM_153289:uc002wvt.3"; -chr20 hg19_knownGene exon 29964967 29965242 0.000000 - . gene_id "DEFB119"; transcript_id "NM_153289:uc002wvt.3"; -chr20 hg19_knownGene CDS 29978226 29978286 0.000000 - 0 gene_id "DEFB119"; transcript_id "NM_153289:uc002wvt.3"; -chr20 hg19_knownGene exon 29978226 29978406 0.000000 - . gene_id "DEFB119"; transcript_id "NM_153289:uc002wvt.3"; -chr20 hg19_knownGene CDS 29976831 29977033 0.000000 - 2 gene_id "DEFB119"; transcript_id "NM_153323:uc002wvu.1"; -chr20 hg19_knownGene exon 29976771 29977033 0.000000 - . gene_id "DEFB119"; transcript_id "NM_153323:uc002wvu.1"; -chr20 hg19_knownGene CDS 29978226 29978286 0.000000 - 0 gene_id "DEFB119"; transcript_id "NM_153323:uc002wvu.1"; -chr20 hg19_knownGene exon 29978226 29978406 0.000000 - . gene_id "DEFB119"; transcript_id "NM_153323:uc002wvu.1"; -chr20 hg19_knownGene CDS 29992719 29992888 0.000000 - 2 gene_id "DEFB121"; transcript_id "NM_001011878:uc002wvv.2"; -chr20 hg19_knownGene exon 29992648 29992888 0.000000 - . gene_id "DEFB121"; transcript_id "NM_001011878:uc002wvv.2"; -chr20 hg19_knownGene CDS 29993898 29993955 0.000000 - 0 gene_id "DEFB121"; transcript_id "NM_001011878:uc002wvv.2"; -chr20 hg19_knownGene exon 29993898 29994069 0.000000 - . gene_id "DEFB121"; transcript_id "NM_001011878:uc002wvv.2"; -chr20 hg19_knownGene CDS 29992719 29992888 0.000000 - 2 gene_id "DEFB121"; transcript_id "NM_001171832:uc021wbq.1"; -chr20 hg19_knownGene exon 29992648 29992888 0.000000 - . gene_id "DEFB121"; transcript_id "NM_001171832:uc021wbq.1"; -chr20 hg19_knownGene CDS 30000425 30000446 0.000000 - 0 gene_id "DEFB121"; transcript_id "NM_001171832:uc021wbq.1"; -chr20 hg19_knownGene exon 30000425 30000641 0.000000 - . gene_id "DEFB121"; transcript_id "NM_001171832:uc021wbq.1"; -chr20 hg19_knownGene exon 30009242 30009481 0.000000 + . gene_id "NR_002577"; transcript_id "NR_002577:uc002wvw.2"; -chr20 hg19_knownGene exon 30016346 30016438 0.000000 + . gene_id "NR_002577"; transcript_id "NR_002577:uc002wvw.2"; -chr20 hg19_knownGene exon 30016821 30016977 0.000000 + . gene_id "NR_002577"; transcript_id "NR_002577:uc002wvw.2"; -chr20 hg19_knownGene exon 30009242 30009481 0.000000 - . gene_id "DEFB122"; transcript_id "AY122474:uc002wvx.1"; -chr20 hg19_knownGene exon 30016346 30016438 0.000000 - . gene_id "DEFB122"; transcript_id "AY122474:uc002wvx.1"; -chr20 hg19_knownGene exon 30016821 30016983 0.000000 - . gene_id "DEFB122"; transcript_id "AY122474:uc002wvx.1"; -chr20 hg19_knownGene CDS 30028502 30028559 0.000000 + 0 gene_id "DEFB123"; transcript_id "NM_153324:uc002wvy.3"; -chr20 hg19_knownGene exon 30028411 30028559 0.000000 + . gene_id "DEFB123"; transcript_id "NM_153324:uc002wvy.3"; -chr20 hg19_knownGene CDS 30037832 30037974 0.000000 + 2 gene_id "DEFB123"; transcript_id "NM_153324:uc002wvy.3"; -chr20 hg19_knownGene exon 30037832 30038060 0.000000 + . gene_id "DEFB123"; transcript_id "NM_153324:uc002wvy.3"; -chr20 hg19_knownGene exon 30057269 30057864 0.000000 - . gene_id "BC016143"; transcript_id "BC016143:uc021wbr.1"; -chr20 hg19_knownGene CDS 30053312 30053466 0.000000 - 2 gene_id "DEFB124"; transcript_id "NM_001037500:uc002wvz.1"; -chr20 hg19_knownGene exon 30053309 30053466 0.000000 - . gene_id "DEFB124"; transcript_id "NM_001037500:uc002wvz.1"; -chr20 hg19_knownGene CDS 30060759 30060816 0.000000 - 0 gene_id "DEFB124"; transcript_id "NM_001037500:uc002wvz.1"; -chr20 hg19_knownGene exon 30060759 30060816 0.000000 - . gene_id "DEFB124"; transcript_id "NM_001037500:uc002wvz.1"; -chr20 hg19_knownGene exon 30063105 30063169 0.000000 + . gene_id "REM1"; transcript_id "NM_014012:uc002wwa.3"; -chr20 hg19_knownGene CDS 30064249 30064588 0.000000 + 0 gene_id "REM1"; transcript_id "NM_014012:uc002wwa.3"; -chr20 hg19_knownGene exon 30064030 30064588 0.000000 + . gene_id "REM1"; transcript_id "NM_014012:uc002wwa.3"; -chr20 hg19_knownGene CDS 30065631 30065713 0.000000 + 2 gene_id "REM1"; transcript_id "NM_014012:uc002wwa.3"; -chr20 hg19_knownGene exon 30065631 30065713 0.000000 + . gene_id "REM1"; transcript_id "NM_014012:uc002wwa.3"; -chr20 hg19_knownGene CDS 30070090 30070291 0.000000 + 0 gene_id "REM1"; transcript_id "NM_014012:uc002wwa.3"; -chr20 hg19_knownGene exon 30070090 30070291 0.000000 + . gene_id "REM1"; transcript_id "NM_014012:uc002wwa.3"; -chr20 hg19_knownGene CDS 30071962 30072230 0.000000 + 2 gene_id "REM1"; transcript_id "NM_014012:uc002wwa.3"; -chr20 hg19_knownGene exon 30071962 30072708 0.000000 + . gene_id "REM1"; transcript_id "NM_014012:uc002wwa.3"; -chr20 hg19_knownGene exon 30073581 30073826 0.000000 + . gene_id "LINC00028"; transcript_id "NR_024358:uc010ztn.1"; -chr20 hg19_knownGene exon 30074835 30074998 0.000000 + . gene_id "LINC00028"; transcript_id "NR_024358:uc010ztn.1"; -chr20 hg19_knownGene exon 30075085 30075162 0.000000 + . gene_id "LINC00028"; transcript_id "NR_024358:uc010ztn.1"; -chr20 hg19_knownGene exon 30075279 30075377 0.000000 + . gene_id "LINC00028"; transcript_id "NR_024358:uc010ztn.1"; -chr20 hg19_knownGene exon 30088703 30088774 0.000000 + . gene_id "TRNA_Pseudo"; transcript_id ":uc021wbs.1"; -chr20 hg19_knownGene CDS 30102355 30102537 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178582:uc002wwb.1"; -chr20 hg19_knownGene exon 30102241 30102537 0.000000 + . gene_id "HM13"; transcript_id "NM_178582:uc002wwb.1"; -chr20 hg19_knownGene CDS 30115287 30115385 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178582:uc002wwb.1"; -chr20 hg19_knownGene exon 30115287 30115385 0.000000 + . gene_id "HM13"; transcript_id "NM_178582:uc002wwb.1"; -chr20 hg19_knownGene CDS 30125982 30126128 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178582:uc002wwb.1"; -chr20 hg19_knownGene exon 30125982 30127596 0.000000 + . gene_id "HM13"; transcript_id "NM_178582:uc002wwb.1"; -chr20 hg19_knownGene exon 30135185 30136019 0.000000 + . gene_id "PSIMCT-1"; transcript_id "NR_003677:uc010gdt.3"; -chr20 hg19_knownGene CDS 30102355 30102537 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30102241 30102537 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30115287 30115385 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30115287 30115385 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30125982 30126064 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30125982 30126064 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30132750 30132838 0.000000 + 1 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30132750 30132838 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30136832 30136917 0.000000 + 2 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30136832 30136917 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30137010 30137135 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30137010 30137135 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30137867 30137924 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30137867 30137924 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30142549 30142632 0.000000 + 2 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30142549 30142632 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30147414 30147450 0.000000 + 2 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30147414 30147450 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30149437 30149539 0.000000 + 1 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30149437 30149539 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30154013 30154098 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30154013 30154098 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30155881 30156027 0.000000 + 1 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30155881 30156027 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30156923 30157019 0.000000 + 1 gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene exon 30156923 30157370 0.000000 + . gene_id "HM13"; transcript_id "NM_178581:uc002wwc.3"; -chr20 hg19_knownGene CDS 30102355 30102537 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30102241 30102537 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30115287 30115385 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30115287 30115385 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30125982 30126064 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30125982 30126064 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30132750 30132838 0.000000 + 1 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30132750 30132838 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30136832 30136917 0.000000 + 2 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30136832 30136917 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30137010 30137135 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30137010 30137135 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30137867 30137924 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30137867 30137924 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30142549 30142632 0.000000 + 2 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30142549 30142632 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30147414 30147450 0.000000 + 2 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30147414 30147450 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30149437 30149539 0.000000 + 1 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30149437 30149539 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30154013 30154098 0.000000 + 0 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30154013 30154098 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30155881 30156028 0.000000 + 1 gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30155881 30156083 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene exon 30156923 30157370 0.000000 + . gene_id "HM13"; transcript_id "NM_178580:uc002wwd.3"; -chr20 hg19_knownGene CDS 30102355 30102537 0.000000 + 0 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30102241 30102537 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30115287 30115385 0.000000 + 0 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30115287 30115385 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30125982 30126064 0.000000 + 0 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30125982 30126064 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30132750 30132838 0.000000 + 1 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30132750 30132838 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30136832 30136917 0.000000 + 2 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30136832 30136917 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30137010 30137135 0.000000 + 0 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30137010 30137135 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30137867 30137924 0.000000 + 0 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30137867 30137924 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30142549 30142632 0.000000 + 2 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30142549 30142632 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30147414 30147450 0.000000 + 2 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30147414 30147450 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30149437 30149539 0.000000 + 1 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30149437 30149539 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30154013 30154098 0.000000 + 0 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30154013 30154098 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30156923 30157019 0.000000 + 1 gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene exon 30156923 30157370 0.000000 + . gene_id "HM13"; transcript_id "NM_030789:uc002wwe.3"; -chr20 hg19_knownGene CDS 30136750 30136917 0.000000 + 0 gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene exon 30135249 30136917 0.000000 + . gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene CDS 30137010 30137135 0.000000 + 0 gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene exon 30137010 30137135 0.000000 + . gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene CDS 30137867 30137924 0.000000 + 0 gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene exon 30137867 30137924 0.000000 + . gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene CDS 30142549 30142632 0.000000 + 2 gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene exon 30142549 30142632 0.000000 + . gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene CDS 30147414 30147450 0.000000 + 2 gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene exon 30147414 30147450 0.000000 + . gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene CDS 30149437 30149539 0.000000 + 1 gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene exon 30149437 30149539 0.000000 + . gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene CDS 30154013 30154098 0.000000 + 0 gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene exon 30154013 30154098 0.000000 + . gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene CDS 30155881 30156028 0.000000 + 1 gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene exon 30155881 30156083 0.000000 + . gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene exon 30156923 30157370 0.000000 + . gene_id "HM13"; transcript_id "BC053868:uc002wwf.3"; -chr20 hg19_knownGene CDS 30193191 30193616 0.000000 + 0 gene_id "ID1"; transcript_id "NM_002165:uc002wwg.2"; -chr20 hg19_knownGene exon 30193086 30193616 0.000000 + . gene_id "ID1"; transcript_id "NM_002165:uc002wwg.2"; -chr20 hg19_knownGene CDS 30193856 30193894 0.000000 + 0 gene_id "ID1"; transcript_id "NM_002165:uc002wwg.2"; -chr20 hg19_knownGene exon 30193856 30194317 0.000000 + . gene_id "ID1"; transcript_id "NM_002165:uc002wwg.2"; -chr20 hg19_knownGene CDS 30193191 30193637 0.000000 + 0 gene_id "ID1"; transcript_id "NM_181353:uc002wwh.2"; -chr20 hg19_knownGene exon 30193086 30194317 0.000000 + . gene_id "ID1"; transcript_id "NM_181353:uc002wwh.2"; -chr20 hg19_knownGene exon 30194989 30195043 0.000000 + . gene_id "MIR3193"; transcript_id "NR_036161:uc021wbt.1"; -chr20 hg19_knownGene exon 30225691 30225765 0.000000 + . gene_id "COX4I2"; transcript_id "NM_032609:uc002wwj.1"; -chr20 hg19_knownGene CDS 30226821 30226902 0.000000 + 0 gene_id "COX4I2"; transcript_id "NM_032609:uc002wwj.1"; -chr20 hg19_knownGene exon 30226821 30226902 0.000000 + . gene_id "COX4I2"; transcript_id "NM_032609:uc002wwj.1"; -chr20 hg19_knownGene CDS 30227736 30227900 0.000000 + 2 gene_id "COX4I2"; transcript_id "NM_032609:uc002wwj.1"; -chr20 hg19_knownGene exon 30227736 30227900 0.000000 + . gene_id "COX4I2"; transcript_id "NM_032609:uc002wwj.1"; -chr20 hg19_knownGene CDS 30231207 30231338 0.000000 + 2 gene_id "COX4I2"; transcript_id "NM_032609:uc002wwj.1"; -chr20 hg19_knownGene exon 30231207 30231338 0.000000 + . gene_id "COX4I2"; transcript_id "NM_032609:uc002wwj.1"; -chr20 hg19_knownGene CDS 30232571 30232704 0.000000 + 2 gene_id "COX4I2"; transcript_id "NM_032609:uc002wwj.1"; -chr20 hg19_knownGene exon 30232571 30232800 0.000000 + . gene_id "COX4I2"; transcript_id "NM_032609:uc002wwj.1"; -chr20 hg19_knownGene exon 30252261 30253889 0.000000 - . gene_id "BCL2L1"; transcript_id "BX647525:uc002wwk.3"; -chr20 hg19_knownGene exon 30254794 30254950 0.000000 - . gene_id "BCL2L1"; transcript_id "BX647525:uc002wwk.3"; -chr20 hg19_knownGene exon 30309458 30310133 0.000000 - . gene_id "BCL2L1"; transcript_id "BX647525:uc002wwk.3"; -chr20 hg19_knownGene CDS 30253755 30253889 0.000000 - 0 gene_id "BCL2L1"; transcript_id "NM_138578:uc002wwl.3"; -chr20 hg19_knownGene exon 30252261 30253889 0.000000 - . gene_id "BCL2L1"; transcript_id "NM_138578:uc002wwl.3"; -chr20 hg19_knownGene CDS 30309458 30310021 0.000000 - 0 gene_id "BCL2L1"; transcript_id "NM_138578:uc002wwl.3"; -chr20 hg19_knownGene exon 30309458 30310151 0.000000 - . gene_id "BCL2L1"; transcript_id "NM_138578:uc002wwl.3"; -chr20 hg19_knownGene exon 30310421 30310656 0.000000 - . gene_id "BCL2L1"; transcript_id "NM_138578:uc002wwl.3"; -chr20 hg19_knownGene CDS 30253755 30253889 0.000000 - 0 gene_id "BCL2L1"; transcript_id "NM_001191:uc002wwm.3"; -chr20 hg19_knownGene exon 30252261 30253889 0.000000 - . gene_id "BCL2L1"; transcript_id "NM_001191:uc002wwm.3"; -chr20 hg19_knownGene CDS 30309647 30310021 0.000000 - 0 gene_id "BCL2L1"; transcript_id "NM_001191:uc002wwm.3"; -chr20 hg19_knownGene exon 30309647 30310151 0.000000 - . gene_id "BCL2L1"; transcript_id "NM_001191:uc002wwm.3"; -chr20 hg19_knownGene exon 30310421 30310656 0.000000 - . gene_id "BCL2L1"; transcript_id "NM_001191:uc002wwm.3"; -chr20 hg19_knownGene CDS 30253755 30253889 0.000000 - 0 gene_id "BCL2L1"; transcript_id "CR936637:uc002wwn.3"; -chr20 hg19_knownGene exon 30252261 30253889 0.000000 - . gene_id "BCL2L1"; transcript_id "CR936637:uc002wwn.3"; -chr20 hg19_knownGene CDS 30309458 30310021 0.000000 - 0 gene_id "BCL2L1"; transcript_id "CR936637:uc002wwn.3"; -chr20 hg19_knownGene exon 30309458 30310133 0.000000 - . gene_id "BCL2L1"; transcript_id "CR936637:uc002wwn.3"; -chr20 hg19_knownGene exon 30310421 30310656 0.000000 - . gene_id "BCL2L1"; transcript_id "CR936637:uc002wwn.3"; -chr20 hg19_knownGene CDS 30309461 30310021 0.000000 - 0 gene_id "BCL2L1"; transcript_id "BX647525:uc002wwo.1"; -chr20 hg19_knownGene exon 30309458 30310133 0.000000 - . gene_id "BCL2L1"; transcript_id "BX647525:uc002wwo.1"; -chr20 hg19_knownGene exon 30311667 30311729 0.000000 - . gene_id "BCL2L1"; transcript_id "BX647525:uc002wwo.1"; -chr20 hg19_knownGene exon 30326904 30327424 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30330344 30330450 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30345280 30345385 0.000000 + 0 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30345210 30345385 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30347860 30347982 0.000000 + 2 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30347860 30347982 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30354359 30354485 0.000000 + 2 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30354359 30354485 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30358146 30358274 0.000000 + 1 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30358146 30358274 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30359363 30359485 0.000000 + 1 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30359363 30359485 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30363670 30363791 0.000000 + 1 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30363670 30363791 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30365290 30365441 0.000000 + 2 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30365290 30365441 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30366616 30366787 0.000000 + 0 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30366616 30366787 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30370052 30370193 0.000000 + 2 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30370052 30370193 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30371508 30371724 0.000000 + 1 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30371508 30371724 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30380538 30380633 0.000000 + 0 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30380538 30380633 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30381651 30381827 0.000000 + 0 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30381651 30381827 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30382205 30382351 0.000000 + 0 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30382205 30382351 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30385207 30385318 0.000000 + 0 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30385207 30385318 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30386168 30386355 0.000000 + 2 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30386168 30386355 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene CDS 30388773 30388880 0.000000 + 0 gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30388773 30389603 0.000000 + . gene_id "TPX2"; transcript_id "NM_012112:uc002wwp.1"; -chr20 hg19_knownGene exon 30326904 30327424 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30330344 30330450 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30345280 30345385 0.000000 + 0 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30345210 30345385 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30347860 30347982 0.000000 + 2 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30347860 30347982 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30354359 30354485 0.000000 + 2 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30354359 30354485 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30358146 30358274 0.000000 + 1 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30358146 30358274 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30359363 30359485 0.000000 + 1 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30359363 30359485 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30363670 30363791 0.000000 + 1 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30363670 30363791 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30365290 30365441 0.000000 + 2 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30365290 30365441 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30366616 30366787 0.000000 + 0 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30366616 30366787 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30368742 30368849 0.000000 + 2 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30368742 30368849 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30370052 30370193 0.000000 + 2 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30370052 30370193 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30371508 30371724 0.000000 + 1 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30371508 30371724 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30380538 30380633 0.000000 + 0 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30380538 30380633 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30381651 30381827 0.000000 + 0 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30381651 30381827 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30382205 30382351 0.000000 + 0 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30382205 30382351 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30385207 30385318 0.000000 + 0 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30385207 30385318 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30386168 30386355 0.000000 + 2 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30386168 30386355 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene CDS 30388773 30388880 0.000000 + 0 gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30388773 30389603 0.000000 + . gene_id "TPX2"; transcript_id "AF287265:uc010gdv.1"; -chr20 hg19_knownGene exon 30407178 30407231 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30407384 30407435 0.000000 + 0 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30407336 30407435 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30407929 30408349 0.000000 + 2 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30407929 30408349 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30409242 30409540 0.000000 + 1 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30409242 30409540 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30411280 30411385 0.000000 + 2 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30411280 30411385 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30412062 30412155 0.000000 + 1 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30412062 30412155 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30414408 30414517 0.000000 + 0 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30414408 30414517 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30414600 30414741 0.000000 + 1 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30414600 30414741 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30418622 30418692 0.000000 + 0 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30418622 30418692 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30418816 30418944 0.000000 + 1 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30418816 30418944 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30419506 30419658 0.000000 + 1 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30419506 30419658 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30419807 30419939 0.000000 + 1 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30419807 30419939 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30421520 30421597 0.000000 + 0 gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene exon 30421520 30422500 0.000000 + . gene_id "MYLK2"; transcript_id "NM_033118:uc002wwq.2"; -chr20 hg19_knownGene CDS 30414667 30414741 0.000000 + 0 gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene exon 30414580 30414741 0.000000 + . gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene CDS 30418622 30418692 0.000000 + 0 gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene exon 30418622 30418692 0.000000 + . gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene CDS 30418816 30418944 0.000000 + 1 gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene exon 30418816 30418944 0.000000 + . gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene CDS 30419506 30419658 0.000000 + 1 gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene exon 30419506 30419658 0.000000 + . gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene CDS 30419807 30419939 0.000000 + 1 gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene exon 30419807 30419939 0.000000 + . gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene CDS 30421520 30421597 0.000000 + 0 gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene exon 30421520 30422500 0.000000 + . gene_id "MYLK2"; transcript_id "BC007753:uc002wws.2"; -chr20 hg19_knownGene exon 30418816 30418944 0.000000 + . gene_id "MYLK2"; transcript_id "BX647635:uc010gdw.1"; -chr20 hg19_knownGene exon 30419270 30419367 0.000000 + . gene_id "MYLK2"; transcript_id "BX647635:uc010gdw.1"; -chr20 hg19_knownGene exon 30419506 30419658 0.000000 + . gene_id "MYLK2"; transcript_id "BX647635:uc010gdw.1"; -chr20 hg19_knownGene exon 30419807 30419939 0.000000 + . gene_id "MYLK2"; transcript_id "BX647635:uc010gdw.1"; -chr20 hg19_knownGene exon 30421520 30422500 0.000000 + . gene_id "MYLK2"; transcript_id "BX647635:uc010gdw.1"; -chr20 hg19_knownGene CDS 30432356 30433345 0.000000 - 0 gene_id "FOXS1"; transcript_id "NM_004118:uc002wwt.1"; -chr20 hg19_knownGene exon 30432103 30433420 0.000000 - . gene_id "FOXS1"; transcript_id "NM_004118:uc002wwt.1"; -chr20 hg19_knownGene CDS 30449209 30449478 0.000000 - 0 gene_id "DUSP15"; transcript_id "NM_001012644:uc002wwv.1"; -chr20 hg19_knownGene exon 30448870 30449478 0.000000 - . gene_id "DUSP15"; transcript_id "NM_001012644:uc002wwv.1"; -chr20 hg19_knownGene CDS 30450374 30450499 0.000000 - 0 gene_id "DUSP15"; transcript_id "NM_001012644:uc002wwv.1"; -chr20 hg19_knownGene exon 30450374 30450545 0.000000 - . gene_id "DUSP15"; transcript_id "NM_001012644:uc002wwv.1"; -chr20 hg19_knownGene exon 30451710 30451784 0.000000 - . gene_id "DUSP15"; transcript_id "NM_001012644:uc002wwv.1"; -chr20 hg19_knownGene exon 30452756 30452805 0.000000 - . gene_id "DUSP15"; transcript_id "NM_001012644:uc002wwv.1"; -chr20 hg19_knownGene exon 30454874 30454956 0.000000 - . gene_id "DUSP15"; transcript_id "NM_001012644:uc002wwv.1"; -chr20 hg19_knownGene exon 30457367 30457400 0.000000 - . gene_id "DUSP15"; transcript_id "NM_001012644:uc002wwv.1"; -chr20 hg19_knownGene exon 30457613 30457801 0.000000 - . gene_id "DUSP15"; transcript_id "NM_001012644:uc002wwv.1"; -chr20 hg19_knownGene CDS 30449209 30449478 0.000000 - 0 gene_id "DUSP15"; transcript_id "NM_177991:uc002www.1"; -chr20 hg19_knownGene exon 30448870 30449478 0.000000 - . gene_id "DUSP15"; transcript_id "NM_177991:uc002www.1"; -chr20 hg19_knownGene CDS 30450374 30450499 0.000000 - 0 gene_id "DUSP15"; transcript_id "NM_177991:uc002www.1"; -chr20 hg19_knownGene exon 30450374 30450545 0.000000 - . gene_id "DUSP15"; transcript_id "NM_177991:uc002www.1"; -chr20 hg19_knownGene exon 30451710 30451784 0.000000 - . gene_id "DUSP15"; transcript_id "NM_177991:uc002www.1"; -chr20 hg19_knownGene exon 30452756 30452805 0.000000 - . gene_id "DUSP15"; transcript_id "NM_177991:uc002www.1"; -chr20 hg19_knownGene exon 30454874 30454956 0.000000 - . gene_id "DUSP15"; transcript_id "NM_177991:uc002www.1"; -chr20 hg19_knownGene exon 30457367 30457400 0.000000 - . gene_id "DUSP15"; transcript_id "NM_177991:uc002www.1"; -chr20 hg19_knownGene exon 30457851 30458011 0.000000 - . gene_id "DUSP15"; transcript_id "NM_177991:uc002www.1"; -chr20 hg19_knownGene CDS 30436210 30436368 0.000000 - 0 gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene exon 30435441 30436368 0.000000 - . gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene CDS 30436609 30436706 0.000000 - 2 gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene exon 30436609 30436706 0.000000 - . gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene CDS 30437541 30437677 0.000000 - 1 gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene exon 30437541 30437677 0.000000 - . gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene CDS 30438415 30438479 0.000000 - 0 gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene exon 30438415 30438479 0.000000 - . gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene CDS 30450374 30450545 0.000000 - 1 gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene exon 30450374 30450545 0.000000 - . gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene CDS 30451710 30451784 0.000000 - 1 gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene exon 30451710 30451784 0.000000 - . gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene CDS 30452756 30452805 0.000000 - 0 gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene exon 30452756 30452805 0.000000 - . gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene CDS 30454874 30454956 0.000000 - 2 gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene exon 30454874 30454956 0.000000 - . gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene CDS 30457367 30457400 0.000000 - 0 gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene exon 30457367 30457400 0.000000 - . gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene CDS 30458379 30458390 0.000000 - 0 gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene exon 30458379 30458467 0.000000 - . gene_id "DUSP15"; transcript_id "AK097430:uc002wwu.1"; -chr20 hg19_knownGene CDS 30449209 30449478 0.000000 - 0 gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene exon 30448870 30449478 0.000000 - . gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene CDS 30450374 30450545 0.000000 - 1 gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene exon 30450374 30450545 0.000000 - . gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene CDS 30451710 30451784 0.000000 - 1 gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene exon 30451710 30451784 0.000000 - . gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene CDS 30452756 30452805 0.000000 - 0 gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene exon 30452756 30452805 0.000000 - . gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene CDS 30454874 30454956 0.000000 - 2 gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene exon 30454874 30454956 0.000000 - . gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene CDS 30457367 30457400 0.000000 - 0 gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene exon 30457367 30457400 0.000000 - . gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene CDS 30458120 30458140 0.000000 - 0 gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene exon 30458120 30458479 0.000000 - . gene_id "DUSP15"; transcript_id "NM_080611:uc002wwx.1"; -chr20 hg19_knownGene exon 30489057 30489229 0.000000 + . gene_id "U1"; transcript_id ":uc021wbu.1"; -chr20 hg19_knownGene exon 30497540 30497725 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30507667 30507735 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30510766 30510856 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30512812 30512852 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30513676 30513763 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30521603 30521661 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30522125 30522211 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30522495 30522691 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30525199 30525312 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30525962 30526066 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30526945 30527069 0.000000 + . gene_id "TTLL9"; transcript_id "AK303963:uc010ztq.1"; -chr20 hg19_knownGene exon 30458505 30458752 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30458930 30458998 0.000000 + 0 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30458925 30458998 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30474999 30475042 0.000000 + 0 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30474999 30475042 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30486276 30486368 0.000000 + 1 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30486276 30486368 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30496394 30496505 0.000000 + 1 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30496394 30496505 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30497540 30497725 0.000000 + 0 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30497540 30497725 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30507667 30507735 0.000000 + 0 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30507667 30507735 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30510766 30510856 0.000000 + 0 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30510766 30510856 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30512812 30512852 0.000000 + 2 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30512812 30512852 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30513852 30513894 0.000000 + 0 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30513852 30513894 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30521603 30521661 0.000000 + 2 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30521603 30521661 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30522495 30522691 0.000000 + 0 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30522495 30522691 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30525199 30525312 0.000000 + 1 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30525199 30525312 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30526945 30527069 0.000000 + 1 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30526945 30527069 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene CDS 30530748 30530821 0.000000 + 2 gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30530748 30530858 0.000000 + . gene_id "TTLL9"; transcript_id "NM_001008409:uc010gdx.1"; -chr20 hg19_knownGene exon 30467630 30467700 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30474999 30475042 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30486276 30486368 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30496394 30496505 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30497540 30497725 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30507667 30507735 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30510766 30510856 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30512812 30512852 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30521603 30521661 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30522495 30522691 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30525199 30525312 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30526945 30527069 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene exon 30530748 30530858 0.000000 + . gene_id "TTLL9"; transcript_id "AK302806:uc010zto.1"; -chr20 hg19_knownGene CDS 30467686 30467700 0.000000 + 0 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30467630 30467700 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30471824 30471905 0.000000 + 0 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30471824 30471905 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30474999 30475042 0.000000 + 2 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30474999 30475042 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30486276 30486368 0.000000 + 0 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30486276 30486368 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30510766 30510856 0.000000 + 0 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30510766 30510856 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30512812 30512852 0.000000 + 2 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30512812 30512852 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30513676 30513763 0.000000 + 0 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30513676 30513763 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30521603 30521661 0.000000 + 2 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30521603 30521661 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30522495 30522691 0.000000 + 0 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30522495 30522691 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30525199 30525312 0.000000 + 1 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30525199 30525312 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30526945 30527069 0.000000 + 1 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30526945 30527069 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene CDS 30530748 30530821 0.000000 + 2 gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30530748 30532763 0.000000 + . gene_id "TTLL9"; transcript_id "BC036213:uc002wxc.2"; -chr20 hg19_knownGene exon 30458505 30458752 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30458925 30458998 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30474999 30475042 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30486276 30486368 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30496394 30496505 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30497540 30497725 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30507667 30507735 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30510766 30510856 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30512812 30512852 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30513852 30513894 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30521603 30521661 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30522495 30522691 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30525199 30525312 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30526945 30527069 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30530748 30530858 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30531569 30531648 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30531829 30532764 0.000000 + . gene_id "TTLL9"; transcript_id "AX748163:uc002wwy.1"; -chr20 hg19_knownGene exon 30458505 30458752 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30458925 30458998 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30471824 30471905 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30474999 30475042 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30486276 30486368 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30496394 30496505 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30497540 30497725 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30510766 30510856 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30512812 30512852 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30513676 30513763 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30521603 30521661 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30525199 30525312 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30530748 30530858 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30531569 30531648 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30531829 30532764 0.000000 + . gene_id "TTLL9"; transcript_id "BC104024:uc002wwz.1"; -chr20 hg19_knownGene exon 30458514 30458756 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30458925 30458998 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30471824 30471905 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30474999 30475042 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30486276 30486368 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30496394 30496505 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30497540 30497725 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30507667 30507735 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30510766 30510856 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30512812 30512852 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30521603 30521661 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30522495 30522691 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30525199 30525312 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30525962 30526066 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30526945 30527069 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30530748 30530858 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30531569 30531648 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30531829 30532764 0.000000 + . gene_id "TTLL9"; transcript_id "BC068593:uc002wxa.1"; -chr20 hg19_knownGene exon 30458514 30458756 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30474999 30475042 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30486276 30486368 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30496394 30496505 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30497540 30497725 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30507667 30507735 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30510766 30510856 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30512812 30512852 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30513676 30513763 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30521603 30521661 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30522495 30522691 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30525199 30525312 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30525985 30526066 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30526945 30527069 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30530748 30530858 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30531569 30531648 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30531829 30532764 0.000000 + . gene_id "TTLL9"; transcript_id "BC104025:uc002wxb.1"; -chr20 hg19_knownGene exon 30467630 30467700 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30486276 30486368 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30496394 30496505 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30497540 30497725 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30510766 30510856 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30512812 30512852 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30513676 30513763 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30521603 30521661 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30522495 30522691 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30525199 30525312 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30530748 30530858 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30531569 30531648 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene exon 30531829 30532764 0.000000 + . gene_id "TTLL9"; transcript_id "AK302360:uc010ztp.1"; -chr20 hg19_knownGene CDS 30533613 30533692 0.000000 - 2 gene_id "PDRG1"; transcript_id "NM_030815:uc002wxd.3"; -chr20 hg19_knownGene exon 30532758 30533692 0.000000 - . gene_id "PDRG1"; transcript_id "NM_030815:uc002wxd.3"; -chr20 hg19_knownGene CDS 30534299 30534379 0.000000 - 2 gene_id "PDRG1"; transcript_id "NM_030815:uc002wxd.3"; -chr20 hg19_knownGene exon 30534299 30534379 0.000000 - . gene_id "PDRG1"; transcript_id "NM_030815:uc002wxd.3"; -chr20 hg19_knownGene CDS 30536611 30536685 0.000000 - 2 gene_id "PDRG1"; transcript_id "NM_030815:uc002wxd.3"; -chr20 hg19_knownGene exon 30536611 30536685 0.000000 - . gene_id "PDRG1"; transcript_id "NM_030815:uc002wxd.3"; -chr20 hg19_knownGene CDS 30538115 30538190 0.000000 - 0 gene_id "PDRG1"; transcript_id "NM_030815:uc002wxd.3"; -chr20 hg19_knownGene exon 30538115 30538190 0.000000 - . gene_id "PDRG1"; transcript_id "NM_030815:uc002wxd.3"; -chr20 hg19_knownGene CDS 30539678 30539764 0.000000 - 0 gene_id "PDRG1"; transcript_id "NM_030815:uc002wxd.3"; -chr20 hg19_knownGene exon 30539678 30539883 0.000000 - . gene_id "PDRG1"; transcript_id "NM_030815:uc002wxd.3"; -chr20 hg19_knownGene CDS 30555979 30556562 0.000000 + 0 gene_id "XKR7"; transcript_id "NM_001011718:uc002wxe.3"; -chr20 hg19_knownGene exon 30555805 30556562 0.000000 + . gene_id "XKR7"; transcript_id "NM_001011718:uc002wxe.3"; -chr20 hg19_knownGene CDS 30582871 30583073 0.000000 + 1 gene_id "XKR7"; transcript_id "NM_001011718:uc002wxe.3"; -chr20 hg19_knownGene exon 30582871 30583073 0.000000 + . gene_id "XKR7"; transcript_id "NM_001011718:uc002wxe.3"; -chr20 hg19_knownGene CDS 30584308 30585257 0.000000 + 2 gene_id "XKR7"; transcript_id "NM_001011718:uc002wxe.3"; -chr20 hg19_knownGene exon 30584308 30586256 0.000000 + . gene_id "XKR7"; transcript_id "NM_001011718:uc002wxe.3"; -chr20 hg19_knownGene CDS 30598258 30598287 0.000000 + 0 gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene exon 30598245 30598287 0.000000 + . gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene CDS 30602707 30602874 0.000000 + 0 gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene exon 30602707 30602874 0.000000 + . gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene CDS 30605603 30605686 0.000000 + 0 gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene exon 30605603 30605686 0.000000 + . gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene CDS 30605782 30605965 0.000000 + 0 gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene exon 30605782 30605965 0.000000 + . gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene CDS 30606746 30607212 0.000000 + 2 gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene exon 30606746 30607212 0.000000 + . gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene CDS 30610463 30610598 0.000000 + 0 gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene exon 30610463 30610598 0.000000 + . gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene CDS 30616798 30616927 0.000000 + 2 gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene exon 30616798 30616927 0.000000 + . gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene CDS 30617503 30617602 0.000000 + 1 gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene exon 30617503 30617641 0.000000 + . gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene exon 30618804 30619984 0.000000 + . gene_id "C20orf160"; transcript_id "NM_080625:uc002wxf.2"; -chr20 hg19_knownGene exon 30610178 30610598 0.000000 + . gene_id "C20orf160"; transcript_id "AK125588:uc002wxg.2"; -chr20 hg19_knownGene exon 30613659 30613722 0.000000 + . gene_id "C20orf160"; transcript_id "AK125588:uc002wxg.2"; -chr20 hg19_knownGene CDS 30616919 30616927 0.000000 + 0 gene_id "C20orf160"; transcript_id "AK125588:uc002wxg.2"; -chr20 hg19_knownGene exon 30616798 30616927 0.000000 + . gene_id "C20orf160"; transcript_id "AK125588:uc002wxg.2"; -chr20 hg19_knownGene CDS 30617503 30617641 0.000000 + 0 gene_id "C20orf160"; transcript_id "AK125588:uc002wxg.2"; -chr20 hg19_knownGene exon 30617503 30617641 0.000000 + . gene_id "C20orf160"; transcript_id "AK125588:uc002wxg.2"; -chr20 hg19_knownGene CDS 30618804 30619114 0.000000 + 2 gene_id "C20orf160"; transcript_id "AK125588:uc002wxg.2"; -chr20 hg19_knownGene exon 30618804 30619984 0.000000 + . gene_id "C20orf160"; transcript_id "AK125588:uc002wxg.2"; -chr20 hg19_knownGene exon 30639991 30640289 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30642083 30642084 0.000000 + 0 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30642019 30642084 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30659465 30659585 0.000000 + 1 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30659465 30659585 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30661122 30661164 0.000000 + 0 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30661122 30661164 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30661519 30661621 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30661519 30661621 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30662426 30662524 0.000000 + 1 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30662426 30662524 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30667577 30667680 0.000000 + 1 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30667577 30667680 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30671697 30671846 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30671697 30671846 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30672194 30672346 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30672194 30672346 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30674431 30674610 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30674431 30674610 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30676371 30676447 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30676371 30676447 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30681666 30681819 0.000000 + 0 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30681666 30681819 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30686807 30686938 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30686807 30686938 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene CDS 30689120 30689319 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30689120 30689657 0.000000 + . gene_id "HCK"; transcript_id "NM_001172132:uc010gdy.3"; -chr20 hg19_knownGene exon 30639991 30640289 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30657491 30657554 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30659466 30659585 0.000000 + 0 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30659465 30659585 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30661122 30661164 0.000000 + 0 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30661122 30661164 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30661519 30661621 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30661519 30661621 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30662426 30662524 0.000000 + 1 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30662426 30662524 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30667577 30667680 0.000000 + 1 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30667577 30667680 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30671697 30671846 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30671697 30671846 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30672194 30672346 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30672194 30672346 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30674431 30674610 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30674431 30674610 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30676371 30676447 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30676371 30676447 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30681666 30681819 0.000000 + 0 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30681666 30681819 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30686807 30686938 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30686807 30686938 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30689120 30689319 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene exon 30689120 30689657 0.000000 + . gene_id "HCK"; transcript_id "NM_001172133:uc021wbv.1"; -chr20 hg19_knownGene CDS 30640228 30640289 0.000000 + 0 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30639991 30640289 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30659465 30659585 0.000000 + 1 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30659465 30659585 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30661122 30661164 0.000000 + 0 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30661122 30661164 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30661519 30661621 0.000000 + 2 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30661519 30661621 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30662426 30662524 0.000000 + 1 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30662426 30662524 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30667577 30667680 0.000000 + 1 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30667577 30667680 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30671697 30671846 0.000000 + 2 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30671697 30671846 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30672194 30672346 0.000000 + 2 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30672194 30672346 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30674431 30674610 0.000000 + 2 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30674431 30674610 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30676371 30676447 0.000000 + 2 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30676371 30676447 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30681666 30681819 0.000000 + 0 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30681666 30681819 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30686807 30686938 0.000000 + 2 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30686807 30686938 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene CDS 30689120 30689319 0.000000 + 2 gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30689120 30689657 0.000000 + . gene_id "HCK"; transcript_id "NM_002110:uc002wxh.3"; -chr20 hg19_knownGene exon 30639991 30640289 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30659466 30659585 0.000000 + 0 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30659465 30659585 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30661122 30661164 0.000000 + 0 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30661122 30661164 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30661522 30661621 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30661522 30661621 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30662426 30662524 0.000000 + 1 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30662426 30662524 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30667577 30667680 0.000000 + 1 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30667577 30667680 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30671697 30671846 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30671697 30671846 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30672194 30672346 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30672194 30672346 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30674431 30674610 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30674431 30674610 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30676371 30676447 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30676371 30676447 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30681666 30681819 0.000000 + 0 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30681666 30681819 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30686807 30686938 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30686807 30686938 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene CDS 30689120 30689319 0.000000 + 2 gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30689120 30689657 0.000000 + . gene_id "HCK"; transcript_id "NM_001172131:uc002wxi.3"; -chr20 hg19_knownGene exon 30697309 30697558 0.000000 + . gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene exon 30720816 30720929 0.000000 + . gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene exon 30723877 30723976 0.000000 + . gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene CDS 30724750 30724800 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene exon 30724680 30724800 0.000000 + . gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene CDS 30729344 30729468 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene exon 30729344 30729468 0.000000 + . gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene CDS 30729569 30729698 0.000000 + 1 gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene exon 30729569 30729698 0.000000 + . gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene CDS 30730785 30730908 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene exon 30730785 30730908 0.000000 + . gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene CDS 30732894 30733012 0.000000 + 2 gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene exon 30732894 30733012 0.000000 + . gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene CDS 30733115 30733226 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene exon 30733115 30733226 0.000000 + . gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene CDS 30734588 30734655 0.000000 + 2 gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene exon 30734588 30734658 0.000000 + . gene_id "TM9SF4"; transcript_id "AK302439:uc010ztr.1"; -chr20 hg19_knownGene CDS 30697544 30697558 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30697309 30697558 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30720816 30720929 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30720816 30720929 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30723877 30723976 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30723877 30723976 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30729300 30729468 0.000000 + 2 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30729300 30729468 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30729569 30729698 0.000000 + 1 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30729569 30729698 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30730785 30730908 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30730785 30730908 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30732894 30733012 0.000000 + 2 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30732894 30733012 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30733115 30733226 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30733115 30733226 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30734588 30734658 0.000000 + 2 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30734588 30734658 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30737437 30737569 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30737437 30737569 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30738425 30738506 0.000000 + 2 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30738425 30738506 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30738603 30738678 0.000000 + 1 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30738603 30738678 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30742906 30742989 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30742906 30742989 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30745597 30745772 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30745597 30745772 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30746254 30746317 0.000000 + 1 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30746254 30746317 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30747795 30747914 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30747795 30747914 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30749079 30749168 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30749079 30749168 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene CDS 30753098 30753244 0.000000 + 0 gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30753098 30755061 0.000000 + . gene_id "TM9SF4"; transcript_id "NM_014742:uc002wxj.2"; -chr20 hg19_knownGene exon 30697309 30697558 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30720816 30720929 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30723877 30723976 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30729350 30729468 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30729344 30729468 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30729569 30729698 0.000000 + 1 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30729569 30729698 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30730785 30730908 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30730785 30730908 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30732894 30733012 0.000000 + 2 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30732894 30733012 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30733115 30733226 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30733115 30733226 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30734588 30734658 0.000000 + 2 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30734588 30734658 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30737437 30737569 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30737437 30737569 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30738425 30738506 0.000000 + 2 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30738425 30738506 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30738603 30738678 0.000000 + 1 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30738603 30738678 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30742906 30742989 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30742906 30742989 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30745597 30745772 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30745597 30745772 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30746254 30746317 0.000000 + 1 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30746254 30746317 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30747795 30747914 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30747795 30747914 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30749079 30749168 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30749079 30749168 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene CDS 30753098 30753244 0.000000 + 0 gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30753098 30755061 0.000000 + . gene_id "TM9SF4"; transcript_id "AK294980:uc010zts.1"; -chr20 hg19_knownGene exon 30697539 30697842 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30720852 30720929 0.000000 + 0 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30720816 30720929 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30723877 30723976 0.000000 + 0 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30723877 30723976 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30729300 30729468 0.000000 + 2 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30729300 30729468 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30729569 30729698 0.000000 + 1 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30729569 30729698 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30730785 30730908 0.000000 + 0 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30730785 30730908 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30732894 30733012 0.000000 + 2 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30732894 30733012 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30733115 30733226 0.000000 + 0 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30733115 30733226 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30734588 30734658 0.000000 + 2 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30734588 30734658 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30737437 30737569 0.000000 + 0 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30737437 30737569 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30738425 30738506 0.000000 + 2 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30738425 30738506 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30738603 30738678 0.000000 + 1 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30738603 30738678 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30742906 30742989 0.000000 + 0 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30742906 30742989 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30745597 30745772 0.000000 + 0 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30745597 30745772 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30746254 30746317 0.000000 + 1 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30746254 30746317 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30747795 30747914 0.000000 + 0 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30747795 30747914 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30749079 30749168 0.000000 + 0 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30749079 30749168 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30753098 30753244 0.000000 + 0 gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene exon 30753098 30755061 0.000000 + . gene_id "TM9SF4"; transcript_id "D87444:uc002wxk.2"; -chr20 hg19_knownGene CDS 30777008 30778072 0.000000 - 0 gene_id "TSPY26P"; transcript_id "NR_002781:uc002wxm.1"; -chr20 hg19_knownGene exon 30776949 30778163 0.000000 - . gene_id "TSPY26P"; transcript_id "NR_002781:uc002wxm.1"; -chr20 hg19_knownGene CDS 30784258 30785485 0.000000 - 1 gene_id "PLAGL2"; transcript_id "NM_002657:uc002wxn.2"; -chr20 hg19_knownGene exon 30780307 30785485 0.000000 - . gene_id "PLAGL2"; transcript_id "NM_002657:uc002wxn.2"; -chr20 hg19_knownGene CDS 30789722 30789981 0.000000 - 0 gene_id "PLAGL2"; transcript_id "NM_002657:uc002wxn.2"; -chr20 hg19_knownGene exon 30789722 30790095 0.000000 - . gene_id "PLAGL2"; transcript_id "NM_002657:uc002wxn.2"; -chr20 hg19_knownGene exon 30795444 30795546 0.000000 - . gene_id "PLAGL2"; transcript_id "NM_002657:uc002wxn.2"; -chr20 hg19_knownGene CDS 30795745 30795868 0.000000 + 0 gene_id "POFUT1"; transcript_id "NM_172236:uc002wxo.3"; -chr20 hg19_knownGene exon 30795696 30795868 0.000000 + . gene_id "POFUT1"; transcript_id "NM_172236:uc002wxo.3"; -chr20 hg19_knownGene CDS 30797874 30797995 0.000000 + 2 gene_id "POFUT1"; transcript_id "NM_172236:uc002wxo.3"; -chr20 hg19_knownGene exon 30797874 30797995 0.000000 + . gene_id "POFUT1"; transcript_id "NM_172236:uc002wxo.3"; -chr20 hg19_knownGene CDS 30803072 30803254 0.000000 + 0 gene_id "POFUT1"; transcript_id "NM_172236:uc002wxo.3"; -chr20 hg19_knownGene exon 30803072 30803254 0.000000 + . gene_id "POFUT1"; transcript_id "NM_172236:uc002wxo.3"; -chr20 hg19_knownGene CDS 30804412 30804524 0.000000 + 0 gene_id "POFUT1"; transcript_id "NM_172236:uc002wxo.3"; -chr20 hg19_knownGene exon 30804412 30804524 0.000000 + . gene_id "POFUT1"; transcript_id "NM_172236:uc002wxo.3"; -chr20 hg19_knownGene CDS 30804811 30804850 0.000000 + 1 gene_id "POFUT1"; transcript_id "NM_172236:uc002wxo.3"; -chr20 hg19_knownGene exon 30804811 30805726 0.000000 + . gene_id "POFUT1"; transcript_id "NM_172236:uc002wxo.3"; -chr20 hg19_knownGene CDS 30795745 30795868 0.000000 + 0 gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene exon 30795696 30795868 0.000000 + . gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene CDS 30797874 30797995 0.000000 + 2 gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene exon 30797874 30797995 0.000000 + . gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene CDS 30803072 30803254 0.000000 + 0 gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene exon 30803072 30803254 0.000000 + . gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene CDS 30804412 30804524 0.000000 + 0 gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene exon 30804412 30804524 0.000000 + . gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene CDS 30816066 30816258 0.000000 + 1 gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene exon 30816066 30816258 0.000000 + . gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene CDS 30818622 30818864 0.000000 + 0 gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene exon 30818622 30818864 0.000000 + . gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene CDS 30822276 30822461 0.000000 + 0 gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene exon 30822276 30826467 0.000000 + . gene_id "POFUT1"; transcript_id "NM_015352:uc002wxp.3"; -chr20 hg19_knownGene exon 30795696 30795868 0.000000 + . gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene CDS 30803150 30803254 0.000000 + 0 gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene exon 30803072 30803254 0.000000 + . gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene CDS 30804412 30804524 0.000000 + 0 gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene exon 30804412 30804524 0.000000 + . gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene CDS 30816066 30816258 0.000000 + 1 gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene exon 30816066 30816258 0.000000 + . gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene CDS 30818622 30818864 0.000000 + 0 gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene exon 30818622 30818864 0.000000 + . gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene CDS 30822276 30822461 0.000000 + 0 gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene exon 30822276 30826467 0.000000 + . gene_id "POFUT1"; transcript_id "AK303068:uc010ztt.2"; -chr20 hg19_knownGene exon 30795696 30795868 0.000000 + . gene_id "POFUT1"; transcript_id "AK300810:uc010ztu.2"; -chr20 hg19_knownGene CDS 30816157 30816258 0.000000 + 0 gene_id "POFUT1"; transcript_id "AK300810:uc010ztu.2"; -chr20 hg19_knownGene exon 30816066 30816258 0.000000 + . gene_id "POFUT1"; transcript_id "AK300810:uc010ztu.2"; -chr20 hg19_knownGene CDS 30818622 30818864 0.000000 + 0 gene_id "POFUT1"; transcript_id "AK300810:uc010ztu.2"; -chr20 hg19_knownGene exon 30818622 30818864 0.000000 + . gene_id "POFUT1"; transcript_id "AK300810:uc010ztu.2"; -chr20 hg19_knownGene CDS 30822276 30822461 0.000000 + 0 gene_id "POFUT1"; transcript_id "AK300810:uc010ztu.2"; -chr20 hg19_knownGene exon 30822276 30826467 0.000000 + . gene_id "POFUT1"; transcript_id "AK300810:uc010ztu.2"; -chr20 hg19_knownGene exon 30865454 30865568 0.000000 + . gene_id "KIF3B"; transcript_id "AK302403:uc010ztv.2"; -chr20 hg19_knownGene CDS 30897581 30898703 0.000000 + 0 gene_id "KIF3B"; transcript_id "AK302403:uc010ztv.2"; -chr20 hg19_knownGene exon 30897516 30898703 0.000000 + . gene_id "KIF3B"; transcript_id "AK302403:uc010ztv.2"; -chr20 hg19_knownGene CDS 30898832 30898848 0.000000 + 2 gene_id "KIF3B"; transcript_id "AK302403:uc010ztv.2"; -chr20 hg19_knownGene exon 30898832 30898950 0.000000 + . gene_id "KIF3B"; transcript_id "AK302403:uc010ztv.2"; -chr20 hg19_knownGene exon 30865454 30865568 0.000000 + . gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene CDS 30897581 30898984 0.000000 + 0 gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene exon 30897516 30898984 0.000000 + . gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene CDS 30904021 30904122 0.000000 + 0 gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene exon 30904021 30904122 0.000000 + . gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene CDS 30904330 30904452 0.000000 + 0 gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene exon 30904330 30904452 0.000000 + . gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene CDS 30904559 30904677 0.000000 + 0 gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene exon 30904559 30904677 0.000000 + . gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene CDS 30914574 30914687 0.000000 + 1 gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene exon 30914574 30914687 0.000000 + . gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene CDS 30915359 30915464 0.000000 + 1 gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene exon 30915359 30915464 0.000000 + . gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene CDS 30917944 30918122 0.000000 + 0 gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene exon 30917944 30918122 0.000000 + . gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene CDS 30919026 30919119 0.000000 + 1 gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene exon 30919026 30922811 0.000000 + . gene_id "KIF3B"; transcript_id "NM_004798:uc002wxq.3"; -chr20 hg19_knownGene CDS 30897581 30898703 0.000000 + 0 gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene exon 30897516 30898703 0.000000 + . gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene CDS 30898890 30898984 0.000000 + 2 gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene exon 30898890 30898984 0.000000 + . gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene CDS 30904021 30904122 0.000000 + 0 gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene exon 30904021 30904122 0.000000 + . gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene CDS 30904330 30904452 0.000000 + 0 gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene exon 30904330 30904452 0.000000 + . gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene CDS 30904559 30904677 0.000000 + 0 gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene exon 30904559 30904677 0.000000 + . gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene CDS 30914574 30914687 0.000000 + 1 gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene exon 30914574 30914687 0.000000 + . gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene CDS 30915359 30915464 0.000000 + 1 gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene exon 30915359 30915464 0.000000 + . gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene CDS 30917944 30918122 0.000000 + 0 gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene exon 30917944 30918122 0.000000 + . gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene CDS 30919026 30919119 0.000000 + 1 gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene exon 30919026 30922811 0.000000 + . gene_id "KIF3B"; transcript_id "AK299877:uc010ztw.2"; -chr20 hg19_knownGene CDS 30946579 30946635 0.000000 + 0 gene_id "ASXL1"; transcript_id "NM_001164603:uc002wxt.3"; -chr20 hg19_knownGene exon 30946147 30946635 0.000000 + . gene_id "ASXL1"; transcript_id "NM_001164603:uc002wxt.3"; -chr20 hg19_knownGene CDS 30954187 30954269 0.000000 + 0 gene_id "ASXL1"; transcript_id "NM_001164603:uc002wxt.3"; -chr20 hg19_knownGene exon 30954187 30954269 0.000000 + . gene_id "ASXL1"; transcript_id "NM_001164603:uc002wxt.3"; -chr20 hg19_knownGene CDS 30956818 30956926 0.000000 + 1 gene_id "ASXL1"; transcript_id "NM_001164603:uc002wxt.3"; -chr20 hg19_knownGene exon 30956818 30956926 0.000000 + . gene_id "ASXL1"; transcript_id "NM_001164603:uc002wxt.3"; -chr20 hg19_knownGene CDS 30959967 30959969 0.000000 + 0 gene_id "ASXL1"; transcript_id "NM_001164603:uc002wxt.3"; -chr20 hg19_knownGene exon 30959967 30960352 0.000000 + . gene_id "ASXL1"; transcript_id "NM_001164603:uc002wxt.3"; -chr20 hg19_knownGene exon 30946147 30946635 0.000000 + . gene_id "ASXL1"; transcript_id "BC064984:uc002wxr.2"; -chr20 hg19_knownGene exon 30954187 30954269 0.000000 + . gene_id "ASXL1"; transcript_id "BC064984:uc002wxr.2"; -chr20 hg19_knownGene exon 30956818 30956926 0.000000 + . gene_id "ASXL1"; transcript_id "BC064984:uc002wxr.2"; -chr20 hg19_knownGene exon 30959581 30959677 0.000000 + . gene_id "ASXL1"; transcript_id "BC064984:uc002wxr.2"; -chr20 hg19_knownGene exon 31015931 31016051 0.000000 + . gene_id "ASXL1"; transcript_id "BC064984:uc002wxr.2"; -chr20 hg19_knownGene exon 31016128 31016225 0.000000 + . gene_id "ASXL1"; transcript_id "BC064984:uc002wxr.2"; -chr20 hg19_knownGene CDS 30946579 30946635 0.000000 + 0 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 30946147 30946635 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 30954187 30954269 0.000000 + 0 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 30954187 30954269 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 30956818 30956926 0.000000 + 1 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 30956818 30956926 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 31015931 31016051 0.000000 + 0 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 31015931 31016051 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 31016128 31016225 0.000000 + 2 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 31016128 31016225 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 31017141 31017234 0.000000 + 0 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 31017141 31017234 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 31017704 31017856 0.000000 + 2 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 31017704 31017856 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 31019124 31019287 0.000000 + 2 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 31019124 31019287 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 31019386 31019482 0.000000 + 0 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 31019386 31019482 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 31020683 31020788 0.000000 + 2 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 31020683 31020788 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 31021087 31021720 0.000000 + 1 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 31021087 31021720 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 31022235 31025138 0.000000 + 0 gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene exon 31022235 31027122 0.000000 + . gene_id "ASXL1"; transcript_id "NM_015338:uc002wxs.3"; -chr20 hg19_knownGene CDS 30946579 30946635 0.000000 + 0 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 30946147 30946635 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 30954187 30954269 0.000000 + 0 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 30954187 30954269 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 30955530 30955532 0.000000 + 1 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 30955530 30955532 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 30956818 30956926 0.000000 + 1 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 30956818 30956926 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 31015931 31016051 0.000000 + 0 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 31015931 31016051 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 31016128 31016225 0.000000 + 2 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 31016128 31016225 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 31017141 31017234 0.000000 + 0 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 31017141 31017234 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 31017704 31017856 0.000000 + 2 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 31017704 31017856 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 31019124 31019287 0.000000 + 2 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 31019124 31019287 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 31019386 31019482 0.000000 + 0 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 31019386 31019482 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 31020683 31020788 0.000000 + 2 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 31020683 31020788 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 31021087 31021720 0.000000 + 1 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 31021087 31021720 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 31022235 31025138 0.000000 + 0 gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene exon 31022235 31027122 0.000000 + . gene_id "ASXL1"; transcript_id "CCDS13201:uc021wbw.1"; -chr20 hg19_knownGene CDS 30956849 30956926 0.000000 + 0 gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene exon 30956818 30956926 0.000000 + . gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene CDS 31015931 31016051 0.000000 + 0 gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene exon 31015931 31016051 0.000000 + . gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene CDS 31016128 31016225 0.000000 + 2 gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene exon 31016128 31016225 0.000000 + . gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene CDS 31017141 31017234 0.000000 + 0 gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene exon 31017141 31017234 0.000000 + . gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene CDS 31019124 31019287 0.000000 + 2 gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene exon 31019124 31019287 0.000000 + . gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene CDS 31019386 31019482 0.000000 + 0 gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene exon 31019386 31019482 0.000000 + . gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene CDS 31020683 31020788 0.000000 + 2 gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene exon 31020683 31020788 0.000000 + . gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene CDS 31021087 31021720 0.000000 + 1 gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene exon 31021087 31021720 0.000000 + . gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene CDS 31022235 31025138 0.000000 + 0 gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene exon 31022235 31027122 0.000000 + . gene_id "ASXL1"; transcript_id "AK122923:uc010geb.3"; -chr20 hg19_knownGene CDS 31035402 31035619 0.000000 - 2 gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene exon 31030862 31035619 0.000000 - . gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene CDS 31040039 31040240 0.000000 - 0 gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene exon 31040039 31040240 0.000000 - . gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene CDS 31040687 31040809 0.000000 - 0 gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene exon 31040687 31040809 0.000000 - . gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene CDS 31041107 31041298 0.000000 - 0 gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene exon 31041107 31041298 0.000000 - . gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene CDS 31041379 31041564 0.000000 - 0 gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene exon 31041379 31041564 0.000000 - . gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene CDS 31043921 31044198 0.000000 - 2 gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene exon 31043921 31044198 0.000000 - . gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene CDS 31062404 31062512 0.000000 - 0 gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene exon 31062404 31062545 0.000000 - . gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene exon 31071165 31071288 0.000000 - . gene_id "C20orf112"; transcript_id "NM_080616:uc002wxu.4"; -chr20 hg19_knownGene CDS 31052757 31052920 0.000000 - 2 gene_id "C20orf112"; transcript_id "BC038088:uc002wxv.4"; -chr20 hg19_knownGene exon 31052583 31052920 0.000000 - . gene_id "C20orf112"; transcript_id "BC038088:uc002wxv.4"; -chr20 hg19_knownGene CDS 31062404 31062512 0.000000 - 0 gene_id "C20orf112"; transcript_id "BC038088:uc002wxv.4"; -chr20 hg19_knownGene exon 31062404 31062545 0.000000 - . gene_id "C20orf112"; transcript_id "BC038088:uc002wxv.4"; -chr20 hg19_knownGene exon 31071165 31071288 0.000000 - . gene_id "C20orf112"; transcript_id "BC038088:uc002wxv.4"; -chr20 hg19_knownGene exon 31052584 31052937 0.000000 - . gene_id "C20orf112"; transcript_id "AK097804:uc002wxw.1"; -chr20 hg19_knownGene exon 31062404 31062545 0.000000 - . gene_id "C20orf112"; transcript_id "AK097804:uc002wxw.1"; -chr20 hg19_knownGene exon 31099150 31099259 0.000000 - . gene_id "C20orf112"; transcript_id "AK097804:uc002wxw.1"; -chr20 hg19_knownGene exon 31108614 31108725 0.000000 - . gene_id "C20orf112"; transcript_id "AK097804:uc002wxw.1"; -chr20 hg19_knownGene exon 31115561 31115716 0.000000 - . gene_id "C20orf112"; transcript_id "AK097804:uc002wxw.1"; -chr20 hg19_knownGene exon 31120120 31120219 0.000000 - . gene_id "C20orf112"; transcript_id "AK097804:uc002wxw.1"; -chr20 hg19_knownGene exon 31121179 31121288 0.000000 - . gene_id "C20orf112"; transcript_id "AK097804:uc002wxw.1"; -chr20 hg19_knownGene exon 31123244 31124200 0.000000 - . gene_id "C20orf112"; transcript_id "AK097804:uc002wxw.1"; -chr20 hg19_knownGene CDS 31136575 31136688 0.000000 - 0 gene_id "LOC284804"; transcript_id "BC065483:uc002wxx.3"; -chr20 hg19_knownGene exon 31136309 31136688 0.000000 - . gene_id "LOC284804"; transcript_id "BC065483:uc002wxx.3"; -chr20 hg19_knownGene CDS 31172372 31172692 0.000000 - 0 gene_id "LOC284804"; transcript_id "BC065483:uc002wxx.3"; -chr20 hg19_knownGene exon 31172372 31172875 0.000000 - . gene_id "LOC284804"; transcript_id "BC065483:uc002wxx.3"; -chr20 hg19_knownGene exon 31175281 31175358 0.000000 + . gene_id "LOC149950"; transcript_id "NR_034152:uc002wxy.3"; -chr20 hg19_knownGene CDS 31189469 31189498 0.000000 + 0 gene_id "LOC149950"; transcript_id "NR_034152:uc002wxy.3"; -chr20 hg19_knownGene exon 31189315 31189498 0.000000 + . gene_id "LOC149950"; transcript_id "NR_034152:uc002wxy.3"; -chr20 hg19_knownGene CDS 31196112 31196501 0.000000 + 0 gene_id "LOC149950"; transcript_id "NR_034152:uc002wxy.3"; -chr20 hg19_knownGene exon 31196112 31196694 0.000000 + . gene_id "LOC149950"; transcript_id "NR_034152:uc002wxy.3"; -chr20 hg19_knownGene exon 31219427 31222072 0.000000 - . gene_id "C20orf203"; transcript_id "NM_182584:uc021wbx.1"; -chr20 hg19_knownGene exon 31228368 31228489 0.000000 - . gene_id "C20orf203"; transcript_id "NM_182584:uc021wbx.1"; -chr20 hg19_knownGene CDS 31238237 31238683 0.000000 - 0 gene_id "C20orf203"; transcript_id "NM_182584:uc021wbx.1"; -chr20 hg19_knownGene exon 31237057 31238683 0.000000 - . gene_id "C20orf203"; transcript_id "NM_182584:uc021wbx.1"; -chr20 hg19_knownGene CDS 31238820 31238954 0.000000 - 0 gene_id "C20orf203"; transcript_id "NM_182584:uc021wbx.1"; -chr20 hg19_knownGene exon 31238820 31238968 0.000000 - . gene_id "C20orf203"; transcript_id "NM_182584:uc021wbx.1"; -chr20 hg19_knownGene exon 31239535 31239783 0.000000 - . gene_id "C20orf203"; transcript_id "NM_182584:uc021wbx.1"; -chr20 hg19_knownGene exon 31219427 31222072 0.000000 - . gene_id "C20orf203"; transcript_id "GU931819:uc002wxz.3"; -chr20 hg19_knownGene exon 31228368 31228489 0.000000 - . gene_id "C20orf203"; transcript_id "GU931819:uc002wxz.3"; -chr20 hg19_knownGene exon 31237057 31238683 0.000000 - . gene_id "C20orf203"; transcript_id "GU931819:uc002wxz.3"; -chr20 hg19_knownGene exon 31238820 31238968 0.000000 - . gene_id "C20orf203"; transcript_id "GU931819:uc002wxz.3"; -chr20 hg19_knownGene exon 31239535 31239783 0.000000 - . gene_id "C20orf203"; transcript_id "GU931819:uc002wxz.3"; -chr20 hg19_knownGene exon 31261434 31261743 0.000000 - . gene_id "C20orf203"; transcript_id "GU931819:uc002wxz.3"; -chr20 hg19_knownGene CDS 31291187 31291260 0.000000 - 2 gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene exon 31290493 31291260 0.000000 - . gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene CDS 31291825 31291873 0.000000 - 0 gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene exon 31291825 31291873 0.000000 - . gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene CDS 31292242 31292291 0.000000 - 2 gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene exon 31292242 31292291 0.000000 - . gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene CDS 31292616 31292706 0.000000 - 0 gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene exon 31292616 31292706 0.000000 - . gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene CDS 31294385 31294422 0.000000 - 2 gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene exon 31294385 31294422 0.000000 - . gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene CDS 31294506 31294562 0.000000 - 2 gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene exon 31294506 31294562 0.000000 - . gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene CDS 31315700 31315802 0.000000 - 0 gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene exon 31315700 31315802 0.000000 - . gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene CDS 31315896 31315949 0.000000 - 0 gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene exon 31315896 31315949 0.000000 - . gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene CDS 31331114 31331197 0.000000 - 0 gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene exon 31331114 31331814 0.000000 - . gene_id "COMMD7"; transcript_id "NM_053041:uc002wya.4"; -chr20 hg19_knownGene CDS 31291187 31291260 0.000000 - 2 gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene exon 31290493 31291260 0.000000 - . gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene CDS 31291825 31291873 0.000000 - 0 gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene exon 31291825 31291873 0.000000 - . gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene CDS 31292242 31292291 0.000000 - 2 gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene exon 31292242 31292291 0.000000 - . gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene CDS 31292616 31292706 0.000000 - 0 gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene exon 31292616 31292706 0.000000 - . gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene CDS 31294385 31294422 0.000000 - 2 gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene exon 31294385 31294422 0.000000 - . gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene CDS 31294506 31294562 0.000000 - 2 gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene exon 31294506 31294562 0.000000 - . gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene CDS 31315700 31315802 0.000000 - 0 gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene exon 31315700 31315802 0.000000 - . gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene CDS 31315896 31315946 0.000000 - 0 gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene exon 31315896 31315946 0.000000 - . gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene CDS 31331114 31331197 0.000000 - 0 gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene exon 31331114 31331814 0.000000 - . gene_id "COMMD7"; transcript_id "NM_001099339:uc010ged.3"; -chr20 hg19_knownGene CDS 31291625 31291873 0.000000 - 0 gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene exon 31290505 31291873 0.000000 - . gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene CDS 31292242 31292291 0.000000 - 2 gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene exon 31292242 31292291 0.000000 - . gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene CDS 31292616 31292706 0.000000 - 0 gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene exon 31292616 31292706 0.000000 - . gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene CDS 31294385 31294422 0.000000 - 2 gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene exon 31294385 31294422 0.000000 - . gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene CDS 31294506 31294562 0.000000 - 2 gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene exon 31294506 31294562 0.000000 - . gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene CDS 31315700 31315802 0.000000 - 0 gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene exon 31315700 31315802 0.000000 - . gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene CDS 31315896 31315949 0.000000 - 0 gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene exon 31315896 31315949 0.000000 - . gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene CDS 31331114 31331197 0.000000 - 0 gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene exon 31331114 31331814 0.000000 - . gene_id "COMMD7"; transcript_id "BC022073:uc002wyb.2"; -chr20 hg19_knownGene exon 31350191 31350505 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31368124 31368271 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31369159 31369220 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31372564 31372665 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31375036 31375257 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31376660 31376818 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31380432 31380576 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31383121 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31384596 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31384993 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "AK299776:uc010ztx.1"; -chr20 hg19_knownGene exon 31350191 31350505 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31368124 31368271 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31369159 31369220 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31372564 31372665 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31375036 31375257 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31376660 31376818 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31383215 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31384618 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31384993 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31387050 31387134 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31387959 31388104 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "AK295176:uc010zty.1"; -chr20 hg19_knownGene exon 31350191 31350505 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31368130 31368271 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31368124 31368271 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31369159 31369220 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31369159 31369220 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31372564 31372665 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31372564 31372665 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31374308 31374433 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31374308 31374433 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31375036 31375257 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31375036 31375257 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31376660 31376818 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31376660 31376818 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31379407 31379514 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31380432 31380576 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31380432 31380576 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31381342 31381401 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31381342 31381401 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31383215 31383340 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31383215 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31383456 31383500 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31384596 31384675 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31384596 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31384993 31385105 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31384993 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31386266 31386449 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31387050 31387134 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31387050 31387134 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31387959 31388104 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31387959 31388104 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31388641 31388731 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31389084 31389232 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31390191 31390276 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31393144 31393213 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31393144 31393213 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31394015 31394133 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31394015 31394133 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene CDS 31395568 31395706 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_006892:uc002wyc.3"; -chr20 hg19_knownGene exon 31350191 31350505 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31368130 31368271 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31368124 31368271 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31369159 31369220 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31369159 31369220 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31372564 31372665 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31372564 31372665 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31374308 31374433 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31374308 31374433 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31375036 31375257 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31375036 31375257 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31376660 31376818 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31376660 31376818 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31379407 31379514 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31380432 31380576 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31380432 31380576 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31383215 31383340 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31383215 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31383456 31383500 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31384596 31384675 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31384596 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31384993 31385105 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31384993 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31386266 31386449 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31387050 31387134 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31387050 31387134 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31387959 31388104 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31387959 31388104 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31388641 31388731 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31389084 31389232 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31390191 31390276 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31393144 31393213 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31393144 31393213 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31394015 31394133 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31394015 31394133 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene CDS 31395568 31395706 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175848:uc002wyd.3"; -chr20 hg19_knownGene exon 31350191 31350505 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31368130 31368271 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31368124 31368271 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31369159 31369220 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31369159 31369220 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31372564 31372665 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31372564 31372665 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31374308 31374433 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31374308 31374433 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31375036 31375257 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31375036 31375257 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31376660 31376818 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31376660 31376818 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31379407 31379514 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31380432 31380576 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31380432 31380576 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31383215 31383340 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31383215 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31383456 31383500 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31384596 31384675 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31384596 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31384993 31385105 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31384993 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31386266 31386449 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31387050 31387134 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31387050 31387134 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31387959 31388104 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31387959 31388104 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31388641 31388731 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31389084 31389232 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31390191 31390276 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene CDS 31395568 31395706 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175849:uc002wye.3"; -chr20 hg19_knownGene exon 31350191 31350505 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31368130 31368271 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31368124 31368271 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31369159 31369220 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31369159 31369220 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31372564 31372665 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31372564 31372665 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31375036 31375257 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31375036 31375257 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31376660 31376818 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31376660 31376818 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31379407 31379514 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31380432 31380576 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31380432 31380576 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31383215 31383340 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31383215 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31383456 31383500 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31384596 31384675 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31384596 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31384993 31385105 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31384993 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31386266 31386449 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31387050 31387134 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31387050 31387134 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31387959 31388104 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31387959 31388104 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31388641 31388731 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31389084 31389232 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31390191 31390276 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene CDS 31395568 31395706 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207055:uc010ztz.2"; -chr20 hg19_knownGene exon 31350191 31350505 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31368130 31368271 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31368124 31368271 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31369159 31369220 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31369159 31369220 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31375036 31375257 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31375036 31375257 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31376660 31376818 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31376660 31376818 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31379407 31379514 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31380432 31380576 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31380432 31380576 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31383215 31383340 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31383215 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31383456 31383500 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31384596 31384675 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31384596 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31384993 31385105 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31384993 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31386266 31386449 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31387050 31387134 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31387050 31387134 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31387959 31388104 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31387959 31388104 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31388641 31388731 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31389084 31389232 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31390191 31390276 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene CDS 31395568 31395706 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_001207056:uc010zua.2"; -chr20 hg19_knownGene exon 31350191 31350505 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31368124 31368271 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31369159 31369220 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31372564 31372665 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31374308 31374433 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31375036 31375257 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31376660 31376818 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31380432 31380576 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31383121 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31384596 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31384993 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31387050 31387134 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31387959 31388104 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31393144 31393213 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31394015 31394133 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "DQ321787:uc010gee.3"; -chr20 hg19_knownGene exon 31350191 31350505 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31368124 31368271 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31369159 31369220 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31372564 31372665 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31374308 31374433 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31375036 31375257 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31376660 31376818 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31380432 31380576 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31383215 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31384596 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31384747 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31387050 31387134 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31387959 31388104 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "AB208880:uc010gef.3"; -chr20 hg19_knownGene CDS 31367922 31367951 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31367658 31367951 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31368124 31368271 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31368124 31368271 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31369159 31369220 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31369159 31369220 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31372564 31372665 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31372564 31372665 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31374308 31374433 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31374308 31374433 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31375036 31375257 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31375036 31375257 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31376660 31376818 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31376660 31376818 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31379407 31379514 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31380432 31380576 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31380432 31380576 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31383215 31383340 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31383215 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31383456 31383500 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31384596 31384675 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31384596 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31384993 31385105 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31384993 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31386266 31386449 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31387050 31387134 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31387050 31387134 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31387959 31388104 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31387959 31388104 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31388641 31388731 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31389084 31389232 0.000000 + 2 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31390191 31390276 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31393144 31393213 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31393144 31393213 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31394015 31394133 0.000000 + 0 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31394015 31394133 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31395568 31395706 0.000000 + 1 gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "NM_175850:uc002wyf.3"; -chr20 hg19_knownGene CDS 31379497 31379514 0.000000 + 0 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31379407 31379514 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31380432 31380576 0.000000 + 0 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31380432 31380576 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31381342 31381401 0.000000 + 2 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31381342 31381401 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31383215 31383340 0.000000 + 2 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31383215 31383340 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31383456 31383500 0.000000 + 2 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31383456 31383500 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31384596 31384675 0.000000 + 2 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31384596 31384675 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31384993 31385105 0.000000 + 0 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31384993 31385105 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31386266 31386449 0.000000 + 1 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31386266 31386449 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31387050 31387134 0.000000 + 0 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31387050 31387134 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31387959 31388104 0.000000 + 2 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31387959 31388104 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31388641 31388731 0.000000 + 0 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31389084 31389232 0.000000 + 2 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31390191 31390276 0.000000 + 0 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene CDS 31395568 31395706 0.000000 + 1 gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "AK001191:uc002wyg.3"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "AF129269:uc010geg.3"; -chr20 hg19_knownGene CDS 31389191 31389232 0.000000 + 0 gene_id "DNMT3B"; transcript_id "AF129269:uc010geg.3"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "AF129269:uc010geg.3"; -chr20 hg19_knownGene CDS 31390191 31390276 0.000000 + 0 gene_id "DNMT3B"; transcript_id "AF129269:uc010geg.3"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "AF129269:uc010geg.3"; -chr20 hg19_knownGene CDS 31393144 31393213 0.000000 + 1 gene_id "DNMT3B"; transcript_id "AF129269:uc010geg.3"; -chr20 hg19_knownGene exon 31393144 31393213 0.000000 + . gene_id "DNMT3B"; transcript_id "AF129269:uc010geg.3"; -chr20 hg19_knownGene CDS 31395568 31395702 0.000000 + 0 gene_id "DNMT3B"; transcript_id "AF129269:uc010geg.3"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "AF129269:uc010geg.3"; -chr20 hg19_knownGene exon 31388641 31388731 0.000000 + . gene_id "DNMT3B"; transcript_id "AF129268:uc010geh.3"; -chr20 hg19_knownGene exon 31389084 31389232 0.000000 + . gene_id "DNMT3B"; transcript_id "AF129268:uc010geh.3"; -chr20 hg19_knownGene exon 31390191 31390276 0.000000 + . gene_id "DNMT3B"; transcript_id "AF129268:uc010geh.3"; -chr20 hg19_knownGene exon 31394015 31394133 0.000000 + . gene_id "DNMT3B"; transcript_id "AF129268:uc010geh.3"; -chr20 hg19_knownGene exon 31395568 31397162 0.000000 + . gene_id "DNMT3B"; transcript_id "AF129268:uc010geh.3"; -chr20 hg19_knownGene exon 31407699 31407834 0.000000 + . gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene CDS 31413734 31413854 0.000000 + 0 gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene exon 31413731 31413854 0.000000 + . gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene CDS 31421523 31421668 0.000000 + 2 gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene exon 31421523 31421668 0.000000 + . gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene CDS 31424440 31424647 0.000000 + 0 gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene exon 31424440 31424647 0.000000 + . gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene CDS 31427541 31427662 0.000000 + 2 gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene exon 31427541 31427662 0.000000 + . gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene CDS 31434424 31434576 0.000000 + 0 gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene exon 31434424 31434576 0.000000 + . gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene CDS 31436478 31436531 0.000000 + 0 gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene exon 31436478 31438211 0.000000 + . gene_id "MAPRE1"; transcript_id "NM_012325:uc002wyh.3"; -chr20 hg19_knownGene CDS 31571603 31571755 0.000000 - 0 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31571581 31571755 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31572905 31572991 0.000000 - 0 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31572905 31572991 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31573542 31573709 0.000000 - 0 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31573542 31573709 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31575466 31575581 0.000000 - 2 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31575466 31575581 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31577426 31577504 0.000000 - 0 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31577426 31577504 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31583425 31583533 0.000000 - 1 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31583425 31583533 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31584130 31584164 0.000000 - 0 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31584130 31584164 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31585444 31585493 0.000000 - 2 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31585444 31585493 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31587880 31587941 0.000000 - 1 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31587880 31587941 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31589018 31589084 0.000000 - 2 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31589018 31589084 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31590393 31590467 0.000000 - 2 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31590393 31590467 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31590667 31590725 0.000000 - 1 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31590667 31590725 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene CDS 31592070 31592146 0.000000 - 0 gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31592070 31592239 0.000000 - . gene_id "SUN5"; transcript_id "NM_080675:uc002wyi.3"; -chr20 hg19_knownGene exon 31595407 31595566 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31596381 31596489 0.000000 + 0 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31596347 31596489 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31598830 31598923 0.000000 + 2 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31598830 31598923 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31600609 31600713 0.000000 + 1 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31600609 31600713 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31601616 31601762 0.000000 + 1 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31601616 31601762 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31603242 31603302 0.000000 + 1 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31603242 31603302 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31604848 31604908 0.000000 + 0 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31604848 31604908 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31606065 31606156 0.000000 + 2 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31606065 31606156 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31606443 31606628 0.000000 + 0 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31606443 31606628 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31606868 31606921 0.000000 + 0 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31606868 31606921 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31607386 31607556 0.000000 + 0 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31607386 31607556 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31608134 31608201 0.000000 + 0 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31608134 31608201 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31608348 31608393 0.000000 + 1 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31608348 31608393 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31609087 31609150 0.000000 + 0 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31609087 31609150 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31609529 31609605 0.000000 + 2 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31609529 31609605 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31611148 31611186 0.000000 + 0 gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene exon 31611148 31611515 0.000000 + . gene_id "BPIFB2"; transcript_id "NM_025227:uc002wyj.3"; -chr20 hg19_knownGene CDS 31619454 31619550 0.000000 + 0 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31619454 31619550 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31620790 31620889 0.000000 + 2 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31620790 31620889 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31621992 31622096 0.000000 + 1 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31621992 31622096 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31622569 31622718 0.000000 + 1 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31622569 31622718 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31622887 31622950 0.000000 + 1 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31622887 31622950 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31623418 31623478 0.000000 + 0 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31623418 31623478 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31624251 31624342 0.000000 + 2 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31624251 31624342 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31625368 31625544 0.000000 + 0 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31625368 31625544 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31626715 31626768 0.000000 + 0 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31626715 31626768 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31627153 31627326 0.000000 + 0 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31627153 31627326 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31628057 31628124 0.000000 + 0 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31628057 31628124 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31629776 31629821 0.000000 + 1 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31629776 31629821 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31630621 31630684 0.000000 + 0 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31630621 31630684 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31631097 31631173 0.000000 + 2 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31631097 31631173 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene CDS 31631821 31631850 0.000000 + 0 gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31631821 31631853 0.000000 + . gene_id "BPIFB6"; transcript_id "NM_174897:uc010zuc.2"; -chr20 hg19_knownGene exon 31619454 31619553 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31620790 31620889 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31621406 31621419 0.000000 + 0 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31621109 31621419 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31621992 31622096 0.000000 + 1 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31621992 31622096 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31622569 31622718 0.000000 + 1 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31622569 31622718 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31622887 31622950 0.000000 + 1 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31622887 31622950 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31623418 31623478 0.000000 + 0 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31623418 31623478 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31624251 31624342 0.000000 + 2 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31624251 31624342 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31625368 31625544 0.000000 + 0 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31625368 31625544 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31626715 31626768 0.000000 + 0 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31626715 31626768 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31627153 31627326 0.000000 + 0 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31627153 31627326 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31628057 31628124 0.000000 + 0 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31628057 31628124 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31629776 31629821 0.000000 + 1 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31629776 31629821 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31630621 31630684 0.000000 + 0 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31630621 31630684 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31631097 31631173 0.000000 + 2 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31631097 31631173 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31631821 31631850 0.000000 + 0 gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene exon 31631821 31631853 0.000000 + . gene_id "BPIFB6"; transcript_id "BC113122:uc010zud.2"; -chr20 hg19_knownGene CDS 31643230 31643353 0.000000 + 0 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31643230 31643353 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31644348 31644504 0.000000 + 2 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31644348 31644504 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31647184 31647288 0.000000 + 1 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31647184 31647288 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31647697 31647837 0.000000 + 1 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31647697 31647837 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31649574 31649637 0.000000 + 1 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31649574 31649637 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31651421 31651481 0.000000 + 0 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31651421 31651481 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31652263 31652354 0.000000 + 2 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31652263 31652354 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31652472 31652651 0.000000 + 0 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31652472 31652651 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31654630 31654683 0.000000 + 0 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31654630 31654683 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31656609 31656779 0.000000 + 0 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31656609 31656779 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31657694 31657761 0.000000 + 0 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31657694 31657761 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31659059 31659101 0.000000 + 1 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31659059 31659101 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31659910 31659973 0.000000 + 0 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31659910 31659973 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31660523 31660599 0.000000 + 2 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31660523 31660599 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene CDS 31661382 31661408 0.000000 + 0 gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31661382 31661434 0.000000 + . gene_id "BPIFB3"; transcript_id "NM_182658:uc002wym.1"; -chr20 hg19_knownGene exon 31677883 31677978 0.000000 + . gene_id "Mir_652"; transcript_id ":uc021wby.1"; -chr20 hg19_knownGene CDS 31669333 31669438 0.000000 + 0 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31669318 31669438 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31670744 31670806 0.000000 + 2 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31670744 31670806 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31671173 31671680 0.000000 + 2 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31671173 31671680 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31672698 31672802 0.000000 + 1 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31672698 31672802 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31673827 31673970 0.000000 + 1 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31673827 31673970 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31676772 31676835 0.000000 + 1 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31676772 31676835 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31677304 31677364 0.000000 + 0 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31677304 31677364 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31678514 31678605 0.000000 + 2 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31678514 31678605 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31680264 31680464 0.000000 + 0 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31680264 31680464 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31682906 31682959 0.000000 + 0 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31682906 31682959 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31685423 31685593 0.000000 + 0 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31685423 31685593 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31688232 31688299 0.000000 + 0 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31688232 31688299 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31690778 31690820 0.000000 + 1 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31690778 31690820 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31692616 31692679 0.000000 + 0 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31692616 31692679 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31695550 31695626 0.000000 + 2 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31695550 31695626 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene CDS 31699220 31699240 0.000000 + 0 gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31699220 31699557 0.000000 + . gene_id "BPIFB4"; transcript_id "NM_182519:uc010zue.2"; -chr20 hg19_knownGene exon 31755960 31756015 0.000000 + . gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene CDS 31756952 31757108 0.000000 + 0 gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene exon 31756937 31757108 0.000000 + . gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene CDS 31760738 31760882 0.000000 + 2 gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene exon 31760738 31760882 0.000000 + . gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene CDS 31761885 31761992 0.000000 + 1 gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene exon 31761885 31761992 0.000000 + . gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene CDS 31763213 31763365 0.000000 + 1 gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene exon 31763213 31763365 0.000000 + . gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene CDS 31765953 31766034 0.000000 + 1 gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene exon 31765953 31766034 0.000000 + . gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene CDS 31767410 31767473 0.000000 + 0 gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene exon 31767410 31767473 0.000000 + . gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene CDS 31768326 31768363 0.000000 + 2 gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene exon 31768326 31768403 0.000000 + . gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene exon 31769030 31769223 0.000000 + . gene_id "BPIFA2"; transcript_id "NM_080574:uc002wyo.1"; -chr20 hg19_knownGene exon 31786004 31786117 0.000000 + . gene_id "BPIFA4P"; transcript_id "AY389992:uc010gei.1"; -chr20 hg19_knownGene exon 31787161 31787268 0.000000 + . gene_id "BPIFA4P"; transcript_id "AY389992:uc010gei.1"; -chr20 hg19_knownGene exon 31789338 31789442 0.000000 + . gene_id "BPIFA4P"; transcript_id "AY389992:uc010gei.1"; -chr20 hg19_knownGene exon 31790318 31790467 0.000000 + . gene_id "BPIFA4P"; transcript_id "AY389992:uc010gei.1"; -chr20 hg19_knownGene exon 31792929 31793009 0.000000 + . gene_id "BPIFA4P"; transcript_id "AY389992:uc010gei.1"; -chr20 hg19_knownGene exon 31781411 31781447 0.000000 + . gene_id "BPIFA4P"; transcript_id "NR_026760:uc002wyp.2"; -chr20 hg19_knownGene exon 31786004 31786117 0.000000 + . gene_id "BPIFA4P"; transcript_id "NR_026760:uc002wyp.2"; -chr20 hg19_knownGene exon 31787121 31787268 0.000000 + . gene_id "BPIFA4P"; transcript_id "NR_026760:uc002wyp.2"; -chr20 hg19_knownGene exon 31789338 31789442 0.000000 + . gene_id "BPIFA4P"; transcript_id "NR_026760:uc002wyp.2"; -chr20 hg19_knownGene exon 31790318 31790467 0.000000 + . gene_id "BPIFA4P"; transcript_id "NR_026760:uc002wyp.2"; -chr20 hg19_knownGene exon 31792929 31793009 0.000000 + . gene_id "BPIFA4P"; transcript_id "NR_026760:uc002wyp.2"; -chr20 hg19_knownGene exon 31793627 31793690 0.000000 + . gene_id "BPIFA4P"; transcript_id "NR_026760:uc002wyp.2"; -chr20 hg19_knownGene exon 31795507 31795586 0.000000 + . gene_id "BPIFA4P"; transcript_id "NR_026760:uc002wyp.2"; -chr20 hg19_knownGene exon 31797845 31798268 0.000000 + . gene_id "BPIFA4P"; transcript_id "NR_026760:uc002wyp.2"; -chr20 hg19_knownGene exon 31781411 31781447 0.000000 + . gene_id "BPIFA4P"; transcript_id "BC128240:uc002wyq.2"; -chr20 hg19_knownGene exon 31786004 31786117 0.000000 + . gene_id "BPIFA4P"; transcript_id "BC128240:uc002wyq.2"; -chr20 hg19_knownGene exon 31787104 31787268 0.000000 + . gene_id "BPIFA4P"; transcript_id "BC128240:uc002wyq.2"; -chr20 hg19_knownGene exon 31789338 31789442 0.000000 + . gene_id "BPIFA4P"; transcript_id "BC128240:uc002wyq.2"; -chr20 hg19_knownGene exon 31790318 31790467 0.000000 + . gene_id "BPIFA4P"; transcript_id "BC128240:uc002wyq.2"; -chr20 hg19_knownGene exon 31792929 31793009 0.000000 + . gene_id "BPIFA4P"; transcript_id "BC128240:uc002wyq.2"; -chr20 hg19_knownGene exon 31793627 31793690 0.000000 + . gene_id "BPIFA4P"; transcript_id "BC128240:uc002wyq.2"; -chr20 hg19_knownGene exon 31795507 31795586 0.000000 + . gene_id "BPIFA4P"; transcript_id "BC128240:uc002wyq.2"; -chr20 hg19_knownGene exon 31797845 31798268 0.000000 + . gene_id "BPIFA4P"; transcript_id "BC128240:uc002wyq.2"; -chr20 hg19_knownGene CDS 31805343 31805469 0.000000 + 0 gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene exon 31805135 31805469 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene CDS 31811617 31811767 0.000000 + 2 gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene exon 31811617 31811767 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene CDS 31812161 31812268 0.000000 + 1 gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene exon 31812161 31812268 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene CDS 31812904 31813053 0.000000 + 1 gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene exon 31812904 31813053 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene CDS 31814212 31814296 0.000000 + 1 gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene exon 31814212 31814296 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene CDS 31814736 31814799 0.000000 + 0 gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene exon 31814736 31814799 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene CDS 31815344 31815420 0.000000 + 2 gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene exon 31815344 31815559 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_178466:uc002wyr.3"; -chr20 hg19_knownGene CDS 31805343 31805469 0.000000 + 0 gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene exon 31805135 31805469 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene CDS 31811617 31811767 0.000000 + 2 gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene exon 31811617 31811767 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene CDS 31812904 31813053 0.000000 + 1 gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene exon 31812904 31813053 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene CDS 31814212 31814296 0.000000 + 1 gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene exon 31814212 31814296 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene CDS 31814736 31814799 0.000000 + 0 gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene exon 31814736 31814799 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene CDS 31815344 31815420 0.000000 + 2 gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene exon 31815344 31815559 0.000000 + . gene_id "BPIFA3"; transcript_id "NM_001042439:uc002wys.3"; -chr20 hg19_knownGene exon 31823802 31823856 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene CDS 31825518 31825677 0.000000 + 0 gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene exon 31825503 31825677 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene CDS 31825861 31826020 0.000000 + 2 gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene exon 31825861 31826020 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene CDS 31827609 31827716 0.000000 + 1 gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene exon 31827609 31827716 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene CDS 31828039 31828191 0.000000 + 1 gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene exon 31828039 31828191 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene CDS 31829191 31829275 0.000000 + 1 gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene exon 31829191 31829275 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene CDS 31829862 31829925 0.000000 + 0 gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene exon 31829862 31829925 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene CDS 31830293 31830330 0.000000 + 2 gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene exon 31830293 31830367 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene exon 31830913 31831115 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_130852:uc002wyt.4"; -chr20 hg19_knownGene exon 31823802 31823856 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene CDS 31825518 31825677 0.000000 + 0 gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene exon 31825503 31825677 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene CDS 31825861 31826020 0.000000 + 2 gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene exon 31825861 31826020 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene CDS 31827609 31827716 0.000000 + 1 gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene exon 31827609 31827716 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene CDS 31828039 31828191 0.000000 + 1 gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene exon 31828039 31828191 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene CDS 31829191 31829275 0.000000 + 1 gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene exon 31829191 31829275 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene CDS 31829862 31829925 0.000000 + 0 gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene exon 31829862 31829925 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene CDS 31830293 31830330 0.000000 + 2 gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene exon 31830293 31830367 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene exon 31830968 31831115 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_016583:uc002wyu.4"; -chr20 hg19_knownGene exon 31823802 31823856 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene CDS 31825518 31825677 0.000000 + 0 gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene exon 31825503 31825677 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene CDS 31825861 31826020 0.000000 + 2 gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene exon 31825861 31826020 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene CDS 31827609 31827716 0.000000 + 1 gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene exon 31827609 31827716 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene CDS 31828039 31828191 0.000000 + 1 gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene exon 31828039 31828191 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene CDS 31829191 31829275 0.000000 + 1 gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene exon 31829191 31829275 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene CDS 31829862 31829925 0.000000 + 0 gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene exon 31829862 31829925 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene CDS 31830293 31830330 0.000000 + 2 gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene exon 31830293 31830367 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene exon 31830929 31831115 0.000000 + . gene_id "BPIFA1"; transcript_id "NM_001243193:uc002wyv.3"; -chr20 hg19_knownGene exon 31870941 31871060 0.000000 + . gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene CDS 31873880 31873994 0.000000 + 0 gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene exon 31873839 31873994 0.000000 + . gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene CDS 31876547 31876688 0.000000 + 2 gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene exon 31876547 31876688 0.000000 + . gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene CDS 31877691 31877798 0.000000 + 1 gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene exon 31877691 31877798 0.000000 + . gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene CDS 31878763 31878912 0.000000 + 1 gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene exon 31878763 31878912 0.000000 + . gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene CDS 31879713 31879794 0.000000 + 1 gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene exon 31879713 31879794 0.000000 + . gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene CDS 31885331 31885453 0.000000 + 0 gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene exon 31885331 31885701 0.000000 + . gene_id "BPIFB1"; transcript_id "AK310964:uc010gej.1"; -chr20 hg19_knownGene exon 31890537 31890554 0.000000 + . gene_id "BPIFB1"; transcript_id "AK127971:uc002wyx.1"; -chr20 hg19_knownGene exon 31890722 31890880 0.000000 + . gene_id "BPIFB1"; transcript_id "AK127971:uc002wyx.1"; -chr20 hg19_knownGene exon 31891764 31891831 0.000000 + . gene_id "BPIFB1"; transcript_id "AK127971:uc002wyx.1"; -chr20 hg19_knownGene exon 31892652 31892697 0.000000 + . gene_id "BPIFB1"; transcript_id "AK127971:uc002wyx.1"; -chr20 hg19_knownGene exon 31893808 31893871 0.000000 + . gene_id "BPIFB1"; transcript_id "AK127971:uc002wyx.1"; -chr20 hg19_knownGene exon 31894409 31894491 0.000000 + . gene_id "BPIFB1"; transcript_id "AK127971:uc002wyx.1"; -chr20 hg19_knownGene exon 31894717 31894793 0.000000 + . gene_id "BPIFB1"; transcript_id "AK127971:uc002wyx.1"; -chr20 hg19_knownGene exon 31895080 31895772 0.000000 + . gene_id "BPIFB1"; transcript_id "AK127971:uc002wyx.1"; -chr20 hg19_knownGene exon 31870941 31871060 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31873880 31873994 0.000000 + 0 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31873839 31873994 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31876547 31876688 0.000000 + 2 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31876547 31876688 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31877691 31877798 0.000000 + 1 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31877691 31877798 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31878763 31878912 0.000000 + 1 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31878763 31878912 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31879713 31879794 0.000000 + 1 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31879713 31879794 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31885331 31885394 0.000000 + 0 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31885331 31885394 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31887705 31887790 0.000000 + 2 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31887705 31887790 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31889039 31889218 0.000000 + 0 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31889039 31889218 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31890165 31890218 0.000000 + 0 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31890165 31890218 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31890722 31890880 0.000000 + 0 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31890722 31890880 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31891764 31891831 0.000000 + 0 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31891764 31891831 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31892652 31892697 0.000000 + 1 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31892652 31892697 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31893808 31893871 0.000000 + 0 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31893808 31893871 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31894717 31894793 0.000000 + 2 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31894717 31894793 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31897514 31897570 0.000000 + 0 gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene exon 31897514 31897684 0.000000 + . gene_id "BPIFB1"; transcript_id "NM_033197:uc002wyw.1"; -chr20 hg19_knownGene CDS 31948118 31948297 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK095644:uc002wzb.1"; -chr20 hg19_knownGene exon 31946647 31948297 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK095644:uc002wzb.1"; -chr20 hg19_knownGene CDS 31954665 31954814 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK095644:uc002wzb.1"; -chr20 hg19_knownGene exon 31954665 31954814 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK095644:uc002wzb.1"; -chr20 hg19_knownGene CDS 31958305 31958435 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AK095644:uc002wzb.1"; -chr20 hg19_knownGene exon 31958305 31958435 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK095644:uc002wzb.1"; -chr20 hg19_knownGene CDS 31960448 31960613 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK095644:uc002wzb.1"; -chr20 hg19_knownGene exon 31960448 31960955 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK095644:uc002wzb.1"; -chr20 hg19_knownGene CDS 31946852 31946929 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31946645 31946929 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31948157 31948297 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31948157 31948297 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31954665 31954814 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31954665 31954814 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31958305 31958435 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31958305 31958435 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31960448 31960503 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31960448 31960503 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31961921 31962018 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31961921 31962018 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31967267 31967497 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31967267 31967497 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31973456 31973576 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31973456 31973576 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31975129 31975339 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31975129 31975339 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31979948 31980048 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31979948 31980048 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31981838 31981872 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31981838 31981872 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31982819 31982922 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31982819 31982922 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31984567 31984600 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31984567 31984742 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene exon 31989234 31989337 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016082:uc002wyy.3"; -chr20 hg19_knownGene CDS 31946852 31946929 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31946645 31946929 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31948157 31948297 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31948157 31948297 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31954665 31954814 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31954665 31954814 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31958305 31958435 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31958305 31958435 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31960448 31960503 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31960448 31960503 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31961921 31962018 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31961921 31962018 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31967267 31967497 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31967267 31967497 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31973456 31973576 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31973456 31973576 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31975129 31975339 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31975129 31975339 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31979948 31980048 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31979948 31980048 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31981838 31981872 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31981838 31981872 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31982819 31982922 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31982819 31982922 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31984567 31984870 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31984567 31984890 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene exon 31989234 31989337 0.000000 - . gene_id "CDK5RAP1"; transcript_id "NM_016408:uc002wyz.3"; -chr20 hg19_knownGene CDS 31946852 31946929 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31946645 31946929 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31948157 31948297 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31948157 31948297 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31954665 31954811 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31954665 31954811 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31958305 31958435 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31958305 31958435 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31960448 31960503 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31960448 31960503 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31961921 31962018 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31961921 31962018 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31967267 31967497 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31967267 31967497 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31973456 31973576 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31973456 31973576 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31975129 31975339 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31975129 31975339 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31979948 31980048 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31979948 31980048 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31981838 31981872 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31981838 31981872 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31982819 31982922 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31982819 31982922 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31984567 31984870 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31984567 31984890 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene exon 31989234 31989337 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK222745:uc002wza.3"; -chr20 hg19_knownGene CDS 31946852 31946929 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31946645 31946929 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31948157 31948297 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31948157 31948297 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31954665 31954814 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31954665 31954814 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31958305 31958435 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31958305 31958435 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31960448 31960503 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31960448 31960503 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31961921 31962018 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31961921 31962018 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31967267 31967497 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31967267 31967497 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31971286 31971327 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31971286 31971327 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31973456 31973576 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31973456 31973576 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31975129 31975339 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31975129 31975339 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31979948 31980048 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31979948 31980048 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31981838 31981872 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31981838 31981872 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31982819 31982922 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31982819 31982922 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31984567 31984870 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31984567 31984890 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene exon 31989234 31989337 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AF152097:uc010gek.3"; -chr20 hg19_knownGene CDS 31946852 31946929 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31946645 31946929 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31948157 31948297 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31948157 31948297 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31954665 31954814 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31954665 31954814 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31958305 31958435 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31958305 31958435 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31960448 31960503 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31960448 31960503 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31961921 31962018 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31961921 31962018 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31967267 31967497 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31967267 31967497 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31973456 31973576 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31973456 31973576 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31975129 31975339 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31975129 31975339 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31979948 31980048 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31979948 31980048 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31981838 31981872 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31981838 31981872 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31982819 31982922 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31982819 31982922 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31984567 31984600 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31984567 31984658 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene exon 31989234 31989337 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK292075:uc010gel.3"; -chr20 hg19_knownGene CDS 31946852 31946929 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31946645 31946929 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31948157 31948297 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31948157 31948297 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31954665 31954814 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31954665 31954814 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31958305 31958435 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31958305 31958435 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31960448 31960503 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31960448 31960503 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31961921 31962018 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31961921 31962018 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31973456 31973576 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31973456 31973576 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31975129 31975339 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31975129 31975339 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31979948 31980048 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31979948 31980048 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31981838 31981872 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31981838 31981872 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31982819 31982922 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31982819 31982922 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31984567 31984870 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31984567 31984890 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene exon 31989234 31989337 0.000000 - . gene_id "CDK5RAP1"; transcript_id "BC001215:uc010gem.3"; -chr20 hg19_knownGene CDS 31948118 31948297 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31946647 31948297 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31954665 31954814 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31954665 31954814 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31958305 31958435 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31958305 31958435 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31960448 31960503 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31960448 31960503 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31961921 31962018 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31961921 31962018 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31967267 31967497 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31967267 31967497 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31973456 31973576 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31973456 31973576 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31975129 31975339 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31975129 31975339 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31979948 31980048 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31979948 31980048 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31981838 31981872 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31981838 31981872 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31982819 31982922 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31982819 31982922 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31984567 31984870 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31984567 31984890 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene exon 31989234 31989337 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AY462283:uc002wzc.1"; -chr20 hg19_knownGene CDS 31973408 31973576 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene exon 31973400 31973576 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene CDS 31975129 31975339 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene exon 31975129 31975339 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene CDS 31979948 31980048 0.000000 - 1 gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene exon 31979948 31980048 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene CDS 31981838 31981872 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene exon 31981838 31981872 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene CDS 31982819 31982922 0.000000 - 2 gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene exon 31982819 31982922 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene CDS 31984567 31984870 0.000000 - 0 gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene exon 31984567 31984890 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene exon 31989234 31989337 0.000000 - . gene_id "CDK5RAP1"; transcript_id "AK309906:uc010gen.3"; -chr20 hg19_knownGene CDS 31996316 31996405 0.000000 - 0 gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene exon 31995763 31996405 0.000000 - . gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene CDS 31996507 31996694 0.000000 - 2 gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene exon 31996507 31996694 0.000000 - . gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene CDS 31997941 31998137 0.000000 - 1 gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene exon 31997941 31998137 0.000000 - . gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene CDS 32000102 32000232 0.000000 - 0 gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene exon 32000102 32000232 0.000000 - . gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene CDS 32000381 32000588 0.000000 - 1 gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene exon 32000381 32000588 0.000000 - . gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene CDS 32005525 32005729 0.000000 - 2 gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene exon 32005525 32005729 0.000000 - . gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene CDS 32026647 32026832 0.000000 - 2 gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene exon 32026647 32026832 0.000000 - . gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene CDS 32031117 32031426 0.000000 - 0 gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene exon 32031117 32031698 0.000000 - . gene_id "SNTA1"; transcript_id "NM_003098:uc002wzd.1"; -chr20 hg19_knownGene CDS 31996316 31996405 0.000000 - 0 gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene exon 31995763 31996405 0.000000 - . gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene CDS 31996507 31996694 0.000000 - 2 gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene exon 31996507 31996694 0.000000 - . gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene CDS 31997941 31998137 0.000000 - 1 gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene exon 31997941 31998137 0.000000 - . gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene CDS 32000102 32000154 0.000000 - 0 gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene exon 32000102 32000154 0.000000 - . gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene CDS 32000528 32000588 0.000000 - 1 gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene exon 32000528 32000588 0.000000 - . gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene CDS 32005525 32005729 0.000000 - 2 gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene exon 32005525 32005729 0.000000 - . gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene CDS 32026647 32026832 0.000000 - 2 gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene exon 32026647 32026832 0.000000 - . gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene CDS 32031117 32031426 0.000000 - 0 gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene exon 32031117 32031698 0.000000 - . gene_id "SNTA1"; transcript_id "AK301800:uc010zuf.1"; -chr20 hg19_knownGene exon 32150171 32150480 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene CDS 32194788 32194905 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene exon 32194762 32194905 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene CDS 32198900 32199141 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene exon 32198900 32199141 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene CDS 32207323 32207412 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene exon 32207323 32207412 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene CDS 32210921 32211102 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene exon 32210921 32211102 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene CDS 32211579 32211735 0.000000 + 1 gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene exon 32211579 32211773 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC015066:uc021wbz.1"; -chr20 hg19_knownGene exon 32077928 32078107 0.000000 + . gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene exon 32207323 32207412 0.000000 + . gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene CDS 32211062 32211102 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene exon 32210921 32211102 0.000000 + . gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene CDS 32212570 32212823 0.000000 + 1 gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene exon 32212570 32212823 0.000000 + . gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene CDS 32216156 32216241 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene exon 32216156 32216241 0.000000 + . gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene CDS 32217525 32217720 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene exon 32217525 32217720 0.000000 + . gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene CDS 32224446 32224514 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene exon 32224446 32224514 0.000000 + . gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene CDS 32228147 32228337 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene exon 32228147 32228337 0.000000 + . gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene CDS 32232153 32232449 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene exon 32232153 32233594 0.000000 + . gene_id "CBFA2T2"; transcript_id "AK294168:uc010zug.1"; -chr20 hg19_knownGene exon 32150171 32150480 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32161780 32162067 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32189636 32189711 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32194762 32194905 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32198900 32199141 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32207323 32207412 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32210921 32211102 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32212570 32212823 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32216156 32216241 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32217525 32217720 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32224446 32224514 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32228147 32228337 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32232153 32233835 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32234639 32237836 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF069747:uc002wzf.1"; -chr20 hg19_knownGene exon 32161780 32162067 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32194762 32194905 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32198900 32199141 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32207323 32207412 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32210921 32211102 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32212570 32212823 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32216156 32216241 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32217525 32217720 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32224446 32224514 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32228147 32228337 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32232153 32233835 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32234639 32237836 0.000000 + . gene_id "CBFA2T2"; transcript_id "AF013970:uc002wzi.1"; -chr20 hg19_knownGene exon 32188131 32188271 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32194762 32194905 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32198900 32199141 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32207323 32207412 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32210921 32211102 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32212570 32212823 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32216156 32216241 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32217525 32217720 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32224446 32224514 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32228147 32228337 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32232153 32233594 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene exon 32235301 32237836 0.000000 + . gene_id "CBFA2T2"; transcript_id "BC040344:uc002wzj.1"; -chr20 hg19_knownGene CDS 32078074 32078107 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32077928 32078107 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene CDS 32194762 32194905 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32194762 32194905 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene CDS 32198900 32199141 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32198900 32199141 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene CDS 32207323 32207412 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32207323 32207412 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene CDS 32210921 32211102 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32210921 32211102 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene CDS 32212570 32212823 0.000000 + 1 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32212570 32212823 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene CDS 32216156 32216241 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32216156 32216241 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene CDS 32217525 32217720 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32217525 32217720 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene CDS 32224446 32224514 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32224446 32224514 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene CDS 32228147 32228337 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32228147 32228337 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene CDS 32232153 32232449 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32232153 32237837 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001032999:uc002wze.1"; -chr20 hg19_knownGene exon 32150171 32150480 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32162007 32162067 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32161780 32162067 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32194762 32194905 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32194762 32194905 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32198900 32199141 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32198900 32199141 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32207323 32207412 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32207323 32207412 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32210921 32211102 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32210921 32211102 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32212570 32212823 0.000000 + 1 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32212570 32212823 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32216156 32216241 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32216156 32216241 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32217525 32217720 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32217525 32217720 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32224446 32224514 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32224446 32224514 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32228147 32228337 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32228147 32228337 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene CDS 32232153 32232449 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32232153 32237837 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_005093:uc002wzg.1"; -chr20 hg19_knownGene exon 32150171 32150480 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene CDS 32194788 32194905 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32194762 32194905 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene CDS 32198900 32199141 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32198900 32199141 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene CDS 32207323 32207412 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32207323 32207412 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene CDS 32210921 32211102 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32210921 32211102 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene CDS 32212570 32212823 0.000000 + 1 gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32212570 32212823 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene CDS 32216156 32216241 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32216156 32216241 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene CDS 32217525 32217720 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32217525 32217720 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene CDS 32224446 32224514 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32224446 32224514 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene CDS 32228147 32228337 0.000000 + 2 gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32228147 32228337 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene CDS 32232153 32232449 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32232153 32237837 0.000000 + . gene_id "CBFA2T2"; transcript_id "NM_001039709:uc002wzh.1"; -chr20 hg19_knownGene exon 32226547 32227514 0.000000 + . gene_id "CBFA2T2"; transcript_id "CR749462:uc002wzk.1"; -chr20 hg19_knownGene CDS 32228179 32228337 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "CR749462:uc002wzk.1"; -chr20 hg19_knownGene exon 32228150 32228337 0.000000 + . gene_id "CBFA2T2"; transcript_id "CR749462:uc002wzk.1"; -chr20 hg19_knownGene CDS 32232153 32232449 0.000000 + 0 gene_id "CBFA2T2"; transcript_id "CR749462:uc002wzk.1"; -chr20 hg19_knownGene exon 32232153 32237837 0.000000 + . gene_id "CBFA2T2"; transcript_id "CR749462:uc002wzk.1"; -chr20 hg19_knownGene CDS 32245638 32245663 0.000000 - 2 gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene exon 32244893 32245663 0.000000 - . gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene CDS 32245748 32245839 0.000000 - 1 gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene exon 32245748 32245839 0.000000 - . gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene CDS 32246283 32246360 0.000000 - 1 gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene exon 32246283 32246360 0.000000 - . gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene CDS 32246528 32246640 0.000000 - 0 gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene exon 32246528 32246640 0.000000 - . gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene CDS 32247303 32247356 0.000000 - 0 gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene exon 32247303 32247356 0.000000 - . gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene CDS 32247459 32247518 0.000000 - 0 gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene exon 32247459 32247538 0.000000 - . gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene exon 32247691 32247809 0.000000 - . gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene exon 32248065 32248201 0.000000 - . gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene exon 32250018 32250584 0.000000 - . gene_id "NECAB3"; transcript_id "AK124388:uc002wzl.3"; -chr20 hg19_knownGene CDS 32250152 32250277 0.000000 + 0 gene_id "C20orf144"; transcript_id "NM_080825:uc002wzs.2"; -chr20 hg19_knownGene exon 32250092 32250277 0.000000 + . gene_id "C20orf144"; transcript_id "NM_080825:uc002wzs.2"; -chr20 hg19_knownGene CDS 32251338 32251670 0.000000 + 0 gene_id "C20orf144"; transcript_id "NM_080825:uc002wzs.2"; -chr20 hg19_knownGene exon 32251338 32251721 0.000000 + . gene_id "C20orf144"; transcript_id "NM_080825:uc002wzs.2"; -chr20 hg19_knownGene CDS 32255304 32256038 0.000000 + 0 gene_id "ACTL10"; transcript_id "NM_001024675:uc002wzt.3"; -chr20 hg19_knownGene exon 32254304 32256331 0.000000 + . gene_id "ACTL10"; transcript_id "NM_001024675:uc002wzt.3"; -chr20 hg19_knownGene CDS 32245638 32245663 0.000000 - 2 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32244893 32245663 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32245748 32245839 0.000000 - 1 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32245748 32245839 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32246283 32246360 0.000000 - 1 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32246283 32246360 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32246528 32246640 0.000000 - 0 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32246528 32246640 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32247303 32247356 0.000000 - 0 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32247303 32247356 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32247459 32247538 0.000000 - 2 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32247459 32247538 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32247691 32247809 0.000000 - 1 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32247691 32247809 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32248065 32248201 0.000000 - 0 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32248065 32248201 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32257181 32257278 0.000000 - 2 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32257181 32257278 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32257493 32257518 0.000000 - 1 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32257493 32257518 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32258490 32258598 0.000000 - 2 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32258490 32258598 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32260204 32260228 0.000000 - 0 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32260204 32260228 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32262030 32262158 0.000000 - 0 gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene exon 32262030 32262264 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031231:uc002wzm.4"; -chr20 hg19_knownGene CDS 32245638 32245663 0.000000 - 2 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32244893 32245663 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32245748 32245839 0.000000 - 1 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32245748 32245839 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32246283 32246360 0.000000 - 1 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32246283 32246360 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32246528 32246640 0.000000 - 0 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32246528 32246640 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32247303 32247538 0.000000 - 2 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32247303 32247538 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32247691 32247809 0.000000 - 1 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32247691 32247809 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32248065 32248201 0.000000 - 0 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32248065 32248201 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32257181 32257278 0.000000 - 2 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32257181 32257278 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32257493 32257518 0.000000 - 1 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32257493 32257518 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32258490 32258598 0.000000 - 2 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32258490 32258598 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32260204 32260228 0.000000 - 0 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32260204 32260228 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene CDS 32262030 32262158 0.000000 - 0 gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32262030 32262264 0.000000 - . gene_id "NECAB3"; transcript_id "NM_031232:uc002wzn.4"; -chr20 hg19_knownGene exon 32244893 32245663 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32245748 32245839 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32246283 32246360 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32246528 32246640 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32247303 32247356 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32247459 32247538 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32247691 32247864 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32248065 32248201 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32257181 32257278 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32257493 32257518 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32258490 32258598 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32260204 32260228 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene exon 32262030 32262264 0.000000 - . gene_id "NECAB3"; transcript_id "BC023270:uc002wzo.4"; -chr20 hg19_knownGene CDS 32264541 32264785 0.000000 - 2 gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene exon 32263292 32264785 0.000000 - . gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene CDS 32264911 32265136 0.000000 - 0 gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene exon 32264911 32265136 0.000000 - . gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene CDS 32265232 32265346 0.000000 - 1 gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene exon 32265232 32265346 0.000000 - . gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene CDS 32266007 32266159 0.000000 - 1 gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene exon 32266007 32266159 0.000000 - . gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene CDS 32267561 32267780 0.000000 - 2 gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene exon 32267561 32267780 0.000000 - . gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene CDS 32268132 32268222 0.000000 - 0 gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene exon 32268132 32268222 0.000000 - . gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene CDS 32273810 32274070 0.000000 - 0 gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene exon 32273810 32274210 0.000000 - . gene_id "E2F1"; transcript_id "NM_005225:uc002wzu.4"; -chr20 hg19_knownGene CDS 32295515 32295775 0.000000 - 0 gene_id "PXMP4"; transcript_id "NM_007238:uc002wzv.3"; -chr20 hg19_knownGene exon 32290550 32295775 0.000000 - . gene_id "PXMP4"; transcript_id "NM_007238:uc002wzv.3"; -chr20 hg19_knownGene CDS 32298361 32298559 0.000000 - 1 gene_id "PXMP4"; transcript_id "NM_007238:uc002wzv.3"; -chr20 hg19_knownGene exon 32298361 32298559 0.000000 - . gene_id "PXMP4"; transcript_id "NM_007238:uc002wzv.3"; -chr20 hg19_knownGene CDS 32302480 32302542 0.000000 - 1 gene_id "PXMP4"; transcript_id "NM_007238:uc002wzv.3"; -chr20 hg19_knownGene exon 32302480 32302542 0.000000 - . gene_id "PXMP4"; transcript_id "NM_007238:uc002wzv.3"; -chr20 hg19_knownGene CDS 32307901 32308013 0.000000 - 0 gene_id "PXMP4"; transcript_id "NM_007238:uc002wzv.3"; -chr20 hg19_knownGene exon 32307901 32308136 0.000000 - . gene_id "PXMP4"; transcript_id "NM_007238:uc002wzv.3"; -chr20 hg19_knownGene CDS 32295739 32295775 0.000000 - 1 gene_id "PXMP4"; transcript_id "NM_183397:uc002wzw.3"; -chr20 hg19_knownGene exon 32290550 32295775 0.000000 - . gene_id "PXMP4"; transcript_id "NM_183397:uc002wzw.3"; -chr20 hg19_knownGene CDS 32302480 32302542 0.000000 - 1 gene_id "PXMP4"; transcript_id "NM_183397:uc002wzw.3"; -chr20 hg19_knownGene exon 32302480 32302542 0.000000 - . gene_id "PXMP4"; transcript_id "NM_183397:uc002wzw.3"; -chr20 hg19_knownGene CDS 32307901 32308013 0.000000 - 0 gene_id "PXMP4"; transcript_id "NM_183397:uc002wzw.3"; -chr20 hg19_knownGene exon 32307901 32308136 0.000000 - . gene_id "PXMP4"; transcript_id "NM_183397:uc002wzw.3"; -chr20 hg19_knownGene CDS 32295739 32295775 0.000000 - 1 gene_id "PXMP4"; transcript_id "AK301532:uc010zuh.2"; -chr20 hg19_knownGene exon 32290550 32295775 0.000000 - . gene_id "PXMP4"; transcript_id "AK301532:uc010zuh.2"; -chr20 hg19_knownGene CDS 32298361 32298579 0.000000 - 1 gene_id "PXMP4"; transcript_id "AK301532:uc010zuh.2"; -chr20 hg19_knownGene exon 32298361 32298579 0.000000 - . gene_id "PXMP4"; transcript_id "AK301532:uc010zuh.2"; -chr20 hg19_knownGene CDS 32302480 32302542 0.000000 - 1 gene_id "PXMP4"; transcript_id "AK301532:uc010zuh.2"; -chr20 hg19_knownGene exon 32302480 32302542 0.000000 - . gene_id "PXMP4"; transcript_id "AK301532:uc010zuh.2"; -chr20 hg19_knownGene CDS 32307901 32308013 0.000000 - 0 gene_id "PXMP4"; transcript_id "AK301532:uc010zuh.2"; -chr20 hg19_knownGene exon 32307901 32308136 0.000000 - . gene_id "PXMP4"; transcript_id "AK301532:uc010zuh.2"; -chr20 hg19_knownGene CDS 32319828 32319858 0.000000 + 0 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32319808 32319858 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32328708 32328818 0.000000 + 2 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32328708 32328818 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32332909 32333105 0.000000 + 2 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32332909 32333105 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32336729 32336878 0.000000 + 0 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32336729 32336878 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32340978 32341229 0.000000 + 0 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32340978 32341229 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32344954 32345128 0.000000 + 0 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32344954 32345128 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32346522 32346612 0.000000 + 2 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32346522 32346612 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32349668 32349861 0.000000 + 1 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32349668 32349861 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32354657 32354847 0.000000 + 2 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32354657 32354847 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32357890 32358098 0.000000 + 0 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32357890 32358098 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32369097 32369193 0.000000 + 1 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32369097 32369193 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32371538 32371670 0.000000 + 0 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32371538 32371670 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32376669 32376780 0.000000 + 2 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32376669 32376780 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32377324 32377394 0.000000 + 1 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32377324 32377394 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32378794 32379320 0.000000 + 2 gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene exon 32378794 32380075 0.000000 + . gene_id "ZNF341"; transcript_id "NM_032819:uc002wzx.3"; -chr20 hg19_knownGene CDS 32319828 32319858 0.000000 + 0 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32319808 32319858 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32328708 32328818 0.000000 + 2 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32328708 32328818 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32332909 32333105 0.000000 + 2 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32332909 32333105 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32336729 32336878 0.000000 + 0 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32336729 32336878 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32340978 32341229 0.000000 + 0 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32340978 32341229 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32344954 32345149 0.000000 + 0 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32344954 32345149 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32346522 32346612 0.000000 + 2 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32346522 32346612 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32349668 32349861 0.000000 + 1 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32349668 32349861 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32354657 32354847 0.000000 + 2 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32354657 32354847 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32357890 32358098 0.000000 + 0 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32357890 32358098 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32369097 32369193 0.000000 + 1 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32369097 32369193 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32371538 32371670 0.000000 + 0 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32371538 32371670 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32376669 32376780 0.000000 + 2 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32376669 32376780 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32377324 32377394 0.000000 + 1 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32377324 32377394 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene CDS 32378794 32379320 0.000000 + 2 gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32378794 32380075 0.000000 + . gene_id "ZNF341"; transcript_id "HQ258664:uc002wzy.3"; -chr20 hg19_knownGene exon 32319808 32319858 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32328750 32328818 0.000000 + 0 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32328708 32328818 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32336729 32336878 0.000000 + 0 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32336729 32336878 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32340978 32341229 0.000000 + 0 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32340978 32341229 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32344954 32345149 0.000000 + 0 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32344954 32345149 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32346522 32346612 0.000000 + 2 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32346522 32346612 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32349668 32349861 0.000000 + 1 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32349668 32349861 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32354657 32354847 0.000000 + 2 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32354657 32354847 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32357890 32358098 0.000000 + 0 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32357890 32358098 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32369097 32369193 0.000000 + 1 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32369097 32369193 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32371538 32371670 0.000000 + 0 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32371538 32371670 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32376669 32376780 0.000000 + 2 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32376669 32376780 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32377324 32377394 0.000000 + 1 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32377324 32377394 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene CDS 32378794 32379320 0.000000 + 2 gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32378794 32380075 0.000000 + . gene_id "ZNF341"; transcript_id "BC094738:uc010geq.3"; -chr20 hg19_knownGene exon 32319808 32319858 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32328708 32328818 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32332909 32333105 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32336729 32336878 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32340978 32341229 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32344954 32345149 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32346522 32346612 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32349668 32349861 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32354657 32354847 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32357890 32358098 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32371538 32371670 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32376669 32376780 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32377324 32377394 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene exon 32378794 32380075 0.000000 + . gene_id "ZNF341"; transcript_id "BC063492:uc010ger.3"; -chr20 hg19_knownGene CDS 32376536 32376780 0.000000 + 0 gene_id "ZNF341"; transcript_id "AK095848:uc002wzz.3"; -chr20 hg19_knownGene exon 32374894 32376780 0.000000 + . gene_id "ZNF341"; transcript_id "AK095848:uc002wzz.3"; -chr20 hg19_knownGene CDS 32377324 32377394 0.000000 + 1 gene_id "ZNF341"; transcript_id "AK095848:uc002wzz.3"; -chr20 hg19_knownGene exon 32377324 32377394 0.000000 + . gene_id "ZNF341"; transcript_id "AK095848:uc002wzz.3"; -chr20 hg19_knownGene CDS 32378794 32379320 0.000000 + 2 gene_id "ZNF341"; transcript_id "AK095848:uc002wzz.3"; -chr20 hg19_knownGene exon 32378794 32380075 0.000000 + . gene_id "ZNF341"; transcript_id "AK095848:uc002wzz.3"; -chr20 hg19_knownGene CDS 32399275 32399464 0.000000 + 0 gene_id "CHMP4B"; transcript_id "NM_176812:uc002xaa.3"; -chr20 hg19_knownGene exon 32399110 32399464 0.000000 + . gene_id "CHMP4B"; transcript_id "NM_176812:uc002xaa.3"; -chr20 hg19_knownGene CDS 32436273 32436450 0.000000 + 2 gene_id "CHMP4B"; transcript_id "NM_176812:uc002xaa.3"; -chr20 hg19_knownGene exon 32436273 32436450 0.000000 + . gene_id "CHMP4B"; transcript_id "NM_176812:uc002xaa.3"; -chr20 hg19_knownGene CDS 32438758 32438872 0.000000 + 1 gene_id "CHMP4B"; transcript_id "NM_176812:uc002xaa.3"; -chr20 hg19_knownGene exon 32438758 32438872 0.000000 + . gene_id "CHMP4B"; transcript_id "NM_176812:uc002xaa.3"; -chr20 hg19_knownGene CDS 32439883 32440009 0.000000 + 0 gene_id "CHMP4B"; transcript_id "NM_176812:uc002xaa.3"; -chr20 hg19_knownGene exon 32439883 32440009 0.000000 + . gene_id "CHMP4B"; transcript_id "NM_176812:uc002xaa.3"; -chr20 hg19_knownGene CDS 32441302 32441363 0.000000 + 2 gene_id "CHMP4B"; transcript_id "NM_176812:uc002xaa.3"; -chr20 hg19_knownGene exon 32441302 32442173 0.000000 + . gene_id "CHMP4B"; transcript_id "NM_176812:uc002xaa.3"; -chr20 hg19_knownGene exon 32636925 32636996 0.000000 + . gene_id "MIR4755"; transcript_id "NR_039911:uc021wca.1"; -chr20 hg19_knownGene exon 32581458 32581937 0.000000 + . gene_id "RALY"; transcript_id "AK299766:uc010zui.2"; -chr20 hg19_knownGene exon 32619328 32619410 0.000000 + . gene_id "RALY"; transcript_id "AK299766:uc010zui.2"; -chr20 hg19_knownGene CDS 32659881 32660136 0.000000 + 0 gene_id "RALY"; transcript_id "AK299766:uc010zui.2"; -chr20 hg19_knownGene exon 32659872 32660136 0.000000 + . gene_id "RALY"; transcript_id "AK299766:uc010zui.2"; -chr20 hg19_knownGene CDS 32661369 32661441 0.000000 + 2 gene_id "RALY"; transcript_id "AK299766:uc010zui.2"; -chr20 hg19_knownGene exon 32661369 32661441 0.000000 + . gene_id "RALY"; transcript_id "AK299766:uc010zui.2"; -chr20 hg19_knownGene CDS 32661625 32661673 0.000000 + 1 gene_id "RALY"; transcript_id "AK299766:uc010zui.2"; -chr20 hg19_knownGene exon 32661625 32661841 0.000000 + . gene_id "RALY"; transcript_id "AK299766:uc010zui.2"; -chr20 hg19_knownGene exon 32581458 32581937 0.000000 + . gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene exon 32619328 32619410 0.000000 + . gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene CDS 32659881 32660136 0.000000 + 0 gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene exon 32659872 32660136 0.000000 + . gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene CDS 32661369 32661441 0.000000 + 2 gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene exon 32661369 32661441 0.000000 + . gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene CDS 32661625 32661672 0.000000 + 1 gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene exon 32661625 32661672 0.000000 + . gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene CDS 32663680 32663846 0.000000 + 1 gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene exon 32663680 32663846 0.000000 + . gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene CDS 32664508 32664621 0.000000 + 2 gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene exon 32664508 32664621 0.000000 + . gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene CDS 32664834 32665051 0.000000 + 2 gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene exon 32664834 32665051 0.000000 + . gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene CDS 32666311 32666352 0.000000 + 0 gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene exon 32666311 32666359 0.000000 + . gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene exon 32667716 32670991 0.000000 + . gene_id "RALY"; transcript_id "NM_016732:uc002xab.3"; -chr20 hg19_knownGene exon 32581458 32581937 0.000000 + . gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene exon 32619328 32619410 0.000000 + . gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene CDS 32659881 32660136 0.000000 + 0 gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene exon 32659872 32660136 0.000000 + . gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene CDS 32661369 32661441 0.000000 + 2 gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene exon 32661369 32661441 0.000000 + . gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene CDS 32663680 32663846 0.000000 + 1 gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene exon 32663680 32663846 0.000000 + . gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene CDS 32664508 32664621 0.000000 + 2 gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene exon 32664508 32664621 0.000000 + . gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene CDS 32664834 32665051 0.000000 + 2 gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene exon 32664834 32665051 0.000000 + . gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene CDS 32666311 32666352 0.000000 + 0 gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene exon 32666311 32666359 0.000000 + . gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene exon 32667716 32670991 0.000000 + . gene_id "RALY"; transcript_id "NM_007367:uc002xac.3"; -chr20 hg19_knownGene CDS 32677539 32677711 0.000000 - 2 gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene exon 32676115 32677711 0.000000 - . gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene CDS 32678323 32678408 0.000000 - 1 gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene exon 32678323 32678408 0.000000 - . gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene CDS 32681481 32681537 0.000000 - 1 gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene exon 32681481 32681537 0.000000 - . gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene CDS 32684463 32684611 0.000000 - 0 gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene exon 32684463 32684611 0.000000 - . gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene CDS 32685222 32685322 0.000000 - 2 gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene exon 32685222 32685322 0.000000 - . gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene CDS 32686304 32686439 0.000000 - 0 gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene exon 32686304 32686439 0.000000 - . gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene CDS 32691268 32691371 0.000000 - 2 gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene exon 32691268 32691371 0.000000 - . gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene CDS 32693174 32693351 0.000000 - 0 gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene exon 32693174 32693351 0.000000 - . gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene CDS 32699902 32699916 0.000000 - 0 gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene exon 32699902 32700085 0.000000 - . gene_id "EIF2S2"; transcript_id "NM_003908:uc002xaf.3"; -chr20 hg19_knownGene CDS 32848181 32848340 0.000000 + 0 gene_id "ASIP"; transcript_id "NM_001672:uc002xah.1"; -chr20 hg19_knownGene exon 32848171 32848340 0.000000 + . gene_id "ASIP"; transcript_id "NM_001672:uc002xah.1"; -chr20 hg19_knownGene CDS 32850638 32850699 0.000000 + 2 gene_id "ASIP"; transcript_id "NM_001672:uc002xah.1"; -chr20 hg19_knownGene exon 32850638 32850699 0.000000 + . gene_id "ASIP"; transcript_id "NM_001672:uc002xah.1"; -chr20 hg19_knownGene CDS 32856797 32856970 0.000000 + 0 gene_id "ASIP"; transcript_id "NM_001672:uc002xah.1"; -chr20 hg19_knownGene exon 32856797 32857148 0.000000 + . gene_id "ASIP"; transcript_id "NM_001672:uc002xah.1"; -chr20 hg19_knownGene CDS 32868843 32868971 0.000000 - 0 gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene exon 32868071 32868971 0.000000 - . gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene CDS 32873246 32873440 0.000000 - 0 gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene exon 32873246 32873440 0.000000 - . gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene CDS 32878138 32878255 0.000000 - 1 gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene exon 32878138 32878255 0.000000 - . gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene CDS 32878357 32878444 0.000000 - 2 gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene exon 32878357 32878444 0.000000 - . gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene CDS 32878537 32878744 0.000000 - 0 gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene exon 32878537 32878744 0.000000 - . gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene CDS 32879225 32879337 0.000000 - 2 gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene exon 32879225 32879337 0.000000 - . gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene CDS 32880164 32880313 0.000000 - 2 gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene exon 32880164 32880313 0.000000 - . gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene CDS 32881887 32881962 0.000000 - 0 gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene exon 32881887 32881962 0.000000 - . gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene CDS 32883201 32883391 0.000000 - 2 gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene exon 32883201 32883391 0.000000 - . gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene CDS 32891049 32891076 0.000000 - 0 gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene exon 32891049 32891215 0.000000 - . gene_id "AHCY"; transcript_id "NM_000687:uc002xai.3"; -chr20 hg19_knownGene CDS 32881869 32881962 0.000000 - 1 gene_id "AHCY"; transcript_id "AK309204:uc010get.2"; -chr20 hg19_knownGene exon 32881272 32881962 0.000000 - . gene_id "AHCY"; transcript_id "AK309204:uc010get.2"; -chr20 hg19_knownGene CDS 32883028 32883391 0.000000 - 2 gene_id "AHCY"; transcript_id "AK309204:uc010get.2"; -chr20 hg19_knownGene exon 32883028 32883391 0.000000 - . gene_id "AHCY"; transcript_id "AK309204:uc010get.2"; -chr20 hg19_knownGene CDS 32891049 32891076 0.000000 - 0 gene_id "AHCY"; transcript_id "AK309204:uc010get.2"; -chr20 hg19_knownGene exon 32891049 32891215 0.000000 - . gene_id "AHCY"; transcript_id "AK309204:uc010get.2"; -chr20 hg19_knownGene CDS 32868843 32868971 0.000000 - 0 gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 32868071 32868971 0.000000 - . gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene CDS 32873246 32873440 0.000000 - 0 gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 32873246 32873440 0.000000 - . gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene CDS 32878138 32878255 0.000000 - 1 gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 32878138 32878255 0.000000 - . gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene CDS 32878357 32878444 0.000000 - 2 gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 32878357 32878444 0.000000 - . gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene CDS 32878537 32878744 0.000000 - 0 gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 32878537 32878744 0.000000 - . gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene CDS 32879225 32879337 0.000000 - 2 gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 32879225 32879337 0.000000 - . gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene CDS 32880164 32880313 0.000000 - 2 gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 32880164 32880313 0.000000 - . gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene CDS 32881887 32881962 0.000000 - 0 gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 32881887 32881962 0.000000 - . gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene CDS 32883201 32883335 0.000000 - 0 gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 32883201 32883391 0.000000 - . gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 32899278 32899608 0.000000 - . gene_id "AHCY"; transcript_id "NM_001161766:uc002xaj.3"; -chr20 hg19_knownGene exon 33054130 33054223 0.000000 + . gene_id "MIR644A"; transcript_id "NR_030374:uc021wcb.1"; -chr20 hg19_knownGene exon 32951062 32951155 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 32957200 32957276 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 32981618 32981687 0.000000 + 0 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 32981597 32981687 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 32996457 32996598 0.000000 + 2 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 32996457 32996598 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33000321 33000445 0.000000 + 1 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33000321 33000445 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33001548 33001685 0.000000 + 2 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33001548 33001685 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33012286 33012331 0.000000 + 2 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33012286 33012331 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33026279 33026436 0.000000 + 1 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33026279 33026436 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33027960 33028149 0.000000 + 2 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33027960 33028149 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33030013 33030108 0.000000 + 1 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33030013 33030108 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33033092 33033266 0.000000 + 1 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33033092 33033266 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33037216 33037285 0.000000 + 0 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33037216 33037285 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33045195 33045279 0.000000 + 2 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33045195 33045279 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33049898 33050026 0.000000 + 1 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33049898 33050026 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33057853 33057925 0.000000 + 1 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33057853 33057925 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33059249 33059320 0.000000 + 0 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33059249 33059320 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33065577 33065665 0.000000 + 0 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33065577 33065665 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33067435 33067594 0.000000 + 1 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33067435 33067594 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33068404 33068537 0.000000 + 0 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33068404 33068537 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33068871 33069011 0.000000 + 1 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33068871 33069011 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33077071 33077191 0.000000 + 1 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33077071 33077191 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33077627 33077731 0.000000 + 0 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33077627 33077731 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33080306 33080402 0.000000 + 0 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33080306 33080402 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33092136 33092208 0.000000 + 2 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33092136 33092208 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene CDS 33095500 33095596 0.000000 + 1 gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 33095500 33099197 0.000000 + . gene_id "ITCH"; transcript_id "NM_031483:uc002xak.2"; -chr20 hg19_knownGene exon 32951062 32951155 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 32957200 32957276 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 32981618 32981687 0.000000 + 0 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 32981597 32981687 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 32996457 32996598 0.000000 + 2 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 32996457 32996598 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33000321 33000445 0.000000 + 1 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33000321 33000445 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33001548 33001685 0.000000 + 2 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33001548 33001685 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33004923 33005045 0.000000 + 2 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33004923 33005045 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33012286 33012331 0.000000 + 2 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33012286 33012331 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33026279 33026436 0.000000 + 1 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33026279 33026436 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33027960 33028149 0.000000 + 2 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33027960 33028149 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33030013 33030108 0.000000 + 1 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33030013 33030108 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33033092 33033266 0.000000 + 1 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33033092 33033266 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33037216 33037285 0.000000 + 0 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33037216 33037285 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33045195 33045279 0.000000 + 2 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33045195 33045279 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33049898 33050026 0.000000 + 1 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33049898 33050026 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33057853 33057925 0.000000 + 1 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33057853 33057925 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33059249 33059320 0.000000 + 0 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33059249 33059320 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33065577 33065665 0.000000 + 0 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33065577 33065665 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33067435 33067594 0.000000 + 1 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33067435 33067594 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33068404 33068537 0.000000 + 0 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33068404 33068537 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33068871 33069011 0.000000 + 1 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33068871 33069011 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33077071 33077191 0.000000 + 1 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33077071 33077191 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33077627 33077731 0.000000 + 0 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33077627 33077731 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33080306 33080402 0.000000 + 0 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33080306 33080402 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33092136 33092208 0.000000 + 2 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33092136 33092208 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene CDS 33095500 33095596 0.000000 + 1 gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 33095500 33099197 0.000000 + . gene_id "ITCH"; transcript_id "BC011571:uc010geu.1"; -chr20 hg19_knownGene exon 32951062 32951155 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 32957200 32957276 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 32981597 32981687 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33000439 33000445 0.000000 + 0 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33000321 33000445 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33001548 33001685 0.000000 + 2 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33001548 33001685 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33012286 33012331 0.000000 + 2 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33012286 33012331 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33026279 33026436 0.000000 + 1 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33026279 33026436 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33027960 33028149 0.000000 + 2 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33027960 33028149 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33030013 33030108 0.000000 + 1 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33030013 33030108 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33033092 33033266 0.000000 + 1 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33033092 33033266 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33037216 33037285 0.000000 + 0 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33037216 33037285 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33045195 33045279 0.000000 + 2 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33045195 33045279 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33049898 33050026 0.000000 + 1 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33049898 33050026 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33057853 33057925 0.000000 + 1 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33057853 33057925 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33059249 33059320 0.000000 + 0 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33059249 33059320 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33065577 33065665 0.000000 + 0 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33065577 33065665 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33067435 33067594 0.000000 + 1 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33067435 33067594 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33068404 33068537 0.000000 + 0 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33068404 33068537 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33068871 33069011 0.000000 + 1 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33068871 33069011 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33077071 33077191 0.000000 + 1 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33077071 33077191 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33077627 33077731 0.000000 + 0 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33077627 33077731 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33080306 33080402 0.000000 + 0 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33080306 33080402 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33092136 33092208 0.000000 + 2 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33092136 33092208 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene CDS 33095500 33095596 0.000000 + 1 gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33095500 33099197 0.000000 + . gene_id "ITCH"; transcript_id "AK304090:uc010zuj.1"; -chr20 hg19_knownGene exon 33114073 33114148 0.000000 + . gene_id "DYNLRB1"; transcript_id "BC007223:uc002xao.3"; -chr20 hg19_knownGene exon 33117656 33119025 0.000000 + . gene_id "DYNLRB1"; transcript_id "BC007223:uc002xao.3"; -chr20 hg19_knownGene CDS 33104264 33104266 0.000000 + 0 gene_id "DYNLRB1"; transcript_id "AK294214:uc010zuk.2"; -chr20 hg19_knownGene exon 33104204 33104266 0.000000 + . gene_id "DYNLRB1"; transcript_id "AK294214:uc010zuk.2"; -chr20 hg19_knownGene CDS 33114073 33114148 0.000000 + 0 gene_id "DYNLRB1"; transcript_id "AK294214:uc010zuk.2"; -chr20 hg19_knownGene exon 33114073 33114148 0.000000 + . gene_id "DYNLRB1"; transcript_id "AK294214:uc010zuk.2"; -chr20 hg19_knownGene CDS 33122432 33122715 0.000000 + 2 gene_id "DYNLRB1"; transcript_id "AK294214:uc010zuk.2"; -chr20 hg19_knownGene exon 33122432 33123391 0.000000 + . gene_id "DYNLRB1"; transcript_id "AK294214:uc010zuk.2"; -chr20 hg19_knownGene CDS 33104264 33104266 0.000000 + 0 gene_id "DYNLRB1"; transcript_id "NM_014183:uc002xal.3"; -chr20 hg19_knownGene exon 33104204 33104266 0.000000 + . gene_id "DYNLRB1"; transcript_id "NM_014183:uc002xal.3"; -chr20 hg19_knownGene CDS 33114073 33114148 0.000000 + 0 gene_id "DYNLRB1"; transcript_id "NM_014183:uc002xal.3"; -chr20 hg19_knownGene exon 33114073 33114148 0.000000 + . gene_id "DYNLRB1"; transcript_id "NM_014183:uc002xal.3"; -chr20 hg19_knownGene CDS 33122432 33122599 0.000000 + 2 gene_id "DYNLRB1"; transcript_id "NM_014183:uc002xal.3"; -chr20 hg19_knownGene exon 33122432 33122599 0.000000 + . gene_id "DYNLRB1"; transcript_id "NM_014183:uc002xal.3"; -chr20 hg19_knownGene CDS 33128385 33128425 0.000000 + 2 gene_id "DYNLRB1"; transcript_id "NM_014183:uc002xal.3"; -chr20 hg19_knownGene exon 33128385 33128762 0.000000 + . gene_id "DYNLRB1"; transcript_id "NM_014183:uc002xal.3"; -chr20 hg19_knownGene exon 33134692 33134720 0.000000 + . gene_id "MAP1LC3A"; transcript_id "NM_181509:uc002xap.1"; -chr20 hg19_knownGene CDS 33137782 33137833 0.000000 + 0 gene_id "MAP1LC3A"; transcript_id "NM_181509:uc002xap.1"; -chr20 hg19_knownGene exon 33137709 33137833 0.000000 + . gene_id "MAP1LC3A"; transcript_id "NM_181509:uc002xap.1"; -chr20 hg19_knownGene CDS 33147012 33147067 0.000000 + 2 gene_id "MAP1LC3A"; transcript_id "NM_181509:uc002xap.1"; -chr20 hg19_knownGene exon 33147012 33147067 0.000000 + . gene_id "MAP1LC3A"; transcript_id "NM_181509:uc002xap.1"; -chr20 hg19_knownGene CDS 33147151 33147257 0.000000 + 0 gene_id "MAP1LC3A"; transcript_id "NM_181509:uc002xap.1"; -chr20 hg19_knownGene exon 33147151 33147257 0.000000 + . gene_id "MAP1LC3A"; transcript_id "NM_181509:uc002xap.1"; -chr20 hg19_knownGene CDS 33147540 33147699 0.000000 + 1 gene_id "MAP1LC3A"; transcript_id "NM_181509:uc002xap.1"; -chr20 hg19_knownGene exon 33147540 33148149 0.000000 + . gene_id "MAP1LC3A"; transcript_id "NM_181509:uc002xap.1"; -chr20 hg19_knownGene CDS 33146673 33146712 0.000000 + 0 gene_id "MAP1LC3A"; transcript_id "NM_032514:uc002xaq.1"; -chr20 hg19_knownGene exon 33146519 33146712 0.000000 + . gene_id "MAP1LC3A"; transcript_id "NM_032514:uc002xaq.1"; -chr20 hg19_knownGene CDS 33147012 33147067 0.000000 + 2 gene_id "MAP1LC3A"; transcript_id "NM_032514:uc002xaq.1"; -chr20 hg19_knownGene exon 33147012 33147067 0.000000 + . gene_id "MAP1LC3A"; transcript_id "NM_032514:uc002xaq.1"; -chr20 hg19_knownGene CDS 33147151 33147257 0.000000 + 0 gene_id "MAP1LC3A"; transcript_id "NM_032514:uc002xaq.1"; -chr20 hg19_knownGene exon 33147151 33147257 0.000000 + . gene_id "MAP1LC3A"; transcript_id "NM_032514:uc002xaq.1"; -chr20 hg19_knownGene CDS 33147540 33147699 0.000000 + 1 gene_id "MAP1LC3A"; transcript_id "NM_032514:uc002xaq.1"; -chr20 hg19_knownGene exon 33147540 33148149 0.000000 + . gene_id "MAP1LC3A"; transcript_id "NM_032514:uc002xaq.1"; -chr20 hg19_knownGene CDS 33148673 33148783 0.000000 - 0 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33148346 33148783 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33162908 33163050 0.000000 - 2 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33162908 33163050 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33169352 33169476 0.000000 - 1 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33169352 33169476 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33173241 33173384 0.000000 - 1 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33173241 33173384 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33176257 33176411 0.000000 - 0 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33176257 33176411 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33203846 33203943 0.000000 - 2 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33203846 33203943 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33222419 33222519 0.000000 - 1 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33222419 33222519 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33225680 33225789 0.000000 - 0 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33225680 33225789 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33231968 33232030 0.000000 - 0 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33231968 33232030 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33233079 33233138 0.000000 - 0 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33233079 33233138 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33244984 33245048 0.000000 - 2 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33244984 33245048 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene CDS 33264760 33264889 0.000000 - 0 gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33264760 33265089 0.000000 - . gene_id "PIGU"; transcript_id "NM_080476:uc002xas.3"; -chr20 hg19_knownGene exon 33148346 33148783 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33150295 33150369 0.000000 - 0 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33150240 33150369 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33162908 33163050 0.000000 - 2 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33162908 33163050 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33169352 33169476 0.000000 - 1 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33169352 33169476 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33173241 33173384 0.000000 - 1 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33173241 33173384 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33176257 33176411 0.000000 - 0 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33176257 33176411 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33203846 33203943 0.000000 - 2 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33203846 33203943 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33222419 33222519 0.000000 - 1 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33222419 33222519 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33225680 33225789 0.000000 - 0 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33225680 33225789 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33231968 33232030 0.000000 - 0 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33231968 33232030 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33233079 33233138 0.000000 - 0 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33233079 33233138 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33244984 33245048 0.000000 - 2 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33244984 33245048 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33264760 33264889 0.000000 - 0 gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene exon 33264760 33265089 0.000000 - . gene_id "PIGU"; transcript_id "AK301900:uc010zul.2"; -chr20 hg19_knownGene CDS 33148673 33148783 0.000000 - 0 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33148346 33148783 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene CDS 33162908 33163050 0.000000 - 2 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33162908 33163050 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene CDS 33169352 33169476 0.000000 - 1 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33169352 33169476 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene CDS 33173241 33173384 0.000000 - 1 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33173241 33173384 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene CDS 33176257 33176411 0.000000 - 0 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33176257 33176411 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene CDS 33203846 33203943 0.000000 - 2 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33203846 33203943 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene CDS 33222419 33222519 0.000000 - 1 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33222419 33222519 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene CDS 33225680 33225789 0.000000 - 0 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33225680 33225789 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene CDS 33231968 33232030 0.000000 - 0 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33231968 33232030 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene CDS 33244984 33245048 0.000000 - 2 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33244984 33245048 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene CDS 33264760 33264889 0.000000 - 0 gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33264760 33265089 0.000000 - . gene_id "PIGU"; transcript_id "AY339061:uc002xat.3"; -chr20 hg19_knownGene exon 33173241 33173384 0.000000 - . gene_id "PIGU"; transcript_id "AK308627:uc010gev.1"; -chr20 hg19_knownGene exon 33176257 33176411 0.000000 - . gene_id "PIGU"; transcript_id "AK308627:uc010gev.1"; -chr20 hg19_knownGene exon 33202304 33202421 0.000000 - . gene_id "PIGU"; transcript_id "AK308627:uc010gev.1"; -chr20 hg19_knownGene exon 33203846 33203943 0.000000 - . gene_id "PIGU"; transcript_id "AK308627:uc010gev.1"; -chr20 hg19_knownGene exon 33222419 33222519 0.000000 - . gene_id "PIGU"; transcript_id "AK308627:uc010gev.1"; -chr20 hg19_knownGene exon 33225680 33225789 0.000000 - . gene_id "PIGU"; transcript_id "AK308627:uc010gev.1"; -chr20 hg19_knownGene exon 33231968 33232030 0.000000 - . gene_id "PIGU"; transcript_id "AK308627:uc010gev.1"; -chr20 hg19_knownGene exon 33244984 33245048 0.000000 - . gene_id "PIGU"; transcript_id "AK308627:uc010gev.1"; -chr20 hg19_knownGene exon 33264760 33265089 0.000000 - . gene_id "PIGU"; transcript_id "AK308627:uc010gev.1"; -chr20 hg19_knownGene exon 33292148 33292316 0.000000 + . gene_id "TP53INP2"; transcript_id "NM_021202:uc002xau.1"; -chr20 hg19_knownGene exon 33293162 33293278 0.000000 + . gene_id "TP53INP2"; transcript_id "NM_021202:uc002xau.1"; -chr20 hg19_knownGene CDS 33296544 33296667 0.000000 + 0 gene_id "TP53INP2"; transcript_id "NM_021202:uc002xau.1"; -chr20 hg19_knownGene exon 33296495 33296667 0.000000 + . gene_id "TP53INP2"; transcript_id "NM_021202:uc002xau.1"; -chr20 hg19_knownGene CDS 33297040 33297328 0.000000 + 2 gene_id "TP53INP2"; transcript_id "NM_021202:uc002xau.1"; -chr20 hg19_knownGene exon 33297040 33297328 0.000000 + . gene_id "TP53INP2"; transcript_id "NM_021202:uc002xau.1"; -chr20 hg19_knownGene CDS 33297862 33298108 0.000000 + 1 gene_id "TP53INP2"; transcript_id "NM_021202:uc002xau.1"; -chr20 hg19_knownGene exon 33297862 33301237 0.000000 + . gene_id "TP53INP2"; transcript_id "NM_021202:uc002xau.1"; -chr20 hg19_knownGene exon 33299316 33301238 0.000000 + . gene_id "AL122050"; transcript_id "AL122050:uc021wcc.1"; -chr20 hg19_knownGene CDS 33326705 33326736 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene exon 33326702 33326736 0.000000 - . gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene CDS 33328167 33331145 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene exon 33328167 33331145 0.000000 - . gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene CDS 33334611 33334732 0.000000 - 1 gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene exon 33334611 33334732 0.000000 - . gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene CDS 33337206 33338322 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene exon 33337206 33338322 0.000000 - . gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene CDS 33342525 33342671 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene exon 33342525 33342671 0.000000 - . gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene CDS 33345023 33345907 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene exon 33345023 33345907 0.000000 - . gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene CDS 33346608 33346736 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene exon 33346608 33346736 0.000000 - . gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene CDS 33356267 33356389 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene exon 33356267 33356389 0.000000 - . gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene CDS 33364096 33364251 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene exon 33364096 33364251 0.000000 - . gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene CDS 33369924 33370158 0.000000 - 0 gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene exon 33369924 33370207 0.000000 - . gene_id "NCOA6"; transcript_id "JF707638:uc021wce.1"; -chr20 hg19_knownGene CDS 33326705 33326736 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene exon 33326702 33326736 0.000000 - . gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene CDS 33334611 33334732 0.000000 - 1 gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene exon 33334611 33334732 0.000000 - . gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene CDS 33337206 33338322 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene exon 33337206 33338322 0.000000 - . gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene CDS 33342525 33342671 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene exon 33342525 33342671 0.000000 - . gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene CDS 33345023 33345907 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene exon 33345023 33345907 0.000000 - . gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene CDS 33346608 33346736 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene exon 33346608 33346736 0.000000 - . gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene CDS 33356267 33356389 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene exon 33356267 33356389 0.000000 - . gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene CDS 33364096 33364251 0.000000 - 2 gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene exon 33364096 33364251 0.000000 - . gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene CDS 33369924 33370158 0.000000 - 0 gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene exon 33369924 33370207 0.000000 - . gene_id "NCOA6"; transcript_id "JF707639:uc021wcf.1"; -chr20 hg19_knownGene CDS 33345027 33345907 0.000000 - 2 gene_id "NCOA6"; transcript_id "BC114613:uc010gew.1"; -chr20 hg19_knownGene exon 33345023 33345907 0.000000 - . gene_id "NCOA6"; transcript_id "BC114613:uc010gew.1"; -chr20 hg19_knownGene CDS 33356267 33356389 0.000000 - 2 gene_id "NCOA6"; transcript_id "BC114613:uc010gew.1"; -chr20 hg19_knownGene exon 33356267 33356389 0.000000 - . gene_id "NCOA6"; transcript_id "BC114613:uc010gew.1"; -chr20 hg19_knownGene CDS 33364096 33364251 0.000000 - 2 gene_id "NCOA6"; transcript_id "BC114613:uc010gew.1"; -chr20 hg19_knownGene exon 33364096 33364251 0.000000 - . gene_id "NCOA6"; transcript_id "BC114613:uc010gew.1"; -chr20 hg19_knownGene CDS 33369924 33370158 0.000000 - 0 gene_id "NCOA6"; transcript_id "BC114613:uc010gew.1"; -chr20 hg19_knownGene exon 33369924 33370207 0.000000 - . gene_id "NCOA6"; transcript_id "BC114613:uc010gew.1"; -chr20 hg19_knownGene exon 33380253 33380366 0.000000 - . gene_id "NCOA6"; transcript_id "BC114613:uc010gew.1"; -chr20 hg19_knownGene CDS 33303129 33303169 0.000000 - 2 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33302578 33303169 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33315063 33315211 0.000000 - 1 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33315063 33315211 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33320363 33320399 0.000000 - 2 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33320363 33320399 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33324494 33324562 0.000000 - 2 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33324494 33324562 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33328167 33331145 0.000000 - 2 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33328167 33331145 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33334611 33334732 0.000000 - 1 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33334611 33334732 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33337206 33338322 0.000000 - 2 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33337206 33338322 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33342525 33342671 0.000000 - 2 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33342525 33342671 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33345023 33345907 0.000000 - 2 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33345023 33345907 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33346608 33346736 0.000000 - 2 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33346608 33346736 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33356267 33356389 0.000000 - 2 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33356267 33356389 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33364096 33364251 0.000000 - 2 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33364096 33364251 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33369924 33370158 0.000000 - 0 gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33369924 33370207 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33380253 33380366 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33397256 33397325 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene exon 33407105 33409442 0.000000 - . gene_id "NCOA6"; transcript_id "AF208227:uc002xav.3"; -chr20 hg19_knownGene CDS 33303129 33303169 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33302578 33303169 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33315063 33315211 0.000000 - 1 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33315063 33315211 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33320363 33320399 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33320363 33320399 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33324494 33324562 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33324494 33324562 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33328167 33331145 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33328167 33331145 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33334611 33334732 0.000000 - 1 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33334611 33334732 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33337206 33338322 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33337206 33338322 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33342525 33342671 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33342525 33342671 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33345023 33345907 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33345023 33345907 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33346608 33346736 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33346608 33346736 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33356267 33356389 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33356267 33356389 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33364096 33364251 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33364096 33364251 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33369924 33370158 0.000000 - 0 gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33369924 33370207 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33380253 33380366 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene exon 33413275 33413433 0.000000 - . gene_id "NCOA6"; transcript_id "NM_014071:uc002xaw.3"; -chr20 hg19_knownGene CDS 33303129 33303169 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33302578 33303169 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33315063 33315211 0.000000 - 1 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33315063 33315211 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33320363 33320399 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33320363 33320399 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33324494 33324562 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33324494 33324562 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33334611 33334732 0.000000 - 1 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33334611 33334732 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33337206 33338322 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33337206 33338322 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33342525 33342671 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33342525 33342671 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33345023 33345907 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33345023 33345907 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33346608 33346736 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33346608 33346736 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33356267 33356389 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33356267 33356389 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33364096 33364251 0.000000 - 2 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33364096 33364251 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene CDS 33369924 33370158 0.000000 - 0 gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33369924 33370207 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33380253 33380366 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33413275 33413433 0.000000 - . gene_id "NCOA6"; transcript_id "NM_001242539:uc021wcd.1"; -chr20 hg19_knownGene exon 33421378 33422265 0.000000 - . gene_id "HMGB3P1"; transcript_id "NR_002165:uc002xax.3"; -chr20 hg19_knownGene exon 33432523 33433294 0.000000 - . gene_id "GGT7"; transcript_id "U06680:uc010gex.3"; -chr20 hg19_knownGene exon 33437764 33437863 0.000000 - . gene_id "GGT7"; transcript_id "U06680:uc010gex.3"; -chr20 hg19_knownGene exon 33438585 33438720 0.000000 - . gene_id "GGT7"; transcript_id "U06680:uc010gex.3"; -chr20 hg19_knownGene exon 33439034 33439171 0.000000 - . gene_id "GGT7"; transcript_id "U06680:uc010gex.3"; -chr20 hg19_knownGene CDS 33433134 33433294 0.000000 - 2 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33432523 33433294 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33437764 33437863 0.000000 - 0 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33437764 33437863 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33439034 33439171 0.000000 - 0 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33439034 33439171 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33439958 33440075 0.000000 - 1 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33439958 33440075 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33440192 33440341 0.000000 - 1 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33440192 33440341 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33442334 33442422 0.000000 - 0 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33442334 33442422 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33442599 33442726 0.000000 - 2 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33442599 33442726 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33444609 33444696 0.000000 - 0 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33444609 33444696 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33447246 33447442 0.000000 - 2 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33447246 33447442 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33447772 33447845 0.000000 - 1 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33447772 33447845 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33448057 33448124 0.000000 - 0 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33448057 33448124 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33449248 33449365 0.000000 - 1 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33449248 33449365 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33450617 33450768 0.000000 - 0 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33450617 33450768 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33451116 33451351 0.000000 - 2 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33451116 33451351 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33460450 33460618 0.000000 - 0 gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene exon 33460450 33460661 0.000000 - . gene_id "GGT7"; transcript_id "NM_178026:uc002xay.3"; -chr20 hg19_knownGene CDS 33437768 33437863 0.000000 - 0 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33437764 33437863 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33439034 33439171 0.000000 - 0 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33439034 33439171 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33439958 33440075 0.000000 - 1 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33439958 33440075 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33440192 33440341 0.000000 - 1 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33440192 33440341 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33442334 33442422 0.000000 - 0 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33442334 33442422 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33442599 33442726 0.000000 - 2 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33442599 33442726 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33444609 33444696 0.000000 - 0 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33444609 33444696 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33447246 33447442 0.000000 - 2 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33447246 33447442 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33447772 33447845 0.000000 - 1 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33447772 33447845 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33448057 33448124 0.000000 - 0 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33448057 33448124 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33449248 33449365 0.000000 - 1 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33449248 33449365 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33450617 33450768 0.000000 - 0 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33450617 33450768 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33451116 33451351 0.000000 - 2 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33451116 33451351 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33451483 33451533 0.000000 - 2 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33451483 33451533 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33460450 33460618 0.000000 - 0 gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene exon 33460450 33460661 0.000000 - . gene_id "GGT7"; transcript_id "BC040030:uc002xaz.1"; -chr20 hg19_knownGene CDS 33449170 33449365 0.000000 - 1 gene_id "GGT7"; transcript_id "AY138815:uc002xba.1"; -chr20 hg19_knownGene exon 33447246 33449365 0.000000 - . gene_id "GGT7"; transcript_id "AY138815:uc002xba.1"; -chr20 hg19_knownGene CDS 33450617 33450768 0.000000 - 0 gene_id "GGT7"; transcript_id "AY138815:uc002xba.1"; -chr20 hg19_knownGene exon 33450617 33450768 0.000000 - . gene_id "GGT7"; transcript_id "AY138815:uc002xba.1"; -chr20 hg19_knownGene CDS 33451116 33451351 0.000000 - 2 gene_id "GGT7"; transcript_id "AY138815:uc002xba.1"; -chr20 hg19_knownGene exon 33451116 33451351 0.000000 - . gene_id "GGT7"; transcript_id "AY138815:uc002xba.1"; -chr20 hg19_knownGene CDS 33460450 33460618 0.000000 - 0 gene_id "GGT7"; transcript_id "AY138815:uc002xba.1"; -chr20 hg19_knownGene exon 33460450 33460661 0.000000 - . gene_id "GGT7"; transcript_id "AY138815:uc002xba.1"; -chr20 hg19_knownGene exon 33464328 33464626 0.000000 + . gene_id "ACSS2"; transcript_id "AK293634:uc010zum.1"; -chr20 hg19_knownGene exon 33470597 33470792 0.000000 + . gene_id "ACSS2"; transcript_id "AK293634:uc010zum.1"; -chr20 hg19_knownGene exon 33511126 33511234 0.000000 + . gene_id "ACSS2"; transcript_id "AK293634:uc010zum.1"; -chr20 hg19_knownGene exon 33513501 33513569 0.000000 + . gene_id "ACSS2"; transcript_id "AK293634:uc010zum.1"; -chr20 hg19_knownGene exon 33513908 33514084 0.000000 + . gene_id "ACSS2"; transcript_id "AK293634:uc010zum.1"; -chr20 hg19_knownGene exon 33514680 33514754 0.000000 + . gene_id "ACSS2"; transcript_id "AK293634:uc010zum.1"; -chr20 hg19_knownGene exon 33462766 33462940 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33470704 33470792 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33470597 33470792 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33500899 33500990 0.000000 + 1 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33500899 33500990 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33501196 33501299 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33501196 33501299 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33501556 33501628 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33501556 33501628 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33501899 33501974 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33501899 33501974 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33502126 33502240 0.000000 + 1 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33502126 33502240 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33507238 33507375 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33507238 33507375 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33508342 33508512 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33508342 33508512 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33508809 33508942 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33508809 33508942 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33509133 33509265 0.000000 + 1 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33509133 33509265 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33509347 33509403 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33509347 33509403 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33509589 33509669 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33509589 33509669 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33511126 33511234 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33511126 33511234 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33513501 33513569 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33513501 33513569 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33513908 33514084 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33513908 33514084 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33514680 33514754 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33514680 33514754 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33514890 33515014 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene exon 33514890 33515769 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001242393:uc002xbc.2"; -chr20 hg19_knownGene CDS 33464449 33464626 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33464328 33464626 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33470597 33470792 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33470597 33470792 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33500899 33500990 0.000000 + 1 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33500899 33500990 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33501196 33501299 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33501196 33501299 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33501556 33501628 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33501556 33501628 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33501899 33501974 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33501899 33501974 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33502126 33502240 0.000000 + 1 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33502126 33502240 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33503021 33503059 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33503021 33503059 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33507238 33507375 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33507238 33507375 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33508342 33508512 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33508342 33508512 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33508809 33508942 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33508809 33508942 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33509133 33509265 0.000000 + 1 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33509133 33509265 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33509347 33509403 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33509347 33509403 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33509589 33509669 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33509589 33509669 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33511126 33511234 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33511126 33511234 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33513501 33513569 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33513501 33513569 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33513908 33514084 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33513908 33514084 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33514680 33514754 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33514680 33514754 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33514890 33515014 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene exon 33514890 33515769 0.000000 + . gene_id "ACSS2"; transcript_id "NM_001076552:uc010gey.2"; -chr20 hg19_knownGene CDS 33464449 33464626 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33464328 33464626 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33470597 33470792 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33470597 33470792 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33500899 33500990 0.000000 + 1 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33500899 33500990 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33501196 33501299 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33501196 33501299 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33501556 33501628 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33501556 33501628 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33501899 33501974 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33501899 33501974 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33502126 33502240 0.000000 + 1 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33502126 33502240 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33507238 33507375 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33507238 33507375 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33508342 33508512 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33508342 33508512 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33508809 33508942 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33508809 33508942 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33509133 33509265 0.000000 + 1 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33509133 33509265 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33509347 33509403 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33509347 33509403 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33509589 33509669 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33509589 33509669 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33511126 33511234 0.000000 + 0 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33511126 33511234 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33513501 33513569 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33513501 33513569 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33513908 33514084 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33513908 33514084 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33514680 33514754 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33514680 33514754 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene CDS 33514890 33515014 0.000000 + 2 gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33514890 33515769 0.000000 + . gene_id "ACSS2"; transcript_id "NM_018677:uc002xbd.2"; -chr20 hg19_knownGene exon 33464328 33464626 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33470597 33470792 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33507280 33507375 0.000000 + 0 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33507238 33507375 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33508342 33508512 0.000000 + 0 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33508342 33508512 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33508809 33508942 0.000000 + 0 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33508809 33508942 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33509133 33509265 0.000000 + 1 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33509133 33509265 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33509347 33509403 0.000000 + 0 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33509347 33509403 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33509589 33509669 0.000000 + 0 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33509589 33509669 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33511126 33511234 0.000000 + 0 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33511126 33511234 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33513501 33513569 0.000000 + 2 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33513501 33513569 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33513908 33514084 0.000000 + 2 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33513908 33514084 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33514680 33514754 0.000000 + 2 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33514680 33514754 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33514890 33515014 0.000000 + 2 gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene exon 33514890 33515769 0.000000 + . gene_id "ACSS2"; transcript_id "AK098026:uc002xbe.2"; -chr20 hg19_knownGene CDS 33516634 33516754 0.000000 - 1 gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33516236 33516754 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene CDS 33517204 33517393 0.000000 - 2 gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33517204 33517393 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene CDS 33519139 33519220 0.000000 - 0 gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33519139 33519220 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene CDS 33519742 33519936 0.000000 - 0 gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33519742 33519936 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene CDS 33523379 33523445 0.000000 - 1 gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33523379 33523445 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene CDS 33524566 33524643 0.000000 - 1 gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33524566 33524643 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene CDS 33524746 33524826 0.000000 - 1 gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33524746 33524826 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene CDS 33529516 33529632 0.000000 - 1 gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33529516 33529632 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene CDS 33530291 33530397 0.000000 - 0 gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33530291 33530809 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33533756 33533901 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene exon 33534430 33534532 0.000000 - . gene_id "GSS"; transcript_id "AK298292:uc010zun.2"; -chr20 hg19_knownGene CDS 33516634 33516754 0.000000 - 1 gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene exon 33516236 33516754 0.000000 - . gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene CDS 33517204 33517393 0.000000 - 2 gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene exon 33517204 33517393 0.000000 - . gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene CDS 33519139 33519220 0.000000 - 0 gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene exon 33519139 33519220 0.000000 - . gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene CDS 33519742 33519936 0.000000 - 0 gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene exon 33519742 33519936 0.000000 - . gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene CDS 33523379 33523445 0.000000 - 1 gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene exon 33523379 33523445 0.000000 - . gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene CDS 33524566 33524643 0.000000 - 1 gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene exon 33524566 33524643 0.000000 - . gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene CDS 33524746 33524826 0.000000 - 1 gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene exon 33524746 33524826 0.000000 - . gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene CDS 33533756 33533901 0.000000 - 0 gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene exon 33533756 33533901 0.000000 - . gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene CDS 33539527 33539655 0.000000 - 0 gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene exon 33539527 33539663 0.000000 - . gene_id "GSS"; transcript_id "AB459500:uc010zuo.2"; -chr20 hg19_knownGene CDS 33516634 33516754 0.000000 - 1 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33516236 33516754 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33517204 33517393 0.000000 - 2 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33517204 33517393 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33519139 33519220 0.000000 - 0 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33519139 33519220 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33519742 33519936 0.000000 - 0 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33519742 33519936 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33523379 33523445 0.000000 - 1 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33523379 33523445 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33524566 33524643 0.000000 - 1 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33524566 33524643 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33524746 33524826 0.000000 - 1 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33524746 33524826 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33529516 33529632 0.000000 - 1 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33529516 33529632 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33530291 33530430 0.000000 - 0 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33530291 33530430 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33530734 33530809 0.000000 - 1 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33530734 33530809 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33533756 33533901 0.000000 - 0 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33533756 33533901 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33539527 33539655 0.000000 - 0 gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33539527 33539663 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene exon 33543530 33543601 0.000000 - . gene_id "GSS"; transcript_id "NM_000178:uc002xbg.3"; -chr20 hg19_knownGene CDS 33516634 33516754 0.000000 - 1 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33516236 33516754 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33517204 33517393 0.000000 - 2 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33517204 33517393 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33519139 33519220 0.000000 - 0 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33519139 33519220 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33519742 33519936 0.000000 - 0 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33519742 33519936 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33523379 33523445 0.000000 - 1 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33523379 33523445 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33524566 33524643 0.000000 - 1 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33524566 33524643 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33524746 33524826 0.000000 - 1 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33524746 33524826 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33529516 33529632 0.000000 - 1 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33529516 33529632 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33530291 33530430 0.000000 - 0 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33530291 33530430 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33530734 33530809 0.000000 - 1 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33530734 33530809 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33533756 33533823 0.000000 - 0 gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33533756 33533854 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33539527 33539663 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene exon 33543530 33543601 0.000000 - . gene_id "GSS"; transcript_id "AK293144:uc010zup.2"; -chr20 hg19_knownGene CDS 33517203 33517393 0.000000 - 2 gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33516778 33517393 0.000000 - . gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene CDS 33519139 33519220 0.000000 - 0 gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33519139 33519220 0.000000 - . gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene CDS 33519742 33519936 0.000000 - 0 gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33519742 33519936 0.000000 - . gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene CDS 33523379 33523402 0.000000 - 0 gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33523379 33523445 0.000000 - . gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33524566 33524643 0.000000 - . gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33524746 33524826 0.000000 - . gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33530734 33530809 0.000000 - . gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33533756 33533901 0.000000 - . gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33539527 33539663 0.000000 - . gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33543530 33543601 0.000000 - . gene_id "GSS"; transcript_id "AK311421:uc010gez.1"; -chr20 hg19_knownGene exon 33565435 33565483 0.000000 + . gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene CDS 33565809 33565899 0.000000 + 0 gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene exon 33565737 33565899 0.000000 + . gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene CDS 33567193 33567299 0.000000 + 2 gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene exon 33567193 33567299 0.000000 + . gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene CDS 33567464 33567607 0.000000 + 0 gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene exon 33567464 33567607 0.000000 + . gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene CDS 33568381 33568537 0.000000 + 0 gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene exon 33568381 33568537 0.000000 + . gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene CDS 33568836 33568864 0.000000 + 2 gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene exon 33568836 33569828 0.000000 + . gene_id "MYH7B"; transcript_id "AK000947:uc010gfa.1"; -chr20 hg19_knownGene exon 33578203 33578275 0.000000 - . gene_id "MIR499B"; transcript_id "NR_039912:uc021wch.1"; -chr20 hg19_knownGene exon 33578179 33578300 0.000000 + . gene_id "MIR499A"; transcript_id "NR_030223:uc021wcg.1"; -chr20 hg19_knownGene exon 33543704 33543810 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33545901 33546015 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33563298 33563302 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33563203 33563302 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33565435 33565483 0.000000 + 1 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33565435 33565483 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33565737 33565899 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33565737 33565899 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33567193 33567299 0.000000 + 2 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33567193 33567299 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33567464 33567607 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33567464 33567607 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33568381 33568537 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33568381 33568537 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33568836 33568863 0.000000 + 2 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33568836 33568863 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33570262 33570358 0.000000 + 1 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33570262 33570358 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33572495 33572518 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33572495 33572518 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33572657 33572749 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33572657 33572749 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33572869 33572932 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33572869 33572932 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33573903 33574001 0.000000 + 2 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33573903 33574001 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33574689 33574792 0.000000 + 2 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33574689 33574792 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33574952 33575090 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33574952 33575090 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33575360 33575478 0.000000 + 2 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33575360 33575478 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33575568 33575717 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33575568 33575717 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33575895 33576065 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33575895 33576065 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33577543 33577722 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33577543 33577722 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33577817 33577949 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33577817 33577949 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33578037 33578113 0.000000 + 2 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33578037 33578113 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33578541 33578628 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33578541 33578628 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33578807 33578924 0.000000 + 2 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33578807 33578924 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33580905 33581028 0.000000 + 1 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33580905 33581028 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33581137 33581273 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33581137 33581273 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33581949 33582204 0.000000 + 1 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33581949 33582204 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33583139 33583381 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33583139 33583381 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33584149 33584325 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33584149 33584325 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33584416 33584561 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33584416 33584561 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33584886 33584976 0.000000 + 1 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33584886 33584976 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33585054 33585443 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33585054 33585443 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33586098 33586224 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33586098 33586224 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33586314 33586432 0.000000 + 2 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33586314 33586432 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33586522 33586718 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33586522 33586718 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33586859 33587208 0.000000 + 1 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33586859 33587208 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33587374 33587498 0.000000 + 2 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33587374 33587498 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33587594 33587709 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33587594 33587709 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33588096 33588492 0.000000 + 1 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33588096 33588492 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33588571 33588696 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33588571 33588696 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33588791 33588961 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33588791 33588961 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33589048 33589152 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33589048 33589152 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33589234 33589329 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33589234 33589329 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33589751 33589888 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33589751 33589888 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene CDS 33589980 33589988 0.000000 + 0 gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33589980 33590240 0.000000 + . gene_id "MYH7B"; transcript_id "NM_020884:uc002xbi.2"; -chr20 hg19_knownGene exon 33590207 33591086 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbj.3"; -chr20 hg19_knownGene exon 33591213 33591419 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbj.3"; -chr20 hg19_knownGene exon 33591676 33592373 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbj.3"; -chr20 hg19_knownGene exon 33593498 33593606 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbj.3"; -chr20 hg19_knownGene exon 33594238 33594378 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbj.3"; -chr20 hg19_knownGene CDS 33590952 33591086 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33590207 33591086 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene CDS 33591213 33591419 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33591213 33591419 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene CDS 33592261 33592373 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33592261 33592373 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene CDS 33593498 33593606 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33593498 33593606 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene CDS 33594238 33594378 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33594238 33594378 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene CDS 33595353 33595443 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33595353 33595443 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene CDS 33596467 33596550 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33596467 33596550 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene CDS 33597990 33598091 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33597990 33598091 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene CDS 33600811 33600869 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33600811 33600869 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene CDS 33603811 33603933 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33603811 33603942 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene exon 33622926 33623111 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK301368:uc010zuq.2"; -chr20 hg19_knownGene CDS 33590952 33591086 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33590207 33591086 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33591213 33591419 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33591213 33591419 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33592261 33592373 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33592261 33592373 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33593498 33593606 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33593498 33593606 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33594238 33594378 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33594238 33594378 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33595353 33595443 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33595353 33595443 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33596467 33596550 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33596467 33596550 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33597990 33598091 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33597990 33598091 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33600811 33600869 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33600811 33600869 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33603811 33603942 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33603811 33603942 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33608993 33609159 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33608993 33609159 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33622926 33623111 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33622926 33623111 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33632308 33632515 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33632308 33632515 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33637669 33637797 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33637669 33637797 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33642779 33642834 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33642779 33642834 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33645317 33645374 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33645317 33645374 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33657099 33657215 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33657099 33657215 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33665849 33665977 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33665849 33665977 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33680417 33680584 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene exon 33680417 33680618 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_015638:uc002xbk.3"; -chr20 hg19_knownGene CDS 33590952 33591086 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33590207 33591086 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33591213 33591419 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33591213 33591419 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33592261 33592373 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33592261 33592373 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33593498 33593606 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33593498 33593606 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33594238 33594378 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33594238 33594378 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33595353 33595443 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33595353 33595443 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33596467 33596550 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33596467 33596550 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33597990 33598091 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33597990 33598091 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33600811 33600869 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33600811 33600869 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33603811 33603942 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33603811 33603942 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33608993 33609135 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33608993 33609135 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33622926 33623111 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33622926 33623111 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33632308 33632515 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33632308 33632515 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33637669 33637797 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33637669 33637797 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33642779 33642834 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33642779 33642834 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33645317 33645374 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33645317 33645374 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33657099 33657215 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33657099 33657215 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33665849 33665977 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33665849 33665977 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33680417 33680584 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene exon 33680417 33680618 0.000000 - . gene_id "TRPC4AP"; transcript_id "NM_199368:uc002xbl.3"; -chr20 hg19_knownGene CDS 33590952 33591086 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33590207 33591086 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33591213 33591419 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33591213 33591419 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33592261 33592373 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33592261 33592373 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33593498 33593606 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33593498 33593606 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33594238 33594378 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33594238 33594378 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33595353 33595443 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33595353 33595443 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33596467 33596550 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33596467 33596550 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33597990 33598091 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33597990 33598091 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33600811 33600869 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33600811 33600869 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33603811 33603942 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33603811 33603942 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33608993 33609159 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33608993 33609159 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33622926 33623111 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33622926 33623111 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33632308 33632515 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33632308 33632515 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33637669 33637797 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33637669 33637797 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33642779 33642834 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33642779 33642834 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33645317 33645374 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33645317 33645374 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33665849 33665977 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33665849 33665977 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33680417 33680584 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene exon 33680417 33680618 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK303476:uc010zur.2"; -chr20 hg19_knownGene CDS 33596466 33596550 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33595381 33596550 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33597990 33598091 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33597990 33598091 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33600811 33600869 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33600811 33600869 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33603811 33603942 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33603811 33603942 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33608993 33609159 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33608993 33609159 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33622926 33623111 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33622926 33623111 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33632308 33632515 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33632308 33632515 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33637669 33637797 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33637669 33637797 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33642779 33642834 0.000000 - 2 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33642779 33642834 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33645317 33645374 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33645317 33645374 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33657099 33657215 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33657099 33657215 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33665849 33665977 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33665849 33665977 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33680417 33680584 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene exon 33680417 33680618 0.000000 - . gene_id "TRPC4AP"; transcript_id "AK074106:uc002xbm.1"; -chr20 hg19_knownGene CDS 33642782 33642830 0.000000 - 1 gene_id "TRPC4AP"; transcript_id "CU680522:uc021wci.1"; -chr20 hg19_knownGene exon 33642779 33642830 0.000000 - . gene_id "TRPC4AP"; transcript_id "CU680522:uc021wci.1"; -chr20 hg19_knownGene CDS 33645313 33645374 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "CU680522:uc021wci.1"; -chr20 hg19_knownGene exon 33645313 33645374 0.000000 - . gene_id "TRPC4AP"; transcript_id "CU680522:uc021wci.1"; -chr20 hg19_knownGene CDS 33657099 33657215 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "CU680522:uc021wci.1"; -chr20 hg19_knownGene exon 33657099 33657215 0.000000 - . gene_id "TRPC4AP"; transcript_id "CU680522:uc021wci.1"; -chr20 hg19_knownGene CDS 33665849 33665977 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "CU680522:uc021wci.1"; -chr20 hg19_knownGene exon 33665849 33665977 0.000000 - . gene_id "TRPC4AP"; transcript_id "CU680522:uc021wci.1"; -chr20 hg19_knownGene CDS 33680417 33680584 0.000000 - 0 gene_id "TRPC4AP"; transcript_id "CU680522:uc021wci.1"; -chr20 hg19_knownGene exon 33680417 33680618 0.000000 - . gene_id "TRPC4AP"; transcript_id "CU680522:uc021wci.1"; -chr20 hg19_knownGene exon 33704939 33705010 0.000000 - . gene_id "SNORD56"; transcript_id ":uc021wcj.1"; -chr20 hg19_knownGene CDS 33703239 33703736 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene exon 33703160 33703736 0.000000 - . gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene CDS 33706401 33706522 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene exon 33706401 33706522 0.000000 - . gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene CDS 33711693 33711837 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene exon 33711693 33711837 0.000000 - . gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene CDS 33714054 33714178 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene exon 33714054 33714178 0.000000 - . gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene CDS 33719445 33719586 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene exon 33719445 33719586 0.000000 - . gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene CDS 33721908 33721946 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene exon 33721908 33721958 0.000000 - . gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene exon 33722541 33722752 0.000000 - . gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene exon 33725683 33725808 0.000000 - . gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene exon 33730176 33730281 0.000000 - . gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene exon 33732782 33732959 0.000000 - . gene_id "EDEM2"; transcript_id "AK293583:uc010zus.1"; -chr20 hg19_knownGene CDS 33703239 33703736 0.000000 - 0 gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene exon 33703160 33703736 0.000000 - . gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene CDS 33706401 33706522 0.000000 - 2 gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene exon 33706401 33706522 0.000000 - . gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene CDS 33711693 33711837 0.000000 - 0 gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene exon 33711693 33711837 0.000000 - . gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene CDS 33714054 33714178 0.000000 - 2 gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene exon 33714054 33714178 0.000000 - . gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene CDS 33719445 33719586 0.000000 - 0 gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene exon 33719445 33719586 0.000000 - . gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene CDS 33722541 33722752 0.000000 - 2 gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene exon 33722541 33722752 0.000000 - . gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene CDS 33725683 33725808 0.000000 - 2 gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene exon 33725683 33725808 0.000000 - . gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene CDS 33730176 33730281 0.000000 - 0 gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene exon 33730176 33730281 0.000000 - . gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene CDS 33732782 33732821 0.000000 - 1 gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene exon 33732782 33732821 0.000000 - . gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene CDS 33734955 33735061 0.000000 - 0 gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene exon 33734955 33735161 0.000000 - . gene_id "EDEM2"; transcript_id "NM_001145025:uc002xbq.2"; -chr20 hg19_knownGene CDS 33703239 33703736 0.000000 - 0 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33703160 33703736 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33706401 33706522 0.000000 - 2 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33706401 33706522 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33711693 33711837 0.000000 - 0 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33711693 33711837 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33714054 33714178 0.000000 - 2 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33714054 33714178 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33719445 33719586 0.000000 - 0 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33719445 33719586 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33722541 33722752 0.000000 - 2 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33722541 33722752 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33725683 33725808 0.000000 - 2 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33725683 33725808 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33730176 33730281 0.000000 - 0 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33730176 33730281 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33732782 33732821 0.000000 - 1 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33732782 33732821 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33734628 33734738 0.000000 - 1 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33734628 33734738 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33734955 33735061 0.000000 - 0 gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene exon 33734955 33735161 0.000000 - . gene_id "EDEM2"; transcript_id "NM_018217:uc002xbo.2"; -chr20 hg19_knownGene CDS 33703239 33703736 0.000000 - 0 gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene exon 33703160 33703736 0.000000 - . gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene CDS 33706401 33706522 0.000000 - 2 gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene exon 33706401 33706522 0.000000 - . gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene CDS 33711693 33711837 0.000000 - 0 gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene exon 33711693 33711837 0.000000 - . gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene CDS 33714054 33714178 0.000000 - 2 gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene exon 33714054 33714178 0.000000 - . gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene CDS 33719445 33719586 0.000000 - 0 gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene exon 33719445 33719586 0.000000 - . gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene CDS 33722541 33722752 0.000000 - 2 gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene exon 33722541 33722752 0.000000 - . gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene CDS 33725683 33725808 0.000000 - 2 gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene exon 33725683 33725808 0.000000 - . gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene CDS 33730176 33730281 0.000000 - 0 gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene exon 33730176 33730281 0.000000 - . gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene CDS 33732782 33732821 0.000000 - 1 gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene exon 33732782 33732821 0.000000 - . gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene CDS 33734628 33734722 0.000000 - 0 gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene exon 33734628 33735161 0.000000 - . gene_id "EDEM2"; transcript_id "NR_026728:uc010zut.1"; -chr20 hg19_knownGene CDS 33703239 33703736 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene exon 33703160 33703736 0.000000 - . gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene CDS 33706401 33706522 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene exon 33706401 33706522 0.000000 - . gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene CDS 33711693 33711837 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene exon 33711693 33711837 0.000000 - . gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene CDS 33714054 33714178 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene exon 33714054 33714178 0.000000 - . gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene CDS 33719445 33719586 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene exon 33719445 33719586 0.000000 - . gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene CDS 33722541 33722752 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene exon 33722541 33722752 0.000000 - . gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene CDS 33725683 33725716 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene exon 33725683 33725808 0.000000 - . gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene exon 33730176 33730281 0.000000 - . gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene exon 33734628 33735161 0.000000 - . gene_id "EDEM2"; transcript_id "AK096016:uc002xbn.2"; -chr20 hg19_knownGene CDS 33703239 33703736 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene exon 33703160 33703736 0.000000 - . gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene CDS 33706401 33706522 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene exon 33706401 33706522 0.000000 - . gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene CDS 33711693 33711837 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene exon 33711693 33711837 0.000000 - . gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene CDS 33714054 33714178 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene exon 33714054 33714178 0.000000 - . gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene CDS 33719445 33719460 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene exon 33719445 33719586 0.000000 - . gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene exon 33730176 33730281 0.000000 - . gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene exon 33732782 33732821 0.000000 - . gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene exon 33734628 33734738 0.000000 - . gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene exon 33734955 33735161 0.000000 - . gene_id "EDEM2"; transcript_id "AK303816:uc010zuu.1"; -chr20 hg19_knownGene CDS 33759958 33760027 0.000000 + 0 gene_id "PROCR"; transcript_id "NM_006404:uc002xbt.3"; -chr20 hg19_knownGene exon 33759774 33760027 0.000000 + . gene_id "PROCR"; transcript_id "NM_006404:uc002xbt.3"; -chr20 hg19_knownGene CDS 33762505 33762756 0.000000 + 2 gene_id "PROCR"; transcript_id "NM_006404:uc002xbt.3"; -chr20 hg19_knownGene exon 33762505 33762756 0.000000 + . gene_id "PROCR"; transcript_id "NM_006404:uc002xbt.3"; -chr20 hg19_knownGene CDS 33763971 33764249 0.000000 + 2 gene_id "PROCR"; transcript_id "NM_006404:uc002xbt.3"; -chr20 hg19_knownGene exon 33763971 33764249 0.000000 + . gene_id "PROCR"; transcript_id "NM_006404:uc002xbt.3"; -chr20 hg19_knownGene CDS 33764501 33764613 0.000000 + 2 gene_id "PROCR"; transcript_id "NM_006404:uc002xbt.3"; -chr20 hg19_knownGene exon 33764501 33765165 0.000000 + . gene_id "PROCR"; transcript_id "NM_006404:uc002xbt.3"; -chr20 hg19_knownGene CDS 33814542 33814787 0.000000 + 0 gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene exon 33814539 33814787 0.000000 + . gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene CDS 33834643 33834791 0.000000 + 0 gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene exon 33834643 33834791 0.000000 + . gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene CDS 33839708 33839824 0.000000 + 1 gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene exon 33839708 33839824 0.000000 + . gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene CDS 33842253 33842557 0.000000 + 1 gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene exon 33842253 33842557 0.000000 + . gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene CDS 33851594 33851755 0.000000 + 2 gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene exon 33851594 33851755 0.000000 + . gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene CDS 33855008 33855222 0.000000 + 2 gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene exon 33855008 33855222 0.000000 + . gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene CDS 33857563 33857701 0.000000 + 0 gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene exon 33857563 33857701 0.000000 + . gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene CDS 33859372 33859638 0.000000 + 2 gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene exon 33859372 33859638 0.000000 + . gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene CDS 33862075 33862409 0.000000 + 2 gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene exon 33862075 33864804 0.000000 + . gene_id "MMP24"; transcript_id "NM_006690:uc002xbu.2"; -chr20 hg19_knownGene CDS 33706302 33706522 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33705828 33706522 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene CDS 33711693 33711837 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33711693 33711837 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene CDS 33714054 33714178 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33714054 33714178 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene CDS 33719445 33719586 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33719445 33719586 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene CDS 33722541 33722752 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33722541 33722752 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene CDS 33725683 33725808 0.000000 - 2 gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33725683 33725808 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene CDS 33730176 33730281 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33730176 33730281 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene CDS 33732782 33732821 0.000000 - 1 gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33732782 33732821 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene CDS 33734628 33734722 0.000000 - 0 gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33734628 33734738 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33804551 33804674 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33805615 33805864 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33823884 33823994 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33859808 33859948 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene exon 33865849 33865928 0.000000 - . gene_id "EDEM2"; transcript_id "AK296878:uc010zuv.1"; -chr20 hg19_knownGene CDS 33867003 33867009 0.000000 - 1 gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene exon 33866725 33867009 0.000000 - . gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene CDS 33867369 33867550 0.000000 - 0 gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene exon 33867369 33867550 0.000000 - . gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene CDS 33867745 33867921 0.000000 - 0 gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene exon 33867745 33867921 0.000000 - . gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene CDS 33868457 33868632 0.000000 - 2 gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene exon 33868457 33868632 0.000000 - . gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene CDS 33871979 33872064 0.000000 - 1 gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene exon 33871979 33872064 0.000000 - . gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene CDS 33872184 33872290 0.000000 - 0 gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene exon 33872184 33872506 0.000000 - . gene_id "EIF6"; transcript_id "NM_181468:uc002xbv.1"; -chr20 hg19_knownGene CDS 33867003 33867009 0.000000 - 1 gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene exon 33866725 33867009 0.000000 - . gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene CDS 33867369 33867550 0.000000 - 0 gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene exon 33867369 33867550 0.000000 - . gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene CDS 33867745 33867921 0.000000 - 0 gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene exon 33867745 33867921 0.000000 - . gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene CDS 33868457 33868632 0.000000 - 2 gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene exon 33868457 33868632 0.000000 - . gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene CDS 33871979 33872064 0.000000 - 1 gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene exon 33871979 33872064 0.000000 - . gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene CDS 33872184 33872290 0.000000 - 0 gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene exon 33872184 33872295 0.000000 - . gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene exon 33872529 33872594 0.000000 - . gene_id "EIF6"; transcript_id "NM_002212:uc002xbx.1"; -chr20 hg19_knownGene CDS 33867003 33867009 0.000000 - 1 gene_id "EIF6"; transcript_id "NM_181466:uc002xbz.1"; -chr20 hg19_knownGene exon 33866725 33867009 0.000000 - . gene_id "EIF6"; transcript_id "NM_181466:uc002xbz.1"; -chr20 hg19_knownGene CDS 33867369 33867550 0.000000 - 0 gene_id "EIF6"; transcript_id "NM_181466:uc002xbz.1"; -chr20 hg19_knownGene exon 33867369 33867550 0.000000 - . gene_id "EIF6"; transcript_id "NM_181466:uc002xbz.1"; -chr20 hg19_knownGene CDS 33867745 33867921 0.000000 - 0 gene_id "EIF6"; transcript_id "NM_181466:uc002xbz.1"; -chr20 hg19_knownGene exon 33867745 33867921 0.000000 - . gene_id "EIF6"; transcript_id "NM_181466:uc002xbz.1"; -chr20 hg19_knownGene CDS 33871979 33872290 0.000000 - 0 gene_id "EIF6"; transcript_id "NM_181466:uc002xbz.1"; -chr20 hg19_knownGene exon 33871979 33872295 0.000000 - . gene_id "EIF6"; transcript_id "NM_181466:uc002xbz.1"; -chr20 hg19_knownGene exon 33872529 33872594 0.000000 - . gene_id "EIF6"; transcript_id "NM_181466:uc002xbz.1"; -chr20 hg19_knownGene exon 33866725 33867009 0.000000 - . gene_id "EIF6"; transcript_id "BC095465:uc002xby.1"; -chr20 hg19_knownGene exon 33867369 33867550 0.000000 - . gene_id "EIF6"; transcript_id "BC095465:uc002xby.1"; -chr20 hg19_knownGene exon 33867745 33867921 0.000000 - . gene_id "EIF6"; transcript_id "BC095465:uc002xby.1"; -chr20 hg19_knownGene exon 33871979 33872064 0.000000 - . gene_id "EIF6"; transcript_id "BC095465:uc002xby.1"; -chr20 hg19_knownGene exon 33872184 33872295 0.000000 - . gene_id "EIF6"; transcript_id "BC095465:uc002xby.1"; -chr20 hg19_knownGene exon 33872529 33872594 0.000000 - . gene_id "EIF6"; transcript_id "BC095465:uc002xby.1"; -chr20 hg19_knownGene CDS 33874341 33875775 0.000000 - 1 gene_id "FAM83C"; transcript_id "NM_178468:uc021wck.1"; -chr20 hg19_knownGene exon 33873534 33875775 0.000000 - . gene_id "FAM83C"; transcript_id "NM_178468:uc021wck.1"; -chr20 hg19_knownGene CDS 33876264 33876388 0.000000 - 0 gene_id "FAM83C"; transcript_id "NM_178468:uc021wck.1"; -chr20 hg19_knownGene exon 33876264 33876388 0.000000 - . gene_id "FAM83C"; transcript_id "NM_178468:uc021wck.1"; -chr20 hg19_knownGene CDS 33876594 33876761 0.000000 - 0 gene_id "FAM83C"; transcript_id "NM_178468:uc021wck.1"; -chr20 hg19_knownGene exon 33876594 33876761 0.000000 - . gene_id "FAM83C"; transcript_id "NM_178468:uc021wck.1"; -chr20 hg19_knownGene CDS 33879595 33880107 0.000000 - 0 gene_id "FAM83C"; transcript_id "NM_178468:uc021wck.1"; -chr20 hg19_knownGene exon 33879595 33880225 0.000000 - . gene_id "FAM83C"; transcript_id "NM_178468:uc021wck.1"; -chr20 hg19_knownGene CDS 33874341 33875309 0.000000 - 0 gene_id "FAM83C"; transcript_id "AX746786:uc002xcb.1"; -chr20 hg19_knownGene exon 33873536 33875309 0.000000 - . gene_id "FAM83C"; transcript_id "AX746786:uc002xcb.1"; -chr20 hg19_knownGene CDS 33876305 33876388 0.000000 - 0 gene_id "FAM83C"; transcript_id "AX746786:uc002xcb.1"; -chr20 hg19_knownGene exon 33876305 33876388 0.000000 - . gene_id "FAM83C"; transcript_id "AX746786:uc002xcb.1"; -chr20 hg19_knownGene CDS 33876594 33876746 0.000000 - 0 gene_id "FAM83C"; transcript_id "AX746786:uc002xcb.1"; -chr20 hg19_knownGene exon 33876594 33876761 0.000000 - . gene_id "FAM83C"; transcript_id "AX746786:uc002xcb.1"; -chr20 hg19_knownGene exon 33878206 33878278 0.000000 - . gene_id "FAM83C"; transcript_id "AX746786:uc002xcb.1"; -chr20 hg19_knownGene exon 33879595 33880225 0.000000 - . gene_id "FAM83C"; transcript_id "AX746786:uc002xcb.1"; -chr20 hg19_knownGene exon 33890383 33893057 0.000000 - . gene_id "AK128252"; transcript_id "AK128252:uc002xch.3"; -chr20 hg19_knownGene CDS 33891741 33891872 0.000000 - 0 gene_id "UQCC"; transcript_id "BX537568:uc002xcc.3"; -chr20 hg19_knownGene exon 33890369 33891872 0.000000 - . gene_id "UQCC"; transcript_id "BX537568:uc002xcc.3"; -chr20 hg19_knownGene CDS 33894469 33894672 0.000000 - 0 gene_id "UQCC"; transcript_id "BX537568:uc002xcc.3"; -chr20 hg19_knownGene exon 33894469 33894862 0.000000 - . gene_id "UQCC"; transcript_id "BX537568:uc002xcc.3"; -chr20 hg19_knownGene exon 33969331 33969610 0.000000 - . gene_id "7SK"; transcript_id ":uc021wcm.1"; -chr20 hg19_knownGene CDS 33891741 33891872 0.000000 - 0 gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene exon 33890369 33891872 0.000000 - . gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene CDS 33894469 33894582 0.000000 - 0 gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene exon 33894469 33894582 0.000000 - . gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene CDS 33902491 33902568 0.000000 - 0 gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene exon 33902491 33902568 0.000000 - . gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene CDS 33934967 33935075 0.000000 - 1 gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene exon 33934967 33935075 0.000000 - . gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene CDS 33954360 33954417 0.000000 - 2 gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene exon 33954360 33954417 0.000000 - . gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene CDS 33961987 33962059 0.000000 - 0 gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene exon 33961987 33962059 0.000000 - . gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene CDS 33969721 33969756 0.000000 - 0 gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene exon 33969721 33969828 0.000000 - . gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene exon 33981895 33981999 0.000000 - . gene_id "UQCC"; transcript_id "AK295379:uc010zuy.2"; -chr20 hg19_knownGene CDS 33891741 33891872 0.000000 - 0 gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene exon 33890369 33891872 0.000000 - . gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene CDS 33894469 33894582 0.000000 - 0 gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene exon 33894469 33894582 0.000000 - . gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene CDS 33902491 33902568 0.000000 - 0 gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene exon 33902491 33902568 0.000000 - . gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene CDS 33934967 33935075 0.000000 - 1 gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene exon 33934967 33935075 0.000000 - . gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene CDS 33954360 33954417 0.000000 - 2 gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene exon 33954360 33954417 0.000000 - . gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene CDS 33969729 33969828 0.000000 - 0 gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene exon 33969729 33969828 0.000000 - . gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene CDS 33971841 33971927 0.000000 - 0 gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene exon 33971841 33971936 0.000000 - . gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene exon 33981895 33981999 0.000000 - . gene_id "UQCC"; transcript_id "AY050660:uc021wcl.1"; -chr20 hg19_knownGene CDS 33934877 33935075 0.000000 - 1 gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene exon 33931920 33935075 0.000000 - . gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene CDS 33954360 33954417 0.000000 - 2 gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene exon 33954360 33954417 0.000000 - . gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene CDS 33961987 33962059 0.000000 - 0 gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene exon 33961987 33962059 0.000000 - . gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene CDS 33969721 33969828 0.000000 - 0 gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene exon 33969721 33969828 0.000000 - . gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene CDS 33971841 33971927 0.000000 - 0 gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene exon 33971841 33971936 0.000000 - . gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene exon 33981895 33982103 0.000000 - . gene_id "UQCC"; transcript_id "AB209400:uc002xci.1"; -chr20 hg19_knownGene CDS 33891741 33891872 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene exon 33890369 33891872 0.000000 - . gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene CDS 33894469 33894582 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene exon 33894469 33894582 0.000000 - . gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene CDS 33902491 33902568 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene exon 33902491 33902568 0.000000 - . gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene CDS 33934967 33935075 0.000000 - 1 gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene exon 33934967 33935075 0.000000 - . gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene CDS 33954360 33954417 0.000000 - 2 gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene exon 33954360 33954417 0.000000 - . gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene CDS 33961987 33962059 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene exon 33961987 33962059 0.000000 - . gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene CDS 33969721 33969828 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene exon 33969721 33969828 0.000000 - . gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene CDS 33971841 33971936 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene exon 33971841 33971936 0.000000 - . gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene CDS 33981895 33981999 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene exon 33981895 33981999 0.000000 - . gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene CDS 33999743 33999766 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene exon 33999743 33999945 0.000000 - . gene_id "UQCC"; transcript_id "NM_018244:uc002xcd.3"; -chr20 hg19_knownGene CDS 33891741 33891872 0.000000 - 0 gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene exon 33890369 33891872 0.000000 - . gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene CDS 33894469 33894582 0.000000 - 0 gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene exon 33894469 33894582 0.000000 - . gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene CDS 33902491 33902510 0.000000 - 2 gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene exon 33902491 33902510 0.000000 - . gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene CDS 33971846 33971936 0.000000 - 0 gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene exon 33971846 33971936 0.000000 - . gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene CDS 33981895 33981999 0.000000 - 0 gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene exon 33981895 33981999 0.000000 - . gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene CDS 33999743 33999766 0.000000 - 0 gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene exon 33999743 33999945 0.000000 - . gene_id "UQCC"; transcript_id "AK302133:uc010zva.2"; -chr20 hg19_knownGene CDS 33891741 33891872 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene exon 33890369 33891872 0.000000 - . gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene CDS 33894469 33894582 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene exon 33894469 33894582 0.000000 - . gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene CDS 33934967 33935075 0.000000 - 1 gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene exon 33934967 33935075 0.000000 - . gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene CDS 33954360 33954417 0.000000 - 2 gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene exon 33954360 33954417 0.000000 - . gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene CDS 33961987 33962059 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene exon 33961987 33962059 0.000000 - . gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene CDS 33969721 33969828 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene exon 33969721 33969828 0.000000 - . gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene CDS 33971841 33971936 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene exon 33971841 33971936 0.000000 - . gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene CDS 33981895 33981999 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene exon 33981895 33981999 0.000000 - . gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene CDS 33999743 33999766 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene exon 33999743 33999945 0.000000 - . gene_id "UQCC"; transcript_id "NM_199487:uc010gfb.3"; -chr20 hg19_knownGene CDS 33891741 33891872 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene exon 33890369 33891872 0.000000 - . gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene CDS 33894469 33894582 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene exon 33894469 33894582 0.000000 - . gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene CDS 33902491 33902568 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene exon 33902491 33902568 0.000000 - . gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene CDS 33934967 33935075 0.000000 - 1 gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene exon 33934967 33935075 0.000000 - . gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene CDS 33954360 33954417 0.000000 - 2 gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene exon 33954360 33954417 0.000000 - . gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene CDS 33961987 33962059 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene exon 33961987 33962059 0.000000 - . gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene CDS 33981895 33981999 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene exon 33981895 33981999 0.000000 - . gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene CDS 33999743 33999766 0.000000 - 0 gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene exon 33999743 33999945 0.000000 - . gene_id "UQCC"; transcript_id "NM_001184977:uc010zvb.2"; -chr20 hg19_knownGene CDS 33891741 33891872 0.000000 - 0 gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene exon 33890369 33891872 0.000000 - . gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene CDS 33894469 33894582 0.000000 - 0 gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene exon 33894469 33894582 0.000000 - . gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene CDS 33902491 33902568 0.000000 - 0 gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene exon 33902491 33902568 0.000000 - . gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene CDS 33934967 33935075 0.000000 - 1 gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene exon 33934967 33935075 0.000000 - . gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene CDS 33954360 33954417 0.000000 - 2 gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene exon 33954360 33954417 0.000000 - . gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene CDS 33969721 33969724 0.000000 - 0 gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene exon 33969721 33969828 0.000000 - . gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene exon 33971841 33971936 0.000000 - . gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene exon 33981895 33981999 0.000000 - . gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene exon 33997148 33997270 0.000000 - . gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene exon 33999743 33999945 0.000000 - . gene_id "UQCC"; transcript_id "AK022742:uc002xcg.3"; -chr20 hg19_knownGene CDS 33891741 33891872 0.000000 - 0 gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene exon 33890369 33891872 0.000000 - . gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene CDS 33894469 33894582 0.000000 - 0 gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene exon 33894469 33894582 0.000000 - . gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene CDS 33902491 33902568 0.000000 - 0 gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene exon 33902491 33902568 0.000000 - . gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene CDS 33934967 33935075 0.000000 - 1 gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene exon 33934967 33935075 0.000000 - . gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene CDS 33954360 33954417 0.000000 - 2 gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene exon 33954360 33954417 0.000000 - . gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene CDS 33981895 33981964 0.000000 - 0 gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene exon 33981895 33981999 0.000000 - . gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene exon 33999743 33999945 0.000000 - . gene_id "UQCC"; transcript_id "BC008871:uc002xcf.3"; -chr20 hg19_knownGene CDS 33891741 33891872 0.000000 - 0 gene_id "UQCC"; transcript_id "AK293149:uc010zuz.2"; -chr20 hg19_knownGene exon 33890369 33891872 0.000000 - . gene_id "UQCC"; transcript_id "AK293149:uc010zuz.2"; -chr20 hg19_knownGene CDS 33894469 33894582 0.000000 - 0 gene_id "UQCC"; transcript_id "AK293149:uc010zuz.2"; -chr20 hg19_knownGene exon 33894469 33894582 0.000000 - . gene_id "UQCC"; transcript_id "AK293149:uc010zuz.2"; -chr20 hg19_knownGene CDS 33902491 33902568 0.000000 - 0 gene_id "UQCC"; transcript_id "AK293149:uc010zuz.2"; -chr20 hg19_knownGene exon 33902491 33902568 0.000000 - . gene_id "UQCC"; transcript_id "AK293149:uc010zuz.2"; -chr20 hg19_knownGene CDS 33934967 33935074 0.000000 - 0 gene_id "UQCC"; transcript_id "AK293149:uc010zuz.2"; -chr20 hg19_knownGene exon 33934967 33935075 0.000000 - . gene_id "UQCC"; transcript_id "AK293149:uc010zuz.2"; -chr20 hg19_knownGene exon 33999743 33999945 0.000000 - . gene_id "UQCC"; transcript_id "AK293149:uc010zuz.2"; -chr20 hg19_knownGene CDS 33934877 33935075 0.000000 - 1 gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene exon 33931920 33935075 0.000000 - . gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene CDS 33954360 33954417 0.000000 - 2 gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene exon 33954360 33954417 0.000000 - . gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene CDS 33961987 33962059 0.000000 - 0 gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene exon 33961987 33962059 0.000000 - . gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene CDS 33969721 33969828 0.000000 - 0 gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene exon 33969721 33969828 0.000000 - . gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene CDS 33974080 33974192 0.000000 - 2 gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene exon 33974080 33974192 0.000000 - . gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene CDS 33981895 33981964 0.000000 - 0 gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene exon 33981895 33981999 0.000000 - . gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene exon 33999743 33999945 0.000000 - . gene_id "UQCC"; transcript_id "AK308819:uc010gfd.2"; -chr20 hg19_knownGene CDS 34020902 34020961 0.000000 + 0 gene_id "GDF5OS"; transcript_id "BC085019:uc002xcj.3"; -chr20 hg19_knownGene exon 34020827 34020961 0.000000 + . gene_id "GDF5OS"; transcript_id "BC085019:uc002xcj.3"; -chr20 hg19_knownGene CDS 34021650 34022582 0.000000 + 0 gene_id "GDF5OS"; transcript_id "BC085019:uc002xcj.3"; -chr20 hg19_knownGene exon 34021650 34023250 0.000000 + . gene_id "GDF5OS"; transcript_id "BC085019:uc002xcj.3"; -chr20 hg19_knownGene CDS 33897007 33897016 0.000000 - 1 gene_id "GDF5"; transcript_id "EU832171:uc010gfc.1"; -chr20 hg19_knownGene exon 33897002 33897016 0.000000 - . gene_id "GDF5"; transcript_id "EU832171:uc010gfc.1"; -chr20 hg19_knownGene CDS 34021711 34022581 0.000000 - 2 gene_id "GDF5"; transcript_id "EU832171:uc010gfc.1"; -chr20 hg19_knownGene exon 34021711 34022581 0.000000 - . gene_id "GDF5"; transcript_id "EU832171:uc010gfc.1"; -chr20 hg19_knownGene CDS 34025078 34025708 0.000000 - 0 gene_id "GDF5"; transcript_id "EU832171:uc010gfc.1"; -chr20 hg19_knownGene exon 34025078 34025949 0.000000 - . gene_id "GDF5"; transcript_id "EU832171:uc010gfc.1"; -chr20 hg19_knownGene CDS 34021710 34022581 0.000000 - 2 gene_id "GDF5"; transcript_id "NM_000557:uc002xck.1"; -chr20 hg19_knownGene exon 34021149 34022581 0.000000 - . gene_id "GDF5"; transcript_id "NM_000557:uc002xck.1"; -chr20 hg19_knownGene CDS 34025078 34025708 0.000000 - 0 gene_id "GDF5"; transcript_id "NM_000557:uc002xck.1"; -chr20 hg19_knownGene exon 34025078 34026027 0.000000 - . gene_id "GDF5"; transcript_id "NM_000557:uc002xck.1"; -chr20 hg19_knownGene exon 34042996 34043063 0.000000 + . gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene exon 34046125 34046195 0.000000 + . gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene exon 34047803 34047925 0.000000 + . gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene CDS 34050193 34050378 0.000000 + 0 gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene exon 34050090 34050378 0.000000 + . gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene CDS 34051400 34051456 0.000000 + 0 gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene exon 34051400 34051456 0.000000 + . gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene CDS 34053568 34053650 0.000000 + 0 gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene exon 34053568 34053650 0.000000 + . gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene CDS 34053864 34054026 0.000000 + 1 gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene exon 34053864 34054029 0.000000 + . gene_id "CEP250"; transcript_id "AB621828:uc021wcn.1"; -chr20 hg19_knownGene exon 34042996 34043063 0.000000 + . gene_id "CEP250"; transcript_id "AK307861:uc010gfe.1"; -chr20 hg19_knownGene exon 34046125 34046195 0.000000 + . gene_id "CEP250"; transcript_id "AK307861:uc010gfe.1"; -chr20 hg19_knownGene exon 34047803 34047925 0.000000 + . gene_id "CEP250"; transcript_id "AK307861:uc010gfe.1"; -chr20 hg19_knownGene exon 34050090 34050378 0.000000 + . gene_id "CEP250"; transcript_id "AK307861:uc010gfe.1"; -chr20 hg19_knownGene exon 34051400 34051456 0.000000 + . gene_id "CEP250"; transcript_id "AK307861:uc010gfe.1"; -chr20 hg19_knownGene exon 34053568 34053650 0.000000 + . gene_id "CEP250"; transcript_id "AK307861:uc010gfe.1"; -chr20 hg19_knownGene exon 34053859 34054029 0.000000 + . gene_id "CEP250"; transcript_id "AK307861:uc010gfe.1"; -chr20 hg19_knownGene exon 34054791 34054996 0.000000 + . gene_id "CEP250"; transcript_id "AK307861:uc010gfe.1"; -chr20 hg19_knownGene CDS 34054878 34054897 0.000000 + 0 gene_id "CEP250"; transcript_id "BC071869:uc002xco.3"; -chr20 hg19_knownGene exon 34054791 34054897 0.000000 + . gene_id "CEP250"; transcript_id "BC071869:uc002xco.3"; -chr20 hg19_knownGene CDS 34055129 34055380 0.000000 + 1 gene_id "CEP250"; transcript_id "BC071869:uc002xco.3"; -chr20 hg19_knownGene exon 34055129 34055380 0.000000 + . gene_id "CEP250"; transcript_id "BC071869:uc002xco.3"; -chr20 hg19_knownGene CDS 34057715 34057880 0.000000 + 1 gene_id "CEP250"; transcript_id "BC071869:uc002xco.3"; -chr20 hg19_knownGene exon 34057715 34057955 0.000000 + . gene_id "CEP250"; transcript_id "BC071869:uc002xco.3"; -chr20 hg19_knownGene exon 34043223 34043572 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34047803 34047925 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34050090 34050378 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34051400 34051456 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34053568 34053650 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34053864 34054029 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34054791 34054897 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34055129 34055380 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34057715 34057811 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34059875 34059976 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34060498 34060656 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34061199 34061377 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34061695 34061877 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34064274 34064420 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34065696 34065926 0.000000 + . gene_id "CEP250"; transcript_id "AK297572:uc010zvd.2"; -chr20 hg19_knownGene exon 34043223 34043572 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34046125 34046195 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34047803 34047925 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34050193 34050378 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34050090 34050378 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34051400 34051456 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34051400 34051456 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34053568 34053650 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34053568 34053650 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34053864 34054029 0.000000 + 1 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34053864 34054029 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34054791 34054897 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34054791 34054897 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34055129 34055380 0.000000 + 1 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34055129 34055380 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34057715 34057811 0.000000 + 1 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34057715 34057811 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34059875 34059976 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34059875 34059976 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34060498 34060656 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34060498 34060656 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34061199 34061377 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34061199 34061377 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34061695 34061877 0.000000 + 1 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34061695 34061877 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34063327 34063471 0.000000 + 1 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34063327 34063471 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34064274 34064420 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34064274 34064420 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34065696 34065926 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34065696 34065926 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34067056 34067249 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34067056 34067249 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34067471 34067598 0.000000 + 1 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34067471 34067598 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34067801 34067970 0.000000 + 2 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34067801 34067970 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34078463 34078630 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34078463 34078630 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34079038 34079172 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34079038 34079172 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34081256 34081399 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34081256 34081399 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34082351 34082484 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34082351 34082484 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34084406 34084544 0.000000 + 1 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34084406 34084544 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34085548 34085896 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34085548 34085896 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34086424 34086545 0.000000 + 2 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34086424 34086545 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34087878 34087998 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34087878 34087998 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34089672 34089793 0.000000 + 2 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34089672 34089793 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34090218 34092833 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34090218 34092833 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34095567 34095680 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34095567 34095680 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34095864 34096019 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34095864 34096019 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34096772 34096873 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34096772 34096873 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34097827 34097883 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34097827 34097883 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene CDS 34099192 34099452 0.000000 + 0 gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34099192 34099803 0.000000 + . gene_id "CEP250"; transcript_id "NM_007186:uc021wco.1"; -chr20 hg19_knownGene exon 34047803 34047925 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34050090 34050378 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34051400 34051456 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34053568 34053650 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34053864 34054029 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34054791 34054897 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34055129 34055380 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34057715 34057811 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34059875 34059976 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34060498 34060656 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34061199 34061377 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34061695 34061877 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34063327 34063471 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34064274 34064420 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34065729 34065926 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34065693 34065926 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34067056 34067249 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34067056 34067249 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34067471 34067598 0.000000 + 1 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34067471 34067598 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34067801 34067970 0.000000 + 2 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34067801 34067970 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34078463 34078630 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34078463 34078630 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34079038 34079172 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34079038 34079172 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34081256 34081399 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34081256 34081399 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34082351 34082484 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34082351 34082484 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34084406 34084544 0.000000 + 1 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34084406 34084544 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34085548 34085896 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34085548 34085896 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34086424 34086545 0.000000 + 2 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34086424 34086545 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34087878 34087998 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34087878 34087998 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34089672 34089793 0.000000 + 2 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34089672 34089793 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34090218 34092833 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34090218 34092833 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34095567 34095680 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34095567 34095680 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34095864 34096019 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34095864 34096019 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34096772 34096873 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34096772 34096873 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34097827 34097883 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34097827 34097883 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene CDS 34099192 34099452 0.000000 + 0 gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34099192 34099803 0.000000 + . gene_id "CEP250"; transcript_id "BC144706:uc010zve.2"; -chr20 hg19_knownGene exon 34108570 34108971 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34109799 34109918 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34110018 34110066 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34110219 34110417 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34110501 34110688 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34110837 34111219 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34116062 34116113 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34116280 34116373 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34116530 34116708 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34116894 34117253 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34117388 34117481 0.000000 - . gene_id "C20orf173"; transcript_id "NR_026933:uc010gff.3"; -chr20 hg19_knownGene exon 34114799 34115078 0.000000 - . gene_id "C20orf173"; transcript_id "NM_001145350:uc010zvf.1"; -chr20 hg19_knownGene CDS 34116090 34116113 0.000000 - 0 gene_id "C20orf173"; transcript_id "NM_001145350:uc010zvf.1"; -chr20 hg19_knownGene exon 34116062 34116113 0.000000 - . gene_id "C20orf173"; transcript_id "NM_001145350:uc010zvf.1"; -chr20 hg19_knownGene CDS 34116280 34116373 0.000000 - 1 gene_id "C20orf173"; transcript_id "NM_001145350:uc010zvf.1"; -chr20 hg19_knownGene exon 34116280 34116373 0.000000 - . gene_id "C20orf173"; transcript_id "NM_001145350:uc010zvf.1"; -chr20 hg19_knownGene CDS 34116530 34116708 0.000000 - 0 gene_id "C20orf173"; transcript_id "NM_001145350:uc010zvf.1"; -chr20 hg19_knownGene exon 34116530 34116708 0.000000 - . gene_id "C20orf173"; transcript_id "NM_001145350:uc010zvf.1"; -chr20 hg19_knownGene CDS 34116894 34117202 0.000000 - 0 gene_id "C20orf173"; transcript_id "NM_001145350:uc010zvf.1"; -chr20 hg19_knownGene exon 34116894 34117253 0.000000 - . gene_id "C20orf173"; transcript_id "NM_001145350:uc010zvf.1"; -chr20 hg19_knownGene exon 34117388 34117481 0.000000 - . gene_id "C20orf173"; transcript_id "NM_001145350:uc010zvf.1"; -chr20 hg19_knownGene exon 34114799 34115078 0.000000 - . gene_id "C20orf173"; transcript_id "AK058089:uc002xcp.2"; -chr20 hg19_knownGene CDS 34116090 34116113 0.000000 - 0 gene_id "C20orf173"; transcript_id "AK058089:uc002xcp.2"; -chr20 hg19_knownGene exon 34116062 34116113 0.000000 - . gene_id "C20orf173"; transcript_id "AK058089:uc002xcp.2"; -chr20 hg19_knownGene CDS 34116280 34116373 0.000000 - 1 gene_id "C20orf173"; transcript_id "AK058089:uc002xcp.2"; -chr20 hg19_knownGene exon 34116280 34116373 0.000000 - . gene_id "C20orf173"; transcript_id "AK058089:uc002xcp.2"; -chr20 hg19_knownGene CDS 34116530 34116858 0.000000 - 0 gene_id "C20orf173"; transcript_id "AK058089:uc002xcp.2"; -chr20 hg19_knownGene exon 34116530 34117076 0.000000 - . gene_id "C20orf173"; transcript_id "AK058089:uc002xcp.2"; -chr20 hg19_knownGene exon 34117388 34117481 0.000000 - . gene_id "C20orf173"; transcript_id "AK058089:uc002xcp.2"; -chr20 hg19_knownGene CDS 34129847 34129934 0.000000 + 0 gene_id "ERGIC3"; transcript_id "AK096484:uc002xcq.1"; -chr20 hg19_knownGene exon 34129778 34129934 0.000000 + . gene_id "ERGIC3"; transcript_id "AK096484:uc002xcq.1"; -chr20 hg19_knownGene CDS 34130072 34130142 0.000000 + 2 gene_id "ERGIC3"; transcript_id "AK096484:uc002xcq.1"; -chr20 hg19_knownGene exon 34130072 34130142 0.000000 + . gene_id "ERGIC3"; transcript_id "AK096484:uc002xcq.1"; -chr20 hg19_knownGene CDS 34130262 34130349 0.000000 + 0 gene_id "ERGIC3"; transcript_id "AK096484:uc002xcq.1"; -chr20 hg19_knownGene exon 34130262 34130349 0.000000 + . gene_id "ERGIC3"; transcript_id "AK096484:uc002xcq.1"; -chr20 hg19_knownGene CDS 34130571 34130758 0.000000 + 2 gene_id "ERGIC3"; transcript_id "AK096484:uc002xcq.1"; -chr20 hg19_knownGene exon 34130571 34133155 0.000000 + . gene_id "ERGIC3"; transcript_id "AK096484:uc002xcq.1"; -chr20 hg19_knownGene CDS 34129847 34129934 0.000000 + 0 gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene exon 34129778 34129934 0.000000 + . gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene CDS 34130072 34130142 0.000000 + 2 gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene exon 34130072 34130142 0.000000 + . gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene CDS 34130262 34130349 0.000000 + 0 gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene exon 34130262 34130349 0.000000 + . gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene CDS 34130571 34130690 0.000000 + 2 gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene exon 34130571 34130690 0.000000 + . gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene CDS 34135163 34135256 0.000000 + 2 gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene exon 34135163 34135256 0.000000 + . gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene CDS 34136262 34136427 0.000000 + 1 gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene exon 34136262 34136427 0.000000 + . gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene CDS 34136561 34136623 0.000000 + 0 gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene exon 34136561 34137537 0.000000 + . gene_id "ERGIC3"; transcript_id "AF308298:uc002xcr.1"; -chr20 hg19_knownGene CDS 34129847 34129934 0.000000 + 0 gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene exon 34129778 34129934 0.000000 + . gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene CDS 34130072 34130142 0.000000 + 2 gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene exon 34130072 34130142 0.000000 + . gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene CDS 34130262 34130349 0.000000 + 0 gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene exon 34130262 34130349 0.000000 + . gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene CDS 34130571 34130690 0.000000 + 2 gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene exon 34130571 34130690 0.000000 + . gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene CDS 34135163 34135256 0.000000 + 2 gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene exon 34135163 34135256 0.000000 + . gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene CDS 34136262 34136427 0.000000 + 1 gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene exon 34136262 34136427 0.000000 + . gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene CDS 34136561 34136618 0.000000 + 0 gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene exon 34136561 34136618 0.000000 + . gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene CDS 34142815 34142846 0.000000 + 2 gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene exon 34142815 34142846 0.000000 + . gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene CDS 34143804 34143900 0.000000 + 0 gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene exon 34143804 34143900 0.000000 + . gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene CDS 34143978 34144126 0.000000 + 2 gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene exon 34143978 34144209 0.000000 + . gene_id "ERGIC3"; transcript_id "AK300916:uc010zvg.2"; -chr20 hg19_knownGene CDS 34129847 34129934 0.000000 + 0 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34129778 34129934 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34130072 34130142 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34130072 34130142 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34130262 34130349 0.000000 + 0 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34130262 34130349 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34130571 34130690 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34130571 34130690 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34135163 34135256 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34135163 34135256 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34136262 34136427 0.000000 + 1 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34136262 34136427 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34136561 34136618 0.000000 + 0 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34136561 34136618 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34142143 34142157 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34142143 34142157 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34142815 34142846 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34142815 34142846 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34143804 34143900 0.000000 + 0 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34143804 34143900 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34143978 34144042 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34143978 34144042 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34144744 34144880 0.000000 + 0 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34144744 34144880 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34144965 34145020 0.000000 + 1 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34144965 34145020 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34145196 34145272 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene exon 34145196 34145405 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_198398:uc002xcs.3"; -chr20 hg19_knownGene CDS 34129847 34129934 0.000000 + 0 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34129778 34129934 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34130072 34130142 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34130072 34130142 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34130262 34130349 0.000000 + 0 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34130262 34130349 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34130571 34130690 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34130571 34130690 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34135163 34135256 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34135163 34135256 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34136262 34136427 0.000000 + 1 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34136262 34136427 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34136561 34136618 0.000000 + 0 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34136561 34136618 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34142815 34142846 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34142815 34142846 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34143804 34143900 0.000000 + 0 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34143804 34143900 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34143978 34144042 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34143978 34144042 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34144744 34144880 0.000000 + 0 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34144744 34144880 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34144965 34145020 0.000000 + 1 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34144965 34145020 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34145196 34145272 0.000000 + 2 gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene exon 34145196 34145405 0.000000 + . gene_id "ERGIC3"; transcript_id "NM_015966:uc002xct.3"; -chr20 hg19_knownGene CDS 34146639 34146822 0.000000 - 1 gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene exon 34146507 34146822 0.000000 - . gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene CDS 34146926 34147026 0.000000 - 0 gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene exon 34146926 34147026 0.000000 - . gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene CDS 34147111 34147394 0.000000 - 2 gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene exon 34147111 34147394 0.000000 - . gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene CDS 34147890 34148131 0.000000 - 1 gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene exon 34147890 34148131 0.000000 - . gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene CDS 34148307 34148405 0.000000 - 1 gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene exon 34148307 34148405 0.000000 - . gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene CDS 34149619 34149692 0.000000 - 0 gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene exon 34149619 34149704 0.000000 - . gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene exon 34151622 34152834 0.000000 - . gene_id "FER1L4"; transcript_id "AF218012:uc002xcx.3"; -chr20 hg19_knownGene CDS 34152633 34152834 0.000000 - 1 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34151622 34152834 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34153016 34153143 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34153016 34153143 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34164089 34164205 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34164089 34164205 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34164303 34164440 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34164303 34164440 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34164518 34164618 0.000000 - 2 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34164518 34164618 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34164708 34164750 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34164708 34164750 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34166758 34166889 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34166758 34166889 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34166978 34167036 0.000000 - 2 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34166978 34167036 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34167180 34167414 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34167180 34167414 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34169961 34170122 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34169961 34170122 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34170217 34170333 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34170217 34170333 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34170761 34170934 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34170761 34170934 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34171050 34171184 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34171050 34171184 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34171608 34171732 0.000000 - 2 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34171608 34171732 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34171862 34172015 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34171862 34172015 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene CDS 34173046 34173165 0.000000 - 0 gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34173046 34173198 0.000000 - . gene_id "FER1L4"; transcript_id "AY461812:uc010gfg.1"; -chr20 hg19_knownGene exon 34188485 34188846 0.000000 - . gene_id "FER1L4"; transcript_id "AK026266:uc010zvh.1"; -chr20 hg19_knownGene exon 34189454 34189640 0.000000 - . gene_id "FER1L4"; transcript_id "AK026266:uc010zvh.1"; -chr20 hg19_knownGene exon 34189728 34190673 0.000000 - . gene_id "FER1L4"; transcript_id "AK026266:uc010zvh.1"; -chr20 hg19_knownGene exon 34190932 34191063 0.000000 - . gene_id "FER1L4"; transcript_id "AK026266:uc010zvh.1"; -chr20 hg19_knownGene exon 34191181 34191241 0.000000 - . gene_id "FER1L4"; transcript_id "AK026266:uc010zvh.1"; -chr20 hg19_knownGene exon 34191719 34191889 0.000000 - . gene_id "FER1L4"; transcript_id "AK026266:uc010zvh.1"; -chr20 hg19_knownGene exon 34192226 34192267 0.000000 - . gene_id "FER1L4"; transcript_id "AK026266:uc010zvh.1"; -chr20 hg19_knownGene exon 34192452 34192543 0.000000 - . gene_id "FER1L4"; transcript_id "AK026266:uc010zvh.1"; -chr20 hg19_knownGene exon 34193024 34193248 0.000000 - . gene_id "FER1L4"; transcript_id "AK026266:uc010zvh.1"; -chr20 hg19_knownGene exon 34146507 34146822 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34146926 34147026 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34147111 34147394 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34147930 34148131 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34148307 34148405 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34149619 34149704 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34151622 34152834 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34153016 34153143 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34164089 34164205 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34164303 34164440 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34164518 34164618 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34164708 34164750 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34166758 34166889 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34166978 34167036 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34167180 34167378 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34169961 34170122 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34170217 34170333 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34171050 34171184 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34171862 34172015 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34173046 34173198 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34183399 34183515 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34183589 34183676 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34186936 34187036 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34187488 34187608 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34187695 34187866 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34188035 34188143 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34188485 34188846 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34189454 34189640 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34189728 34189911 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34190029 34190188 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34190445 34190529 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34190611 34190673 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34190932 34191063 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34191181 34191241 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34191719 34191889 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34192226 34192267 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34192452 34192543 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34194044 34194143 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34194240 34194328 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34195023 34195078 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene exon 34195337 34195484 0.000000 - . gene_id "FER1L4"; transcript_id "NR_024377:uc002xcy.4"; -chr20 hg19_knownGene CDS 34203926 34204229 0.000000 + 0 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34203809 34204229 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34205058 34205162 0.000000 + 2 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34205058 34205162 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34205442 34205508 0.000000 + 2 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34205442 34205508 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34205701 34205762 0.000000 + 1 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34205701 34205762 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34206009 34206052 0.000000 + 2 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34206009 34206052 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34206372 34206397 0.000000 + 0 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34206372 34206397 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34206534 34206642 0.000000 + 1 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34206534 34206642 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34206845 34206920 0.000000 + 0 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34206845 34206920 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34207117 34207232 0.000000 + 2 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34207117 34207232 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34207501 34207668 0.000000 + 0 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34207501 34207668 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34208606 34208695 0.000000 + 0 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34208606 34208695 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34208798 34208941 0.000000 + 0 gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene exon 34208798 34208965 0.000000 + . gene_id "SPAG4"; transcript_id "NM_003116:uc002xdb.1"; -chr20 hg19_knownGene CDS 34204138 34204210 0.000000 + 0 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34203885 34204210 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34205058 34205162 0.000000 + 2 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34205058 34205162 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34205442 34205508 0.000000 + 2 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34205442 34205508 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34205701 34205762 0.000000 + 1 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34205701 34205762 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34206009 34206052 0.000000 + 2 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34206009 34206052 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34206372 34206397 0.000000 + 0 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34206372 34206397 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34206534 34206642 0.000000 + 1 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34206534 34206642 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34206845 34206920 0.000000 + 0 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34206845 34206920 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34207117 34207232 0.000000 + 2 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34207117 34207232 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34207501 34207668 0.000000 + 0 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34207501 34207668 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34208606 34208695 0.000000 + 0 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34208606 34208695 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene CDS 34208798 34208941 0.000000 + 0 gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34208798 34208965 0.000000 + . gene_id "SPAG4"; transcript_id "BC143783:uc010zvi.1"; -chr20 hg19_knownGene exon 34231065 34231384 0.000000 + . gene_id "7SK"; transcript_id ":uc021wcp.1"; -chr20 hg19_knownGene CDS 34214166 34214303 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34213953 34214303 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34214489 34214725 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34214489 34214725 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34215202 34215335 0.000000 - 2 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34215202 34215335 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34218361 34218412 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34218361 34218412 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34218663 34218717 0.000000 - 1 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34218663 34218717 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34218823 34218956 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34218823 34218956 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34219036 34219095 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34219036 34219095 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34219190 34219276 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34219190 34219276 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34219414 34219500 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34219414 34219500 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34219610 34219699 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34219610 34219699 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34219867 34219947 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34219867 34219947 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34220085 34220156 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34220085 34220156 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34220233 34220307 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34220439 34220618 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34220717 34220845 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34220717 34220845 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34241450 34241464 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene exon 34241450 34241831 0.000000 - . gene_id "CPNE1"; transcript_id "NM_003915:uc010zvj.2"; -chr20 hg19_knownGene CDS 34240449 34243244 0.000000 - 0 gene_id "RBM12"; transcript_id "CCDS13261:uc021wcr.1"; -chr20 hg19_knownGene exon 34240446 34243244 0.000000 - . gene_id "RBM12"; transcript_id "CCDS13261:uc021wcr.1"; -chr20 hg19_knownGene CDS 34214166 34214303 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34213953 34214303 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34214489 34214725 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34214489 34214725 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34215202 34215335 0.000000 - 2 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34215202 34215335 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34218361 34218412 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34218361 34218412 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34218663 34218717 0.000000 - 1 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34218663 34218717 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34218823 34218956 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34218823 34218956 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34219036 34219095 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34219036 34219095 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34219190 34219276 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34219190 34219276 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34219414 34219500 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34219414 34219500 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34219610 34219699 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34219610 34219699 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34219867 34219947 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34219867 34219947 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34220233 34220307 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34220439 34220618 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34220717 34220845 0.000000 - 0 gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34220717 34220845 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34243124 34243266 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene exon 34246852 34246904 0.000000 - . gene_id "CPNE1"; transcript_id "AB209827:uc002xde.3"; -chr20 hg19_knownGene CDS 34214166 34214303 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34213953 34214303 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34214489 34214725 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34214489 34214725 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34215202 34215335 0.000000 - 2 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34215202 34215335 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34218361 34218412 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34218361 34218412 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34218663 34218717 0.000000 - 1 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34218663 34218717 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34218823 34218956 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34218823 34218956 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34219036 34219095 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34219036 34219095 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34219190 34219276 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34219190 34219276 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34219414 34219500 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34219414 34219500 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34219610 34219699 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34219610 34219699 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34219867 34219947 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34219867 34219947 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34220085 34220156 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34220085 34220156 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34220233 34220307 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34220439 34220618 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34220717 34220845 0.000000 - 0 gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34220717 34220845 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34243124 34243266 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34246852 34246904 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene exon 34252682 34252878 0.000000 - . gene_id "CPNE1"; transcript_id "NR_037188:uc002xdf.3"; -chr20 hg19_knownGene CDS 34214166 34214303 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34213953 34214303 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34214489 34214725 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34214489 34214725 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34215202 34215335 0.000000 - 2 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34215202 34215335 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34218361 34218412 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34218361 34218412 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34218663 34218717 0.000000 - 1 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34218663 34218717 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34218823 34218956 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34218823 34218956 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34219036 34219095 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34219036 34219095 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34219190 34219276 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34219190 34219276 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34219414 34219500 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34219414 34219500 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34219610 34219699 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34219610 34219699 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34219867 34219947 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34219867 34219947 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34220085 34220156 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34220085 34220156 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34220233 34220307 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34220439 34220618 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34220717 34220845 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34220717 34220845 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34246852 34246904 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene exon 34252682 34252878 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152928:uc002xdi.3"; -chr20 hg19_knownGene CDS 34214166 34214303 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34213953 34214303 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34214489 34214725 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34214489 34214725 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34215202 34215335 0.000000 - 2 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34215202 34215335 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34218361 34218412 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34218361 34218412 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34218663 34218717 0.000000 - 1 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34218663 34218717 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34218823 34218956 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34218823 34218956 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34219036 34219095 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34219036 34219095 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34219190 34219276 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34219190 34219276 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34219414 34219500 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34219414 34219500 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34219610 34219699 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34219610 34219699 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34219867 34219947 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34219867 34219947 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34220085 34220156 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34220085 34220156 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34220233 34220307 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34220439 34220618 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34220717 34220845 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34220717 34220845 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34246852 34246936 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene exon 34252682 34252878 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152927:uc002xdj.3"; -chr20 hg19_knownGene CDS 34214166 34214303 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34213953 34214303 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34214489 34214725 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34214489 34214725 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34215202 34215335 0.000000 - 2 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34215202 34215335 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34218361 34218412 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34218361 34218412 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34218663 34218717 0.000000 - 1 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34218663 34218717 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34218823 34218956 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34218823 34218956 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34219036 34219095 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34219036 34219095 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34219190 34219276 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34219190 34219276 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34219414 34219500 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34219414 34219500 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34219610 34219699 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34219610 34219699 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34219867 34219947 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34219867 34219947 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34220085 34220156 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34220085 34220156 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34220233 34220307 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34220439 34220618 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34220717 34220845 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34220717 34220845 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene exon 34252682 34252878 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152925:uc002xdl.3"; -chr20 hg19_knownGene CDS 34214166 34214303 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34213953 34214303 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34214489 34214725 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34214489 34214725 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34215202 34215335 0.000000 - 2 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34215202 34215335 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34218361 34218412 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34218361 34218412 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34218663 34218717 0.000000 - 1 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34218663 34218717 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34218823 34218956 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34218823 34218956 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34219036 34219095 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34219036 34219095 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34219190 34219276 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34219190 34219276 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34219414 34219500 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34219414 34219500 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34219610 34219699 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34219610 34219699 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34219867 34219947 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34219867 34219947 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34220085 34220156 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34220085 34220156 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34220233 34220307 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34220439 34220618 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34220717 34220845 0.000000 - 0 gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34220717 34220845 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene exon 34252724 34252878 0.000000 - . gene_id "CPNE1"; transcript_id "NM_152926:uc002xdm.3"; -chr20 hg19_knownGene CDS 34218913 34219095 0.000000 - 0 gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene exon 34218443 34219095 0.000000 - . gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene CDS 34219190 34219276 0.000000 - 0 gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene exon 34219190 34219276 0.000000 - . gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene CDS 34219414 34219500 0.000000 - 0 gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene exon 34219414 34219500 0.000000 - . gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene CDS 34219610 34219699 0.000000 - 0 gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene exon 34219610 34219699 0.000000 - . gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene CDS 34219867 34219947 0.000000 - 0 gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene exon 34219867 34219947 0.000000 - . gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene CDS 34220085 34220156 0.000000 - 0 gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene exon 34220085 34220156 0.000000 - . gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene CDS 34220233 34220307 0.000000 - 0 gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene CDS 34220439 34220618 0.000000 - 0 gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene CDS 34220717 34220845 0.000000 - 0 gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene exon 34220717 34220845 0.000000 - . gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene exon 34252682 34252878 0.000000 - . gene_id "CPNE1"; transcript_id "AK308795:uc010gfk.2"; -chr20 hg19_knownGene CDS 34240449 34243244 0.000000 - 0 gene_id "RBM12"; transcript_id "NM_152838:uc002xdq.3"; -chr20 hg19_knownGene exon 34236847 34243266 0.000000 - . gene_id "RBM12"; transcript_id "NM_152838:uc002xdq.3"; -chr20 hg19_knownGene exon 34246852 34246904 0.000000 - . gene_id "RBM12"; transcript_id "NM_152838:uc002xdq.3"; -chr20 hg19_knownGene exon 34252682 34252878 0.000000 - . gene_id "RBM12"; transcript_id "NM_152838:uc002xdq.3"; -chr20 hg19_knownGene CDS 34240449 34243244 0.000000 - 0 gene_id "RBM12"; transcript_id "NM_001198840:uc002xds.3"; -chr20 hg19_knownGene exon 34236847 34243266 0.000000 - . gene_id "RBM12"; transcript_id "NM_001198840:uc002xds.3"; -chr20 hg19_knownGene exon 34252682 34252878 0.000000 - . gene_id "RBM12"; transcript_id "NM_001198840:uc002xds.3"; -chr20 hg19_knownGene CDS 34240449 34243244 0.000000 - 0 gene_id "RBM12"; transcript_id "NM_006047:uc002xdr.3"; -chr20 hg19_knownGene exon 34236847 34243266 0.000000 - . gene_id "RBM12"; transcript_id "NM_006047:uc002xdr.3"; -chr20 hg19_knownGene exon 34246852 34246936 0.000000 - . gene_id "RBM12"; transcript_id "NM_006047:uc002xdr.3"; -chr20 hg19_knownGene exon 34252682 34252878 0.000000 - . gene_id "RBM12"; transcript_id "NM_006047:uc002xdr.3"; -chr20 hg19_knownGene CDS 34240449 34243244 0.000000 - 0 gene_id "RBM12"; transcript_id "NM_001198838:uc021wcq.1"; -chr20 hg19_knownGene exon 34236847 34243266 0.000000 - . gene_id "RBM12"; transcript_id "NM_001198838:uc021wcq.1"; -chr20 hg19_knownGene exon 34246852 34246936 0.000000 - . gene_id "RBM12"; transcript_id "NM_001198838:uc021wcq.1"; -chr20 hg19_knownGene exon 34252724 34252878 0.000000 - . gene_id "RBM12"; transcript_id "NM_001198838:uc021wcq.1"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655946:uc002xdn.1"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655946:uc002xdn.1"; -chr20 hg19_knownGene exon 34243124 34243266 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655946:uc002xdn.1"; -chr20 hg19_knownGene exon 34246852 34246936 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655946:uc002xdn.1"; -chr20 hg19_knownGene exon 34260677 34260766 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655946:uc002xdn.1"; -chr20 hg19_knownGene exon 34261523 34261538 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655946:uc002xdn.1"; -chr20 hg19_knownGene exon 34262272 34262353 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655946:uc002xdn.1"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655944:uc002xdo.1"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655944:uc002xdo.1"; -chr20 hg19_knownGene exon 34243124 34243266 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655944:uc002xdo.1"; -chr20 hg19_knownGene exon 34246852 34246936 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655944:uc002xdo.1"; -chr20 hg19_knownGene exon 34260677 34260766 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655944:uc002xdo.1"; -chr20 hg19_knownGene exon 34261523 34261606 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655944:uc002xdo.1"; -chr20 hg19_knownGene exon 34262272 34262353 0.000000 - . gene_id "CPNE1"; transcript_id "DQ655944:uc002xdo.1"; -chr20 hg19_knownGene exon 34220233 34220307 0.000000 - . gene_id "CPNE1"; transcript_id "DQ656050:uc002xdp.1"; -chr20 hg19_knownGene exon 34220439 34220618 0.000000 - . gene_id "CPNE1"; transcript_id "DQ656050:uc002xdp.1"; -chr20 hg19_knownGene exon 34220717 34220845 0.000000 - . gene_id "CPNE1"; transcript_id "DQ656050:uc002xdp.1"; -chr20 hg19_knownGene exon 34243124 34243266 0.000000 - . gene_id "CPNE1"; transcript_id "DQ656050:uc002xdp.1"; -chr20 hg19_knownGene exon 34246852 34246936 0.000000 - . gene_id "CPNE1"; transcript_id "DQ656050:uc002xdp.1"; -chr20 hg19_knownGene exon 34260677 34260766 0.000000 - . gene_id "CPNE1"; transcript_id "DQ656050:uc002xdp.1"; -chr20 hg19_knownGene exon 34261523 34261606 0.000000 - . gene_id "CPNE1"; transcript_id "DQ656050:uc002xdp.1"; -chr20 hg19_knownGene exon 34262272 34262353 0.000000 - . gene_id "CPNE1"; transcript_id "DQ656050:uc002xdp.1"; -chr20 hg19_knownGene exon 34262434 34262539 0.000000 - . gene_id "CPNE1"; transcript_id "DQ656050:uc002xdp.1"; -chr20 hg19_knownGene CDS 34257547 34257607 0.000000 - 1 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34256610 34257607 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34260677 34260766 0.000000 - 1 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34260677 34260766 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34261523 34261606 0.000000 - 1 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34261523 34261606 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34262272 34262353 0.000000 - 2 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34262272 34262353 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34262434 34262539 0.000000 - 0 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34262434 34262539 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34262967 34263124 0.000000 - 2 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34262967 34263124 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34268659 34268793 0.000000 - 2 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34268659 34268793 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34269810 34269903 0.000000 - 0 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34269810 34269903 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34278335 34278487 0.000000 - 0 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34278335 34278487 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34284299 34284382 0.000000 - 0 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34284299 34284382 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34285606 34285722 0.000000 - 0 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34285606 34285722 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34286403 34286429 0.000000 - 0 gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34286403 34286512 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene exon 34286667 34287111 0.000000 - . gene_id "NFS1"; transcript_id "AK056242:uc002xdt.2"; -chr20 hg19_knownGene CDS 34257547 34257607 0.000000 - 1 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34256610 34257607 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34260677 34260766 0.000000 - 1 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34260677 34260766 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34261523 34261606 0.000000 - 1 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34261523 34261606 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34262272 34262353 0.000000 - 2 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34262272 34262353 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34262434 34262539 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34262434 34262539 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34262967 34263124 0.000000 - 2 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34262967 34263124 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34268659 34268793 0.000000 - 2 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34268659 34268793 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34269810 34269903 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34269810 34269903 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34284299 34284382 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34284299 34284382 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34285606 34285722 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34285606 34285722 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34286403 34286512 0.000000 - 2 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34286403 34286512 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34287114 34287210 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene exon 34287114 34287287 0.000000 - . gene_id "NFS1"; transcript_id "NM_001198989:uc010zvl.2"; -chr20 hg19_knownGene CDS 34257547 34257607 0.000000 - 1 gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34256610 34257607 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene CDS 34260677 34260766 0.000000 - 1 gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34260677 34260766 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene CDS 34261523 34261606 0.000000 - 1 gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34261523 34261606 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene CDS 34262272 34262353 0.000000 - 2 gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34262272 34262353 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene CDS 34262434 34262539 0.000000 - 0 gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34262434 34262539 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene CDS 34262967 34263124 0.000000 - 2 gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34262967 34263124 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene CDS 34268659 34268793 0.000000 - 2 gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34268659 34268793 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene CDS 34269810 34269858 0.000000 - 0 gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34269810 34269903 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34278335 34278487 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34280171 34280292 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34284299 34284382 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34285606 34285722 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34286403 34286512 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene exon 34287114 34287287 0.000000 - . gene_id "NFS1"; transcript_id "NR_037570:uc010zvk.2"; -chr20 hg19_knownGene CDS 34257547 34257607 0.000000 - 1 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34256610 34257607 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34260677 34260766 0.000000 - 1 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34260677 34260766 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34261523 34261606 0.000000 - 1 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34261523 34261606 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34262272 34262353 0.000000 - 2 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34262272 34262353 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34262434 34262539 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34262434 34262539 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34262967 34263124 0.000000 - 2 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34262967 34263124 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34268659 34268793 0.000000 - 2 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34268659 34268793 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34269810 34269903 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34269810 34269903 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34278335 34278487 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34278335 34278487 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34284299 34284382 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34284299 34284382 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34285606 34285722 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34285606 34285722 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34286403 34286512 0.000000 - 2 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34286403 34286512 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34287114 34287210 0.000000 - 0 gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene exon 34287114 34287287 0.000000 - . gene_id "NFS1"; transcript_id "NM_021100:uc002xdw.2"; -chr20 hg19_knownGene CDS 34282649 34282807 0.000000 - 0 gene_id "NFS1"; transcript_id "JF432612:uc002xdx.3"; -chr20 hg19_knownGene exon 34282501 34282807 0.000000 - . gene_id "NFS1"; transcript_id "JF432612:uc002xdx.3"; -chr20 hg19_knownGene CDS 34284299 34284382 0.000000 - 0 gene_id "NFS1"; transcript_id "JF432612:uc002xdx.3"; -chr20 hg19_knownGene exon 34284299 34284382 0.000000 - . gene_id "NFS1"; transcript_id "JF432612:uc002xdx.3"; -chr20 hg19_knownGene CDS 34285606 34285722 0.000000 - 0 gene_id "NFS1"; transcript_id "JF432612:uc002xdx.3"; -chr20 hg19_knownGene exon 34285606 34285722 0.000000 - . gene_id "NFS1"; transcript_id "JF432612:uc002xdx.3"; -chr20 hg19_knownGene CDS 34286403 34286512 0.000000 - 2 gene_id "NFS1"; transcript_id "JF432612:uc002xdx.3"; -chr20 hg19_knownGene exon 34286403 34286512 0.000000 - . gene_id "NFS1"; transcript_id "JF432612:uc002xdx.3"; -chr20 hg19_knownGene CDS 34287114 34287210 0.000000 - 0 gene_id "NFS1"; transcript_id "JF432612:uc002xdx.3"; -chr20 hg19_knownGene exon 34287114 34287287 0.000000 - . gene_id "NFS1"; transcript_id "JF432612:uc002xdx.3"; -chr20 hg19_knownGene exon 34287232 34287378 0.000000 + . gene_id "ROMO1"; transcript_id "NM_080748:uc002xdy.3"; -chr20 hg19_knownGene CDS 34287555 34287685 0.000000 + 0 gene_id "ROMO1"; transcript_id "NM_080748:uc002xdy.3"; -chr20 hg19_knownGene exon 34287555 34287685 0.000000 + . gene_id "ROMO1"; transcript_id "NM_080748:uc002xdy.3"; -chr20 hg19_knownGene CDS 34288720 34288825 0.000000 + 1 gene_id "ROMO1"; transcript_id "NM_080748:uc002xdy.3"; -chr20 hg19_knownGene exon 34288720 34288902 0.000000 + . gene_id "ROMO1"; transcript_id "NM_080748:uc002xdy.3"; -chr20 hg19_knownGene exon 34287328 34287373 0.000000 + . gene_id "ROMO1"; transcript_id "AM397244:uc010gfm.3"; -chr20 hg19_knownGene CDS 34287555 34287685 0.000000 + 0 gene_id "ROMO1"; transcript_id "AM397244:uc010gfm.3"; -chr20 hg19_knownGene exon 34287555 34287685 0.000000 + . gene_id "ROMO1"; transcript_id "AM397244:uc010gfm.3"; -chr20 hg19_knownGene CDS 34288720 34288825 0.000000 + 1 gene_id "ROMO1"; transcript_id "AM397244:uc010gfm.3"; -chr20 hg19_knownGene exon 34288720 34288902 0.000000 + . gene_id "ROMO1"; transcript_id "AM397244:uc010gfm.3"; -chr20 hg19_knownGene CDS 34292406 34292503 0.000000 - 2 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34291531 34292503 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34292590 34292668 0.000000 - 0 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34292590 34292668 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34293147 34293252 0.000000 - 1 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34293147 34293252 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34295042 34295123 0.000000 - 2 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34295042 34295123 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34297146 34297196 0.000000 - 2 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34297146 34297196 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34300941 34301018 0.000000 - 2 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34300941 34301018 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34302107 34302311 0.000000 - 0 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34302107 34302311 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34304662 34304727 0.000000 - 0 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34304662 34304727 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34309662 34309799 0.000000 - 0 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34309662 34309799 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34312492 34312644 0.000000 - 0 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34312492 34312644 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34312960 34313077 0.000000 - 1 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34312960 34313077 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34317234 34317287 0.000000 - 1 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34317234 34317287 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34317384 34317449 0.000000 - 1 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34317384 34317449 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34319863 34320086 0.000000 - 0 gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene exon 34319863 34320728 0.000000 - . gene_id "RBM39"; transcript_id "AK126158:uc002xdz.3"; -chr20 hg19_knownGene CDS 34292406 34292503 0.000000 - 2 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34291531 34292503 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34292590 34292668 0.000000 - 0 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34292590 34292668 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34293147 34293252 0.000000 - 1 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34293147 34293252 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34295042 34295123 0.000000 - 2 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34295042 34295123 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34297146 34297196 0.000000 - 2 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34297146 34297196 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34300941 34301018 0.000000 - 2 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34300941 34301018 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34302107 34302311 0.000000 - 0 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34302107 34302311 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34304662 34304727 0.000000 - 0 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34304662 34304727 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34309662 34309799 0.000000 - 0 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34309662 34309799 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34312492 34312644 0.000000 - 0 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34312492 34312644 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34312960 34313022 0.000000 - 0 gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34312960 34313077 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34317234 34317287 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34317384 34317449 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34319863 34320057 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34326890 34328809 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34329863 34329914 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene exon 34329958 34330158 0.000000 - . gene_id "RBM39"; transcript_id "CR749443:uc010gfn.3"; -chr20 hg19_knownGene CDS 34292406 34292503 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34291531 34292503 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34292590 34292668 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34292590 34292668 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34293147 34293252 0.000000 - 1 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34293147 34293252 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34295042 34295123 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34295042 34295123 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34297146 34297196 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34297146 34297196 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34300941 34301018 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34300941 34301018 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34302107 34302311 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34302107 34302311 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34304662 34304727 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34304662 34304727 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34309662 34309799 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34309662 34309799 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34312492 34312644 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34312492 34312644 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34312960 34313022 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34312960 34313077 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34317234 34317287 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34317384 34317449 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34319863 34320057 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34322108 34322179 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34326890 34326939 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34328746 34328809 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene exon 34329863 34330258 0.000000 - . gene_id "RBM39"; transcript_id "NR_040723:uc002xee.3"; -chr20 hg19_knownGene CDS 34292406 34292503 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34291531 34292503 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34292590 34292668 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34292590 34292668 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34293147 34293252 0.000000 - 1 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34293147 34293252 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34295042 34295123 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34295042 34295123 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34297146 34297178 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34297146 34297178 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34300941 34301018 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34300941 34301018 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34302107 34302311 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34302107 34302311 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34304662 34304727 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34304662 34304727 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34309662 34309799 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34309662 34309799 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34312492 34312644 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34312492 34312644 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34312960 34313022 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34312960 34313077 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34317234 34317287 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34317384 34317449 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34319863 34320057 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34326890 34326939 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34328447 34328519 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34328746 34328809 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene exon 34329863 34330258 0.000000 - . gene_id "RBM39"; transcript_id "NR_040724:uc002xef.3"; -chr20 hg19_knownGene CDS 34292406 34292503 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34291531 34292503 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34292590 34292668 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34292590 34292668 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34293147 34293252 0.000000 - 1 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34293147 34293252 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34295042 34295123 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34295042 34295123 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34297146 34297196 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34297146 34297196 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34300941 34301018 0.000000 - 2 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34300941 34301018 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34302107 34302311 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34302107 34302311 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34304662 34304727 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34304662 34304727 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34309662 34309799 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34309662 34309799 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34312492 34312644 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34312492 34312644 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34312960 34313022 0.000000 - 0 gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34312960 34313077 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34317234 34317287 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34317384 34317449 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34319863 34320057 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34326890 34326939 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34328447 34328519 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34328746 34328809 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene exon 34329863 34330258 0.000000 - . gene_id "RBM39"; transcript_id "NR_040722:uc010zvn.2"; -chr20 hg19_knownGene CDS 34292406 34292503 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34291531 34292503 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34292590 34292668 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34292590 34292668 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34293147 34293252 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34293147 34293252 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34295042 34295123 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34295042 34295123 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34297146 34297196 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34297146 34297196 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34300941 34301018 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34300941 34301018 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34302107 34302311 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34302107 34302311 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34304662 34304727 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34304662 34304727 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34309662 34309799 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34309662 34309799 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34312492 34312644 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34312492 34312644 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34312960 34313077 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34312960 34313077 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34317234 34317287 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34317234 34317287 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34317384 34317449 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34317384 34317449 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34319863 34320057 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34319863 34320057 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34326890 34326939 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34326890 34326939 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34328746 34328796 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34328746 34328809 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene exon 34329863 34330258 0.000000 - . gene_id "RBM39"; transcript_id "NM_184234:uc002xeb.3"; -chr20 hg19_knownGene CDS 34292406 34292503 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34291531 34292503 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34292590 34292668 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34292590 34292668 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34293147 34293252 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34293147 34293252 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34295042 34295123 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34295042 34295123 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34297146 34297178 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34297146 34297178 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34300941 34301018 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34300941 34301018 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34302107 34302311 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34302107 34302311 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34304662 34304727 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34304662 34304727 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34309662 34309799 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34309662 34309799 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34312492 34312644 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34312492 34312644 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34312960 34313077 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34312960 34313077 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34317234 34317287 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34317234 34317287 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34317384 34317449 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34317384 34317449 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34319863 34320057 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34319863 34320057 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34326890 34326939 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34326890 34326939 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34328746 34328796 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34328746 34328809 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene exon 34329863 34330258 0.000000 - . gene_id "RBM39"; transcript_id "NM_004902:uc002xec.3"; -chr20 hg19_knownGene CDS 34292406 34292503 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34291531 34292503 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34292590 34292668 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34292590 34292668 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34293147 34293252 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34293147 34293252 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34295042 34295123 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34295042 34295123 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34297146 34297178 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34297146 34297178 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34300941 34301018 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34300941 34301018 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34302107 34302311 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34302107 34302311 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34304662 34304727 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34304662 34304727 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34309662 34309799 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34309662 34309799 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34312492 34312644 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34312492 34312644 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34312960 34313077 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34312960 34313077 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34317234 34317287 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34317234 34317287 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34319863 34320057 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34319863 34320057 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34326890 34326939 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34326890 34326939 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34328746 34328796 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34328746 34328809 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene exon 34329863 34330258 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242600:uc010zvm.2"; -chr20 hg19_knownGene CDS 34292406 34292503 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34291531 34292503 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34292590 34292668 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34292590 34292668 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34293147 34293252 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34293147 34293252 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34295042 34295123 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34295042 34295123 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34297146 34297196 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34297146 34297196 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34300941 34301018 0.000000 - 2 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34300941 34301018 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34302107 34302311 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34302107 34302311 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34304662 34304727 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34304662 34304727 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34309662 34309799 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34309662 34309799 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34312492 34312644 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34312492 34312644 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34312960 34313077 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34312960 34313077 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34317234 34317287 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34317234 34317287 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34319863 34320057 0.000000 - 1 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34319863 34320057 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34326890 34326939 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34326890 34326939 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34328746 34328796 0.000000 - 0 gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34328746 34328809 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene exon 34329863 34330258 0.000000 - . gene_id "RBM39"; transcript_id "NM_001242599:uc002xeg.3"; -chr20 hg19_knownGene CDS 34292406 34292503 0.000000 - 2 gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34291531 34292503 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene CDS 34292590 34292668 0.000000 - 0 gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34292590 34292668 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene CDS 34293147 34293252 0.000000 - 1 gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34293147 34293252 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene CDS 34295042 34295123 0.000000 - 2 gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34295042 34295123 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene CDS 34297146 34297196 0.000000 - 2 gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34297146 34297196 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene CDS 34300941 34301018 0.000000 - 2 gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34300941 34301018 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene CDS 34302107 34302311 0.000000 - 0 gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34302107 34302311 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene CDS 34304662 34304706 0.000000 - 0 gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34304662 34304727 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34308436 34308524 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34309662 34309799 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34312492 34312644 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34312960 34313077 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34317234 34317287 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34317384 34317449 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34319863 34320057 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34326890 34326939 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34328447 34328519 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34328746 34328809 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34329863 34330258 0.000000 - . gene_id "RBM39"; transcript_id "BC107886:uc002xed.3"; -chr20 hg19_knownGene exon 34359923 34360001 0.000000 + . gene_id "PHF20"; transcript_id "BC015538:uc002xeh.3"; -chr20 hg19_knownGene exon 34389413 34389527 0.000000 + . gene_id "PHF20"; transcript_id "BC015538:uc002xeh.3"; -chr20 hg19_knownGene exon 34411180 34411399 0.000000 + . gene_id "PHF20"; transcript_id "BC015538:uc002xeh.3"; -chr20 hg19_knownGene exon 34430495 34430666 0.000000 + . gene_id "PHF20"; transcript_id "BC062681:uc002xel.1"; -chr20 hg19_knownGene exon 34435272 34435356 0.000000 + . gene_id "PHF20"; transcript_id "BC062681:uc002xel.1"; -chr20 hg19_knownGene CDS 34446278 34446303 0.000000 + 0 gene_id "PHF20"; transcript_id "BC062681:uc002xel.1"; -chr20 hg19_knownGene exon 34446224 34446303 0.000000 + . gene_id "PHF20"; transcript_id "BC062681:uc002xel.1"; -chr20 hg19_knownGene CDS 34450955 34451322 0.000000 + 1 gene_id "PHF20"; transcript_id "BC062681:uc002xel.1"; -chr20 hg19_knownGene exon 34450955 34451322 0.000000 + . gene_id "PHF20"; transcript_id "BC062681:uc002xel.1"; -chr20 hg19_knownGene CDS 34457360 34457469 0.000000 + 2 gene_id "PHF20"; transcript_id "BC062681:uc002xel.1"; -chr20 hg19_knownGene exon 34457360 34457473 0.000000 + . gene_id "PHF20"; transcript_id "BC062681:uc002xel.1"; -chr20 hg19_knownGene exon 34498422 34499947 0.000000 + . gene_id "AX746620"; transcript_id "AX746620:uc002xem.1"; -chr20 hg19_knownGene exon 34500690 34501231 0.000000 + . gene_id "AX746620"; transcript_id "AX746620:uc002xem.1"; -chr20 hg19_knownGene exon 34359923 34360001 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34370250 34370531 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene CDS 34389445 34389527 0.000000 + 0 gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34389413 34389527 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene CDS 34430495 34430666 0.000000 + 1 gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34430495 34430666 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene CDS 34435272 34435356 0.000000 + 0 gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34435272 34435356 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene CDS 34446224 34446303 0.000000 + 2 gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34446224 34446303 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene CDS 34450935 34451322 0.000000 + 0 gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34450935 34451322 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene CDS 34457360 34457473 0.000000 + 2 gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34457360 34457473 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene CDS 34458877 34459056 0.000000 + 2 gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34458877 34459056 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene CDS 34459572 34459751 0.000000 + 2 gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34459572 34459751 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene CDS 34487292 34487570 0.000000 + 2 gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34487292 34487570 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene CDS 34501171 34501265 0.000000 + 2 gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34501171 34501269 0.000000 + . gene_id "PHF20"; transcript_id "AK054597:uc002xei.1"; -chr20 hg19_knownGene exon 34359923 34360001 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34388016 34388095 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene CDS 34389445 34389527 0.000000 + 0 gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34389413 34389527 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene CDS 34430495 34430666 0.000000 + 1 gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34430495 34430666 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene CDS 34435272 34435356 0.000000 + 0 gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34435272 34435356 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene CDS 34446224 34446303 0.000000 + 2 gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34446224 34446303 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene CDS 34450935 34451322 0.000000 + 0 gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34450935 34451322 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene CDS 34457360 34457473 0.000000 + 2 gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34457360 34457473 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene CDS 34458877 34459056 0.000000 + 2 gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34458877 34459056 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene CDS 34459572 34459751 0.000000 + 2 gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34459572 34459751 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene CDS 34487292 34487570 0.000000 + 2 gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34487292 34487570 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene CDS 34501171 34501265 0.000000 + 2 gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34501171 34501269 0.000000 + . gene_id "PHF20"; transcript_id "BC048210:uc010gfo.1"; -chr20 hg19_knownGene exon 34359923 34360001 0.000000 + . gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene exon 34389413 34389527 0.000000 + . gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene exon 34430495 34430666 0.000000 + . gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene CDS 34435285 34435356 0.000000 + 0 gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene exon 34435272 34435356 0.000000 + . gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene CDS 34450935 34451322 0.000000 + 0 gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene exon 34450935 34451322 0.000000 + . gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene CDS 34457360 34457473 0.000000 + 2 gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene exon 34457360 34457473 0.000000 + . gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene CDS 34458877 34459056 0.000000 + 2 gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene exon 34458877 34459056 0.000000 + . gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene CDS 34459572 34459751 0.000000 + 2 gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene exon 34459572 34459751 0.000000 + . gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene CDS 34487292 34487570 0.000000 + 2 gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene exon 34487292 34487570 0.000000 + . gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene CDS 34501171 34501265 0.000000 + 2 gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene exon 34501171 34501269 0.000000 + . gene_id "PHF20"; transcript_id "BC006415:uc002xej.1"; -chr20 hg19_knownGene exon 34516492 34516597 0.000000 - . gene_id "U6"; transcript_id ":uc021wcs.1"; -chr20 hg19_knownGene exon 34359923 34360001 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34389445 34389527 0.000000 + 0 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34389413 34389527 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34430495 34430666 0.000000 + 1 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34430495 34430666 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34435272 34435356 0.000000 + 0 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34435272 34435356 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34446224 34446303 0.000000 + 2 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34446224 34446303 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34450935 34451322 0.000000 + 0 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34450935 34451322 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34457360 34457473 0.000000 + 2 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34457360 34457473 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34458877 34459056 0.000000 + 2 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34458877 34459056 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34459572 34459751 0.000000 + 2 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34459572 34459751 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34487292 34487570 0.000000 + 2 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34487292 34487570 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34501171 34501269 0.000000 + 2 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34501171 34501269 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34501955 34502119 0.000000 + 2 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34501955 34502119 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34505406 34505584 0.000000 + 2 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34505406 34505584 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34515702 34515801 0.000000 + 0 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34515702 34515801 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34519171 34519366 0.000000 + 2 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34519171 34519366 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34526619 34527030 0.000000 + 1 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34526619 34527030 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34528786 34528969 0.000000 + 0 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34528786 34528969 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34535407 34535546 0.000000 + 2 gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene exon 34535407 34538288 0.000000 + . gene_id "PHF20"; transcript_id "NM_016436:uc002xek.1"; -chr20 hg19_knownGene CDS 34541670 34542206 0.000000 - 0 gene_id "SCAND1"; transcript_id "CCDS13269:uc002xeo.3"; -chr20 hg19_knownGene exon 34541667 34542206 0.000000 - . gene_id "SCAND1"; transcript_id "CCDS13269:uc002xeo.3"; -chr20 hg19_knownGene CDS 34541670 34542261 0.000000 - 1 gene_id "SCAND1"; transcript_id "NM_033630:uc002xen.2"; -chr20 hg19_knownGene exon 34541539 34542261 0.000000 - . gene_id "SCAND1"; transcript_id "NM_033630:uc002xen.2"; -chr20 hg19_knownGene CDS 34542370 34542503 0.000000 - 0 gene_id "SCAND1"; transcript_id "NM_033630:uc002xen.2"; -chr20 hg19_knownGene exon 34542370 34542548 0.000000 - . gene_id "SCAND1"; transcript_id "NM_033630:uc002xen.2"; -chr20 hg19_knownGene CDS 34541670 34542206 0.000000 - 0 gene_id "SCAND1"; transcript_id "NM_016558:uc021wct.1"; -chr20 hg19_knownGene exon 34541539 34542261 0.000000 - . gene_id "SCAND1"; transcript_id "NM_016558:uc021wct.1"; -chr20 hg19_knownGene exon 34542370 34542409 0.000000 - . gene_id "SCAND1"; transcript_id "NM_016558:uc021wct.1"; -chr20 hg19_knownGene exon 34542674 34543281 0.000000 - . gene_id "SCAND1"; transcript_id "NM_016558:uc021wct.1"; -chr20 hg19_knownGene CDS 34541670 34542206 0.000000 - 0 gene_id "SCAND1"; transcript_id "BC041022:uc002xep.3"; -chr20 hg19_knownGene exon 34541551 34543024 0.000000 - . gene_id "SCAND1"; transcript_id "BC041022:uc002xep.3"; -chr20 hg19_knownGene exon 34546784 34546976 0.000000 - . gene_id "SCAND1"; transcript_id "BC041022:uc002xep.3"; -chr20 hg19_knownGene exon 34547335 34547394 0.000000 - . gene_id "SCAND1"; transcript_id "BC041022:uc002xep.3"; -chr20 hg19_knownGene CDS 34556685 34556735 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34556529 34556735 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34560551 34560688 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34560551 34560688 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34563871 34563924 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34563871 34563924 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34568381 34568544 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34568381 34568544 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34571904 34572060 0.000000 + 1 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34571904 34572060 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34572549 34572700 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34572549 34572700 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34575317 34575455 0.000000 + 1 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34575317 34575455 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34582960 34583074 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34582960 34583074 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34596219 34596396 0.000000 + 2 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34596219 34596396 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34599059 34599179 0.000000 + 1 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34599059 34599179 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34611536 34611693 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34611536 34611693 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34618279 34618567 0.000000 + 1 gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene exon 34618279 34618622 0.000000 + . gene_id "C20orf152"; transcript_id "NM_080834:uc002xer.1"; -chr20 hg19_knownGene CDS 34556685 34556735 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34556529 34556735 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene CDS 34560551 34560688 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34560551 34560688 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene CDS 34563871 34563924 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34563871 34563924 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene CDS 34568381 34568544 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34568381 34568544 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene CDS 34571904 34572060 0.000000 + 1 gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34571904 34572060 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene CDS 34572549 34572700 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34572549 34572700 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene CDS 34575317 34575455 0.000000 + 1 gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34575317 34575455 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene CDS 34582960 34583074 0.000000 + 0 gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34582960 34583074 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene CDS 34596219 34596396 0.000000 + 2 gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34596219 34596396 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene CDS 34599059 34599179 0.000000 + 1 gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34599059 34599179 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34618279 34618622 0.000000 + . gene_id "C20orf152"; transcript_id "NM_001207076:uc002xes.1"; -chr20 hg19_knownGene exon 34556529 34556735 0.000000 + . gene_id "C20orf152"; transcript_id "BC114634:uc010gfp.1"; -chr20 hg19_knownGene exon 34560551 34560688 0.000000 + . gene_id "C20orf152"; transcript_id "BC114634:uc010gfp.1"; -chr20 hg19_knownGene exon 34563871 34563924 0.000000 + . gene_id "C20orf152"; transcript_id "BC114634:uc010gfp.1"; -chr20 hg19_knownGene exon 34568381 34568544 0.000000 + . gene_id "C20orf152"; transcript_id "BC114634:uc010gfp.1"; -chr20 hg19_knownGene exon 34572549 34572700 0.000000 + . gene_id "C20orf152"; transcript_id "BC114634:uc010gfp.1"; -chr20 hg19_knownGene exon 34582960 34583074 0.000000 + . gene_id "C20orf152"; transcript_id "BC114634:uc010gfp.1"; -chr20 hg19_knownGene exon 34596219 34596396 0.000000 + . gene_id "C20orf152"; transcript_id "BC114634:uc010gfp.1"; -chr20 hg19_knownGene exon 34599059 34599179 0.000000 + . gene_id "C20orf152"; transcript_id "BC114634:uc010gfp.1"; -chr20 hg19_knownGene exon 34618279 34618622 0.000000 + . gene_id "C20orf152"; transcript_id "BC114634:uc010gfp.1"; -chr20 hg19_knownGene CDS 34638317 34638640 0.000000 - 0 gene_id "LOC647979"; transcript_id "NR_027451:uc002xet.3"; -chr20 hg19_knownGene exon 34633540 34638882 0.000000 - . gene_id "LOC647979"; transcript_id "NR_027451:uc002xet.3"; -chr20 hg19_knownGene exon 34738335 34740573 0.000000 - . gene_id "AX746683"; transcript_id "AX746683:uc002xfa.1"; -chr20 hg19_knownGene CDS 34740907 34741008 0.000000 - 0 gene_id "AX746683"; transcript_id "AX746683:uc002xfa.1"; -chr20 hg19_knownGene exon 34740877 34741008 0.000000 - . gene_id "AX746683"; transcript_id "AX746683:uc002xfa.1"; -chr20 hg19_knownGene CDS 34742985 34743176 0.000000 - 0 gene_id "AX746683"; transcript_id "AX746683:uc002xfa.1"; -chr20 hg19_knownGene exon 34742985 34743176 0.000000 - . gene_id "AX746683"; transcript_id "AX746683:uc002xfa.1"; -chr20 hg19_knownGene CDS 34743518 34743568 0.000000 - 0 gene_id "AX746683"; transcript_id "AX746683:uc002xfa.1"; -chr20 hg19_knownGene exon 34743518 34743655 0.000000 - . gene_id "AX746683"; transcript_id "AX746683:uc002xfa.1"; -chr20 hg19_knownGene exon 34680632 34680735 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34761700 34761876 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34761686 34761876 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34763473 34763637 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34763473 34763637 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34765874 34765978 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34765874 34765978 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34766552 34766594 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34766552 34766594 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34770194 34770269 0.000000 + 2 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34770194 34770269 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34773039 34773257 0.000000 + 1 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34773039 34773257 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34775598 34775685 0.000000 + 1 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34775598 34775685 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34776269 34776421 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34776269 34776421 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34778199 34778296 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34778199 34778296 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34778544 34778719 0.000000 + 1 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34778544 34778719 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34782134 34782282 0.000000 + 2 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34782134 34782282 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34783251 34783286 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34783251 34783286 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34785781 34785963 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34785781 34785963 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34797410 34797820 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34797410 34797820 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34800194 34800298 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34800194 34800298 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene CDS 34806798 34806881 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34806798 34806884 0.000000 + . gene_id "EPB41L1"; transcript_id "AK299817:uc010zvo.1"; -chr20 hg19_knownGene exon 34679426 34679534 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34700348 34700402 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34763482 34763637 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34763473 34763637 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34765874 34765978 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34765874 34765978 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34766552 34766594 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34766552 34766594 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34770194 34770269 0.000000 + 2 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34770194 34770269 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34773039 34773257 0.000000 + 1 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34773039 34773257 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34775598 34775685 0.000000 + 1 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34775598 34775685 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34776269 34776421 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34776269 34776421 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34778199 34778296 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34778199 34778296 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34778544 34778719 0.000000 + 1 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34778544 34778719 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34782134 34782282 0.000000 + 2 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34782134 34782282 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34785781 34785963 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34785781 34785963 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34797410 34797820 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34797410 34797820 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34800194 34800298 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34800194 34800298 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34806798 34806884 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34806798 34806884 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34807683 34807766 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34807683 34807766 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34809786 34809866 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34809786 34809866 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34810200 34810316 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34810200 34810316 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene CDS 34817254 34817259 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34817254 34820721 0.000000 + . gene_id "EPB41L1"; transcript_id "BC013885:uc002xeu.3"; -chr20 hg19_knownGene exon 34680632 34680735 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34701615 34701721 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34761700 34761876 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34761686 34761876 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34763473 34763637 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34763473 34763637 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34765874 34765978 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34765874 34765978 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34766552 34766594 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34766552 34766594 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34770194 34770269 0.000000 + 2 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34770194 34770269 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34773039 34773257 0.000000 + 1 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34773039 34773257 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34775598 34775685 0.000000 + 1 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34775598 34775685 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34776269 34776421 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34776269 34776421 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34778199 34778296 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34778199 34778296 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34778544 34778719 0.000000 + 1 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34778544 34778719 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34782134 34782282 0.000000 + 2 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34782134 34782282 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34783251 34783286 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34783251 34783286 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34785781 34785963 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34785781 34785963 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34797410 34797820 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34797410 34797820 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34800194 34800298 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34800194 34800298 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34802282 34802362 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34802282 34802362 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34806798 34806884 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34806798 34806884 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34807683 34807766 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34807683 34807766 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34809786 34809866 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34809786 34809866 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34810200 34810316 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34810200 34810316 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene CDS 34817254 34817259 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34817254 34820721 0.000000 + . gene_id "EPB41L1"; transcript_id "BC040259:uc002xev.3"; -chr20 hg19_knownGene exon 34680632 34680735 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34700348 34700402 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34709582 34709738 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34763482 34763637 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34763473 34763637 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34766552 34766594 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34766552 34766594 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34770194 34770269 0.000000 + 2 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34770194 34770269 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34773039 34773257 0.000000 + 1 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34773039 34773257 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34775598 34775685 0.000000 + 1 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34775598 34775685 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34776269 34776421 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34776269 34776421 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34778199 34778296 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34778199 34778296 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34778544 34778719 0.000000 + 1 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34778544 34778719 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34782134 34782282 0.000000 + 2 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34782134 34782282 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34785781 34785963 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34785781 34785963 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34797410 34797820 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34797410 34797820 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34800194 34800298 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34800194 34800298 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34802279 34802362 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34802279 34802362 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34806798 34806884 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34806798 34806884 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34807683 34807766 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34807683 34807766 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34809786 34809866 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34809786 34809866 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34810200 34810316 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34810200 34810316 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene CDS 34817254 34817259 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34817254 34820721 0.000000 + . gene_id "EPB41L1"; transcript_id "AK096848:uc002xew.3"; -chr20 hg19_knownGene exon 34680632 34680735 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34700348 34700402 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34713366 34713449 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34713345 34713449 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34763473 34763637 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34763473 34763637 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34765874 34765978 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34765874 34765978 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34766552 34766594 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34766552 34766594 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34770194 34770269 0.000000 + 2 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34770194 34770269 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34773039 34773257 0.000000 + 1 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34773039 34773257 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34775598 34775685 0.000000 + 1 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34775598 34775685 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34776269 34776421 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34776269 34776421 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34778199 34778296 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34778199 34778296 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34778544 34778719 0.000000 + 1 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34778544 34778719 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34782134 34782282 0.000000 + 2 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34782134 34782282 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34785781 34785963 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34785781 34785963 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34800194 34800298 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34800194 34800298 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34802279 34802362 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34802279 34802362 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34806798 34806884 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34806798 34806884 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34807683 34807766 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34807683 34807766 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34809786 34809866 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34809786 34809866 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34810200 34810316 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34810200 34810316 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene CDS 34817254 34817259 0.000000 + 0 gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34817254 34820721 0.000000 + . gene_id "EPB41L1"; transcript_id "AK126875:uc002xex.3"; -chr20 hg19_knownGene exon 34700258 34700402 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34710601 34710669 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34761700 34761876 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34761686 34761876 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34763473 34763637 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34763473 34763637 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34765874 34765978 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34765874 34765978 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34766552 34766594 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34766552 34766594 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34770194 34770269 0.000000 + 2 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34770194 34770269 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34775598 34775685 0.000000 + 1 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34775598 34775685 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34776269 34776421 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34776269 34776421 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34778199 34778296 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34778199 34778296 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34778544 34778719 0.000000 + 1 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34778544 34778719 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34782134 34782282 0.000000 + 2 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34782134 34782282 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34785781 34785963 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34785781 34785963 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34800194 34800298 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34800194 34800298 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34806798 34806884 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34806798 34806884 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34807683 34807766 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34807683 34807766 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34809786 34809866 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34809786 34809866 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34810200 34810316 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34810200 34810316 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene CDS 34817254 34817259 0.000000 + 0 gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34817254 34820721 0.000000 + . gene_id "EPB41L1"; transcript_id "CR936825:uc002xey.3"; -chr20 hg19_knownGene exon 34700348 34700402 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34763482 34763637 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34763473 34763637 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34765874 34765978 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34765874 34765978 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34766552 34766594 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34766552 34766594 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34770194 34770269 0.000000 + 2 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34770194 34770269 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34773039 34773257 0.000000 + 1 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34773039 34773257 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34775598 34775685 0.000000 + 1 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34775598 34775685 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34776269 34776421 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34776269 34776421 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34778199 34778296 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34778199 34778296 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34778544 34778719 0.000000 + 1 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34778544 34778719 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34782134 34782282 0.000000 + 2 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34782134 34782282 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34785781 34785963 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34785781 34785963 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34797410 34797820 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34797410 34797820 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34800194 34800298 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34800194 34800298 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34806798 34806884 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34806798 34806884 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34807683 34807766 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34807683 34807766 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34809786 34809866 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34809786 34809866 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34810200 34810316 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34810200 34810316 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene CDS 34817254 34817259 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34817254 34820721 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_177996:uc002xez.3"; -chr20 hg19_knownGene exon 34742662 34742818 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34761700 34761876 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34761686 34761876 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34763473 34763637 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34763473 34763637 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34765874 34765978 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34765874 34765978 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34766552 34766594 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34766552 34766594 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34770194 34770269 0.000000 + 2 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34770194 34770269 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34773039 34773257 0.000000 + 1 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34773039 34773257 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34775598 34775685 0.000000 + 1 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34775598 34775685 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34776269 34776421 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34776269 34776421 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34778199 34778296 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34778199 34778296 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34778544 34778719 0.000000 + 1 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34778544 34778719 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34782134 34782282 0.000000 + 2 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34782134 34782282 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34783251 34783286 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34783251 34783286 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34785781 34785963 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34785781 34785963 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34797410 34797820 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34797410 34797820 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34800194 34800298 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34800194 34800298 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34802279 34802362 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34802279 34802362 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34806798 34806884 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34806798 34806884 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34807683 34807766 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34807683 34807766 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34809786 34809866 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34809786 34809866 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34810200 34810316 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34810200 34810316 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene CDS 34817254 34817259 0.000000 + 0 gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34817254 34820721 0.000000 + . gene_id "EPB41L1"; transcript_id "NM_012156:uc002xfb.3"; -chr20 hg19_knownGene exon 34785781 34785963 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34788795 34788899 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene CDS 34793846 34795702 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34793771 34795702 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene CDS 34796223 34796330 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34796223 34796330 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene CDS 34797410 34797820 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34797410 34797820 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene CDS 34800194 34800298 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34800194 34800298 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene CDS 34802282 34802362 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34802282 34802362 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene CDS 34806798 34806884 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34806798 34806884 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene CDS 34807683 34807766 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34807683 34807766 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene CDS 34809786 34809866 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34809786 34809866 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene CDS 34810200 34810316 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34810200 34810316 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene CDS 34817254 34817259 0.000000 + 0 gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34817254 34820721 0.000000 + . gene_id "EPB41L1"; transcript_id "BX537978:uc010gfq.3"; -chr20 hg19_knownGene exon 34824400 34824425 0.000000 + . gene_id "C20orf4"; transcript_id "BC001751:uc002xfc.2"; -chr20 hg19_knownGene CDS 34827791 34828547 0.000000 + 0 gene_id "C20orf4"; transcript_id "BC001751:uc002xfc.2"; -chr20 hg19_knownGene exon 34827743 34828547 0.000000 + . gene_id "C20orf4"; transcript_id "BC001751:uc002xfc.2"; -chr20 hg19_knownGene CDS 34832619 34832848 0.000000 + 2 gene_id "C20orf4"; transcript_id "BC001751:uc002xfc.2"; -chr20 hg19_knownGene exon 34832619 34832848 0.000000 + . gene_id "C20orf4"; transcript_id "BC001751:uc002xfc.2"; -chr20 hg19_knownGene CDS 34843500 34843664 0.000000 + 0 gene_id "C20orf4"; transcript_id "BC001751:uc002xfc.2"; -chr20 hg19_knownGene exon 34843500 34844853 0.000000 + . gene_id "C20orf4"; transcript_id "BC001751:uc002xfc.2"; -chr20 hg19_knownGene exon 34824447 34824704 0.000000 + . gene_id "C20orf4"; transcript_id "NM_015511:uc002xfe.1"; -chr20 hg19_knownGene CDS 34827791 34828547 0.000000 + 0 gene_id "C20orf4"; transcript_id "NM_015511:uc002xfe.1"; -chr20 hg19_knownGene exon 34827743 34828547 0.000000 + . gene_id "C20orf4"; transcript_id "NM_015511:uc002xfe.1"; -chr20 hg19_knownGene CDS 34832619 34832848 0.000000 + 2 gene_id "C20orf4"; transcript_id "NM_015511:uc002xfe.1"; -chr20 hg19_knownGene exon 34832619 34832848 0.000000 + . gene_id "C20orf4"; transcript_id "NM_015511:uc002xfe.1"; -chr20 hg19_knownGene CDS 34843500 34843664 0.000000 + 0 gene_id "C20orf4"; transcript_id "NM_015511:uc002xfe.1"; -chr20 hg19_knownGene exon 34843500 34844853 0.000000 + . gene_id "C20orf4"; transcript_id "NM_015511:uc002xfe.1"; -chr20 hg19_knownGene exon 34894303 34894434 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 34995448 34995678 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35060121 35061119 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35060049 35061119 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35064512 35064753 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35064512 35064753 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35068157 35068271 0.000000 + 1 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35068157 35068271 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35071130 35071180 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35071130 35071180 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35075100 35075340 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35075100 35075340 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35125108 35125469 0.000000 + 2 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35125108 35125469 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35127645 35127724 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35127645 35127724 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35128602 35129014 0.000000 + 1 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35128602 35129014 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35152653 35152744 0.000000 + 2 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35152653 35152744 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35154254 35154409 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35154254 35154409 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene CDS 35155216 35155431 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 35155216 35157040 0.000000 + . gene_id "DLGAP4"; transcript_id "AB023181:uc002xff.3"; -chr20 hg19_knownGene exon 34995448 34995678 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35060121 35061119 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35060049 35061119 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35064512 35064753 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35064512 35064753 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35068157 35068271 0.000000 + 1 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35068157 35068271 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35071130 35071180 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35071130 35071180 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35075100 35075340 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35075100 35075340 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35125108 35125469 0.000000 + 2 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35125108 35125469 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35127645 35127724 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35127645 35127724 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35128602 35129014 0.000000 + 1 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35128602 35129014 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35152653 35152744 0.000000 + 2 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35152653 35152744 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35154254 35154409 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35154254 35154409 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene CDS 35155216 35155431 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35155216 35157040 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_014902:uc010zvp.2"; -chr20 hg19_knownGene exon 35089842 35089913 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene exon 35125108 35125469 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene exon 35127991 35128079 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene CDS 35128624 35129014 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene exon 35128602 35129014 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene CDS 35152653 35152744 0.000000 + 2 gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene exon 35152653 35152744 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene CDS 35154254 35154409 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene exon 35154254 35154409 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene CDS 35155216 35155431 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene exon 35155216 35157040 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_001042486:uc002xfg.3"; -chr20 hg19_knownGene CDS 35090972 35091002 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene exon 35090142 35091002 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene CDS 35125108 35125469 0.000000 + 2 gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene exon 35125108 35125469 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene CDS 35127991 35128079 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene exon 35127991 35128079 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene CDS 35128602 35129014 0.000000 + 1 gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene exon 35128602 35129014 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene CDS 35152653 35152744 0.000000 + 2 gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene exon 35152653 35152744 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene CDS 35154254 35154409 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene exon 35154254 35154409 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene CDS 35155216 35155431 0.000000 + 0 gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene exon 35155216 35157040 0.000000 + . gene_id "DLGAP4"; transcript_id "NM_183006:uc002xfh.3"; -chr20 hg19_knownGene exon 35120786 35121588 0.000000 + . gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene exon 35125108 35125469 0.000000 + . gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene CDS 35127708 35127724 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene exon 35127645 35127724 0.000000 + . gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene CDS 35128602 35129014 0.000000 + 1 gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene exon 35128602 35129014 0.000000 + . gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene CDS 35152653 35152744 0.000000 + 2 gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene exon 35152653 35152744 0.000000 + . gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene CDS 35154254 35154463 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene exon 35154254 35154480 0.000000 + . gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene exon 35155216 35157040 0.000000 + . gene_id "DLGAP4"; transcript_id "AK125383:uc002xfi.3"; -chr20 hg19_knownGene exon 35126220 35127724 0.000000 + . gene_id "DLGAP4"; transcript_id "AK055152:uc002xfj.3"; -chr20 hg19_knownGene exon 35127991 35128079 0.000000 + . gene_id "DLGAP4"; transcript_id "AK055152:uc002xfj.3"; -chr20 hg19_knownGene CDS 35128624 35129014 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AK055152:uc002xfj.3"; -chr20 hg19_knownGene exon 35128602 35129014 0.000000 + . gene_id "DLGAP4"; transcript_id "AK055152:uc002xfj.3"; -chr20 hg19_knownGene CDS 35152653 35152744 0.000000 + 2 gene_id "DLGAP4"; transcript_id "AK055152:uc002xfj.3"; -chr20 hg19_knownGene exon 35152653 35152744 0.000000 + . gene_id "DLGAP4"; transcript_id "AK055152:uc002xfj.3"; -chr20 hg19_knownGene CDS 35154254 35154409 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AK055152:uc002xfj.3"; -chr20 hg19_knownGene exon 35154254 35154409 0.000000 + . gene_id "DLGAP4"; transcript_id "AK055152:uc002xfj.3"; -chr20 hg19_knownGene CDS 35155216 35155431 0.000000 + 0 gene_id "DLGAP4"; transcript_id "AK055152:uc002xfj.3"; -chr20 hg19_knownGene exon 35155216 35157040 0.000000 + . gene_id "DLGAP4"; transcript_id "AK055152:uc002xfj.3"; -chr20 hg19_knownGene exon 35169897 35169964 0.000000 + . gene_id "MYL9"; transcript_id "NM_006097:uc002xfl.1"; -chr20 hg19_knownGene CDS 35173288 35173471 0.000000 + 0 gene_id "MYL9"; transcript_id "NM_006097:uc002xfl.1"; -chr20 hg19_knownGene exon 35173262 35173471 0.000000 + . gene_id "MYL9"; transcript_id "NM_006097:uc002xfl.1"; -chr20 hg19_knownGene CDS 35176435 35176596 0.000000 + 2 gene_id "MYL9"; transcript_id "NM_006097:uc002xfl.1"; -chr20 hg19_knownGene exon 35176435 35176596 0.000000 + . gene_id "MYL9"; transcript_id "NM_006097:uc002xfl.1"; -chr20 hg19_knownGene CDS 35177480 35177649 0.000000 + 2 gene_id "MYL9"; transcript_id "NM_006097:uc002xfl.1"; -chr20 hg19_knownGene exon 35177480 35178226 0.000000 + . gene_id "MYL9"; transcript_id "NM_006097:uc002xfl.1"; -chr20 hg19_knownGene exon 35169897 35169964 0.000000 + . gene_id "MYL9"; transcript_id "NM_181526:uc002xfm.1"; -chr20 hg19_knownGene CDS 35173288 35173471 0.000000 + 0 gene_id "MYL9"; transcript_id "NM_181526:uc002xfm.1"; -chr20 hg19_knownGene exon 35173262 35173471 0.000000 + . gene_id "MYL9"; transcript_id "NM_181526:uc002xfm.1"; -chr20 hg19_knownGene CDS 35177480 35177649 0.000000 + 2 gene_id "MYL9"; transcript_id "NM_181526:uc002xfm.1"; -chr20 hg19_knownGene exon 35177480 35178226 0.000000 + . gene_id "MYL9"; transcript_id "NM_181526:uc002xfm.1"; -chr20 hg19_knownGene exon 35136105 35136677 0.000000 - . gene_id "BC039668"; transcript_id "BC039668:uc002xfk.3"; -chr20 hg19_knownGene exon 35137215 35137228 0.000000 - . gene_id "BC039668"; transcript_id "BC039668:uc002xfk.3"; -chr20 hg19_knownGene exon 35139283 35139435 0.000000 - . gene_id "BC039668"; transcript_id "BC039668:uc002xfk.3"; -chr20 hg19_knownGene exon 35199844 35199946 0.000000 - . gene_id "BC039668"; transcript_id "BC039668:uc002xfk.3"; -chr20 hg19_knownGene exon 35201315 35201678 0.000000 - . gene_id "BC039668"; transcript_id "BC039668:uc002xfk.3"; -chr20 hg19_knownGene exon 35201876 35201927 0.000000 + . gene_id "TGIF2"; transcript_id "NM_001199513:uc021wcu.1"; -chr20 hg19_knownGene CDS 35207178 35207369 0.000000 + 0 gene_id "TGIF2"; transcript_id "NM_001199513:uc021wcu.1"; -chr20 hg19_knownGene exon 35207144 35207369 0.000000 + . gene_id "TGIF2"; transcript_id "NM_001199513:uc021wcu.1"; -chr20 hg19_knownGene CDS 35219313 35219831 0.000000 + 0 gene_id "TGIF2"; transcript_id "NM_001199513:uc021wcu.1"; -chr20 hg19_knownGene exon 35219313 35222355 0.000000 + . gene_id "TGIF2"; transcript_id "NM_001199513:uc021wcu.1"; -chr20 hg19_knownGene exon 35201876 35202055 0.000000 + . gene_id "TGIF2"; transcript_id "NM_001199514:uc021wcv.1"; -chr20 hg19_knownGene CDS 35207178 35207369 0.000000 + 0 gene_id "TGIF2"; transcript_id "NM_001199514:uc021wcv.1"; -chr20 hg19_knownGene exon 35207144 35207369 0.000000 + . gene_id "TGIF2"; transcript_id "NM_001199514:uc021wcv.1"; -chr20 hg19_knownGene CDS 35219313 35219831 0.000000 + 0 gene_id "TGIF2"; transcript_id "NM_001199514:uc021wcv.1"; -chr20 hg19_knownGene exon 35219313 35222355 0.000000 + . gene_id "TGIF2"; transcript_id "NM_001199514:uc021wcv.1"; -chr20 hg19_knownGene exon 35202010 35202148 0.000000 + . gene_id "TGIF2"; transcript_id "NM_021809:uc002xfn.3"; -chr20 hg19_knownGene CDS 35207178 35207369 0.000000 + 0 gene_id "TGIF2"; transcript_id "NM_021809:uc002xfn.3"; -chr20 hg19_knownGene exon 35207144 35207369 0.000000 + . gene_id "TGIF2"; transcript_id "NM_021809:uc002xfn.3"; -chr20 hg19_knownGene CDS 35219313 35219831 0.000000 + 0 gene_id "TGIF2"; transcript_id "NM_021809:uc002xfn.3"; -chr20 hg19_knownGene exon 35219313 35222355 0.000000 + . gene_id "TGIF2"; transcript_id "NM_021809:uc002xfn.3"; -chr20 hg19_knownGene exon 35202957 35203038 0.000000 + . gene_id "TGIF2"; transcript_id "NM_001199515:uc021wcw.1"; -chr20 hg19_knownGene CDS 35207178 35207369 0.000000 + 0 gene_id "TGIF2"; transcript_id "NM_001199515:uc021wcw.1"; -chr20 hg19_knownGene exon 35207144 35207369 0.000000 + . gene_id "TGIF2"; transcript_id "NM_001199515:uc021wcw.1"; -chr20 hg19_knownGene CDS 35219313 35219831 0.000000 + 0 gene_id "TGIF2"; transcript_id "NM_001199515:uc021wcw.1"; -chr20 hg19_knownGene exon 35219313 35222355 0.000000 + . gene_id "TGIF2"; transcript_id "NM_001199515:uc021wcw.1"; -chr20 hg19_knownGene exon 35202957 35203038 0.000000 + . gene_id "TGIF2-C20ORF24"; transcript_id "NM_001199535:uc002xfo.3"; -chr20 hg19_knownGene CDS 35207178 35207369 0.000000 + 0 gene_id "TGIF2-C20ORF24"; transcript_id "NM_001199535:uc002xfo.3"; -chr20 hg19_knownGene exon 35207144 35207369 0.000000 + . gene_id "TGIF2-C20ORF24"; transcript_id "NM_001199535:uc002xfo.3"; -chr20 hg19_knownGene CDS 35236118 35236221 0.000000 + 0 gene_id "TGIF2-C20ORF24"; transcript_id "NM_001199535:uc002xfo.3"; -chr20 hg19_knownGene exon 35236118 35236221 0.000000 + . gene_id "TGIF2-C20ORF24"; transcript_id "NM_001199535:uc002xfo.3"; -chr20 hg19_knownGene CDS 35238004 35238133 0.000000 + 1 gene_id "TGIF2-C20ORF24"; transcript_id "NM_001199535:uc002xfo.3"; -chr20 hg19_knownGene exon 35238004 35238133 0.000000 + . gene_id "TGIF2-C20ORF24"; transcript_id "NM_001199535:uc002xfo.3"; -chr20 hg19_knownGene CDS 35240413 35240451 0.000000 + 0 gene_id "TGIF2-C20ORF24"; transcript_id "NM_001199535:uc002xfo.3"; -chr20 hg19_knownGene exon 35240413 35240960 0.000000 + . gene_id "TGIF2-C20ORF24"; transcript_id "NM_001199535:uc002xfo.3"; -chr20 hg19_knownGene CDS 35234355 35234468 0.000000 + 0 gene_id "C20orf24"; transcript_id "NM_001199534:uc002xfs.3"; -chr20 hg19_knownGene exon 35234137 35234468 0.000000 + . gene_id "C20orf24"; transcript_id "NM_001199534:uc002xfs.3"; -chr20 hg19_knownGene CDS 35236118 35236221 0.000000 + 0 gene_id "C20orf24"; transcript_id "NM_001199534:uc002xfs.3"; -chr20 hg19_knownGene exon 35236118 35236221 0.000000 + . gene_id "C20orf24"; transcript_id "NM_001199534:uc002xfs.3"; -chr20 hg19_knownGene CDS 35238004 35238161 0.000000 + 1 gene_id "C20orf24"; transcript_id "NM_001199534:uc002xfs.3"; -chr20 hg19_knownGene exon 35238004 35238161 0.000000 + . gene_id "C20orf24"; transcript_id "NM_001199534:uc002xfs.3"; -chr20 hg19_knownGene CDS 35240413 35240447 0.000000 + 2 gene_id "C20orf24"; transcript_id "NM_001199534:uc002xfs.3"; -chr20 hg19_knownGene exon 35240413 35240960 0.000000 + . gene_id "C20orf24"; transcript_id "NM_001199534:uc002xfs.3"; -chr20 hg19_knownGene CDS 35234355 35234468 0.000000 + 0 gene_id "C20orf24"; transcript_id "NM_018840:uc002xfq.3"; -chr20 hg19_knownGene exon 35234137 35234468 0.000000 + . gene_id "C20orf24"; transcript_id "NM_018840:uc002xfq.3"; -chr20 hg19_knownGene CDS 35236118 35236221 0.000000 + 0 gene_id "C20orf24"; transcript_id "NM_018840:uc002xfq.3"; -chr20 hg19_knownGene exon 35236118 35236221 0.000000 + . gene_id "C20orf24"; transcript_id "NM_018840:uc002xfq.3"; -chr20 hg19_knownGene CDS 35238004 35238133 0.000000 + 1 gene_id "C20orf24"; transcript_id "NM_018840:uc002xfq.3"; -chr20 hg19_knownGene exon 35238004 35238133 0.000000 + . gene_id "C20orf24"; transcript_id "NM_018840:uc002xfq.3"; -chr20 hg19_knownGene CDS 35240413 35240451 0.000000 + 0 gene_id "C20orf24"; transcript_id "NM_018840:uc002xfq.3"; -chr20 hg19_knownGene exon 35240413 35240960 0.000000 + . gene_id "C20orf24"; transcript_id "NM_018840:uc002xfq.3"; -chr20 hg19_knownGene exon 35234137 35234468 0.000000 + . gene_id "C20orf24"; transcript_id "NR_026562:uc002xft.3"; -chr20 hg19_knownGene exon 35236118 35236221 0.000000 + . gene_id "C20orf24"; transcript_id "NR_026562:uc002xft.3"; -chr20 hg19_knownGene exon 35236293 35236403 0.000000 + . gene_id "C20orf24"; transcript_id "NR_026562:uc002xft.3"; -chr20 hg19_knownGene exon 35238004 35238133 0.000000 + . gene_id "C20orf24"; transcript_id "NR_026562:uc002xft.3"; -chr20 hg19_knownGene exon 35240413 35240960 0.000000 + . gene_id "C20orf24"; transcript_id "NR_026562:uc002xft.3"; -chr20 hg19_knownGene CDS 35234355 35234468 0.000000 + 0 gene_id "C20orf24"; transcript_id "NM_199483:uc002xfr.3"; -chr20 hg19_knownGene exon 35234137 35234468 0.000000 + . gene_id "C20orf24"; transcript_id "NM_199483:uc002xfr.3"; -chr20 hg19_knownGene CDS 35236118 35236221 0.000000 + 0 gene_id "C20orf24"; transcript_id "NM_199483:uc002xfr.3"; -chr20 hg19_knownGene exon 35236118 35236221 0.000000 + . gene_id "C20orf24"; transcript_id "NM_199483:uc002xfr.3"; -chr20 hg19_knownGene CDS 35240413 35240623 0.000000 + 1 gene_id "C20orf24"; transcript_id "NM_199483:uc002xfr.3"; -chr20 hg19_knownGene exon 35240413 35240960 0.000000 + . gene_id "C20orf24"; transcript_id "NM_199483:uc002xfr.3"; -chr20 hg19_knownGene CDS 35242375 35242389 0.000000 - 0 gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene exon 35240924 35242389 0.000000 - . gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene CDS 35242708 35242790 0.000000 - 2 gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene exon 35242708 35242790 0.000000 - . gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene CDS 35243628 35243777 0.000000 - 2 gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene exon 35243628 35243777 0.000000 - . gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene CDS 35260998 35261101 0.000000 - 1 gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene exon 35260998 35261101 0.000000 - . gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene CDS 35261946 35262032 0.000000 - 1 gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene exon 35261946 35262032 0.000000 - . gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene CDS 35262893 35262992 0.000000 - 2 gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene exon 35262893 35262992 0.000000 - . gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene CDS 35269648 35269738 0.000000 - 0 gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene exon 35269648 35269781 0.000000 - . gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene exon 35274240 35274619 0.000000 - . gene_id "SLA2"; transcript_id "NM_175077:uc002xfu.3"; -chr20 hg19_knownGene CDS 35242272 35242389 0.000000 - 1 gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene exon 35240924 35242389 0.000000 - . gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene CDS 35242708 35242840 0.000000 - 2 gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene exon 35242708 35242840 0.000000 - . gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene CDS 35243628 35243777 0.000000 - 2 gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene exon 35243628 35243777 0.000000 - . gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene CDS 35260998 35261101 0.000000 - 1 gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene exon 35260998 35261101 0.000000 - . gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene CDS 35261946 35262032 0.000000 - 1 gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene exon 35261946 35262032 0.000000 - . gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene CDS 35262893 35262992 0.000000 - 2 gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene exon 35262893 35262992 0.000000 - . gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene CDS 35269648 35269738 0.000000 - 0 gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene exon 35269648 35269781 0.000000 - . gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene exon 35274240 35274619 0.000000 - . gene_id "SLA2"; transcript_id "NM_032214:uc002xfv.3"; -chr20 hg19_knownGene CDS 35281926 35282104 0.000000 - 2 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35280169 35282104 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35284763 35284814 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35284763 35284814 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35284900 35284935 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35284900 35284935 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35288740 35288787 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35288740 35288787 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35293449 35293500 0.000000 - 1 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35293449 35293500 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35293639 35293704 0.000000 - 1 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35293639 35293704 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35294692 35294795 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35294692 35294795 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35299744 35299800 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35299744 35299800 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35309219 35309305 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35309219 35309305 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35310921 35310981 0.000000 - 1 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35310921 35310981 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35312816 35312878 0.000000 - 1 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35312816 35312878 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35315895 35316015 0.000000 - 2 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35315895 35316015 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35317082 35317187 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35317082 35317187 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35335375 35335410 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35335375 35335410 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35350082 35350138 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35350082 35350186 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene exon 35374448 35374541 0.000000 - . gene_id "NDRG3"; transcript_id "NM_032013:uc002xfw.3"; -chr20 hg19_knownGene CDS 35281926 35282104 0.000000 - 2 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35280169 35282104 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35284763 35284814 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35284763 35284814 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35284900 35284935 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35284900 35284935 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35288740 35288787 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35288740 35288787 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35293449 35293500 0.000000 - 1 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35293449 35293500 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35293639 35293704 0.000000 - 1 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35293639 35293704 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35294692 35294795 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35294692 35294795 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35299744 35299800 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35299744 35299800 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35309219 35309305 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35309219 35309305 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35310921 35310981 0.000000 - 1 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35310921 35310981 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35312816 35312878 0.000000 - 1 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35312816 35312878 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35315895 35316015 0.000000 - 2 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35315895 35316015 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35317082 35317187 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35317082 35317187 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35350082 35350138 0.000000 - 0 gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35350082 35350186 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene exon 35374448 35374541 0.000000 - . gene_id "NDRG3"; transcript_id "NM_022477:uc002xfx.3"; -chr20 hg19_knownGene CDS 35281926 35282104 0.000000 - 2 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35280169 35282104 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35284763 35284814 0.000000 - 0 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35284763 35284814 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35284900 35284935 0.000000 - 0 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35284900 35284935 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35288740 35288787 0.000000 - 0 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35288740 35288787 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35293449 35293500 0.000000 - 1 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35293449 35293500 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35293639 35293704 0.000000 - 1 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35293639 35293704 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35294692 35294795 0.000000 - 0 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35294692 35294795 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35299744 35299800 0.000000 - 0 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35299744 35299800 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35309219 35309305 0.000000 - 0 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35309219 35309305 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35310921 35310981 0.000000 - 1 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35310921 35310981 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35312816 35312878 0.000000 - 1 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35312816 35312878 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35335375 35335409 0.000000 - 0 gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35335375 35335410 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35350082 35350186 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene exon 35374448 35374541 0.000000 - . gene_id "NDRG3"; transcript_id "NR_038370:uc010zvq.2"; -chr20 hg19_knownGene CDS 35281926 35282104 0.000000 - 2 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35280169 35282104 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35284763 35284814 0.000000 - 0 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35284763 35284814 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35284900 35284935 0.000000 - 0 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35284900 35284935 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35288740 35288787 0.000000 - 0 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35288740 35288787 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35293449 35293500 0.000000 - 1 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35293449 35293500 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35293639 35293704 0.000000 - 1 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35293639 35293704 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35294692 35294795 0.000000 - 0 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35294692 35294795 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35299744 35299800 0.000000 - 0 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35299744 35299800 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35309219 35309305 0.000000 - 0 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35309219 35309305 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35310921 35310981 0.000000 - 1 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35310921 35310981 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35312816 35312862 0.000000 - 0 gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35312816 35312878 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35350082 35350186 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene exon 35374448 35374541 0.000000 - . gene_id "NDRG3"; transcript_id "AK295466:uc010zvr.2"; -chr20 hg19_knownGene CDS 35381194 35381300 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35380194 35381300 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene CDS 35383166 35383253 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35383166 35383253 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene CDS 35384085 35384232 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35384085 35384232 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene CDS 35386490 35386564 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35386490 35386564 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene CDS 35386961 35387020 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35386961 35387020 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene CDS 35390864 35390951 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35390864 35390951 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene CDS 35395172 35395244 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35395172 35395244 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene CDS 35396372 35396445 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35396372 35396445 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene CDS 35399276 35399596 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35399276 35399596 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene CDS 35399828 35399861 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35399828 35399876 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene exon 35401797 35402154 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145316:uc010gfr.3"; -chr20 hg19_knownGene CDS 35381194 35381300 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35380194 35381300 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene CDS 35383166 35383253 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35383166 35383253 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene CDS 35384085 35384232 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35384085 35384232 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene CDS 35386490 35386564 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35386490 35386564 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene CDS 35386961 35387020 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35386961 35387020 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene CDS 35390864 35390951 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35390864 35390951 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene CDS 35395172 35395244 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35395172 35395244 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene CDS 35396372 35396445 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35396372 35396445 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene CDS 35399276 35399596 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35399276 35399596 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene CDS 35399828 35399861 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35399828 35399876 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene exon 35401884 35402154 0.000000 - . gene_id "DSN1"; transcript_id "NM_024918:uc002xfz.3"; -chr20 hg19_knownGene CDS 35381194 35381300 0.000000 - 2 gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene exon 35380194 35381300 0.000000 - . gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene CDS 35383166 35383253 0.000000 - 0 gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene exon 35383166 35383253 0.000000 - . gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene CDS 35384085 35384232 0.000000 - 1 gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene exon 35384085 35384232 0.000000 - . gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene CDS 35386490 35386564 0.000000 - 1 gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene exon 35386490 35386564 0.000000 - . gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene CDS 35386961 35386980 0.000000 - 0 gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene exon 35386961 35387020 0.000000 - . gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene exon 35390864 35390951 0.000000 - . gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene exon 35395172 35395244 0.000000 - . gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene exon 35396372 35396445 0.000000 - . gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene exon 35401797 35402154 0.000000 - . gene_id "DSN1"; transcript_id "BC035821:uc002xfy.4"; -chr20 hg19_knownGene CDS 35381194 35381300 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene exon 35380194 35381300 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene CDS 35383166 35383253 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene exon 35383166 35383253 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene CDS 35384085 35384232 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene exon 35384085 35384232 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene CDS 35386490 35386564 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene exon 35386490 35386564 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene CDS 35386961 35387020 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene exon 35386961 35387020 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene CDS 35390864 35390951 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene exon 35390864 35390951 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene CDS 35395172 35395244 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene exon 35395172 35395244 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene CDS 35396372 35396445 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene exon 35396372 35396445 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene CDS 35399828 35399861 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene exon 35399828 35399876 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene exon 35402065 35402230 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145317:uc010zvs.2"; -chr20 hg19_knownGene CDS 35381194 35381300 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35380194 35381300 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene CDS 35383166 35383253 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35383166 35383253 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene CDS 35384085 35384232 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35384085 35384232 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene CDS 35386490 35386564 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35386490 35386564 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene CDS 35386961 35387020 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35386961 35387020 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene CDS 35390864 35390951 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35390864 35390951 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene CDS 35395172 35395244 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35395172 35395244 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene CDS 35396372 35396445 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35396372 35396445 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene CDS 35399276 35399596 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35399276 35399596 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene CDS 35399828 35399861 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35399828 35399876 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene exon 35402065 35402230 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145315:uc002xga.3"; -chr20 hg19_knownGene CDS 35381194 35381300 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene exon 35380194 35381300 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene CDS 35383166 35383253 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene exon 35383166 35383253 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene CDS 35384085 35384232 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene exon 35384085 35384232 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene CDS 35386490 35386564 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene exon 35386490 35386564 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene CDS 35386961 35387020 0.000000 - 1 gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene exon 35386961 35387020 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene CDS 35390864 35390951 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene exon 35390864 35390951 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene CDS 35395172 35395244 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene exon 35395172 35395244 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene CDS 35396372 35396445 0.000000 - 2 gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene exon 35396372 35396445 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene CDS 35399276 35399582 0.000000 - 0 gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene exon 35399276 35399596 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene exon 35402065 35402230 0.000000 - . gene_id "DSN1"; transcript_id "NM_001145318:uc002xgc.3"; -chr20 hg19_knownGene CDS 35381194 35381300 0.000000 - 2 gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene exon 35380194 35381300 0.000000 - . gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene CDS 35383166 35383253 0.000000 - 0 gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene exon 35383166 35383253 0.000000 - . gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene CDS 35384085 35384232 0.000000 - 1 gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene exon 35384085 35384232 0.000000 - . gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene CDS 35386490 35386564 0.000000 - 1 gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene exon 35386490 35386564 0.000000 - . gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene CDS 35386961 35387020 0.000000 - 1 gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene exon 35386961 35387020 0.000000 - . gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene CDS 35390864 35390951 0.000000 - 2 gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene exon 35390864 35390951 0.000000 - . gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene CDS 35395172 35395244 0.000000 - 0 gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene exon 35395172 35395244 0.000000 - . gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene CDS 35396372 35396445 0.000000 - 2 gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene exon 35396372 35396445 0.000000 - . gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene CDS 35399276 35399582 0.000000 - 0 gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene exon 35399276 35399876 0.000000 - . gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene exon 35402065 35402230 0.000000 - . gene_id "DSN1"; transcript_id "BC026011:uc002xgb.3"; -chr20 hg19_knownGene CDS 35421604 35423157 0.000000 - 0 gene_id "KIAA0889"; transcript_id "BC113433:uc021wcy.1"; -chr20 hg19_knownGene exon 35419762 35423278 0.000000 - . gene_id "KIAA0889"; transcript_id "BC113433:uc021wcy.1"; -chr20 hg19_knownGene CDS 35406180 35406234 0.000000 - 1 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35405845 35406234 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35422778 35423002 0.000000 - 1 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35422778 35423002 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35425285 35425355 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35425285 35425355 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35425905 35425976 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35425905 35425976 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35431259 35431510 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35431259 35431510 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35433138 35433305 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35433138 35433305 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35434256 35434360 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35434256 35434360 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35436916 35437146 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35436916 35437146 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35438385 35438510 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35438385 35438510 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35441107 35441247 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35441107 35441247 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35443529 35444710 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35443529 35444710 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35445810 35445872 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35445810 35445872 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35457457 35457615 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35457457 35457615 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35467620 35467817 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35467620 35467844 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene exon 35487977 35488276 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_199181:uc002xgd.1"; -chr20 hg19_knownGene CDS 35414891 35415040 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35412178 35415040 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35421652 35423002 0.000000 - 1 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35421652 35423002 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35425285 35425355 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35425285 35425355 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35425905 35425976 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35425905 35425976 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35431259 35431510 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35431259 35431510 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35433138 35433305 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35433138 35433305 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35434256 35434360 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35434256 35434360 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35436916 35437146 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35436916 35437146 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35438385 35438510 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35438385 35438510 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35441107 35441247 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35441107 35441247 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35443529 35444710 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35443529 35444710 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35445810 35445872 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35445810 35445872 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35457457 35457615 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35457457 35457615 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35467620 35467844 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35467620 35467844 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35491061 35491747 0.000000 - 0 gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene exon 35491061 35492087 0.000000 - . gene_id "KIAA0889"; transcript_id "NM_080627:uc021wcx.1"; -chr20 hg19_knownGene CDS 35504578 35504610 0.000000 + 0 gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene exon 35504570 35504610 0.000000 + . gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene CDS 35506302 35506457 0.000000 + 0 gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene exon 35506302 35506457 0.000000 + . gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene CDS 35507444 35507596 0.000000 + 0 gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene exon 35507444 35507596 0.000000 + . gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene CDS 35509058 35509153 0.000000 + 0 gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene exon 35509058 35509153 0.000000 + . gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene CDS 35515858 35515931 0.000000 + 0 gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene exon 35515858 35515931 0.000000 + . gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene CDS 35517654 35517786 0.000000 + 1 gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene exon 35517654 35517855 0.000000 + . gene_id "C20orf118"; transcript_id "BC127688:uc021wcz.1"; -chr20 hg19_knownGene CDS 35504578 35504610 0.000000 + 0 gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene exon 35504570 35504610 0.000000 + . gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene CDS 35506302 35506457 0.000000 + 0 gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene exon 35506302 35506457 0.000000 + . gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene CDS 35507444 35507596 0.000000 + 0 gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene exon 35507444 35507596 0.000000 + . gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene CDS 35509058 35509153 0.000000 + 0 gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene exon 35509058 35509153 0.000000 + . gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene CDS 35515858 35515931 0.000000 + 0 gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene exon 35515858 35515931 0.000000 + . gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene CDS 35517654 35517786 0.000000 + 1 gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene exon 35517654 35517806 0.000000 + . gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene exon 35521265 35522632 0.000000 + . gene_id "C20orf118"; transcript_id "NM_080628:uc002xgg.1"; -chr20 hg19_knownGene exon 35520227 35521469 0.000000 - . gene_id "SAMHD1"; transcript_id "AK311150:uc010gft.2"; -chr20 hg19_knownGene exon 35526225 35526362 0.000000 - . gene_id "SAMHD1"; transcript_id "AK311150:uc010gft.2"; -chr20 hg19_knownGene exon 35532560 35532652 0.000000 - . gene_id "SAMHD1"; transcript_id "AK311150:uc010gft.2"; -chr20 hg19_knownGene exon 35533767 35533906 0.000000 - . gene_id "SAMHD1"; transcript_id "AK311150:uc010gft.2"; -chr20 hg19_knownGene CDS 35521338 35521469 0.000000 - 0 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35520227 35521469 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35526225 35526362 0.000000 - 0 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35526225 35526362 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35526843 35526947 0.000000 - 0 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35526843 35526947 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35532560 35532652 0.000000 - 0 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35532560 35532652 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35533767 35533906 0.000000 - 2 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35533767 35533906 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35539621 35539736 0.000000 - 1 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35539621 35539736 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35540864 35540955 0.000000 - 0 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35540864 35540955 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35545125 35545233 0.000000 - 1 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35545125 35545233 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35545352 35545452 0.000000 - 0 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35545352 35545452 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35547767 35547922 0.000000 - 0 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35547767 35547922 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35555585 35555655 0.000000 - 2 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35555585 35555655 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35559163 35559278 0.000000 - 1 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35559163 35559278 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35563432 35563592 0.000000 - 0 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35563432 35563592 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35569442 35569514 0.000000 - 1 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35569442 35569514 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35575141 35575207 0.000000 - 2 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35575141 35575207 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene CDS 35579839 35580046 0.000000 - 0 gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35579839 35580246 0.000000 - . gene_id "SAMHD1"; transcript_id "NM_015474:uc002xgh.2"; -chr20 hg19_knownGene exon 35629596 35630032 0.000000 - . gene_id "FKSG51"; transcript_id "AF336884:uc021wda.1"; -chr20 hg19_knownGene CDS 35627165 35627332 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35626178 35627332 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35632105 35632269 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35632105 35632269 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35635814 35635962 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35635814 35635962 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35646682 35646772 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35646682 35646772 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35649062 35649133 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35649062 35649133 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35651053 35651229 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35651053 35651229 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35661068 35661279 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35661068 35661279 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35663645 35663911 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35663645 35663911 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35668556 35668688 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35668556 35668688 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35672489 35672653 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35672489 35672653 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35675456 35675593 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35675456 35675593 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35683956 35684059 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35683956 35684059 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35684549 35684661 0.000000 - 1 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35684549 35684661 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35689506 35689672 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35689506 35689672 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35690487 35690673 0.000000 - 1 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35690487 35690673 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35693827 35693876 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35693827 35693876 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35695127 35695287 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35695127 35695287 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35695396 35695524 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35695396 35695524 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35695636 35695700 0.000000 - 1 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35695636 35695700 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35696389 35696589 0.000000 - 1 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35696389 35696589 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35717392 35717525 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35717392 35717525 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35724176 35724331 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene exon 35724176 35724410 0.000000 - . gene_id "RBL1"; transcript_id "NM_002895:uc002xgi.3"; -chr20 hg19_knownGene CDS 35632099 35632269 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35631977 35632269 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35635814 35635962 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35635814 35635962 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35646682 35646772 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35646682 35646772 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35649062 35649133 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35649062 35649133 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35651053 35651229 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35651053 35651229 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35661068 35661279 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35661068 35661279 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35663645 35663911 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35663645 35663911 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35668556 35668688 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35668556 35668688 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35672489 35672653 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35672489 35672653 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35675456 35675593 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35675456 35675593 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35683956 35684059 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35683956 35684059 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35684549 35684661 0.000000 - 1 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35684549 35684661 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35689506 35689672 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35689506 35689672 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35690487 35690673 0.000000 - 1 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35690487 35690673 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35693827 35693876 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35693827 35693876 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35695127 35695287 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35695127 35695287 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35695396 35695524 0.000000 - 2 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35695396 35695524 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35695636 35695700 0.000000 - 1 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35695636 35695700 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35696389 35696589 0.000000 - 1 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35696389 35696589 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35717392 35717525 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35717392 35717525 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene CDS 35724176 35724331 0.000000 - 0 gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35724176 35724410 0.000000 - . gene_id "RBL1"; transcript_id "NM_183404:uc002xgj.1"; -chr20 hg19_knownGene exon 35684549 35684661 0.000000 - . gene_id "RBL1"; transcript_id "AK310870:uc010gfv.1"; -chr20 hg19_knownGene exon 35689506 35689672 0.000000 - . gene_id "RBL1"; transcript_id "AK310870:uc010gfv.1"; -chr20 hg19_knownGene exon 35690349 35690673 0.000000 - . gene_id "RBL1"; transcript_id "AK310870:uc010gfv.1"; -chr20 hg19_knownGene exon 35693827 35693876 0.000000 - . gene_id "RBL1"; transcript_id "AK310870:uc010gfv.1"; -chr20 hg19_knownGene exon 35695127 35695287 0.000000 - . gene_id "RBL1"; transcript_id "AK310870:uc010gfv.1"; -chr20 hg19_knownGene exon 35695396 35695524 0.000000 - . gene_id "RBL1"; transcript_id "AK310870:uc010gfv.1"; -chr20 hg19_knownGene exon 35695636 35695700 0.000000 - . gene_id "RBL1"; transcript_id "AK310870:uc010gfv.1"; -chr20 hg19_knownGene exon 35696389 35696589 0.000000 - . gene_id "RBL1"; transcript_id "AK310870:uc010gfv.1"; -chr20 hg19_knownGene exon 35717392 35717525 0.000000 - . gene_id "RBL1"; transcript_id "AK310870:uc010gfv.1"; -chr20 hg19_knownGene exon 35724176 35724410 0.000000 - . gene_id "RBL1"; transcript_id "AK310870:uc010gfv.1"; -chr20 hg19_knownGene exon 35729629 35729821 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35731093 35731238 0.000000 - 2 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35731067 35731238 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35737002 35737067 0.000000 - 2 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35737002 35737067 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35738659 35738758 0.000000 - 0 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35738659 35738758 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35740727 35740849 0.000000 - 0 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35740727 35740849 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35742393 35742548 0.000000 - 0 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35742393 35742548 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35743576 35743740 0.000000 - 0 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35743576 35743740 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35748101 35748241 0.000000 - 0 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35748101 35748241 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35748907 35749021 0.000000 - 1 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35748907 35749021 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35749302 35749439 0.000000 - 1 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35749302 35749439 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35752012 35752202 0.000000 - 0 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35752012 35752202 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35757435 35757570 0.000000 - 1 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35757435 35757570 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35766213 35766373 0.000000 - 0 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35766213 35766373 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35772120 35772244 0.000000 - 2 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35772120 35772244 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35776177 35776312 0.000000 - 0 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35776177 35776312 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35786263 35786358 0.000000 - 0 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35786263 35786358 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene CDS 35787295 35787321 0.000000 - 0 gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35787295 35787439 0.000000 - . gene_id "C20orf132"; transcript_id "AL833864:uc002xgk.3"; -chr20 hg19_knownGene exon 35729629 35729821 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35731093 35731238 0.000000 - 2 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35731067 35731238 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35737002 35737067 0.000000 - 2 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35737002 35737067 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35738659 35738758 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35738659 35738758 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35740727 35740849 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35740727 35740849 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35742393 35742548 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35742393 35742548 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35743576 35743740 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35743576 35743740 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35748101 35748241 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35748101 35748241 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35748907 35749021 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35748907 35749021 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35749302 35749439 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35749302 35749439 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35752012 35752202 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35752012 35752202 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35757435 35757570 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35757435 35757570 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35766213 35766373 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35766213 35766373 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35769565 35769717 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35769565 35769717 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35772120 35772244 0.000000 - 2 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35772120 35772244 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35776177 35776312 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35776177 35776312 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35783466 35783570 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35783466 35783570 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35786263 35786358 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35786263 35786358 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35787295 35787439 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35787295 35787439 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35788500 35788579 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35788500 35788579 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35796524 35796646 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35796524 35796646 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35800315 35800460 0.000000 - 2 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35800315 35800460 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35802398 35802519 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35802398 35802519 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35807626 35807790 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35807626 35807790 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35807791 35807792 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35807791 35807792 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35807794 35807883 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene exon 35807794 35807974 0.000000 - . gene_id "C20orf132"; transcript_id "NM_152503:uc010zvu.2"; -chr20 hg19_knownGene CDS 35757426 35757570 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35757224 35757570 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35766213 35766373 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35766213 35766373 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35769565 35769717 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35769565 35769717 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35772120 35772244 0.000000 - 2 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35772120 35772244 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35776177 35776312 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35776177 35776312 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35783466 35783570 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35783466 35783570 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35786263 35786358 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35786263 35786358 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35787295 35787439 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35787295 35787439 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35788500 35788579 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35788500 35788579 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35796524 35796646 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35796524 35796646 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35800315 35800460 0.000000 - 2 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35800315 35800460 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35802398 35802519 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35802398 35802519 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35807626 35807790 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35807626 35807790 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35807791 35807792 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35807791 35807792 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35807794 35807883 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene exon 35807794 35807974 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213631:uc002xgm.2"; -chr20 hg19_knownGene CDS 35757426 35757570 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35757224 35757570 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35766213 35766373 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35766213 35766373 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35769565 35769717 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35769565 35769717 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35772120 35772244 0.000000 - 2 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35772120 35772244 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35776177 35776312 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35776177 35776312 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35786263 35786358 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35786263 35786358 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35787295 35787439 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35787295 35787439 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35788500 35788579 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35788500 35788579 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35796524 35796646 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35796524 35796646 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35800315 35800460 0.000000 - 2 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35800315 35800460 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35802398 35802519 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35802398 35802519 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35807626 35807790 0.000000 - 1 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35807626 35807790 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35807791 35807792 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35807791 35807792 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene CDS 35807794 35807883 0.000000 - 0 gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35807794 35807974 0.000000 - . gene_id "C20orf132"; transcript_id "NM_213632:uc002xgn.2"; -chr20 hg19_knownGene exon 35807456 35807772 0.000000 + . gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene CDS 35812769 35812776 0.000000 + 0 gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene exon 35812583 35812776 0.000000 + . gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene CDS 35832288 35832363 0.000000 + 1 gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene exon 35832288 35832363 0.000000 + . gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene CDS 35833170 35833304 0.000000 + 0 gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene exon 35833170 35833304 0.000000 + . gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene CDS 35835676 35835852 0.000000 + 0 gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene exon 35835676 35835852 0.000000 + . gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene CDS 35838450 35838568 0.000000 + 0 gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene exon 35838450 35838568 0.000000 + . gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene CDS 35842163 35842268 0.000000 + 1 gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene exon 35842163 35842268 0.000000 + . gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene CDS 35852281 35852372 0.000000 + 0 gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene exon 35852281 35852372 0.000000 + . gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene CDS 35854091 35854205 0.000000 + 1 gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene exon 35854091 35854205 0.000000 + . gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene CDS 35856953 35857156 0.000000 + 0 gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene exon 35856953 35857711 0.000000 + . gene_id "RPN2"; transcript_id "AK308683:uc010gfw.2"; -chr20 hg19_knownGene exon 35826800 35826895 0.000000 + . gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene exon 35827453 35827628 0.000000 + . gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene exon 35832288 35832363 0.000000 + . gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene CDS 35833269 35833304 0.000000 + 0 gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene exon 35833170 35833304 0.000000 + . gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene CDS 35835676 35835852 0.000000 + 0 gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene exon 35835676 35835852 0.000000 + . gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene CDS 35838450 35838568 0.000000 + 0 gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene exon 35838450 35838568 0.000000 + . gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene CDS 35842163 35842268 0.000000 + 1 gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene exon 35842163 35842268 0.000000 + . gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene CDS 35852281 35852372 0.000000 + 0 gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene exon 35852281 35852372 0.000000 + . gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene CDS 35854091 35854205 0.000000 + 1 gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene exon 35854091 35854205 0.000000 + . gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene CDS 35856953 35857156 0.000000 + 0 gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene exon 35856953 35857711 0.000000 + . gene_id "RPN2"; transcript_id "AK296126:uc021wdb.1"; -chr20 hg19_knownGene CDS 35807760 35807772 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35807456 35807772 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35812583 35812776 0.000000 + 2 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35812583 35812776 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35827453 35827628 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35827453 35827628 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35832288 35832363 0.000000 + 1 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35832288 35832363 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35833170 35833304 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35833170 35833304 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35835676 35835852 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35835676 35835852 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35838450 35838568 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35838450 35838568 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35842163 35842268 0.000000 + 1 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35842163 35842268 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35852281 35852372 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35852281 35852372 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35854091 35854205 0.000000 + 1 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35854091 35854205 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35856953 35857147 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35856953 35857147 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35858376 35858462 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35858376 35858462 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35860699 35860794 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35860699 35860794 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35862423 35862498 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35862423 35862498 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35864983 35865112 0.000000 + 2 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35864983 35865112 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35866805 35866852 0.000000 + 1 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35866805 35866852 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35869706 35869715 0.000000 + 1 gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene exon 35869706 35870025 0.000000 + . gene_id "RPN2"; transcript_id "NM_001135771:uc002xgq.3"; -chr20 hg19_knownGene CDS 35807760 35807772 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35807456 35807772 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35812583 35812776 0.000000 + 2 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35812583 35812776 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35826800 35826895 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35826800 35826895 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35827453 35827628 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35827453 35827628 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35832288 35832363 0.000000 + 1 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35832288 35832363 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35833170 35833304 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35833170 35833304 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35835676 35835852 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35835676 35835852 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35838450 35838568 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35838450 35838568 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35842163 35842268 0.000000 + 1 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35842163 35842268 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35852281 35852372 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35852281 35852372 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35854091 35854205 0.000000 + 1 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35854091 35854205 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35856953 35857147 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35856953 35857147 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35858376 35858462 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35858376 35858462 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35860699 35860794 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35860699 35860794 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35862423 35862498 0.000000 + 0 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35862423 35862498 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35864983 35865112 0.000000 + 2 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35864983 35865112 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35869706 35869715 0.000000 + 1 gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene exon 35869706 35870025 0.000000 + . gene_id "RPN2"; transcript_id "NM_002951:uc002xgp.3"; -chr20 hg19_knownGene CDS 35879619 35879631 0.000000 - 1 gene_id "GHRH"; transcript_id "NM_001184731:uc021wdc.1"; -chr20 hg19_knownGene exon 35879490 35879631 0.000000 - . gene_id "GHRH"; transcript_id "NM_001184731:uc021wdc.1"; -chr20 hg19_knownGene CDS 35882613 35882732 0.000000 - 1 gene_id "GHRH"; transcript_id "NM_001184731:uc021wdc.1"; -chr20 hg19_knownGene exon 35882613 35882732 0.000000 - . gene_id "GHRH"; transcript_id "NM_001184731:uc021wdc.1"; -chr20 hg19_knownGene CDS 35884797 35884901 0.000000 - 1 gene_id "GHRH"; transcript_id "NM_001184731:uc021wdc.1"; -chr20 hg19_knownGene exon 35884797 35884901 0.000000 - . gene_id "GHRH"; transcript_id "NM_001184731:uc021wdc.1"; -chr20 hg19_knownGene CDS 35885210 35885292 0.000000 - 0 gene_id "GHRH"; transcript_id "NM_001184731:uc021wdc.1"; -chr20 hg19_knownGene exon 35885210 35885311 0.000000 - . gene_id "GHRH"; transcript_id "NM_001184731:uc021wdc.1"; -chr20 hg19_knownGene CDS 35879619 35879634 0.000000 - 1 gene_id "GHRH"; transcript_id "NM_021081:uc002xgr.3"; -chr20 hg19_knownGene exon 35879490 35879634 0.000000 - . gene_id "GHRH"; transcript_id "NM_021081:uc002xgr.3"; -chr20 hg19_knownGene CDS 35882613 35882732 0.000000 - 1 gene_id "GHRH"; transcript_id "NM_021081:uc002xgr.3"; -chr20 hg19_knownGene exon 35882613 35882732 0.000000 - . gene_id "GHRH"; transcript_id "NM_021081:uc002xgr.3"; -chr20 hg19_knownGene CDS 35884797 35884901 0.000000 - 1 gene_id "GHRH"; transcript_id "NM_021081:uc002xgr.3"; -chr20 hg19_knownGene exon 35884797 35884901 0.000000 - . gene_id "GHRH"; transcript_id "NM_021081:uc002xgr.3"; -chr20 hg19_knownGene CDS 35885210 35885292 0.000000 - 0 gene_id "GHRH"; transcript_id "NM_021081:uc002xgr.3"; -chr20 hg19_knownGene exon 35885210 35885311 0.000000 - . gene_id "GHRH"; transcript_id "NM_021081:uc002xgr.3"; -chr20 hg19_knownGene CDS 35879619 35879631 0.000000 - 1 gene_id "GHRH"; transcript_id "E00274:uc002xgt.3"; -chr20 hg19_knownGene exon 35879490 35879631 0.000000 - . gene_id "GHRH"; transcript_id "E00274:uc002xgt.3"; -chr20 hg19_knownGene CDS 35882613 35882732 0.000000 - 1 gene_id "GHRH"; transcript_id "E00274:uc002xgt.3"; -chr20 hg19_knownGene exon 35882613 35882732 0.000000 - . gene_id "GHRH"; transcript_id "E00274:uc002xgt.3"; -chr20 hg19_knownGene CDS 35884797 35884901 0.000000 - 1 gene_id "GHRH"; transcript_id "E00274:uc002xgt.3"; -chr20 hg19_knownGene exon 35884797 35884901 0.000000 - . gene_id "GHRH"; transcript_id "E00274:uc002xgt.3"; -chr20 hg19_knownGene CDS 35885210 35885292 0.000000 - 0 gene_id "GHRH"; transcript_id "E00274:uc002xgt.3"; -chr20 hg19_knownGene exon 35885210 35885311 0.000000 - . gene_id "GHRH"; transcript_id "E00274:uc002xgt.3"; -chr20 hg19_knownGene exon 35890146 35890238 0.000000 - . gene_id "GHRH"; transcript_id "E00274:uc002xgt.3"; -chr20 hg19_knownGene CDS 35879619 35879634 0.000000 - 1 gene_id "GHRH"; transcript_id "E00273:uc002xgs.3"; -chr20 hg19_knownGene exon 35879490 35879634 0.000000 - . gene_id "GHRH"; transcript_id "E00273:uc002xgs.3"; -chr20 hg19_knownGene CDS 35882613 35882732 0.000000 - 1 gene_id "GHRH"; transcript_id "E00273:uc002xgs.3"; -chr20 hg19_knownGene exon 35882613 35882732 0.000000 - . gene_id "GHRH"; transcript_id "E00273:uc002xgs.3"; -chr20 hg19_knownGene CDS 35884797 35884901 0.000000 - 1 gene_id "GHRH"; transcript_id "E00273:uc002xgs.3"; -chr20 hg19_knownGene exon 35884797 35884901 0.000000 - . gene_id "GHRH"; transcript_id "E00273:uc002xgs.3"; -chr20 hg19_knownGene CDS 35885210 35885292 0.000000 - 0 gene_id "GHRH"; transcript_id "E00273:uc002xgs.3"; -chr20 hg19_knownGene exon 35885210 35885311 0.000000 - . gene_id "GHRH"; transcript_id "E00273:uc002xgs.3"; -chr20 hg19_knownGene exon 35890146 35890238 0.000000 - . gene_id "GHRH"; transcript_id "E00273:uc002xgs.3"; -chr20 hg19_knownGene exon 35918051 35918089 0.000000 + . gene_id "MANBAL"; transcript_id "NM_022077:uc002xgu.3"; -chr20 hg19_knownGene exon 35927166 35927282 0.000000 + . gene_id "MANBAL"; transcript_id "NM_022077:uc002xgu.3"; -chr20 hg19_knownGene CDS 35929667 35929816 0.000000 + 0 gene_id "MANBAL"; transcript_id "NM_022077:uc002xgu.3"; -chr20 hg19_knownGene exon 35929611 35929816 0.000000 + . gene_id "MANBAL"; transcript_id "NM_022077:uc002xgu.3"; -chr20 hg19_knownGene CDS 35944711 35944815 0.000000 + 0 gene_id "MANBAL"; transcript_id "NM_022077:uc002xgu.3"; -chr20 hg19_knownGene exon 35944711 35945663 0.000000 + . gene_id "MANBAL"; transcript_id "NM_022077:uc002xgu.3"; -chr20 hg19_knownGene exon 35918051 35918089 0.000000 + . gene_id "MANBAL"; transcript_id "NM_001003897:uc002xgv.3"; -chr20 hg19_knownGene CDS 35929667 35929816 0.000000 + 0 gene_id "MANBAL"; transcript_id "NM_001003897:uc002xgv.3"; -chr20 hg19_knownGene exon 35929611 35929816 0.000000 + . gene_id "MANBAL"; transcript_id "NM_001003897:uc002xgv.3"; -chr20 hg19_knownGene CDS 35944711 35944815 0.000000 + 0 gene_id "MANBAL"; transcript_id "NM_001003897:uc002xgv.3"; -chr20 hg19_knownGene exon 35944711 35945663 0.000000 + . gene_id "MANBAL"; transcript_id "NM_001003897:uc002xgv.3"; -chr20 hg19_knownGene exon 35918051 35918089 0.000000 + . gene_id "MANBAL"; transcript_id "BC016822:uc002xgw.3"; -chr20 hg19_knownGene exon 35925699 35925937 0.000000 + . gene_id "MANBAL"; transcript_id "BC016822:uc002xgw.3"; -chr20 hg19_knownGene exon 35927166 35927282 0.000000 + . gene_id "MANBAL"; transcript_id "BC016822:uc002xgw.3"; -chr20 hg19_knownGene exon 35929611 35929816 0.000000 + . gene_id "MANBAL"; transcript_id "BC016822:uc002xgw.3"; -chr20 hg19_knownGene exon 35944711 35945663 0.000000 + . gene_id "MANBAL"; transcript_id "BC016822:uc002xgw.3"; -chr20 hg19_knownGene exon 36031514 36033817 0.000000 + . gene_id "AX747164"; transcript_id "AX747164:uc021wdd.1"; -chr20 hg19_knownGene exon 35973088 35973290 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 35993607 35993680 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36011022 36011189 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36012557 36012806 0.000000 + 0 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36012553 36012806 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36014478 36014577 0.000000 + 2 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36014478 36014577 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36022298 36022396 0.000000 + 1 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36022298 36022396 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36022577 36022680 0.000000 + 1 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36022577 36022680 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36024565 36024714 0.000000 + 2 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36024565 36024714 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36026102 36026257 0.000000 + 2 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36026102 36026257 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36028518 36028697 0.000000 + 2 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36028518 36028697 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36030005 36030081 0.000000 + 2 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36030005 36030081 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36030838 36030991 0.000000 + 0 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36030838 36030991 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36031152 36031283 0.000000 + 2 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36031152 36031283 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene CDS 36031574 36031779 0.000000 + 2 gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 36031574 36033821 0.000000 + . gene_id "SRC"; transcript_id "NM_005417:uc002xgx.3"; -chr20 hg19_knownGene exon 35974557 35974658 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 35993607 35993680 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36011022 36011189 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36012557 36012806 0.000000 + 0 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36012553 36012806 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36014478 36014577 0.000000 + 2 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36014478 36014577 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36022298 36022396 0.000000 + 1 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36022298 36022396 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36022577 36022680 0.000000 + 1 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36022577 36022680 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36024565 36024714 0.000000 + 2 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36024565 36024714 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36026102 36026257 0.000000 + 2 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36026102 36026257 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36028518 36028697 0.000000 + 2 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36028518 36028697 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36030005 36030081 0.000000 + 2 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36030005 36030081 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36030838 36030991 0.000000 + 0 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36030838 36030991 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36031152 36031283 0.000000 + 2 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36031152 36031283 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36031574 36031779 0.000000 + 2 gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene exon 36031574 36033821 0.000000 + . gene_id "SRC"; transcript_id "NM_198291:uc002xgy.3"; -chr20 hg19_knownGene CDS 36147316 36147576 0.000000 - 0 gene_id "BLCAP"; transcript_id "CCDS13295:uc021wdg.1"; -chr20 hg19_knownGene exon 36147313 36147576 0.000000 - . gene_id "BLCAP"; transcript_id "CCDS13295:uc021wdg.1"; -chr20 hg19_knownGene CDS 36149734 36149805 0.000000 + 0 gene_id "NNAT"; transcript_id "NM_005386:uc002xhd.3"; -chr20 hg19_knownGene exon 36149607 36149805 0.000000 + . gene_id "NNAT"; transcript_id "NM_005386:uc002xhd.3"; -chr20 hg19_knownGene CDS 36150760 36150840 0.000000 + 0 gene_id "NNAT"; transcript_id "NM_005386:uc002xhd.3"; -chr20 hg19_knownGene exon 36150760 36150840 0.000000 + . gene_id "NNAT"; transcript_id "NM_005386:uc002xhd.3"; -chr20 hg19_knownGene CDS 36151069 36151158 0.000000 + 0 gene_id "NNAT"; transcript_id "NM_005386:uc002xhd.3"; -chr20 hg19_knownGene exon 36151069 36152090 0.000000 + . gene_id "NNAT"; transcript_id "NM_005386:uc002xhd.3"; -chr20 hg19_knownGene CDS 36149734 36149805 0.000000 + 0 gene_id "NNAT"; transcript_id "NM_181689:uc002xhe.3"; -chr20 hg19_knownGene exon 36149607 36149805 0.000000 + . gene_id "NNAT"; transcript_id "NM_181689:uc002xhe.3"; -chr20 hg19_knownGene CDS 36151069 36151158 0.000000 + 0 gene_id "NNAT"; transcript_id "NM_181689:uc002xhe.3"; -chr20 hg19_knownGene exon 36151069 36152090 0.000000 + . gene_id "NNAT"; transcript_id "NM_181689:uc002xhe.3"; -chr20 hg19_knownGene CDS 36147316 36147576 0.000000 - 0 gene_id "BLCAP"; transcript_id "NM_001167823:uc021wde.1"; -chr20 hg19_knownGene exon 36145819 36147752 0.000000 - . gene_id "BLCAP"; transcript_id "NM_001167823:uc021wde.1"; -chr20 hg19_knownGene exon 36152779 36152953 0.000000 - . gene_id "BLCAP"; transcript_id "NM_001167823:uc021wde.1"; -chr20 hg19_knownGene CDS 36147316 36147576 0.000000 - 0 gene_id "BLCAP"; transcript_id "NM_001167822:uc021wdf.1"; -chr20 hg19_knownGene exon 36145819 36147752 0.000000 - . gene_id "BLCAP"; transcript_id "NM_001167822:uc021wdf.1"; -chr20 hg19_knownGene exon 36155976 36156083 0.000000 - . gene_id "BLCAP"; transcript_id "NM_001167822:uc021wdf.1"; -chr20 hg19_knownGene CDS 36147316 36147576 0.000000 - 0 gene_id "BLCAP"; transcript_id "NM_001167821:uc002xhb.3"; -chr20 hg19_knownGene exon 36145819 36147752 0.000000 - . gene_id "BLCAP"; transcript_id "NM_001167821:uc002xhb.3"; -chr20 hg19_knownGene exon 36156033 36156134 0.000000 - . gene_id "BLCAP"; transcript_id "NM_001167821:uc002xhb.3"; -chr20 hg19_knownGene CDS 36147316 36147576 0.000000 - 0 gene_id "BLCAP"; transcript_id "NM_001167820:uc002xha.3"; -chr20 hg19_knownGene exon 36145819 36147752 0.000000 - . gene_id "BLCAP"; transcript_id "NM_001167820:uc002xha.3"; -chr20 hg19_knownGene exon 36149721 36149853 0.000000 - . gene_id "BLCAP"; transcript_id "NM_001167820:uc002xha.3"; -chr20 hg19_knownGene exon 36156195 36156333 0.000000 - . gene_id "BLCAP"; transcript_id "NM_001167820:uc002xha.3"; -chr20 hg19_knownGene CDS 36147316 36147576 0.000000 - 0 gene_id "BLCAP"; transcript_id "NM_006698:uc002xhc.3"; -chr20 hg19_knownGene exon 36145819 36147752 0.000000 - . gene_id "BLCAP"; transcript_id "NM_006698:uc002xhc.3"; -chr20 hg19_knownGene exon 36156195 36156333 0.000000 - . gene_id "BLCAP"; transcript_id "NM_006698:uc002xhc.3"; -chr20 hg19_knownGene exon 36305312 36305488 0.000000 + . gene_id "LOC100287792"; transcript_id "NR_040021:uc021wdh.1"; -chr20 hg19_knownGene exon 36306360 36307020 0.000000 + . gene_id "LOC100287792"; transcript_id "NR_040021:uc021wdh.1"; -chr20 hg19_knownGene exon 36307318 36307428 0.000000 + . gene_id "LOC100287792"; transcript_id "NR_040021:uc021wdh.1"; -chr20 hg19_knownGene exon 36310474 36311636 0.000000 + . gene_id "LOC100287792"; transcript_id "NR_040021:uc021wdh.1"; -chr20 hg19_knownGene exon 36322434 36322554 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK293420:uc021wdi.1"; -chr20 hg19_knownGene exon 36355704 36355804 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK293420:uc021wdi.1"; -chr20 hg19_knownGene CDS 36361332 36361469 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "AK293420:uc021wdi.1"; -chr20 hg19_knownGene exon 36361281 36361469 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK293420:uc021wdi.1"; -chr20 hg19_knownGene CDS 36365780 36365886 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "AK293420:uc021wdi.1"; -chr20 hg19_knownGene exon 36365780 36365886 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK293420:uc021wdi.1"; -chr20 hg19_knownGene CDS 36374870 36375005 0.000000 + 1 gene_id "CTNNBL1"; transcript_id "AK293420:uc021wdi.1"; -chr20 hg19_knownGene exon 36374870 36375009 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK293420:uc021wdi.1"; -chr20 hg19_knownGene CDS 36322525 36322554 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36322434 36322554 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36361281 36361469 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36361281 36361469 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36365780 36365886 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36365780 36365886 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36374870 36375009 0.000000 + 1 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36374870 36375009 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36385961 36386058 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36385961 36386058 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36393599 36393692 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36393599 36393692 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36396355 36396446 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36396355 36396446 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36405747 36405819 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36405747 36405819 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36406056 36406114 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36406056 36406114 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36407589 36407737 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36407589 36407737 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36431269 36431450 0.000000 + 1 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36431269 36431450 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36468504 36468601 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36468504 36468601 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36470741 36470821 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36470741 36470821 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36488301 36488438 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36488301 36488438 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36488674 36488746 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36488674 36488746 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene CDS 36500327 36500412 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36500327 36500520 0.000000 + . gene_id "CTNNBL1"; transcript_id "NM_030877:uc021wdj.1"; -chr20 hg19_knownGene exon 36373047 36373115 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36375047 36375049 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36374870 36375049 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36393599 36393692 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36393599 36393692 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36396355 36396446 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36396355 36396446 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36405747 36405819 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36405747 36405819 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36406056 36406114 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36406056 36406114 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36407589 36407737 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36407589 36407737 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36431269 36431450 0.000000 + 1 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36431269 36431450 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36468504 36468601 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36468504 36468601 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36470741 36470821 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36470741 36470821 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36488301 36488438 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36488301 36488438 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36488674 36488746 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36488674 36488746 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene CDS 36500327 36500412 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36500327 36500520 0.000000 + . gene_id "CTNNBL1"; transcript_id "AF367471:uc002xhh.3"; -chr20 hg19_knownGene exon 36378253 36379532 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36379888 36380068 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36384693 36384793 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36385973 36386058 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36393599 36393692 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36396355 36396446 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36405747 36405819 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36406056 36406114 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36407589 36407737 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36431269 36431450 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36460650 36460747 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36468504 36468601 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36470741 36470821 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36488301 36488438 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36488674 36488746 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene exon 36500327 36500520 0.000000 + . gene_id "CTNNBL1"; transcript_id "AK091216:uc002xhi.3"; -chr20 hg19_knownGene CDS 36405753 36405819 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene exon 36405675 36405819 0.000000 + . gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene CDS 36406056 36406114 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene exon 36406056 36406114 0.000000 + . gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene CDS 36407589 36407737 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene exon 36407589 36407737 0.000000 + . gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene CDS 36431269 36431450 0.000000 + 1 gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene exon 36431269 36431450 0.000000 + . gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene CDS 36468504 36468601 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene exon 36468504 36468601 0.000000 + . gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene CDS 36470741 36470821 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene exon 36470741 36470821 0.000000 + . gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene CDS 36488301 36488438 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene exon 36488301 36488438 0.000000 + . gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene CDS 36488674 36488746 0.000000 + 0 gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene exon 36488674 36488746 0.000000 + . gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene CDS 36500327 36500412 0.000000 + 2 gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene exon 36500327 36500520 0.000000 + . gene_id "CTNNBL1"; transcript_id "BC036739:uc002xhj.3"; -chr20 hg19_knownGene CDS 36531753 36531873 0.000000 + 0 gene_id "VSTM2L"; transcript_id "NM_080607:uc002xhk.4"; -chr20 hg19_knownGene exon 36531499 36531873 0.000000 + . gene_id "VSTM2L"; transcript_id "NM_080607:uc002xhk.4"; -chr20 hg19_knownGene CDS 36560037 36560206 0.000000 + 2 gene_id "VSTM2L"; transcript_id "NM_080607:uc002xhk.4"; -chr20 hg19_knownGene exon 36560037 36560206 0.000000 + . gene_id "VSTM2L"; transcript_id "NM_080607:uc002xhk.4"; -chr20 hg19_knownGene CDS 36561941 36561991 0.000000 + 0 gene_id "VSTM2L"; transcript_id "NM_080607:uc002xhk.4"; -chr20 hg19_knownGene exon 36561941 36561991 0.000000 + . gene_id "VSTM2L"; transcript_id "NM_080607:uc002xhk.4"; -chr20 hg19_knownGene CDS 36572383 36572652 0.000000 + 0 gene_id "VSTM2L"; transcript_id "NM_080607:uc002xhk.4"; -chr20 hg19_knownGene exon 36572383 36573747 0.000000 + . gene_id "VSTM2L"; transcript_id "NM_080607:uc002xhk.4"; -chr20 hg19_knownGene CDS 36615490 36615828 0.000000 - 0 gene_id "AK123872"; transcript_id "AK123872:uc002xhn.1"; -chr20 hg19_knownGene exon 36613296 36615884 0.000000 - . gene_id "AK123872"; transcript_id "AK123872:uc002xhn.1"; -chr20 hg19_knownGene CDS 36611861 36612041 0.000000 - 1 gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene exon 36611423 36612041 0.000000 - . gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene CDS 36624777 36624864 0.000000 - 2 gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene exon 36624777 36624864 0.000000 - . gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene CDS 36625151 36625355 0.000000 - 0 gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene exon 36625151 36625355 0.000000 - . gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene CDS 36627590 36627730 0.000000 - 0 gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene exon 36627590 36627730 0.000000 - . gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene CDS 36631030 36631178 0.000000 - 2 gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene exon 36631030 36631178 0.000000 - . gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene CDS 36634599 36634799 0.000000 - 2 gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene exon 36634599 36634799 0.000000 - . gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene CDS 36639917 36642218 0.000000 - 0 gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene exon 36639917 36642259 0.000000 - . gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene exon 36647407 36647546 0.000000 - . gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene exon 36661806 36661833 0.000000 - . gene_id "TTI1"; transcript_id "NM_014657:uc002xhl.3"; -chr20 hg19_knownGene CDS 36611861 36612041 0.000000 - 1 gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene exon 36611423 36612041 0.000000 - . gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene CDS 36624777 36624864 0.000000 - 2 gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene exon 36624777 36624864 0.000000 - . gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene CDS 36625151 36625355 0.000000 - 0 gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene exon 36625151 36625355 0.000000 - . gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene CDS 36627590 36627730 0.000000 - 0 gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene exon 36627590 36627730 0.000000 - . gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene CDS 36631030 36631178 0.000000 - 2 gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene exon 36631030 36631178 0.000000 - . gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene CDS 36634599 36634799 0.000000 - 2 gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene exon 36634599 36634799 0.000000 - . gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene CDS 36639917 36642218 0.000000 - 0 gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene exon 36639917 36642259 0.000000 - . gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene exon 36661806 36661833 0.000000 - . gene_id "TTI1"; transcript_id "AK308164:uc002xhm.3"; -chr20 hg19_knownGene CDS 36662350 36662500 0.000000 + 0 gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene exon 36661948 36662500 0.000000 + . gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene CDS 36668837 36668966 0.000000 + 2 gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene exon 36668837 36668966 0.000000 + . gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene CDS 36676750 36676883 0.000000 + 1 gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene exon 36676750 36676883 0.000000 + . gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene CDS 36685934 36686046 0.000000 + 2 gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene exon 36685934 36686046 0.000000 + . gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene CDS 36687796 36687922 0.000000 + 0 gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene exon 36687796 36687922 0.000000 + . gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene CDS 36694483 36694658 0.000000 + 2 gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene exon 36694483 36694658 0.000000 + . gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene CDS 36718128 36718274 0.000000 + 0 gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene exon 36718128 36720766 0.000000 + . gene_id "RPRD1B"; transcript_id "NM_021215:uc002xho.4"; -chr20 hg19_knownGene exon 36694471 36694658 0.000000 + . gene_id "RPRD1B"; transcript_id "AX747603:uc002xhp.4"; -chr20 hg19_knownGene exon 36718128 36720766 0.000000 + . gene_id "RPRD1B"; transcript_id "AX747603:uc002xhp.4"; -chr20 hg19_knownGene exon 36726808 36727102 0.000000 - . gene_id "Metazoa_SRP"; transcript_id ":uc021wdk.1"; -chr20 hg19_knownGene CDS 36758624 36758771 0.000000 - 1 gene_id "TGM2"; transcript_id "AK126508:uc002xhq.3"; -chr20 hg19_knownGene exon 36756864 36758771 0.000000 - . gene_id "TGM2"; transcript_id "AK126508:uc002xhq.3"; -chr20 hg19_knownGene CDS 36759495 36759631 0.000000 - 0 gene_id "TGM2"; transcript_id "AK126508:uc002xhq.3"; -chr20 hg19_knownGene exon 36759495 36759631 0.000000 - . gene_id "TGM2"; transcript_id "AK126508:uc002xhq.3"; -chr20 hg19_knownGene CDS 36760742 36761320 0.000000 - 0 gene_id "TGM2"; transcript_id "AK126508:uc002xhq.3"; -chr20 hg19_knownGene exon 36760742 36762162 0.000000 - . gene_id "TGM2"; transcript_id "AK126508:uc002xhq.3"; -chr20 hg19_knownGene exon 36769766 36769787 0.000000 + . gene_id "DJ417906"; transcript_id "DJ417906:uc021wdl.1"; -chr20 hg19_knownGene exon 36784276 36784297 0.000000 + . gene_id "DJ417913"; transcript_id "DJ417913:uc021wdm.1"; -chr20 hg19_knownGene CDS 36758624 36758771 0.000000 - 1 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36756864 36758771 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36759495 36759631 0.000000 - 0 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36759495 36759631 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36760742 36760902 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36760742 36760902 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36766515 36766787 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36766515 36766787 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36767814 36768056 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36767814 36768056 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36769684 36769787 0.000000 - 1 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36769684 36769787 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36770466 36770601 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36770466 36770601 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36775119 36775296 0.000000 - 0 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36775119 36775296 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36776363 36776491 0.000000 - 0 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36776363 36776491 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36779341 36779459 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36779341 36779459 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36784249 36784491 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36784249 36784491 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36789822 36790001 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36789822 36790001 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36793591 36793600 0.000000 - 0 gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene exon 36793591 36793700 0.000000 - . gene_id "TGM2"; transcript_id "NM_004613:uc002xhr.3"; -chr20 hg19_knownGene CDS 36758624 36758771 0.000000 - 1 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36756864 36758771 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36759495 36759631 0.000000 - 0 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36759495 36759631 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36760742 36760902 0.000000 - 2 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36760742 36760902 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36766515 36766787 0.000000 - 2 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36766515 36766787 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36767814 36768056 0.000000 - 2 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36767814 36768056 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36769684 36769787 0.000000 - 1 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36769684 36769787 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36770466 36770601 0.000000 - 2 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36770466 36770601 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36775119 36775296 0.000000 - 0 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36775119 36775296 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36776363 36776491 0.000000 - 0 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36776363 36776491 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36779341 36779459 0.000000 - 2 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36779341 36779459 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36789822 36790001 0.000000 - 2 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36789822 36790001 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36793591 36793600 0.000000 - 0 gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene exon 36793591 36793700 0.000000 - . gene_id "TGM2"; transcript_id "AK295775:uc010zvx.2"; -chr20 hg19_knownGene CDS 36758624 36758771 0.000000 - 1 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36756864 36758771 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36759495 36759631 0.000000 - 0 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36759495 36759631 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36760742 36760902 0.000000 - 2 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36760742 36760902 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36766515 36766787 0.000000 - 2 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36766515 36766787 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36767814 36768056 0.000000 - 2 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36767814 36768056 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36769684 36769787 0.000000 - 1 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36769684 36769787 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36770466 36770601 0.000000 - 2 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36770466 36770601 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36775119 36775296 0.000000 - 0 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36775119 36775296 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36776363 36776491 0.000000 - 0 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36776363 36776491 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36779341 36779459 0.000000 - 2 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36779341 36779459 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36784249 36784491 0.000000 - 2 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36784249 36784491 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36793591 36793600 0.000000 - 0 gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene exon 36793591 36793700 0.000000 - . gene_id "TGM2"; transcript_id "AK300292:uc010zvy.2"; -chr20 hg19_knownGene CDS 36759500 36759631 0.000000 - 0 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36759495 36759631 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36760742 36760902 0.000000 - 2 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36760742 36760902 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36766515 36766787 0.000000 - 2 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36766515 36766787 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36767814 36768056 0.000000 - 2 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36767814 36768056 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36769684 36769787 0.000000 - 1 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36769684 36769787 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36770466 36770601 0.000000 - 2 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36770466 36770601 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36775119 36775296 0.000000 - 0 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36775119 36775296 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36776363 36776491 0.000000 - 0 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36776363 36776491 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36779341 36779459 0.000000 - 2 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36779341 36779459 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36784249 36784426 0.000000 - 0 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36784249 36784426 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36789829 36790001 0.000000 - 2 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36789829 36790001 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36793591 36793600 0.000000 - 0 gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene exon 36793591 36793700 0.000000 - . gene_id "TGM2"; transcript_id "AK058031:uc002xhs.1"; -chr20 hg19_knownGene CDS 36766486 36766787 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene exon 36766351 36766787 0.000000 - . gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene CDS 36767814 36768056 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene exon 36767814 36768056 0.000000 - . gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene CDS 36769684 36769787 0.000000 - 1 gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene exon 36769684 36769787 0.000000 - . gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene CDS 36770466 36770601 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene exon 36770466 36770601 0.000000 - . gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene CDS 36775119 36775296 0.000000 - 0 gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene exon 36775119 36775296 0.000000 - . gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene CDS 36776363 36776491 0.000000 - 0 gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene exon 36776363 36776491 0.000000 - . gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene CDS 36779341 36779459 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene exon 36779341 36779459 0.000000 - . gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene CDS 36784249 36784491 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene exon 36784249 36784491 0.000000 - . gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene CDS 36789822 36790001 0.000000 - 2 gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene exon 36789822 36790001 0.000000 - . gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene CDS 36793591 36793600 0.000000 - 0 gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene exon 36793591 36793700 0.000000 - . gene_id "TGM2"; transcript_id "NM_198951:uc002xht.3"; -chr20 hg19_knownGene CDS 36774931 36775296 0.000000 - 0 gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene exon 36773752 36775296 0.000000 - . gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene CDS 36776363 36776491 0.000000 - 0 gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene exon 36776363 36776491 0.000000 - . gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene CDS 36779341 36779459 0.000000 - 2 gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene exon 36779341 36779459 0.000000 - . gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene CDS 36784249 36784491 0.000000 - 2 gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene exon 36784249 36784491 0.000000 - . gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene CDS 36789822 36790001 0.000000 - 2 gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene exon 36789822 36790001 0.000000 - . gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene CDS 36793591 36793600 0.000000 - 0 gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene exon 36793591 36793700 0.000000 - . gene_id "TGM2"; transcript_id "S81734:uc002xhu.3"; -chr20 hg19_knownGene CDS 36841447 36842145 0.000000 - 0 gene_id "KIAA1755"; transcript_id "BC033704:uc002xhv.1"; -chr20 hg19_knownGene exon 36838907 36842145 0.000000 - . gene_id "KIAA1755"; transcript_id "BC033704:uc002xhv.1"; -chr20 hg19_knownGene CDS 36845262 36845354 0.000000 - 0 gene_id "KIAA1755"; transcript_id "BC033704:uc002xhv.1"; -chr20 hg19_knownGene exon 36845262 36845407 0.000000 - . gene_id "KIAA1755"; transcript_id "BC033704:uc002xhv.1"; -chr20 hg19_knownGene exon 36845655 36846585 0.000000 - . gene_id "KIAA1755"; transcript_id "BC033704:uc002xhv.1"; -chr20 hg19_knownGene CDS 36841447 36842145 0.000000 - 0 gene_id "KIAA1755"; transcript_id "BC011516:uc002xhw.1"; -chr20 hg19_knownGene exon 36838907 36842145 0.000000 - . gene_id "KIAA1755"; transcript_id "BC011516:uc002xhw.1"; -chr20 hg19_knownGene CDS 36845655 36845720 0.000000 - 0 gene_id "KIAA1755"; transcript_id "BC011516:uc002xhw.1"; -chr20 hg19_knownGene exon 36845655 36846585 0.000000 - . gene_id "KIAA1755"; transcript_id "BC011516:uc002xhw.1"; -chr20 hg19_knownGene CDS 36841447 36842145 0.000000 - 0 gene_id "KIAA1755"; transcript_id "BC029137:uc002xhx.1"; -chr20 hg19_knownGene exon 36838907 36842145 0.000000 - . gene_id "KIAA1755"; transcript_id "BC029137:uc002xhx.1"; -chr20 hg19_knownGene CDS 36845655 36845876 0.000000 - 0 gene_id "KIAA1755"; transcript_id "BC029137:uc002xhx.1"; -chr20 hg19_knownGene exon 36845655 36845876 0.000000 - . gene_id "KIAA1755"; transcript_id "BC029137:uc002xhx.1"; -chr20 hg19_knownGene CDS 36846646 36846768 0.000000 - 0 gene_id "KIAA1755"; transcript_id "BC029137:uc002xhx.1"; -chr20 hg19_knownGene exon 36846646 36846768 0.000000 - . gene_id "KIAA1755"; transcript_id "BC029137:uc002xhx.1"; -chr20 hg19_knownGene CDS 36848032 36848170 0.000000 - 1 gene_id "KIAA1755"; transcript_id "BC029137:uc002xhx.1"; -chr20 hg19_knownGene exon 36848032 36848170 0.000000 - . gene_id "KIAA1755"; transcript_id "BC029137:uc002xhx.1"; -chr20 hg19_knownGene CDS 36850851 36851101 0.000000 - 0 gene_id "KIAA1755"; transcript_id "BC029137:uc002xhx.1"; -chr20 hg19_knownGene exon 36850851 36851546 0.000000 - . gene_id "KIAA1755"; transcript_id "BC029137:uc002xhx.1"; -chr20 hg19_knownGene CDS 36841447 36842145 0.000000 - 0 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36838907 36842145 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36845655 36845876 0.000000 - 0 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36845655 36845876 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36846646 36846768 0.000000 - 0 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36846646 36846768 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36848032 36848170 0.000000 - 1 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36848032 36848170 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36850851 36850999 0.000000 - 0 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36850851 36850999 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36851940 36852038 0.000000 - 0 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36851940 36852038 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36854067 36854183 0.000000 - 0 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36854067 36854183 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36855556 36855642 0.000000 - 0 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36855556 36855642 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36856549 36856642 0.000000 - 1 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36856549 36856642 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36859604 36859727 0.000000 - 2 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36859604 36859727 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36867930 36868127 0.000000 - 2 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36867930 36868127 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36868984 36870331 0.000000 - 0 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36868984 36870331 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36874331 36874528 0.000000 - 0 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36874331 36874528 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36888900 36888902 0.000000 - 0 gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene exon 36888900 36889174 0.000000 - . gene_id "KIAA1755"; transcript_id "NM_001029864:uc002xhy.1"; -chr20 hg19_knownGene CDS 36854040 36854183 0.000000 - 0 gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene exon 36853951 36854183 0.000000 - . gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene CDS 36855556 36855642 0.000000 - 0 gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene exon 36855556 36855642 0.000000 - . gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene CDS 36856549 36856642 0.000000 - 1 gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene exon 36856549 36856642 0.000000 - . gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene CDS 36859604 36859727 0.000000 - 2 gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene exon 36859604 36859727 0.000000 - . gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene CDS 36867930 36868127 0.000000 - 2 gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene exon 36867930 36868127 0.000000 - . gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene CDS 36868984 36870331 0.000000 - 0 gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene exon 36868984 36870331 0.000000 - . gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene CDS 36874331 36874528 0.000000 - 0 gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene exon 36874331 36874528 0.000000 - . gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene CDS 36888900 36888902 0.000000 - 0 gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene exon 36888900 36889174 0.000000 - . gene_id "KIAA1755"; transcript_id "AK096202:uc002xhz.1"; -chr20 hg19_knownGene exon 36888577 36888758 0.000000 + . gene_id "AK055854"; transcript_id "AK055854:uc002xia.1"; -chr20 hg19_knownGene exon 36917429 36917559 0.000000 + . gene_id "AK055854"; transcript_id "AK055854:uc002xia.1"; -chr20 hg19_knownGene exon 36919751 36922294 0.000000 + . gene_id "AK055854"; transcript_id "AK055854:uc002xia.1"; -chr20 hg19_knownGene CDS 36932614 36932755 0.000000 + 0 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36932552 36932755 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36935969 36936083 0.000000 + 2 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36935969 36936083 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36937332 36937460 0.000000 + 1 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36937332 36937460 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36938893 36939054 0.000000 + 1 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36938893 36939054 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36940276 36940339 0.000000 + 1 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36940276 36940339 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36946815 36946878 0.000000 + 0 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36946815 36946878 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36948585 36948676 0.000000 + 2 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36948585 36948676 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36952272 36952448 0.000000 + 0 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36952272 36952448 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36953176 36953235 0.000000 + 0 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36953176 36953235 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36954667 36954834 0.000000 + 0 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36954667 36954834 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36955990 36956057 0.000000 + 0 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36955990 36956057 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36959450 36959492 0.000000 + 1 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36959450 36959492 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36962832 36962895 0.000000 + 0 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36962832 36962895 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36964000 36964076 0.000000 + 2 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36964000 36964076 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36965548 36965583 0.000000 + 0 gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene exon 36965548 36965905 0.000000 + . gene_id "BPI"; transcript_id "NM_001725:uc002xib.2"; -chr20 hg19_knownGene CDS 36974920 36975043 0.000000 + 0 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36974885 36975043 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36977951 36978065 0.000000 + 2 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36977951 36978065 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36979214 36979342 0.000000 + 1 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36979214 36979342 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36982684 36982839 0.000000 + 1 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36982684 36982839 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36983746 36983809 0.000000 + 1 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36983746 36983809 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36989358 36989421 0.000000 + 0 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36989358 36989421 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36992629 36992720 0.000000 + 2 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36992629 36992720 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36993230 36993406 0.000000 + 0 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36993230 36993406 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36995413 36995472 0.000000 + 0 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36995413 36995472 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36997639 36997806 0.000000 + 0 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36997639 36997806 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36999382 36999449 0.000000 + 0 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36999382 36999449 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 36999924 36999966 0.000000 + 1 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 36999924 36999966 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 37001716 37001779 0.000000 + 0 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 37001716 37001779 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 37002581 37002657 0.000000 + 2 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 37002581 37002657 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene CDS 37005267 37005308 0.000000 + 0 gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 37005267 37005653 0.000000 + . gene_id "LBP"; transcript_id "NM_004139:uc002xic.1"; -chr20 hg19_knownGene exon 37034660 37034969 0.000000 - . gene_id "AX746690"; transcript_id "AX746690:uc002xid.1"; -chr20 hg19_knownGene exon 37043753 37045444 0.000000 - . gene_id "AX746690"; transcript_id "AX746690:uc002xid.1"; -chr20 hg19_knownGene exon 37053843 37053978 0.000000 - . gene_id "SNORA71B"; transcript_id "NR_002910:uc002xik.2"; -chr20 hg19_knownGene exon 37055949 37056086 0.000000 - . gene_id "SNORA71A"; transcript_id "NR_002911:uc002xim.1"; -chr20 hg19_knownGene exon 37049239 37049547 0.000000 - . gene_id "LOC388796"; transcript_id "AK022745:uc002xie.3"; -chr20 hg19_knownGene exon 37049653 37049745 0.000000 - . gene_id "LOC388796"; transcript_id "AK022745:uc002xie.3"; -chr20 hg19_knownGene exon 37055062 37055146 0.000000 - . gene_id "LOC388796"; transcript_id "AK022745:uc002xie.3"; -chr20 hg19_knownGene exon 37056323 37057973 0.000000 - . gene_id "LOC388796"; transcript_id "AK022745:uc002xie.3"; -chr20 hg19_knownGene exon 37058310 37058447 0.000000 - . gene_id "SNORA71C"; transcript_id "NR_003017:uc002xin.1"; -chr20 hg19_knownGene exon 37062505 37062642 0.000000 - . gene_id "SNORA71D"; transcript_id "NR_003018:uc002xio.1"; -chr20 hg19_knownGene exon 37049239 37049547 0.000000 - . gene_id "LOC388796"; transcript_id "NR_015366:uc002xii.3"; -chr20 hg19_knownGene exon 37049653 37049745 0.000000 - . gene_id "LOC388796"; transcript_id "NR_015366:uc002xii.3"; -chr20 hg19_knownGene exon 37050739 37050888 0.000000 - . gene_id "LOC388796"; transcript_id "NR_015366:uc002xii.3"; -chr20 hg19_knownGene exon 37054583 37054700 0.000000 - . gene_id "LOC388796"; transcript_id "NR_015366:uc002xii.3"; -chr20 hg19_knownGene exon 37055062 37055146 0.000000 - . gene_id "LOC388796"; transcript_id "NR_015366:uc002xii.3"; -chr20 hg19_knownGene exon 37059684 37059755 0.000000 - . gene_id "LOC388796"; transcript_id "NR_015366:uc002xii.3"; -chr20 hg19_knownGene exon 37063147 37063269 0.000000 - . gene_id "LOC388796"; transcript_id "NR_015366:uc002xii.3"; -chr20 hg19_knownGene exon 37063840 37063962 0.000000 - . gene_id "LOC388796"; transcript_id "NR_015366:uc002xii.3"; -chr20 hg19_knownGene exon 37049239 37049547 0.000000 - . gene_id "LOC388796"; transcript_id "BC012894:uc002xig.3"; -chr20 hg19_knownGene exon 37049653 37050888 0.000000 - . gene_id "LOC388796"; transcript_id "BC012894:uc002xig.3"; -chr20 hg19_knownGene exon 37054583 37054696 0.000000 - . gene_id "LOC388796"; transcript_id "BC012894:uc002xig.3"; -chr20 hg19_knownGene exon 37055062 37055146 0.000000 - . gene_id "LOC388796"; transcript_id "BC012894:uc002xig.3"; -chr20 hg19_knownGene exon 37056323 37056409 0.000000 - . gene_id "LOC388796"; transcript_id "BC012894:uc002xig.3"; -chr20 hg19_knownGene exon 37059684 37059755 0.000000 - . gene_id "LOC388796"; transcript_id "BC012894:uc002xig.3"; -chr20 hg19_knownGene exon 37063147 37063269 0.000000 - . gene_id "LOC388796"; transcript_id "BC012894:uc002xig.3"; -chr20 hg19_knownGene exon 37063840 37063962 0.000000 - . gene_id "LOC388796"; transcript_id "BC012894:uc002xig.3"; -chr20 hg19_knownGene exon 37049239 37049547 0.000000 - . gene_id "LOC388796"; transcript_id "BC052370:uc002xij.3"; -chr20 hg19_knownGene exon 37049653 37049745 0.000000 - . gene_id "LOC388796"; transcript_id "BC052370:uc002xij.3"; -chr20 hg19_knownGene exon 37055062 37055146 0.000000 - . gene_id "LOC388796"; transcript_id "BC052370:uc002xij.3"; -chr20 hg19_knownGene exon 37059684 37059755 0.000000 - . gene_id "LOC388796"; transcript_id "BC052370:uc002xij.3"; -chr20 hg19_knownGene exon 37063147 37063269 0.000000 - . gene_id "LOC388796"; transcript_id "BC052370:uc002xij.3"; -chr20 hg19_knownGene exon 37063840 37063962 0.000000 - . gene_id "LOC388796"; transcript_id "BC052370:uc002xij.3"; -chr20 hg19_knownGene exon 37049239 37049547 0.000000 - . gene_id "LOC388796"; transcript_id "NR_027241:uc002xif.3"; -chr20 hg19_knownGene exon 37049653 37049745 0.000000 - . gene_id "LOC388796"; transcript_id "NR_027241:uc002xif.3"; -chr20 hg19_knownGene exon 37050734 37050888 0.000000 - . gene_id "LOC388796"; transcript_id "NR_027241:uc002xif.3"; -chr20 hg19_knownGene exon 37055062 37055146 0.000000 - . gene_id "LOC388796"; transcript_id "NR_027241:uc002xif.3"; -chr20 hg19_knownGene exon 37059684 37059755 0.000000 - . gene_id "LOC388796"; transcript_id "NR_027241:uc002xif.3"; -chr20 hg19_knownGene exon 37063147 37063269 0.000000 - . gene_id "LOC388796"; transcript_id "NR_027241:uc002xif.3"; -chr20 hg19_knownGene exon 37063670 37064018 0.000000 - . gene_id "LOC388796"; transcript_id "NR_027241:uc002xif.3"; -chr20 hg19_knownGene exon 37076726 37078147 0.000000 + . gene_id "SNORA39"; transcript_id "NR_002986:uc002xip.2"; -chr20 hg19_knownGene exon 37075297 37075655 0.000000 + . gene_id "SNHG11"; transcript_id "NR_003239:uc002xiq.1"; -chr20 hg19_knownGene exon 37076109 37076266 0.000000 + . gene_id "SNHG11"; transcript_id "NR_003239:uc002xiq.1"; -chr20 hg19_knownGene exon 37077305 37077373 0.000000 + . gene_id "SNHG11"; transcript_id "NR_003239:uc002xiq.1"; -chr20 hg19_knownGene exon 37078979 37079090 0.000000 + . gene_id "SNHG11"; transcript_id "NR_003239:uc002xiq.1"; -chr20 hg19_knownGene exon 37079176 37079564 0.000000 + . gene_id "SNHG11"; transcript_id "NR_003239:uc002xiq.1"; -chr20 hg19_knownGene exon 37075297 37077373 0.000000 + . gene_id "SNHG11"; transcript_id "BC040237:uc002xir.1"; -chr20 hg19_knownGene exon 37078979 37079090 0.000000 + . gene_id "SNHG11"; transcript_id "BC040237:uc002xir.1"; -chr20 hg19_knownGene exon 37079176 37079564 0.000000 + . gene_id "SNHG11"; transcript_id "BC040237:uc002xir.1"; -chr20 hg19_knownGene exon 37075297 37077373 0.000000 + . gene_id "SNHG11"; transcript_id "AK055434:uc002xis.1"; -chr20 hg19_knownGene exon 37078905 37079090 0.000000 + . gene_id "SNHG11"; transcript_id "AK055434:uc002xis.1"; -chr20 hg19_knownGene exon 37079176 37079564 0.000000 + . gene_id "SNHG11"; transcript_id "AK055434:uc002xis.1"; -chr20 hg19_knownGene exon 37075328 37076266 0.000000 + . gene_id "SNHG11"; transcript_id "BC021083:uc002xit.1"; -chr20 hg19_knownGene exon 37077305 37077373 0.000000 + . gene_id "SNHG11"; transcript_id "BC021083:uc002xit.1"; -chr20 hg19_knownGene exon 37078905 37079090 0.000000 + . gene_id "SNHG11"; transcript_id "BC021083:uc002xit.1"; -chr20 hg19_knownGene exon 37079176 37079564 0.000000 + . gene_id "SNHG11"; transcript_id "BC021083:uc002xit.1"; -chr20 hg19_knownGene exon 37075328 37076266 0.000000 + . gene_id "SNHG11"; transcript_id "AF497716:uc002xiu.1"; -chr20 hg19_knownGene exon 37077305 37077373 0.000000 + . gene_id "SNHG11"; transcript_id "AF497716:uc002xiu.1"; -chr20 hg19_knownGene exon 37078979 37079090 0.000000 + . gene_id "SNHG11"; transcript_id "AF497716:uc002xiu.1"; -chr20 hg19_knownGene exon 37079176 37079564 0.000000 + . gene_id "SNHG11"; transcript_id "AF497716:uc002xiu.1"; -chr20 hg19_knownGene exon 37101486 37101712 0.000000 + . gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene CDS 37117076 37117261 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene exon 37117046 37117261 0.000000 + . gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene CDS 37121573 37121775 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene exon 37121573 37121775 0.000000 + . gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene CDS 37125996 37126159 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene exon 37125996 37126159 0.000000 + . gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene CDS 37128090 37128276 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene exon 37128090 37128276 0.000000 + . gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene CDS 37137720 37137851 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene exon 37137720 37137851 0.000000 + . gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene CDS 37144835 37145013 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene exon 37144835 37145013 0.000000 + . gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene CDS 37146149 37146297 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene exon 37146149 37146297 0.000000 + . gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene CDS 37146427 37146643 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene exon 37146427 37146643 0.000000 + . gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene CDS 37153421 37153434 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene exon 37153421 37153588 0.000000 + . gene_id "RALGAPB"; transcript_id "AK304242:uc010zvz.1"; -chr20 hg19_knownGene CDS 37137799 37137851 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37137720 37137851 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37144835 37145013 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37144835 37145013 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37146149 37146297 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37146149 37146297 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37146427 37146643 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37146427 37146643 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37150140 37150341 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37150140 37150341 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37153421 37153588 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37153421 37153588 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37154047 37154161 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37154047 37154161 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37154538 37154685 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37154538 37154685 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37159810 37159874 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37159810 37159874 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37161373 37161502 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37161373 37161502 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37163717 37163850 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37163717 37163850 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37168419 37168601 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37168419 37168601 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37169684 37169835 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37169684 37169835 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37174886 37175090 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene exon 37174886 37176749 0.000000 + . gene_id "RALGAPB"; transcript_id "AK125916:uc002xja.1"; -chr20 hg19_knownGene CDS 37117076 37117261 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37117046 37117261 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37121573 37121775 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37121573 37121775 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37125996 37126159 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37125996 37126159 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37128090 37128276 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37128090 37128276 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37137720 37137851 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37137720 37137851 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37144835 37145013 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37144835 37145013 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37146149 37146297 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37146149 37146297 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37146427 37146643 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37146427 37146643 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37150140 37150341 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37150140 37150341 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37153421 37153588 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37153421 37153588 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37154047 37154161 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37154047 37154161 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37154538 37154685 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37154538 37154685 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37159810 37159874 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37159810 37159874 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37161373 37161502 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37161373 37161502 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37163717 37163850 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37163717 37163850 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37168419 37168601 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37168419 37168601 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37169684 37169835 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37169684 37169835 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37174886 37174996 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37174886 37174996 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene CDS 37203545 37203623 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37203545 37203711 0.000000 + . gene_id "RALGAPB"; transcript_id "AK123576:uc002xiy.1"; -chr20 hg19_knownGene exon 37101486 37101712 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37117076 37117261 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37117046 37117261 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37121573 37121775 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37121573 37121775 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37125996 37126159 0.000000 + 1 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37125996 37126159 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37128090 37128276 0.000000 + 2 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37128090 37128276 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37137720 37137851 0.000000 + 1 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37137720 37137851 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37144835 37145013 0.000000 + 1 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37144835 37145013 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37146149 37146297 0.000000 + 2 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37146149 37146297 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37146427 37146643 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37146427 37146643 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37150140 37150341 0.000000 + 2 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37150140 37150341 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37153421 37153588 0.000000 + 1 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37153421 37153588 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37154047 37154161 0.000000 + 1 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37154047 37154161 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37154538 37154685 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37154538 37154685 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37159810 37159874 0.000000 + 2 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37159810 37159874 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37161373 37161502 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37161373 37161502 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37163717 37163850 0.000000 + 2 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37163717 37163850 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37168419 37168601 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37168419 37168601 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37169684 37169835 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37169684 37169835 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37174886 37175073 0.000000 + 1 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37174886 37175073 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37177332 37177438 0.000000 + 2 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37177332 37177438 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37179714 37179866 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37179714 37179866 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37182510 37182719 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37182510 37182719 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37186938 37187096 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37186938 37187096 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37191175 37191340 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37191175 37191340 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37194002 37194121 0.000000 + 2 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37194002 37194121 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37195739 37195875 0.000000 + 2 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37195739 37195875 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37198531 37198639 0.000000 + 0 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37198531 37198639 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37199412 37199490 0.000000 + 2 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37199412 37199490 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37202793 37202941 0.000000 + 1 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37202793 37202941 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene CDS 37203417 37203607 0.000000 + 2 gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37203417 37207504 0.000000 + . gene_id "RALGAPB"; transcript_id "NM_020336:uc002xiw.3"; -chr20 hg19_knownGene exon 37101486 37101712 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37117076 37117261 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37117046 37117261 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37121573 37121775 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37121573 37121775 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37125996 37126159 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37125996 37126159 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37128090 37128276 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37128090 37128276 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37137720 37137851 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37137720 37137851 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37144835 37145013 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37144835 37145013 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37146149 37146297 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37146149 37146297 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37146427 37146643 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37146427 37146643 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37150140 37150341 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37150140 37150341 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37153421 37153588 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37153421 37153588 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37154047 37154161 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37154047 37154161 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37154538 37154685 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37154538 37154685 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37159810 37159874 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37159810 37159874 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37161373 37161502 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37161373 37161502 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37163729 37163850 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37163729 37163850 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37168419 37168601 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37168419 37168601 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37169684 37169835 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37169684 37169835 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37174886 37175073 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37174886 37175073 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37177332 37177438 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37177332 37177438 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37179714 37179866 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37179714 37179866 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37182510 37182719 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37182510 37182719 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37186938 37187096 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37186938 37187096 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37191175 37191340 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37191175 37191340 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37193999 37194121 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37193999 37194121 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37195739 37195875 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37195739 37195875 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37198531 37198639 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37198531 37198639 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37199412 37199490 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37199412 37199490 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37202793 37202941 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37202793 37202941 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene CDS 37203417 37203607 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37203417 37207504 0.000000 + . gene_id "RALGAPB"; transcript_id "AB033045:uc002xix.3"; -chr20 hg19_knownGene exon 37121573 37121775 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37126123 37126159 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37128203 37128276 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37128090 37128276 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37137720 37137851 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37137720 37137851 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37144835 37145013 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37144835 37145013 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37146149 37146297 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37146149 37146297 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37146427 37146643 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37146427 37146643 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37150140 37150341 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37150140 37150341 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37153421 37153588 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37153421 37153588 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37154047 37154161 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37154047 37154161 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37154538 37154685 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37154538 37154685 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37159810 37159874 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37159810 37159874 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37161373 37161502 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37161373 37161502 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37163717 37163850 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37163717 37163850 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37168419 37168601 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37168419 37168601 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37169684 37169835 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37169684 37169835 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37174886 37175073 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37174886 37175073 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37177332 37177438 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37177332 37177438 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37179714 37179866 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37179714 37179866 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37182510 37182719 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37182510 37182719 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37186938 37187096 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37186938 37187096 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37191175 37191340 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37191175 37191340 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37193999 37194121 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37193999 37194121 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37195739 37195875 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37195739 37195875 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37198531 37198639 0.000000 + 0 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37198531 37198639 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37199412 37199490 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37199412 37199490 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37202793 37202941 0.000000 + 1 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37202793 37202941 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37203417 37203607 0.000000 + 2 gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene exon 37203417 37207504 0.000000 + . gene_id "RALGAPB"; transcript_id "AL834436:uc002xiz.3"; -chr20 hg19_knownGene CDS 37209894 37210017 0.000000 + 0 gene_id "ADIG"; transcript_id "NM_001018082:uc002xjb.1"; -chr20 hg19_knownGene exon 37209838 37210017 0.000000 + . gene_id "ADIG"; transcript_id "NM_001018082:uc002xjb.1"; -chr20 hg19_knownGene CDS 37214672 37214787 0.000000 + 2 gene_id "ADIG"; transcript_id "NM_001018082:uc002xjb.1"; -chr20 hg19_knownGene exon 37214672 37214900 0.000000 + . gene_id "ADIG"; transcript_id "NM_001018082:uc002xjb.1"; -chr20 hg19_knownGene exon 37216744 37217104 0.000000 + . gene_id "ADIG"; transcript_id "NM_001018082:uc002xjb.1"; -chr20 hg19_knownGene CDS 37230586 37230722 0.000000 + 0 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37230577 37230722 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37252002 37252201 0.000000 + 1 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37252002 37252201 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37255641 37255858 0.000000 + 2 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37255641 37255858 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37257570 37257645 0.000000 + 0 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37257570 37257645 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37258145 37258293 0.000000 + 2 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37258145 37258293 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37263263 37263428 0.000000 + 0 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37263263 37263428 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37266351 37266442 0.000000 + 2 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37266351 37266442 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37267404 37267481 0.000000 + 0 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37267404 37267481 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37267870 37268029 0.000000 + 0 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37267870 37268029 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37270369 37270451 0.000000 + 2 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37270369 37270451 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37272347 37272553 0.000000 + 0 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37272347 37272553 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37274690 37274830 0.000000 + 0 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37274690 37274830 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37275600 37275769 0.000000 + 0 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37275600 37275769 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37277286 37277341 0.000000 + 1 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37277286 37277341 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37278400 37278488 0.000000 + 2 gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene exon 37278400 37279295 0.000000 + . gene_id "ARHGAP40"; transcript_id "NM_001164431:uc021wdn.1"; -chr20 hg19_knownGene CDS 37353368 37353757 0.000000 + 0 gene_id "SLC32A1"; transcript_id "NM_080552:uc002xjc.3"; -chr20 hg19_knownGene exon 37353105 37353757 0.000000 + . gene_id "SLC32A1"; transcript_id "NM_080552:uc002xjc.3"; -chr20 hg19_knownGene CDS 37356095 37357279 0.000000 + 0 gene_id "SLC32A1"; transcript_id "NM_080552:uc002xjc.3"; -chr20 hg19_knownGene exon 37356095 37358015 0.000000 + . gene_id "SLC32A1"; transcript_id "NM_080552:uc002xjc.3"; -chr20 hg19_knownGene CDS 37377122 37377496 0.000000 + 0 gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene exon 37377097 37377496 0.000000 + . gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene CDS 37378653 37378882 0.000000 + 0 gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene exon 37378653 37378882 0.000000 + . gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene CDS 37380774 37380943 0.000000 + 1 gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene exon 37380774 37380943 0.000000 + . gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene CDS 37383600 37383817 0.000000 + 2 gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene exon 37383600 37383817 0.000000 + . gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene CDS 37384500 37384682 0.000000 + 0 gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene exon 37384500 37384682 0.000000 + . gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene CDS 37394045 37394161 0.000000 + 0 gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene exon 37394045 37394161 0.000000 + . gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene CDS 37394881 37395020 0.000000 + 0 gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene exon 37394881 37395020 0.000000 + . gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene CDS 37396107 37396239 0.000000 + 1 gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene exon 37396107 37396239 0.000000 + . gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene CDS 37400202 37400456 0.000000 + 0 gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene exon 37400202 37401089 0.000000 + . gene_id "ACTR5"; transcript_id "NM_024855:uc002xjd.2"; -chr20 hg19_knownGene exon 37434348 37434435 0.000000 + . gene_id "PPP1R16B"; transcript_id "AK311244:uc010ggb.1"; -chr20 hg19_knownGene exon 37457986 37459230 0.000000 + . gene_id "PPP1R16B"; transcript_id "AK311244:uc010ggb.1"; -chr20 hg19_knownGene exon 37501411 37501717 0.000000 + . gene_id "Metazoa_SRP"; transcript_id ":uc021wdo.1"; -chr20 hg19_knownGene exon 37434348 37434435 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene CDS 37464569 37464818 0.000000 + 0 gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37464468 37464818 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene CDS 37518238 37518308 0.000000 + 2 gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37518238 37518308 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene CDS 37524208 37524353 0.000000 + 0 gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37524208 37524353 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene CDS 37529224 37529327 0.000000 + 1 gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37529224 37529327 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene CDS 37531311 37531435 0.000000 + 2 gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37531311 37531435 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene CDS 37534612 37534737 0.000000 + 0 gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37534612 37534737 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene CDS 37535622 37535697 0.000000 + 0 gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37535622 37535697 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene CDS 37536449 37536578 0.000000 + 2 gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37536449 37536578 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene CDS 37536671 37536836 0.000000 + 1 gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37536671 37536836 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene CDS 37546800 37547306 0.000000 + 0 gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37546800 37551667 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_015568:uc002xje.3"; -chr20 hg19_knownGene exon 37434348 37434435 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene CDS 37464569 37464818 0.000000 + 0 gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene exon 37464468 37464818 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene CDS 37518238 37518308 0.000000 + 2 gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene exon 37518238 37518308 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene CDS 37524208 37524353 0.000000 + 0 gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene exon 37524208 37524353 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene CDS 37529224 37529327 0.000000 + 1 gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene exon 37529224 37529327 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene CDS 37531311 37531435 0.000000 + 2 gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene exon 37531311 37531435 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene CDS 37535622 37535697 0.000000 + 0 gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene exon 37535622 37535697 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene CDS 37536449 37536578 0.000000 + 2 gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene exon 37536449 37536578 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene CDS 37536671 37536836 0.000000 + 1 gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene exon 37536671 37536836 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene CDS 37546800 37547306 0.000000 + 0 gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene exon 37546800 37551667 0.000000 + . gene_id "PPP1R16B"; transcript_id "NM_001172735:uc010ggc.3"; -chr20 hg19_knownGene CDS 37554996 37555568 0.000000 + 0 gene_id "FAM83D"; transcript_id "AL832274:uc002xjf.3"; -chr20 hg19_knownGene exon 37554955 37555568 0.000000 + . gene_id "FAM83D"; transcript_id "AL832274:uc002xjf.3"; -chr20 hg19_knownGene CDS 37570602 37570799 0.000000 + 0 gene_id "FAM83D"; transcript_id "AL832274:uc002xjf.3"; -chr20 hg19_knownGene exon 37570602 37574842 0.000000 + . gene_id "FAM83D"; transcript_id "AL832274:uc002xjf.3"; -chr20 hg19_knownGene CDS 37554996 37555568 0.000000 + 0 gene_id "FAM83D"; transcript_id "NM_030919:uc002xjg.3"; -chr20 hg19_knownGene exon 37554955 37555568 0.000000 + . gene_id "FAM83D"; transcript_id "NM_030919:uc002xjg.3"; -chr20 hg19_knownGene CDS 37570602 37570769 0.000000 + 0 gene_id "FAM83D"; transcript_id "NM_030919:uc002xjg.3"; -chr20 hg19_knownGene exon 37570602 37570769 0.000000 + . gene_id "FAM83D"; transcript_id "NM_030919:uc002xjg.3"; -chr20 hg19_knownGene CDS 37576519 37576643 0.000000 + 0 gene_id "FAM83D"; transcript_id "NM_030919:uc002xjg.3"; -chr20 hg19_knownGene exon 37576519 37576643 0.000000 + . gene_id "FAM83D"; transcript_id "NM_030919:uc002xjg.3"; -chr20 hg19_knownGene CDS 37580182 37581160 0.000000 + 1 gene_id "FAM83D"; transcript_id "NM_030919:uc002xjg.3"; -chr20 hg19_knownGene exon 37580182 37581703 0.000000 + . gene_id "FAM83D"; transcript_id "NM_030919:uc002xjg.3"; -chr20 hg19_knownGene exon 37590981 37591050 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37597724 37597857 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37601202 37601294 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37612342 37612419 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37617436 37617560 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37620112 37620158 0.000000 + 0 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37620097 37620158 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37620999 37621068 0.000000 + 1 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37620999 37621068 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37623464 37623523 0.000000 + 0 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37623464 37623523 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37630373 37630485 0.000000 + 0 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37630373 37630485 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37631415 37631511 0.000000 + 1 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37631415 37631511 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37632392 37632550 0.000000 + 0 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37632392 37632550 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37634789 37634999 0.000000 + 0 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37634789 37634999 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37638923 37639047 0.000000 + 2 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37638923 37639047 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37643523 37643577 0.000000 + 0 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37643523 37643577 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37647447 37647542 0.000000 + 2 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37647447 37647542 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37650484 37650578 0.000000 + 2 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37650484 37650578 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37652333 37652410 0.000000 + 0 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37652333 37652410 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37653873 37654002 0.000000 + 0 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37653873 37654002 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37657061 37657142 0.000000 + 2 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37657061 37657142 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37659347 37659418 0.000000 + 1 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37659347 37659418 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37662849 37662960 0.000000 + 1 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37662849 37662960 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37667142 37667183 0.000000 + 0 gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene exon 37667142 37668366 0.000000 + . gene_id "DHX35"; transcript_id "NR_033905:uc010zwa.2"; -chr20 hg19_knownGene CDS 37591011 37591050 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37590981 37591050 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37597724 37597857 0.000000 + 2 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37597724 37597857 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37601202 37601294 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37601202 37601294 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37612342 37612419 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37612342 37612419 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37617456 37617560 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37617456 37617560 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37620097 37620158 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37620097 37620158 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37620999 37621068 0.000000 + 1 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37620999 37621068 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37623464 37623523 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37623464 37623523 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37630373 37630485 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37630373 37630485 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37631415 37631511 0.000000 + 1 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37631415 37631511 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37632392 37632550 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37632392 37632550 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37634789 37634999 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37634789 37634999 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37638923 37639047 0.000000 + 2 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37638923 37639047 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37643523 37643577 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37643523 37643577 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37647447 37647542 0.000000 + 2 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37647447 37647542 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37650484 37650578 0.000000 + 2 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37650484 37650578 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37652333 37652410 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37652333 37652410 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37653873 37654002 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37653873 37654002 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37657061 37657142 0.000000 + 2 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37657061 37657142 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37659347 37659418 0.000000 + 1 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37659347 37659418 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37662849 37662960 0.000000 + 1 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37662849 37662960 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37667142 37667183 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene exon 37667142 37668366 0.000000 + . gene_id "DHX35"; transcript_id "NM_021931:uc002xjh.3"; -chr20 hg19_knownGene CDS 37591011 37591050 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37590981 37591050 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37597724 37597857 0.000000 + 2 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37597724 37597857 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37612342 37612419 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37612342 37612419 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37617456 37617560 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37617456 37617560 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37620097 37620158 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37620097 37620158 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37620999 37621068 0.000000 + 1 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37620999 37621068 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37623464 37623523 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37623464 37623523 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37630373 37630485 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37630373 37630485 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37631415 37631511 0.000000 + 1 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37631415 37631511 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37632392 37632550 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37632392 37632550 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37634789 37634999 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37634789 37634999 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37638923 37639047 0.000000 + 2 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37638923 37639047 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37643523 37643577 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37643523 37643577 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37647447 37647542 0.000000 + 2 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37647447 37647542 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37650484 37650578 0.000000 + 2 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37650484 37650578 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37652333 37652410 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37652333 37652410 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37653873 37654002 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37653873 37654002 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37657061 37657142 0.000000 + 2 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37657061 37657142 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37659347 37659418 0.000000 + 1 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37659347 37659418 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37662849 37662960 0.000000 + 1 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37662849 37662960 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene CDS 37667142 37667183 0.000000 + 0 gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37667142 37668366 0.000000 + . gene_id "DHX35"; transcript_id "NM_001190809:uc010zwc.2"; -chr20 hg19_knownGene exon 37590981 37591050 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37597724 37597857 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37601207 37601294 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37612342 37612419 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37617456 37617560 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37620112 37620158 0.000000 + 0 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37620097 37620158 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37620999 37621068 0.000000 + 1 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37620999 37621068 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37623464 37623523 0.000000 + 0 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37623464 37623523 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37630373 37630485 0.000000 + 0 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37630373 37630485 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37631415 37631511 0.000000 + 1 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37631415 37631511 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37632392 37632550 0.000000 + 0 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37632392 37632550 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37634789 37634999 0.000000 + 0 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37634789 37634999 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37638923 37639047 0.000000 + 2 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37638923 37639047 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37643523 37643577 0.000000 + 0 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37643523 37643577 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37647447 37647542 0.000000 + 2 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37647447 37647542 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37650484 37650578 0.000000 + 2 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37650484 37650578 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37652333 37652410 0.000000 + 0 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37652333 37652410 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37653873 37654002 0.000000 + 0 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37653873 37654002 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37657061 37657142 0.000000 + 2 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37657061 37657142 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37659347 37659418 0.000000 + 1 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37659347 37659418 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37662849 37662960 0.000000 + 1 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37662849 37662960 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene CDS 37667142 37667183 0.000000 + 0 gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37667142 37668366 0.000000 + . gene_id "DHX35"; transcript_id "BC143941:uc010zwb.2"; -chr20 hg19_knownGene exon 37734394 37734416 0.000000 - . gene_id "miR-449b-3P"; transcript_id "JA429265:uc021wdp.1"; -chr20 hg19_knownGene exon 37842424 37843461 0.000000 - . gene_id "LOC339568"; transcript_id "NR_027124:uc010zwd.1"; -chr20 hg19_knownGene exon 37844190 37844305 0.000000 - . gene_id "LOC339568"; transcript_id "NR_027124:uc010zwd.1"; -chr20 hg19_knownGene exon 37844590 37844755 0.000000 - . gene_id "LOC339568"; transcript_id "NR_027124:uc010zwd.1"; -chr20 hg19_knownGene exon 37853198 37853391 0.000000 - . gene_id "LOC339568"; transcript_id "NR_027124:uc010zwd.1"; -chr20 hg19_knownGene exon 37900182 37900300 0.000000 + . gene_id "Mir_584"; transcript_id ":uc021wdq.1"; -chr20 hg19_knownGene exon 39045515 39045586 0.000000 + . gene_id "SNORD112"; transcript_id ":uc021wdr.1"; -chr20 hg19_knownGene CDS 39316522 39317490 0.000000 - 0 gene_id "MAFB"; transcript_id "NM_005461:uc002xji.3"; -chr20 hg19_knownGene exon 39314517 39317876 0.000000 - . gene_id "MAFB"; transcript_id "NM_005461:uc002xji.3"; -chr20 hg19_knownGene exon 39482759 39482869 0.000000 - . gene_id "5S_rRNA"; transcript_id ":uc021wds.1"; -chr20 hg19_knownGene exon 39634674 39634687 0.000000 + . gene_id "AK023614"; transcript_id "AK023614:uc021wdt.1"; -chr20 hg19_knownGene exon 39652409 39654015 0.000000 + . gene_id "AK023614"; transcript_id "AK023614:uc021wdt.1"; -chr20 hg19_knownGene exon 39657462 39657740 0.000000 + . gene_id "TOP1"; transcript_id "AK310516:uc010ggd.1"; -chr20 hg19_knownGene CDS 39658093 39658401 0.000000 + 0 gene_id "TOP1"; transcript_id "AK310516:uc010ggd.1"; -chr20 hg19_knownGene exon 39658071 39659162 0.000000 + . gene_id "TOP1"; transcript_id "AK310516:uc010ggd.1"; -chr20 hg19_knownGene exon 39657462 39657740 0.000000 + . gene_id "TOP1"; transcript_id "AK310508:uc010gge.1"; -chr20 hg19_knownGene exon 39658071 39658095 0.000000 + . gene_id "TOP1"; transcript_id "AK310508:uc010gge.1"; -chr20 hg19_knownGene exon 39704811 39704934 0.000000 + . gene_id "TOP1"; transcript_id "AK310508:uc010gge.1"; -chr20 hg19_knownGene exon 39706222 39706277 0.000000 + . gene_id "TOP1"; transcript_id "AK310508:uc010gge.1"; -chr20 hg19_knownGene exon 39708725 39708820 0.000000 + . gene_id "TOP1"; transcript_id "AK310508:uc010gge.1"; -chr20 hg19_knownGene exon 39709805 39709880 0.000000 + . gene_id "TOP1"; transcript_id "AK310508:uc010gge.1"; -chr20 hg19_knownGene exon 39713102 39713208 0.000000 + . gene_id "TOP1"; transcript_id "AK310508:uc010gge.1"; -chr20 hg19_knownGene exon 39721112 39721227 0.000000 + . gene_id "TOP1"; transcript_id "AK310508:uc010gge.1"; -chr20 hg19_knownGene exon 39725860 39725981 0.000000 + . gene_id "TOP1"; transcript_id "AK310508:uc010gge.1"; -chr20 hg19_knownGene CDS 39657708 39657740 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39657462 39657740 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39658071 39658095 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39658071 39658095 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39690034 39690130 0.000000 + 2 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39690034 39690130 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39704811 39704934 0.000000 + 1 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39704811 39704934 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39706222 39706277 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39706222 39706277 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39708725 39708820 0.000000 + 1 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39708725 39708820 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39709805 39709880 0.000000 + 1 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39709805 39709880 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39713102 39713208 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39713102 39713208 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39721112 39721227 0.000000 + 1 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39721112 39721227 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39725860 39725981 0.000000 + 2 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39725860 39725981 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39726855 39726977 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39726855 39726977 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39728696 39728883 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39728696 39728883 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39729849 39729993 0.000000 + 1 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39729849 39729993 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39741422 39741565 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39741422 39741565 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39742610 39742795 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39742610 39742795 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39744011 39744079 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39744011 39744079 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39744918 39745032 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39744918 39745032 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39746809 39746936 0.000000 + 2 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39746809 39746936 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39750336 39750430 0.000000 + 0 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39750336 39750430 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39750646 39750795 0.000000 + 1 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39750646 39750795 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene CDS 39751835 39751934 0.000000 + 1 gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39751835 39753126 0.000000 + . gene_id "TOP1"; transcript_id "NM_003286:uc002xjl.3"; -chr20 hg19_knownGene exon 39726969 39727464 0.000000 - . gene_id "BC035080"; transcript_id "BC035080:uc002xjn.1"; -chr20 hg19_knownGene exon 39729298 39729432 0.000000 - . gene_id "BC035080"; transcript_id "BC035080:uc002xjn.1"; -chr20 hg19_knownGene exon 39729812 39729929 0.000000 - . gene_id "BC035080"; transcript_id "BC035080:uc002xjn.1"; -chr20 hg19_knownGene exon 39762127 39762285 0.000000 - . gene_id "BC035080"; transcript_id "BC035080:uc002xjn.1"; -chr20 hg19_knownGene exon 39763779 39763932 0.000000 - . gene_id "BC035080"; transcript_id "BC035080:uc002xjn.1"; -chr20 hg19_knownGene exon 39764342 39764451 0.000000 - . gene_id "BC035080"; transcript_id "BC035080:uc002xjn.1"; -chr20 hg19_knownGene exon 39766354 39766640 0.000000 - . gene_id "BC035080"; transcript_id "BC035080:uc002xjn.1"; -chr20 hg19_knownGene CDS 39794985 39795034 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene exon 39794834 39795034 0.000000 + . gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene CDS 39795116 39795235 0.000000 + 1 gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene exon 39795116 39795235 0.000000 + . gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene CDS 39795319 39795499 0.000000 + 1 gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene exon 39795319 39795499 0.000000 + . gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene CDS 39797407 39797510 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene exon 39797407 39797510 0.000000 + . gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene CDS 39797719 39797815 0.000000 + 1 gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene exon 39797719 39797815 0.000000 + . gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene CDS 39798097 39798166 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene exon 39798097 39798166 0.000000 + . gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene CDS 39798752 39799023 0.000000 + 2 gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene exon 39798752 39799233 0.000000 + . gene_id "PLCG1"; transcript_id "AK309606:uc010ggf.3"; -chr20 hg19_knownGene CDS 39766282 39766498 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39766161 39766498 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39788246 39788398 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39788246 39788398 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39788510 39788603 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39788510 39788603 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39788746 39788793 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39788746 39788793 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39791092 39791176 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39791092 39791176 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39791282 39791365 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39791282 39791365 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39791598 39791632 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39791598 39791632 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39791843 39791915 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39791843 39791915 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39792018 39792119 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39792018 39792119 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39792355 39792473 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39792355 39792473 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39792561 39792646 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39792561 39792646 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39792721 39792841 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39792721 39792841 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39793573 39793741 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39793573 39793741 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39793885 39794007 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39793885 39794007 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39794090 39794191 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39794090 39794191 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39794279 39794466 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39794279 39794466 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39794834 39795034 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39794834 39795034 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39795116 39795235 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39795116 39795235 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39795319 39795499 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39795319 39795499 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39796492 39796569 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39796492 39796569 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39797407 39797510 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39797407 39797510 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39797719 39797815 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39797719 39797815 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39798097 39798166 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39798097 39798166 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39798752 39798909 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39798752 39798909 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39800833 39800929 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39800833 39800929 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39801061 39801285 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39801061 39801285 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39801369 39801517 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39801369 39801517 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39802060 39802174 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39802060 39802174 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39802292 39802453 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39802292 39802453 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39802563 39802651 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39802563 39802651 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39802764 39802951 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39802764 39802951 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39803107 39803146 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene exon 39803107 39804357 0.000000 + . gene_id "PLCG1"; transcript_id "NM_002660:uc002xjo.1"; -chr20 hg19_knownGene CDS 39766282 39766498 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39766161 39766498 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39788246 39788398 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39788246 39788398 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39788510 39788603 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39788510 39788603 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39788746 39788793 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39788746 39788793 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39791092 39791176 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39791092 39791176 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39791282 39791365 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39791282 39791365 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39791598 39791632 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39791598 39791632 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39791843 39791915 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39791843 39791915 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39792018 39792119 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39792018 39792119 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39792355 39792473 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39792355 39792473 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39792561 39792646 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39792561 39792646 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39792721 39792841 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39792721 39792841 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39793573 39793741 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39793573 39793741 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39793885 39794007 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39793885 39794007 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39794090 39794191 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39794090 39794191 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39794279 39794466 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39794279 39794466 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39794834 39795034 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39794834 39795034 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39795116 39795235 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39795116 39795235 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39795319 39795499 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39795319 39795499 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39796492 39796569 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39796492 39796569 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39797407 39797510 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39797407 39797510 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39797719 39797815 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39797719 39797815 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39798097 39798166 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39798097 39798166 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39798752 39798909 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39798752 39798909 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39800833 39800929 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39800833 39800929 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39801061 39801285 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39801061 39801285 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39801369 39801517 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39801369 39801517 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39802060 39802174 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39802060 39802174 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39802292 39802453 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39802292 39802453 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39802563 39802651 0.000000 + 2 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39802563 39802651 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39802767 39802951 0.000000 + 0 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39802767 39802951 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39803107 39803146 0.000000 + 1 gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene exon 39803107 39804357 0.000000 + . gene_id "PLCG1"; transcript_id "NM_182811:uc002xjp.1"; -chr20 hg19_knownGene CDS 39792747 39792841 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39792721 39792841 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39793573 39793741 0.000000 + 1 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39793573 39793741 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39793885 39794007 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39793885 39794007 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39794090 39794191 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39794090 39794191 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39794279 39794466 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39794279 39794466 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39794834 39795034 0.000000 + 1 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39794834 39795034 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39795116 39795235 0.000000 + 1 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39795116 39795235 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39795319 39795499 0.000000 + 1 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39795319 39795499 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39796492 39796569 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39796492 39796569 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39797407 39797510 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39797407 39797510 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39797719 39797815 0.000000 + 1 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39797719 39797815 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39798097 39798166 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39798097 39798166 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39798752 39798909 0.000000 + 2 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39798752 39798909 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39800833 39800929 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39800833 39800929 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39801061 39801285 0.000000 + 2 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39801061 39801285 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39801369 39801517 0.000000 + 2 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39801369 39801517 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39802060 39802453 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39802060 39802453 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39802563 39802651 0.000000 + 2 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39802563 39802651 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39802764 39802951 0.000000 + 0 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39802764 39802951 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene CDS 39803107 39803146 0.000000 + 1 gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39803107 39804357 0.000000 + . gene_id "PLCG1"; transcript_id "AK297370:uc010zwe.1"; -chr20 hg19_knownGene exon 39807089 39813841 0.000000 - . gene_id "ZHX3"; transcript_id "BC020258:uc010ggg.1"; -chr20 hg19_knownGene CDS 39829978 39830024 0.000000 - 2 gene_id "ZHX3"; transcript_id "BC020258:uc010ggg.1"; -chr20 hg19_knownGene exon 39829926 39830024 0.000000 - . gene_id "ZHX3"; transcript_id "BC020258:uc010ggg.1"; -chr20 hg19_knownGene CDS 39830697 39833556 0.000000 - 0 gene_id "ZHX3"; transcript_id "BC020258:uc010ggg.1"; -chr20 hg19_knownGene exon 39830697 39833706 0.000000 - . gene_id "ZHX3"; transcript_id "BC020258:uc010ggg.1"; -chr20 hg19_knownGene CDS 39813569 39813841 0.000000 - 0 gene_id "ZHX3"; transcript_id "BC068569:uc002xjr.1"; -chr20 hg19_knownGene exon 39807089 39813841 0.000000 - . gene_id "ZHX3"; transcript_id "BC068569:uc002xjr.1"; -chr20 hg19_knownGene CDS 39830923 39833556 0.000000 - 0 gene_id "ZHX3"; transcript_id "BC068569:uc002xjr.1"; -chr20 hg19_knownGene exon 39830923 39833706 0.000000 - . gene_id "ZHX3"; transcript_id "BC068569:uc002xjr.1"; -chr20 hg19_knownGene exon 39842374 39842539 0.000000 - . gene_id "ZHX3"; transcript_id "BC068569:uc002xjr.1"; -chr20 hg19_knownGene exon 39897630 39897723 0.000000 - . gene_id "ZHX3"; transcript_id "BC068569:uc002xjr.1"; -chr20 hg19_knownGene exon 39900844 39900896 0.000000 - . gene_id "ZHX3"; transcript_id "BC068569:uc002xjr.1"; -chr20 hg19_knownGene CDS 39813834 39813841 0.000000 - 2 gene_id "ZHX3"; transcript_id "NM_015035:uc002xjs.1"; -chr20 hg19_knownGene exon 39807089 39813841 0.000000 - . gene_id "ZHX3"; transcript_id "NM_015035:uc002xjs.1"; -chr20 hg19_knownGene CDS 39830697 39833556 0.000000 - 0 gene_id "ZHX3"; transcript_id "NM_015035:uc002xjs.1"; -chr20 hg19_knownGene exon 39830697 39833706 0.000000 - . gene_id "ZHX3"; transcript_id "NM_015035:uc002xjs.1"; -chr20 hg19_knownGene exon 39897630 39897723 0.000000 - . gene_id "ZHX3"; transcript_id "NM_015035:uc002xjs.1"; -chr20 hg19_knownGene exon 39928606 39928739 0.000000 - . gene_id "ZHX3"; transcript_id "NM_015035:uc002xjs.1"; -chr20 hg19_knownGene CDS 39813834 39813841 0.000000 - 2 gene_id "ZHX3"; transcript_id "BC047070:uc002xjt.1"; -chr20 hg19_knownGene exon 39807089 39813841 0.000000 - . gene_id "ZHX3"; transcript_id "BC047070:uc002xjt.1"; -chr20 hg19_knownGene CDS 39830697 39833556 0.000000 - 0 gene_id "ZHX3"; transcript_id "BC047070:uc002xjt.1"; -chr20 hg19_knownGene exon 39830697 39833706 0.000000 - . gene_id "ZHX3"; transcript_id "BC047070:uc002xjt.1"; -chr20 hg19_knownGene exon 39842374 39842539 0.000000 - . gene_id "ZHX3"; transcript_id "BC047070:uc002xjt.1"; -chr20 hg19_knownGene exon 39867328 39867436 0.000000 - . gene_id "ZHX3"; transcript_id "BC047070:uc002xjt.1"; -chr20 hg19_knownGene exon 39868238 39868344 0.000000 - . gene_id "ZHX3"; transcript_id "BC047070:uc002xjt.1"; -chr20 hg19_knownGene exon 39896103 39896252 0.000000 - . gene_id "ZHX3"; transcript_id "BC047070:uc002xjt.1"; -chr20 hg19_knownGene exon 39897630 39897723 0.000000 - . gene_id "ZHX3"; transcript_id "BC047070:uc002xjt.1"; -chr20 hg19_knownGene exon 39928606 39928739 0.000000 - . gene_id "ZHX3"; transcript_id "BC047070:uc002xjt.1"; -chr20 hg19_knownGene CDS 39830926 39833556 0.000000 - 0 gene_id "ZHX3"; transcript_id "AK097523:uc002xjv.1"; -chr20 hg19_knownGene exon 39830923 39833706 0.000000 - . gene_id "ZHX3"; transcript_id "AK097523:uc002xjv.1"; -chr20 hg19_knownGene exon 39883228 39883275 0.000000 - . gene_id "ZHX3"; transcript_id "AK097523:uc002xjv.1"; -chr20 hg19_knownGene exon 39897619 39897723 0.000000 - . gene_id "ZHX3"; transcript_id "AK097523:uc002xjv.1"; -chr20 hg19_knownGene exon 39928606 39928739 0.000000 - . gene_id "ZHX3"; transcript_id "AK097523:uc002xjv.1"; -chr20 hg19_knownGene CDS 39830926 39833556 0.000000 - 0 gene_id "ZHX3"; transcript_id "AK122905:uc002xjw.1"; -chr20 hg19_knownGene exon 39830923 39833706 0.000000 - . gene_id "ZHX3"; transcript_id "AK122905:uc002xjw.1"; -chr20 hg19_knownGene exon 39897619 39897723 0.000000 - . gene_id "ZHX3"; transcript_id "AK122905:uc002xjw.1"; -chr20 hg19_knownGene exon 39928606 39928739 0.000000 - . gene_id "ZHX3"; transcript_id "AK122905:uc002xjw.1"; -chr20 hg19_knownGene CDS 39813834 39813841 0.000000 - 2 gene_id "ZHX3"; transcript_id "AB007855:uc002xju.1"; -chr20 hg19_knownGene exon 39807089 39813841 0.000000 - . gene_id "ZHX3"; transcript_id "AB007855:uc002xju.1"; -chr20 hg19_knownGene CDS 39830697 39833556 0.000000 - 0 gene_id "ZHX3"; transcript_id "AB007855:uc002xju.1"; -chr20 hg19_knownGene exon 39830697 39833706 0.000000 - . gene_id "ZHX3"; transcript_id "AB007855:uc002xju.1"; -chr20 hg19_knownGene exon 39897619 39897723 0.000000 - . gene_id "ZHX3"; transcript_id "AB007855:uc002xju.1"; -chr20 hg19_knownGene exon 39946149 39946242 0.000000 - . gene_id "ZHX3"; transcript_id "AB007855:uc002xju.1"; -chr20 hg19_knownGene exon 39969560 39969642 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39974444 39974635 0.000000 + 0 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39974436 39974635 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39976192 39976287 0.000000 + 0 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39976192 39976287 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39977259 39977527 0.000000 + 0 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39977259 39977527 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39977732 39977812 0.000000 + 1 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39977732 39977812 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39978414 39978534 0.000000 + 1 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39978414 39978534 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39978695 39979037 0.000000 + 0 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39978695 39979037 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39980461 39980560 0.000000 + 2 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39980461 39980560 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39980700 39980860 0.000000 + 1 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39980700 39980860 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39981246 39981339 0.000000 + 2 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39981246 39981339 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39981438 39981507 0.000000 + 1 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39981438 39981507 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39983285 39983377 0.000000 + 0 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39983285 39983377 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39983460 39983503 0.000000 + 0 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39983460 39983503 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39984536 39984674 0.000000 + 1 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39984536 39984674 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39985680 39985828 0.000000 + 0 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39985680 39985828 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39986001 39986087 0.000000 + 1 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39986001 39986087 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39986522 39986674 0.000000 + 1 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39986522 39986674 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39986877 39986991 0.000000 + 1 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39986877 39986991 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39987079 39987182 0.000000 + 0 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39987079 39987182 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene CDS 39987362 39987503 0.000000 + 1 gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39987362 39989222 0.000000 + . gene_id "LPIN3"; transcript_id "NM_022896:uc002xjx.3"; -chr20 hg19_knownGene exon 39969560 39969642 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39974436 39974635 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39976192 39976287 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39977259 39977527 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39977729 39977812 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39978414 39978534 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39978695 39979037 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39980461 39980560 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39980700 39980860 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39981246 39981339 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39981438 39981507 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39983285 39983377 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39983465 39983503 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39984536 39984674 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39985680 39985828 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39986001 39986087 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39986522 39986597 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39986877 39986991 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39987079 39987182 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39987362 39989222 0.000000 + . gene_id "LPIN3"; transcript_id "BC144598:uc010zwf.2"; -chr20 hg19_knownGene exon 39969560 39969642 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39974444 39974635 0.000000 + 0 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39974436 39974635 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39976192 39976287 0.000000 + 0 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39976192 39976287 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39977259 39977527 0.000000 + 0 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39977259 39977527 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39977729 39977812 0.000000 + 1 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39977729 39977812 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39978414 39978534 0.000000 + 1 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39978414 39978534 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39978695 39979037 0.000000 + 0 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39978695 39979037 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39980461 39980560 0.000000 + 2 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39980461 39980560 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39980700 39980860 0.000000 + 1 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39980700 39980860 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39981246 39981339 0.000000 + 2 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39981246 39981339 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39981438 39981507 0.000000 + 1 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39981438 39981507 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39983285 39983377 0.000000 + 0 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39983285 39983377 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39983460 39983503 0.000000 + 0 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39983460 39983503 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39984536 39984674 0.000000 + 1 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39984536 39984674 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39985680 39985828 0.000000 + 0 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39985680 39985828 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39986001 39986087 0.000000 + 1 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39986001 39986087 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39986522 39986674 0.000000 + 1 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39986522 39986674 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39986877 39986991 0.000000 + 1 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39986877 39986991 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39987079 39987182 0.000000 + 0 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39987079 39987182 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39987362 39987503 0.000000 + 1 gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene exon 39987362 39989222 0.000000 + . gene_id "LPIN3"; transcript_id "BC140806:uc010ggh.3"; -chr20 hg19_knownGene CDS 39989911 39991694 0.000000 - 2 gene_id "EMILIN3"; transcript_id "NM_052846:uc002xjy.1"; -chr20 hg19_knownGene exon 39988606 39991694 0.000000 - . gene_id "EMILIN3"; transcript_id "NM_052846:uc002xjy.1"; -chr20 hg19_knownGene CDS 39992278 39992501 0.000000 - 1 gene_id "EMILIN3"; transcript_id "NM_052846:uc002xjy.1"; -chr20 hg19_knownGene exon 39992278 39992501 0.000000 - . gene_id "EMILIN3"; transcript_id "NM_052846:uc002xjy.1"; -chr20 hg19_knownGene CDS 39993675 39993797 0.000000 - 1 gene_id "EMILIN3"; transcript_id "NM_052846:uc002xjy.1"; -chr20 hg19_knownGene exon 39993675 39993797 0.000000 - . gene_id "EMILIN3"; transcript_id "NM_052846:uc002xjy.1"; -chr20 hg19_knownGene CDS 39995108 39995274 0.000000 - 0 gene_id "EMILIN3"; transcript_id "NM_052846:uc002xjy.1"; -chr20 hg19_knownGene exon 39995108 39995498 0.000000 - . gene_id "EMILIN3"; transcript_id "NM_052846:uc002xjy.1"; -chr20 hg19_knownGene CDS 40033236 40033991 0.000000 - 0 gene_id "CHD6"; transcript_id "AK098144:uc002xjz.1"; -chr20 hg19_knownGene exon 40031170 40034129 0.000000 - . gene_id "CHD6"; transcript_id "AK098144:uc002xjz.1"; -chr20 hg19_knownGene exon 40040784 40040903 0.000000 - . gene_id "CHD6"; transcript_id "AK098144:uc002xjz.1"; -chr20 hg19_knownGene exon 40041964 40043705 0.000000 - . gene_id "CHD6"; transcript_id "AK098144:uc002xjz.1"; -chr20 hg19_knownGene CDS 40065869 40065974 0.000000 - 1 gene_id "CHD6"; transcript_id "CR749575:uc002xkb.1"; -chr20 hg19_knownGene exon 40064665 40065974 0.000000 - . gene_id "CHD6"; transcript_id "CR749575:uc002xkb.1"; -chr20 hg19_knownGene CDS 40068640 40068769 0.000000 - 2 gene_id "CHD6"; transcript_id "CR749575:uc002xkb.1"; -chr20 hg19_knownGene exon 40068640 40068769 0.000000 - . gene_id "CHD6"; transcript_id "CR749575:uc002xkb.1"; -chr20 hg19_knownGene CDS 40074305 40074408 0.000000 - 1 gene_id "CHD6"; transcript_id "CR749575:uc002xkb.1"; -chr20 hg19_knownGene exon 40074305 40074408 0.000000 - . gene_id "CHD6"; transcript_id "CR749575:uc002xkb.1"; -chr20 hg19_knownGene CDS 40076522 40076592 0.000000 - 0 gene_id "CHD6"; transcript_id "CR749575:uc002xkb.1"; -chr20 hg19_knownGene exon 40076522 40076611 0.000000 - . gene_id "CHD6"; transcript_id "CR749575:uc002xkb.1"; -chr20 hg19_knownGene exon 40190978 40191046 0.000000 + . gene_id "Mir_147"; transcript_id ":uc021wdu.1"; -chr20 hg19_knownGene CDS 40033236 40034129 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40031170 40034129 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40040784 40040903 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40040784 40040903 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40041964 40042155 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40041964 40042155 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40043826 40044278 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40043826 40044278 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40045228 40045434 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40045228 40045434 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40045838 40045989 0.000000 - 2 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40045838 40045989 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40049148 40050719 0.000000 - 2 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40049148 40050719 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40052132 40052340 0.000000 - 1 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40052132 40052340 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40053818 40054034 0.000000 - 2 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40053818 40054034 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40054733 40054793 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40054733 40054793 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40065914 40065974 0.000000 - 1 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40065914 40065974 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40068640 40068769 0.000000 - 2 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40068640 40068769 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40074305 40074408 0.000000 - 1 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40074305 40074408 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40076522 40076611 0.000000 - 1 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40076522 40076611 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40079586 40079745 0.000000 - 2 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40079586 40079745 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40080466 40080665 0.000000 - 1 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40080466 40080665 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40081380 40081582 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40081380 40081582 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40083266 40083376 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40083266 40083376 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40084440 40084619 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40084440 40084619 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40085904 40086068 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40085904 40086068 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40101962 40102157 0.000000 - 1 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40101962 40102157 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40111949 40112159 0.000000 - 2 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40111949 40112159 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40112992 40113247 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40112992 40113247 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40116305 40116448 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40116305 40116448 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40117068 40117244 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40117068 40117244 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40118418 40118661 0.000000 - 1 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40118418 40118661 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40120338 40120459 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40120338 40120459 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40122178 40122312 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40122178 40122312 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40122498 40122584 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40122498 40122584 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40126024 40126141 0.000000 - 1 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40126024 40126141 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40126808 40126866 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40126808 40126866 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40127935 40127997 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40127935 40127997 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40141485 40141634 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40141485 40141634 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40143444 40143591 0.000000 - 1 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40143444 40143591 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40161689 40162209 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40161689 40162209 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40179944 40179976 0.000000 - 0 gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40179944 40179999 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene exon 40246979 40247133 0.000000 - . gene_id "CHD6"; transcript_id "NM_032221:uc002xka.1"; -chr20 hg19_knownGene CDS 40083269 40083376 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40083266 40083376 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40084440 40084619 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40084440 40084619 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40085904 40086068 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40085904 40086068 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40101962 40102157 0.000000 - 1 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40101962 40102157 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40111949 40112159 0.000000 - 2 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40111949 40112159 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40112992 40113247 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40112992 40113247 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40116305 40116448 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40116305 40116448 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40117068 40117244 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40117068 40117244 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40118418 40118661 0.000000 - 1 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40118418 40118661 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40120338 40120459 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40120338 40120459 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40122178 40122312 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40122178 40122312 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40122498 40122584 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40122498 40122584 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40126024 40126141 0.000000 - 1 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40126024 40126141 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40126808 40126866 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40126808 40126866 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40127935 40127997 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40127935 40127997 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40141485 40141634 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40141485 40141634 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40143444 40143591 0.000000 - 1 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40143444 40143591 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40161689 40162176 0.000000 - 0 gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40161689 40162209 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene exon 40246979 40247133 0.000000 - . gene_id "CHD6"; transcript_id "AK296955:uc002xkd.2"; -chr20 hg19_knownGene CDS 40126768 40126866 0.000000 - 0 gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene exon 40125449 40126866 0.000000 - . gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene CDS 40127935 40127997 0.000000 - 0 gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene exon 40127935 40127997 0.000000 - . gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene CDS 40141485 40141634 0.000000 - 0 gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene exon 40141485 40141634 0.000000 - . gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene CDS 40143444 40143591 0.000000 - 1 gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene exon 40143444 40143591 0.000000 - . gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene CDS 40161689 40162209 0.000000 - 0 gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene exon 40161689 40162209 0.000000 - . gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene CDS 40192650 40192787 0.000000 - 0 gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene exon 40192650 40192790 0.000000 - . gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene exon 40246979 40247133 0.000000 - . gene_id "CHD6"; transcript_id "BC040016:uc002xkc.3"; -chr20 hg19_knownGene exon 40313625 40313730 0.000000 - . gene_id "U6"; transcript_id ":uc021wdv.1"; -chr20 hg19_knownGene CDS 40709522 40709572 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40701392 40709572 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40710522 40710657 0.000000 - 1 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40710522 40710657 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40713322 40713485 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40713322 40713485 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40714368 40714493 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40714368 40714493 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40727061 40727192 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40727061 40727192 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40730764 40730937 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40730764 40730937 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40733209 40733358 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40733209 40733358 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40735426 40735561 0.000000 - 1 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40735426 40735561 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40738973 40739127 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40738973 40739127 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40743839 40743955 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40743839 40743955 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40747043 40747140 0.000000 - 2 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40747043 40747140 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40748575 40748611 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40748575 40748611 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40757394 40757470 0.000000 - 2 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40757394 40757470 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40770555 40770642 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40770555 40770642 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40789992 40790182 0.000000 - 2 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40789992 40790182 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene CDS 40827880 40827979 0.000000 - 0 gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 40827880 40828037 0.000000 - . gene_id "PTPRT"; transcript_id "AF043644:uc010ggi.3"; -chr20 hg19_knownGene exon 41314123 41314471 0.000000 + . gene_id "BC040166"; transcript_id "BC040166:uc002xkh.3"; -chr20 hg19_knownGene exon 41314585 41314699 0.000000 + . gene_id "BC040166"; transcript_id "BC040166:uc002xkh.3"; -chr20 hg19_knownGene exon 41314788 41314952 0.000000 + . gene_id "BC040166"; transcript_id "BC040166:uc002xkh.3"; -chr20 hg19_knownGene exon 41315837 41317202 0.000000 + . gene_id "BC040166"; transcript_id "BC040166:uc002xkh.3"; -chr20 hg19_knownGene exon 41691966 41692249 0.000000 + . gene_id "7SK"; transcript_id ":uc021wdw.1"; -chr20 hg19_knownGene CDS 40709522 40709572 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40701392 40709572 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40710522 40710657 0.000000 - 1 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40710522 40710657 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40713322 40713485 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40713322 40713485 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40714368 40714493 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40714368 40714493 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40727061 40727192 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40727061 40727192 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40730764 40730937 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40730764 40730937 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40733209 40733358 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40733209 40733358 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40735426 40735561 0.000000 - 1 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40735426 40735561 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40738973 40739127 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40738973 40739127 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40743839 40743955 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40743839 40743955 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40747043 40747140 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40747043 40747140 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40748575 40748611 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40748575 40748611 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40757394 40757470 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40757394 40757470 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40770555 40770642 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40770555 40770642 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40789992 40790182 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40789992 40790182 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40827880 40828028 0.000000 - 1 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40827880 40828028 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40864869 40864898 0.000000 - 1 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40864869 40864898 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40877327 40877462 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40877327 40877462 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40899037 40899093 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40899037 40899093 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40911129 40911165 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40911129 40911165 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40944363 40944636 0.000000 - 1 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40944363 40944636 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40979268 40979370 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40979268 40979370 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40980724 40980925 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 40980724 40980925 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 41076860 41076969 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 41076860 41076969 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 41100906 41101202 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 41100906 41101202 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 41306506 41306799 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 41306506 41306799 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 41385102 41385276 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 41385102 41385276 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 41400075 41400190 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 41400075 41400190 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 41408858 41408939 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 41408858 41408939 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 41419835 41420106 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 41419835 41420106 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 41514447 41514572 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 41514447 41514572 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 41818286 41818373 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene exon 41818286 41818557 0.000000 - . gene_id "PTPRT"; transcript_id "NM_133170:uc010ggj.3"; -chr20 hg19_knownGene CDS 40709522 40709572 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40701392 40709572 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40710522 40710657 0.000000 - 1 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40710522 40710657 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40713322 40713485 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40713322 40713485 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40714368 40714493 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40714368 40714493 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40727061 40727192 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40727061 40727192 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40730764 40730937 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40730764 40730937 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40733209 40733358 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40733209 40733358 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40735426 40735561 0.000000 - 1 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40735426 40735561 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40738973 40739127 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40738973 40739127 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40743839 40743955 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40743839 40743955 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40747043 40747140 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40747043 40747140 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40748575 40748611 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40748575 40748611 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40757394 40757470 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40757394 40757470 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40770555 40770642 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40770555 40770642 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40789992 40790182 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40789992 40790182 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40827880 40828028 0.000000 - 1 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40827880 40828028 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40864869 40864898 0.000000 - 1 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40864869 40864898 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40877327 40877462 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40877327 40877462 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40911129 40911165 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40911129 40911165 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40944363 40944636 0.000000 - 1 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40944363 40944636 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40979268 40979370 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40979268 40979370 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 40980724 40980925 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 40980724 40980925 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 41076860 41076969 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 41076860 41076969 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 41100906 41101202 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 41100906 41101202 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 41306506 41306799 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 41306506 41306799 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 41385102 41385276 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 41385102 41385276 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 41400075 41400190 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 41400075 41400190 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 41408858 41408939 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 41408858 41408939 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 41419835 41420106 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 41419835 41420106 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 41514447 41514572 0.000000 - 2 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 41514447 41514572 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene CDS 41818286 41818373 0.000000 - 0 gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 41818286 41818557 0.000000 - . gene_id "PTPRT"; transcript_id "NM_007050:uc002xkg.3"; -chr20 hg19_knownGene exon 41850846 41851150 0.000000 + . gene_id "Metazoa_SRP"; transcript_id ":uc021wdx.1"; -chr20 hg19_knownGene exon 41933195 41933319 0.000000 + . gene_id "SCARNA15"; transcript_id ":uc021wdy.1"; -chr20 hg19_knownGene exon 42086504 42086780 0.000000 + . gene_id "SRSF6"; transcript_id "NR_034009:uc002xki.3"; -chr20 hg19_knownGene exon 42087001 42087149 0.000000 + . gene_id "SRSF6"; transcript_id "NR_034009:uc002xki.3"; -chr20 hg19_knownGene exon 42087793 42088060 0.000000 + . gene_id "SRSF6"; transcript_id "NR_034009:uc002xki.3"; -chr20 hg19_knownGene exon 42088411 42088535 0.000000 + . gene_id "SRSF6"; transcript_id "NR_034009:uc002xki.3"; -chr20 hg19_knownGene CDS 42088679 42088881 0.000000 + 0 gene_id "SRSF6"; transcript_id "NR_034009:uc002xki.3"; -chr20 hg19_knownGene exon 42088673 42088881 0.000000 + . gene_id "SRSF6"; transcript_id "NR_034009:uc002xki.3"; -chr20 hg19_knownGene CDS 42089155 42089238 0.000000 + 1 gene_id "SRSF6"; transcript_id "NR_034009:uc002xki.3"; -chr20 hg19_knownGene exon 42089155 42089238 0.000000 + . gene_id "SRSF6"; transcript_id "NR_034009:uc002xki.3"; -chr20 hg19_knownGene CDS 42089343 42089700 0.000000 + 1 gene_id "SRSF6"; transcript_id "NR_034009:uc002xki.3"; -chr20 hg19_knownGene exon 42089343 42092244 0.000000 + . gene_id "SRSF6"; transcript_id "NR_034009:uc002xki.3"; -chr20 hg19_knownGene CDS 42086674 42086780 0.000000 + 0 gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene exon 42086504 42086780 0.000000 + . gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene CDS 42087001 42087149 0.000000 + 1 gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene exon 42087001 42087149 0.000000 + . gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene CDS 42088411 42088535 0.000000 + 2 gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene exon 42088411 42088535 0.000000 + . gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene CDS 42088673 42088881 0.000000 + 0 gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene exon 42088673 42088881 0.000000 + . gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene CDS 42089155 42089238 0.000000 + 1 gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene exon 42089155 42089238 0.000000 + . gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene CDS 42089343 42089700 0.000000 + 1 gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene exon 42089343 42092244 0.000000 + . gene_id "SRSF6"; transcript_id "NM_006275:uc010zwg.2"; -chr20 hg19_knownGene CDS 42143185 42143416 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AK308334:uc010ggk.2"; -chr20 hg19_knownGene exon 42143076 42143416 0.000000 + . gene_id "L3MBTL1"; transcript_id "AK308334:uc010ggk.2"; -chr20 hg19_knownGene CDS 42143649 42143799 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "AK308334:uc010ggk.2"; -chr20 hg19_knownGene exon 42143649 42143799 0.000000 + . gene_id "L3MBTL1"; transcript_id "AK308334:uc010ggk.2"; -chr20 hg19_knownGene CDS 42143932 42144055 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "AK308334:uc010ggk.2"; -chr20 hg19_knownGene exon 42143932 42144055 0.000000 + . gene_id "L3MBTL1"; transcript_id "AK308334:uc010ggk.2"; -chr20 hg19_knownGene CDS 42144733 42144817 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AK308334:uc010ggk.2"; -chr20 hg19_knownGene exon 42144733 42144817 0.000000 + . gene_id "L3MBTL1"; transcript_id "AK308334:uc010ggk.2"; -chr20 hg19_knownGene CDS 42157297 42157406 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "AK308334:uc010ggk.2"; -chr20 hg19_knownGene exon 42157297 42157531 0.000000 + . gene_id "L3MBTL1"; transcript_id "AK308334:uc010ggk.2"; -chr20 hg19_knownGene CDS 42143185 42143416 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42143076 42143416 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42143649 42143799 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42143649 42143799 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42143932 42144055 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42143932 42144055 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42144733 42144817 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42144733 42144817 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42157297 42157385 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42157297 42157385 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42157904 42158008 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42157904 42158008 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42158924 42159059 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42158924 42159059 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42159438 42159529 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42159438 42159529 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42161413 42161564 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42161413 42161564 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42161982 42162058 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42161982 42162058 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42162648 42162733 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42162648 42162733 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42162924 42163034 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42162924 42163034 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42163468 42163582 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42163468 42163582 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42164477 42164576 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42164477 42164576 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42164737 42164934 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42164737 42164934 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42165049 42165098 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42165049 42165098 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42168791 42168948 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42168791 42168948 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42169393 42169545 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene exon 42169393 42169548 0.000000 + . gene_id "L3MBTL1"; transcript_id "CCDS46602:uc002xkm.3"; -chr20 hg19_knownGene CDS 42143185 42143416 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42143076 42143416 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42143649 42143799 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42143649 42143799 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42143932 42144055 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42143932 42144055 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42144733 42144817 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42144733 42144817 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42157297 42157385 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42157297 42157385 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42157904 42158008 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42157904 42158008 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42158924 42159059 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42158924 42159059 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42159438 42159529 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42159438 42159529 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42161413 42161564 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42161413 42161564 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42161982 42162058 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42161982 42162058 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42162648 42162733 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42162648 42162733 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42162924 42163034 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42162924 42163034 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42163468 42163582 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42163468 42163582 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42164477 42164576 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42164477 42164576 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42164722 42164934 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42164722 42164934 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42165049 42165098 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42165049 42165098 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42168791 42168948 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42168791 42168948 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42169393 42169545 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene exon 42169393 42169548 0.000000 + . gene_id "L3MBTL1"; transcript_id "BC034398:uc010ggl.3"; -chr20 hg19_knownGene CDS 42161443 42161564 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42159609 42161564 0.000000 + . gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene CDS 42161982 42162058 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42161982 42162058 0.000000 + . gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene CDS 42162648 42162733 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42162648 42162733 0.000000 + . gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene CDS 42162924 42163034 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42162924 42163034 0.000000 + . gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene CDS 42163468 42163582 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42163468 42163582 0.000000 + . gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene CDS 42164477 42164576 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42164477 42164576 0.000000 + . gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene CDS 42164737 42164934 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42164737 42164934 0.000000 + . gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene CDS 42165049 42165098 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42165049 42165098 0.000000 + . gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene CDS 42168791 42168948 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42168791 42168948 0.000000 + . gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene CDS 42169393 42169545 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42169393 42169548 0.000000 + . gene_id "L3MBTL1"; transcript_id "AL110279:uc002xko.3"; -chr20 hg19_knownGene exon 42136320 42136384 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42142210 42142279 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42142199 42142279 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42142478 42142701 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42142478 42142701 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42143275 42143416 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42143275 42143416 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42143649 42143799 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42143649 42143799 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42143932 42144055 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42143932 42144055 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42144733 42144817 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42144733 42144817 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42157297 42157385 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42157297 42157385 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42157904 42158008 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42157904 42158008 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42158924 42159059 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42158924 42159059 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42159438 42159529 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42159438 42159529 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42161413 42161564 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42161413 42161564 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42161982 42162058 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42161982 42162058 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42162648 42162733 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42162648 42162733 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42162924 42163034 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42162924 42163034 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42163468 42163582 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42163468 42163582 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42164477 42164576 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42164477 42164576 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42164737 42164934 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42164737 42164934 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42165049 42165098 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42165049 42165098 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42168791 42168948 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42168791 42168948 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42169393 42169455 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42169393 42169455 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42169574 42169765 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene exon 42169574 42170535 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_032107:uc010zwh.2"; -chr20 hg19_knownGene CDS 42143185 42143416 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42143076 42143416 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42143649 42143799 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42143649 42143799 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42143932 42144055 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42143932 42144055 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42144733 42144817 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42144733 42144817 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42157297 42157385 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42157297 42157385 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42157904 42158008 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42157904 42158008 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42158924 42159059 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42158924 42159059 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42159438 42159529 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42159438 42159529 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42161413 42161564 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42161413 42161564 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42161982 42162058 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42161982 42162058 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42162648 42162733 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42162648 42162733 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42162924 42163034 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42162924 42163034 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42163468 42163582 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42163468 42163582 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42164477 42164576 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42164477 42164576 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42164737 42164934 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42164737 42164934 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42165049 42165098 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42165049 42165098 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42168791 42168948 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42168791 42168948 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42169393 42169455 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42169393 42169455 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42169574 42169765 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene exon 42169574 42170535 0.000000 + . gene_id "L3MBTL1"; transcript_id "NM_015478:uc002xkl.3"; -chr20 hg19_knownGene CDS 42168724 42168948 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AK123176:uc002xkp.3"; -chr20 hg19_knownGene exon 42168221 42168948 0.000000 + . gene_id "L3MBTL1"; transcript_id "AK123176:uc002xkp.3"; -chr20 hg19_knownGene CDS 42169393 42169455 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AK123176:uc002xkp.3"; -chr20 hg19_knownGene exon 42169393 42169455 0.000000 + . gene_id "L3MBTL1"; transcript_id "AK123176:uc002xkp.3"; -chr20 hg19_knownGene CDS 42169574 42169765 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AK123176:uc002xkp.3"; -chr20 hg19_knownGene exon 42169574 42170535 0.000000 + . gene_id "L3MBTL1"; transcript_id "AK123176:uc002xkp.3"; -chr20 hg19_knownGene exon 42157297 42157385 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42157946 42158008 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42157904 42158008 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42158924 42159059 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42158924 42159059 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42159438 42159529 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42159438 42159529 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42161413 42161564 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42161413 42161564 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42161982 42162058 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42161982 42162058 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42162648 42162733 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42162648 42162733 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42162924 42163034 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42162924 42163034 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42163468 42163582 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42163468 42163582 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42164477 42164576 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42164477 42164576 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42164737 42164934 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42164737 42164934 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42165049 42165098 0.000000 + 1 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42165049 42165098 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42168791 42168948 0.000000 + 2 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42168791 42168948 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42169393 42169455 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42169393 42169455 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene CDS 42176751 42176882 0.000000 + 0 gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42176751 42179593 0.000000 + . gene_id "L3MBTL1"; transcript_id "AB014581:uc002xkn.1"; -chr20 hg19_knownGene exon 42168791 42168948 0.000000 + . gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene exon 42169393 42169455 0.000000 + . gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene CDS 42195136 42195171 0.000000 + 0 gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene exon 42195113 42195171 0.000000 + . gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene CDS 42195708 42195757 0.000000 + 0 gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene exon 42195708 42195757 0.000000 + . gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene CDS 42196305 42196362 0.000000 + 1 gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene exon 42196305 42196362 0.000000 + . gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene CDS 42196556 42196639 0.000000 + 0 gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene exon 42196556 42196639 0.000000 + . gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene CDS 42198025 42198153 0.000000 + 0 gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene exon 42198025 42198156 0.000000 + . gene_id "SGK2"; transcript_id "AY927520:uc002xkq.1"; -chr20 hg19_knownGene exon 42187635 42187799 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42195136 42195171 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42195113 42195171 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42195708 42195757 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42195708 42195757 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42196305 42196362 0.000000 + 1 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42196305 42196362 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42196556 42196639 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42196556 42196639 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42198025 42198156 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42198025 42198156 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42199257 42199369 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42199257 42199369 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42199664 42199700 0.000000 + 1 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42199664 42199700 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42200691 42200777 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42200691 42200777 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42203549 42203644 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42203549 42203644 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42204864 42205019 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42204864 42205019 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42208612 42208701 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42208612 42208701 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene CDS 42213492 42213653 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42213492 42214273 0.000000 + . gene_id "SGK2"; transcript_id "NM_170693:uc002xkr.3"; -chr20 hg19_knownGene exon 42187635 42187799 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42195136 42195171 0.000000 + 0 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42195113 42195171 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42195708 42195757 0.000000 + 0 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42195708 42195757 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42196305 42196362 0.000000 + 1 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42196305 42196362 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42196556 42196639 0.000000 + 0 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42196556 42196639 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42198025 42198156 0.000000 + 0 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42198025 42198156 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42199257 42199369 0.000000 + 0 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42199257 42199369 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42199664 42199700 0.000000 + 1 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42199664 42199700 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42200691 42200777 0.000000 + 0 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42200691 42200777 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42203549 42203644 0.000000 + 0 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42203549 42203644 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42204864 42205019 0.000000 + 0 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42204864 42205019 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42208612 42208701 0.000000 + 0 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42208612 42208701 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene CDS 42211823 42211957 0.000000 + 0 gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42211823 42212014 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42213492 42214273 0.000000 + . gene_id "SGK2"; transcript_id "AK308502:uc010ggm.3"; -chr20 hg19_knownGene exon 42187635 42187799 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42195113 42195171 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42195708 42195757 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42196305 42196362 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42196556 42196639 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42198025 42198156 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42199257 42199369 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42199664 42199700 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42200691 42200777 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42203549 42203644 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42204864 42205023 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42208612 42208701 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42213492 42214273 0.000000 + . gene_id "SGK2"; transcript_id "BC006523:uc002xkt.3"; -chr20 hg19_knownGene exon 42193755 42193926 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42195136 42195171 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42195113 42195171 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42195708 42195757 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42195708 42195757 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42196305 42196362 0.000000 + 1 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42196305 42196362 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42196556 42196639 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42196556 42196639 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42198025 42198156 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42198025 42198156 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42199257 42199369 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42199257 42199369 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42199664 42199700 0.000000 + 1 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42199664 42199700 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42200691 42200777 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42200691 42200777 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42203549 42203644 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42203549 42203644 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42204864 42205019 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42204864 42205019 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42208612 42208701 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42208612 42208701 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42213492 42213653 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene exon 42213492 42214273 0.000000 + . gene_id "SGK2"; transcript_id "NM_001199264:uc002xku.3"; -chr20 hg19_knownGene CDS 42194956 42195171 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42194737 42195171 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42195708 42195757 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42195708 42195757 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42196305 42196362 0.000000 + 1 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42196305 42196362 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42196556 42196639 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42196556 42196639 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42198025 42198156 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42198025 42198156 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42199257 42199369 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42199257 42199369 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42199664 42199700 0.000000 + 1 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42199664 42199700 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42200691 42200777 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42200691 42200777 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42203549 42203644 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42203549 42203644 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42204864 42205019 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42204864 42205019 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42208612 42208701 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42208612 42208701 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene CDS 42213492 42213653 0.000000 + 0 gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42213492 42214273 0.000000 + . gene_id "SGK2"; transcript_id "NM_016276:uc002xkv.3"; -chr20 hg19_knownGene exon 42219579 42219694 0.000000 + . gene_id "IFT52"; transcript_id "AK301915:uc010zwi.1"; -chr20 hg19_knownGene exon 42223333 42223457 0.000000 + . gene_id "IFT52"; transcript_id "AK301915:uc010zwi.1"; -chr20 hg19_knownGene exon 42225075 42225162 0.000000 + . gene_id "IFT52"; transcript_id "AK301915:uc010zwi.1"; -chr20 hg19_knownGene exon 42232823 42232898 0.000000 + . gene_id "IFT52"; transcript_id "AK301915:uc010zwi.1"; -chr20 hg19_knownGene exon 42233642 42233856 0.000000 + . gene_id "IFT52"; transcript_id "AK301915:uc010zwi.1"; -chr20 hg19_knownGene exon 42242490 42242616 0.000000 + . gene_id "IFT52"; transcript_id "AK301915:uc010zwi.1"; -chr20 hg19_knownGene exon 42247524 42247666 0.000000 + . gene_id "IFT52"; transcript_id "AK301915:uc010zwi.1"; -chr20 hg19_knownGene exon 42249497 42249565 0.000000 + . gene_id "IFT52"; transcript_id "AK301915:uc010zwi.1"; -chr20 hg19_knownGene exon 42219579 42219694 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42223339 42223457 0.000000 + 0 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42223333 42223457 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42225075 42225162 0.000000 + 1 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42225075 42225162 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42232400 42232529 0.000000 + 0 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42232400 42232529 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42232823 42232898 0.000000 + 2 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42232823 42232898 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42233642 42233713 0.000000 + 1 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42233642 42233713 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42242490 42242616 0.000000 + 1 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42242490 42242616 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42247580 42247666 0.000000 + 0 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42247580 42247666 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42249497 42249565 0.000000 + 0 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42249497 42249565 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42252531 42252685 0.000000 + 0 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42252531 42252685 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42264566 42264653 0.000000 + 1 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42264566 42264653 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42265785 42265893 0.000000 + 0 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42265785 42265893 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42271119 42271264 0.000000 + 2 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42271119 42271264 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene CDS 42275576 42275620 0.000000 + 0 gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42275576 42275862 0.000000 + . gene_id "IFT52"; transcript_id "NM_016004:uc002xkw.3"; -chr20 hg19_knownGene exon 42219584 42219669 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42223333 42223457 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42225075 42225162 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42232400 42232529 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42232823 42232898 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42233642 42233713 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42242490 42242616 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42247580 42247670 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42249497 42249565 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42252531 42252685 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42264566 42264653 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42265785 42265893 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42271119 42271264 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42275576 42275862 0.000000 + . gene_id "IFT52"; transcript_id "AF151811:uc002xkx.3"; -chr20 hg19_knownGene exon 42219584 42219669 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42223339 42223457 0.000000 + 0 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42223333 42223457 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42225075 42225162 0.000000 + 1 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42225075 42225162 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42232400 42232529 0.000000 + 0 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42232400 42232529 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42232823 42232898 0.000000 + 2 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42232823 42232898 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42233642 42233713 0.000000 + 1 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42233642 42233713 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42242490 42242616 0.000000 + 1 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42242490 42242616 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42247580 42247666 0.000000 + 0 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42247580 42247666 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42249497 42249565 0.000000 + 0 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42249497 42249565 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42252531 42252685 0.000000 + 0 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42252531 42252685 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42264566 42264653 0.000000 + 1 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42264566 42264653 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42265785 42265892 0.000000 + 0 gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42265785 42265893 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene exon 42275576 42275862 0.000000 + . gene_id "IFT52"; transcript_id "BC021086:uc002xkz.3"; -chr20 hg19_knownGene CDS 42295924 42295943 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42295709 42295943 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42302446 42302539 0.000000 + 1 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42302446 42302539 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42310424 42310495 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42310424 42310495 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42311434 42311526 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42311434 42311526 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42315492 42315712 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42315492 42315712 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42320797 42320959 0.000000 + 1 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42320797 42320959 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42328397 42328684 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42328397 42328684 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42331130 42331543 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42331130 42331543 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42333859 42333998 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42333859 42333998 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42338603 42338702 0.000000 + 1 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42338603 42338702 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42340128 42340241 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42340128 42340241 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42341642 42341746 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42341642 42341746 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42343774 42343923 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42343774 42343923 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42344599 42344724 0.000000 + 0 gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene exon 42344599 42345122 0.000000 + . gene_id "MYBL2"; transcript_id "NM_002466:uc002xlb.1"; -chr20 hg19_knownGene CDS 42295924 42295943 0.000000 + 0 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42295709 42295943 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42302446 42302539 0.000000 + 1 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42302446 42302539 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42311434 42311526 0.000000 + 0 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42311434 42311526 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42315492 42315712 0.000000 + 0 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42315492 42315712 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42320797 42320959 0.000000 + 1 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42320797 42320959 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42328397 42328684 0.000000 + 0 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42328397 42328684 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42331130 42331543 0.000000 + 0 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42331130 42331543 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42333859 42333998 0.000000 + 0 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42333859 42333998 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42338603 42338702 0.000000 + 1 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42338603 42338702 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42340128 42340241 0.000000 + 0 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42340128 42340241 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42341642 42341746 0.000000 + 0 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42341642 42341746 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42343774 42343923 0.000000 + 0 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42343774 42343923 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42344599 42344724 0.000000 + 0 gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene exon 42344599 42345122 0.000000 + . gene_id "MYBL2"; transcript_id "AK303249:uc010zwj.1"; -chr20 hg19_knownGene CDS 42354891 42354980 0.000000 - 0 gene_id "GTSF1L"; transcript_id "NM_001008901:uc002xlc.3"; -chr20 hg19_knownGene exon 42354801 42354980 0.000000 - . gene_id "GTSF1L"; transcript_id "NM_001008901:uc002xlc.3"; -chr20 hg19_knownGene CDS 42355056 42355334 0.000000 - 0 gene_id "GTSF1L"; transcript_id "NM_001008901:uc002xlc.3"; -chr20 hg19_knownGene exon 42355056 42355642 0.000000 - . gene_id "GTSF1L"; transcript_id "NM_001008901:uc002xlc.3"; -chr20 hg19_knownGene CDS 42354891 42355334 0.000000 - 0 gene_id "GTSF1L"; transcript_id "NM_176791:uc002xld.3"; -chr20 hg19_knownGene exon 42354801 42355642 0.000000 - . gene_id "GTSF1L"; transcript_id "NM_176791:uc002xld.3"; -chr20 hg19_knownGene exon 42635888 42636179 0.000000 + . gene_id "Metazoa_SRP"; transcript_id ":uc021wdz.1"; -chr20 hg19_knownGene CDS 42543532 42543630 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene exon 42543492 42543630 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene CDS 42602007 42602072 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene exon 42602007 42602072 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene CDS 42635187 42635432 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene exon 42635187 42635432 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene CDS 42679946 42680185 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene exon 42679946 42680185 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene CDS 42682939 42683166 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene exon 42682939 42683166 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene CDS 42693417 42693497 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene exon 42693417 42693497 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene CDS 42694352 42694747 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene exon 42694352 42694747 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene CDS 42695370 42695497 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene exon 42695370 42695497 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene CDS 42697290 42697323 0.000000 + 1 gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene exon 42697290 42698254 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098797:uc010ggo.3"; -chr20 hg19_knownGene exon 42544782 42544848 0.000000 + . gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene exon 42583788 42583912 0.000000 + . gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene CDS 42602034 42602072 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene exon 42602007 42602072 0.000000 + . gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene CDS 42635187 42635432 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene exon 42635187 42635432 0.000000 + . gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene CDS 42679946 42680185 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene exon 42679946 42680185 0.000000 + . gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene CDS 42682939 42683166 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene exon 42682939 42683166 0.000000 + . gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene CDS 42693417 42693497 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene exon 42693417 42693497 0.000000 + . gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene CDS 42694352 42694747 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene exon 42694352 42694747 0.000000 + . gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene CDS 42695370 42695497 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene exon 42695370 42695497 0.000000 + . gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene CDS 42697290 42697323 0.000000 + 1 gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene exon 42697290 42698254 0.000000 + . gene_id "TOX2"; transcript_id "NM_032883:uc002xle.4"; -chr20 hg19_knownGene exon 42544782 42544848 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene CDS 42602034 42602072 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene exon 42602007 42602072 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene CDS 42635187 42635432 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene exon 42635187 42635432 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene CDS 42679946 42680185 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene exon 42679946 42680185 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene CDS 42682939 42683166 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene exon 42682939 42683166 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene CDS 42693417 42693497 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene exon 42693417 42693497 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene CDS 42694352 42694747 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene exon 42694352 42694747 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene CDS 42695370 42695497 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene exon 42695370 42695497 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene CDS 42697290 42697323 0.000000 + 1 gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene exon 42697290 42698254 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098796:uc010ggp.3"; -chr20 hg19_knownGene CDS 42574553 42574678 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene exon 42574536 42574678 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene CDS 42602007 42602072 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene exon 42602007 42602072 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene CDS 42635187 42635432 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene exon 42635187 42635432 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene CDS 42679946 42680185 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene exon 42679946 42680185 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene CDS 42682939 42683166 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene exon 42682939 42683166 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene CDS 42694352 42694747 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene exon 42694352 42694747 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene CDS 42695370 42695497 0.000000 + 0 gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene exon 42695370 42695497 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene CDS 42697290 42697323 0.000000 + 1 gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene exon 42697290 42698254 0.000000 + . gene_id "TOX2"; transcript_id "NM_001098798:uc002xlf.4"; -chr20 hg19_knownGene CDS 42667825 42667869 0.000000 + 0 gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene exon 42667644 42667869 0.000000 + . gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene CDS 42679946 42680185 0.000000 + 0 gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene exon 42679946 42680185 0.000000 + . gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene CDS 42682939 42683166 0.000000 + 0 gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene exon 42682939 42683166 0.000000 + . gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene CDS 42693417 42693497 0.000000 + 0 gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene exon 42693417 42693497 0.000000 + . gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene CDS 42694352 42694747 0.000000 + 0 gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene exon 42694352 42694747 0.000000 + . gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene CDS 42695370 42695497 0.000000 + 0 gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene exon 42695370 42695497 0.000000 + . gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene CDS 42697290 42697323 0.000000 + 1 gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene exon 42697290 42698254 0.000000 + . gene_id "TOX2"; transcript_id "AK298976:uc010zwk.2"; -chr20 hg19_knownGene exon 42740336 42742643 0.000000 - . gene_id "AK098303"; transcript_id "AK098303:uc021wea.1"; -chr20 hg19_knownGene exon 42800789 42800907 0.000000 + . gene_id "Mir_584"; transcript_id ":uc021web.1"; -chr20 hg19_knownGene exon 42740337 42742143 0.000000 - . gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene CDS 42743439 42743516 0.000000 - 0 gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene exon 42743422 42743516 0.000000 - . gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene CDS 42744305 42745026 0.000000 - 2 gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene exon 42744305 42745026 0.000000 - . gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene CDS 42747145 42747263 0.000000 - 1 gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene exon 42747145 42747263 0.000000 - . gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene CDS 42788258 42789047 0.000000 - 2 gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene exon 42788258 42789047 0.000000 - . gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene CDS 42814967 42815345 0.000000 - 0 gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene exon 42814967 42816218 0.000000 - . gene_id "JPH2"; transcript_id "NM_020433:uc002xli.1"; -chr20 hg19_knownGene CDS 42806605 42806612 0.000000 - 2 gene_id "JPH2"; transcript_id "NM_175913:uc002xlj.3"; -chr20 hg19_knownGene exon 42805457 42806612 0.000000 - . gene_id "JPH2"; transcript_id "NM_175913:uc002xlj.3"; -chr20 hg19_knownGene CDS 42814967 42815345 0.000000 - 0 gene_id "JPH2"; transcript_id "NM_175913:uc002xlj.3"; -chr20 hg19_knownGene exon 42814967 42816218 0.000000 - . gene_id "JPH2"; transcript_id "NM_175913:uc002xlj.3"; -chr20 hg19_knownGene CDS 42825695 42826379 0.000000 - 1 gene_id "C20orf111"; transcript_id "NM_016470:uc002xlk.3"; -chr20 hg19_knownGene exon 42824581 42826379 0.000000 - . gene_id "C20orf111"; transcript_id "NM_016470:uc002xlk.3"; -chr20 hg19_knownGene CDS 42831601 42831714 0.000000 - 1 gene_id "C20orf111"; transcript_id "NM_016470:uc002xlk.3"; -chr20 hg19_knownGene exon 42831601 42831714 0.000000 - . gene_id "C20orf111"; transcript_id "NM_016470:uc002xlk.3"; -chr20 hg19_knownGene CDS 42835521 42835597 0.000000 - 0 gene_id "C20orf111"; transcript_id "NM_016470:uc002xlk.3"; -chr20 hg19_knownGene exon 42835521 42835638 0.000000 - . gene_id "C20orf111"; transcript_id "NM_016470:uc002xlk.3"; -chr20 hg19_knownGene exon 42839336 42839546 0.000000 - . gene_id "C20orf111"; transcript_id "NM_016470:uc002xlk.3"; -chr20 hg19_knownGene exon 42846122 42846322 0.000000 + . gene_id "BC036500"; transcript_id "BC036500:uc002xlo.3"; -chr20 hg19_knownGene exon 42848429 42852332 0.000000 + . gene_id "BC036500"; transcript_id "BC036500:uc002xlo.3"; -chr20 hg19_knownGene exon 42839600 42839717 0.000000 + . gene_id "LOC100505783"; transcript_id "NR_038339:uc002xll.3"; -chr20 hg19_knownGene exon 42843528 42843643 0.000000 + . gene_id "LOC100505783"; transcript_id "NR_038339:uc002xll.3"; -chr20 hg19_knownGene exon 42853461 42854667 0.000000 + . gene_id "LOC100505783"; transcript_id "NR_038339:uc002xll.3"; -chr20 hg19_knownGene exon 42839722 42839996 0.000000 + . gene_id "LOC100505783"; transcript_id "NR_038338:uc021wec.1"; -chr20 hg19_knownGene exon 42843528 42843643 0.000000 + . gene_id "LOC100505783"; transcript_id "NR_038338:uc021wec.1"; -chr20 hg19_knownGene exon 42853461 42854667 0.000000 + . gene_id "LOC100505783"; transcript_id "NR_038338:uc021wec.1"; -chr20 hg19_knownGene exon 42839722 42839996 0.000000 + . gene_id "LOC100505783"; transcript_id "BC019858:uc002xlm.3"; -chr20 hg19_knownGene exon 42853461 42854667 0.000000 + . gene_id "LOC100505783"; transcript_id "BC019858:uc002xlm.3"; -chr20 hg19_knownGene exon 42839726 42840131 0.000000 + . gene_id "LOC100505783"; transcript_id "NR_038337:uc002xln.3"; -chr20 hg19_knownGene exon 42843528 42843643 0.000000 + . gene_id "LOC100505783"; transcript_id "NR_038337:uc002xln.3"; -chr20 hg19_knownGene exon 42853461 42854667 0.000000 + . gene_id "LOC100505783"; transcript_id "NR_038337:uc002xln.3"; -chr20 hg19_knownGene CDS 42875975 42876154 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK225166:uc002xlp.1"; -chr20 hg19_knownGene exon 42875908 42876154 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK225166:uc002xlp.1"; -chr20 hg19_knownGene CDS 42885793 42885985 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK225166:uc002xlp.1"; -chr20 hg19_knownGene exon 42885793 42885985 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK225166:uc002xlp.1"; -chr20 hg19_knownGene CDS 42887074 42887247 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "AK225166:uc002xlp.1"; -chr20 hg19_knownGene exon 42887074 42887247 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK225166:uc002xlp.1"; -chr20 hg19_knownGene CDS 42891870 42891967 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "AK225166:uc002xlp.1"; -chr20 hg19_knownGene exon 42891870 42891967 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK225166:uc002xlp.1"; -chr20 hg19_knownGene CDS 42893085 42893351 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK225166:uc002xlp.1"; -chr20 hg19_knownGene exon 42893085 42894266 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK225166:uc002xlp.1"; -chr20 hg19_knownGene CDS 42875975 42876154 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene exon 42875908 42876154 0.000000 + . gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene CDS 42885793 42885985 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene exon 42885793 42885985 0.000000 + . gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene CDS 42887074 42887247 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene exon 42887074 42887247 0.000000 + . gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene CDS 42891870 42891967 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene exon 42891870 42891967 0.000000 + . gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene CDS 42893085 42893199 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene exon 42893085 42893199 0.000000 + . gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene CDS 42907597 42907937 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene exon 42907597 42909013 0.000000 + . gene_id "GDAP1L1"; transcript_id "NM_024034:uc002xlq.3"; -chr20 hg19_knownGene CDS 42875975 42876154 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene exon 42875908 42876154 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene CDS 42885793 42885985 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene exon 42885793 42885985 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene CDS 42887017 42887247 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene exon 42887017 42887247 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene CDS 42891870 42891967 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene exon 42891870 42891967 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene CDS 42893085 42893199 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene exon 42893085 42893199 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene CDS 42907597 42907937 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene exon 42907597 42909013 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK299700:uc010zwl.2"; -chr20 hg19_knownGene CDS 42875975 42876154 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK293484:uc010zwm.2"; -chr20 hg19_knownGene exon 42875908 42876154 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK293484:uc010zwm.2"; -chr20 hg19_knownGene CDS 42885793 42885985 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK293484:uc010zwm.2"; -chr20 hg19_knownGene exon 42885793 42885985 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK293484:uc010zwm.2"; -chr20 hg19_knownGene CDS 42891870 42891967 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "AK293484:uc010zwm.2"; -chr20 hg19_knownGene exon 42891870 42891967 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK293484:uc010zwm.2"; -chr20 hg19_knownGene CDS 42893085 42893199 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK293484:uc010zwm.2"; -chr20 hg19_knownGene exon 42893085 42893199 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK293484:uc010zwm.2"; -chr20 hg19_knownGene CDS 42907597 42907937 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "AK293484:uc010zwm.2"; -chr20 hg19_knownGene exon 42907597 42909013 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK293484:uc010zwm.2"; -chr20 hg19_knownGene exon 42875908 42876154 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK297348:uc010zwn.2"; -chr20 hg19_knownGene CDS 42891899 42891967 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK297348:uc010zwn.2"; -chr20 hg19_knownGene exon 42891870 42891967 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK297348:uc010zwn.2"; -chr20 hg19_knownGene CDS 42893085 42893199 0.000000 + 0 gene_id "GDAP1L1"; transcript_id "AK297348:uc010zwn.2"; -chr20 hg19_knownGene exon 42893085 42893199 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK297348:uc010zwn.2"; -chr20 hg19_knownGene CDS 42907597 42907937 0.000000 + 2 gene_id "GDAP1L1"; transcript_id "AK297348:uc010zwn.2"; -chr20 hg19_knownGene exon 42907597 42909013 0.000000 + . gene_id "GDAP1L1"; transcript_id "AK297348:uc010zwn.2"; -chr20 hg19_knownGene CDS 42935268 42935880 0.000000 - 1 gene_id "FITM2"; transcript_id "NM_001080472:uc002xlr.1"; -chr20 hg19_knownGene exon 42935197 42935880 0.000000 - . gene_id "FITM2"; transcript_id "NM_001080472:uc002xlr.1"; -chr20 hg19_knownGene CDS 42939616 42939788 0.000000 - 0 gene_id "FITM2"; transcript_id "NM_001080472:uc002xlr.1"; -chr20 hg19_knownGene exon 42939616 42939889 0.000000 - . gene_id "FITM2"; transcript_id "NM_001080472:uc002xlr.1"; -chr20 hg19_knownGene CDS 42965798 42966058 0.000000 + 0 gene_id "R3HDML"; transcript_id "NM_178491:uc002xls.1"; -chr20 hg19_knownGene exon 42965626 42966058 0.000000 + . gene_id "R3HDML"; transcript_id "NM_178491:uc002xls.1"; -chr20 hg19_knownGene CDS 42969836 42969954 0.000000 + 0 gene_id "R3HDML"; transcript_id "NM_178491:uc002xls.1"; -chr20 hg19_knownGene exon 42969836 42969954 0.000000 + . gene_id "R3HDML"; transcript_id "NM_178491:uc002xls.1"; -chr20 hg19_knownGene CDS 42972017 42972149 0.000000 + 1 gene_id "R3HDML"; transcript_id "NM_178491:uc002xls.1"; -chr20 hg19_knownGene exon 42972017 42972149 0.000000 + . gene_id "R3HDML"; transcript_id "NM_178491:uc002xls.1"; -chr20 hg19_knownGene CDS 42973903 42974018 0.000000 + 0 gene_id "R3HDML"; transcript_id "NM_178491:uc002xls.1"; -chr20 hg19_knownGene exon 42973903 42974018 0.000000 + . gene_id "R3HDML"; transcript_id "NM_178491:uc002xls.1"; -chr20 hg19_knownGene CDS 42979300 42979429 0.000000 + 1 gene_id "R3HDML"; transcript_id "NM_178491:uc002xls.1"; -chr20 hg19_knownGene exon 42979300 42979875 0.000000 + . gene_id "R3HDML"; transcript_id "NM_178491:uc002xls.1"; -chr20 hg19_knownGene exon 43006383 43006524 0.000000 - . gene_id "AF143870"; transcript_id "AF143870:uc002xlx.3"; -chr20 hg19_knownGene exon 43013163 43013312 0.000000 - . gene_id "AF143870"; transcript_id "AF143870:uc002xlx.3"; -chr20 hg19_knownGene exon 43020649 43020750 0.000000 - . gene_id "AF143870"; transcript_id "AF143870:uc002xlx.3"; -chr20 hg19_knownGene exon 43024093 43024346 0.000000 - . gene_id "AF143870"; transcript_id "AF143870:uc002xlx.3"; -chr20 hg19_knownGene exon 43001507 43001649 0.000000 - . gene_id "BC071794"; transcript_id "BC071794:uc002xlw.1"; -chr20 hg19_knownGene exon 43013163 43013312 0.000000 - . gene_id "BC071794"; transcript_id "BC071794:uc002xlw.1"; -chr20 hg19_knownGene exon 43020076 43020273 0.000000 - . gene_id "BC071794"; transcript_id "BC071794:uc002xlw.1"; -chr20 hg19_knownGene exon 43031149 43031509 0.000000 - . gene_id "BC071794"; transcript_id "BC071794:uc002xlw.1"; -chr20 hg19_knownGene exon 42984441 42984493 0.000000 + . gene_id "HNF4A"; transcript_id "FJ608822:uc010zwo.1"; -chr20 hg19_knownGene CDS 43019233 43019319 0.000000 + 0 gene_id "HNF4A"; transcript_id "FJ608822:uc010zwo.1"; -chr20 hg19_knownGene exon 43019098 43019319 0.000000 + . gene_id "HNF4A"; transcript_id "FJ608822:uc010zwo.1"; -chr20 hg19_knownGene CDS 43034698 43034872 0.000000 + 0 gene_id "HNF4A"; transcript_id "FJ608822:uc010zwo.1"; -chr20 hg19_knownGene exon 43034698 43034872 0.000000 + . gene_id "HNF4A"; transcript_id "FJ608822:uc010zwo.1"; -chr20 hg19_knownGene CDS 43036021 43036103 0.000000 + 2 gene_id "HNF4A"; transcript_id "FJ608822:uc010zwo.1"; -chr20 hg19_knownGene exon 43036021 43036115 0.000000 + . gene_id "HNF4A"; transcript_id "FJ608822:uc010zwo.1"; -chr20 hg19_knownGene exon 43036760 43036843 0.000000 + . gene_id "MIR3646"; transcript_id "NR_037419:uc021wed.1"; -chr20 hg19_knownGene CDS 42984445 42984493 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene exon 42984441 42984493 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene CDS 43034698 43034872 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene exon 43034698 43034872 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene CDS 43036021 43036115 0.000000 + 1 gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene exon 43036021 43036115 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene CDS 43042334 43042440 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene exon 43042334 43042440 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene CDS 43043147 43043302 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene exon 43043147 43043302 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene CDS 43047065 43047152 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene exon 43047065 43047152 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene CDS 43048361 43048516 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene exon 43048361 43048516 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene CDS 43052658 43053016 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene exon 43052658 43053276 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030004:uc002xlt.3"; -chr20 hg19_knownGene CDS 43030013 43030127 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene exon 43029924 43030127 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene CDS 43034698 43034872 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene exon 43034698 43034872 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene CDS 43036021 43036115 0.000000 + 1 gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene exon 43036021 43036115 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene CDS 43042334 43042440 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene exon 43042334 43042440 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene CDS 43043147 43043302 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene exon 43043147 43043302 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene CDS 43047065 43047152 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene exon 43047065 43047152 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene CDS 43048361 43048516 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene exon 43048361 43048516 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene CDS 43052658 43053016 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene exon 43052658 43053276 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178850:uc002xly.3"; -chr20 hg19_knownGene CDS 42984445 42984493 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene exon 42984441 42984493 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene CDS 43034698 43034872 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene exon 43034698 43034872 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene CDS 43036021 43036115 0.000000 + 1 gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene exon 43036021 43036115 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene CDS 43042334 43042440 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene exon 43042334 43042440 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene CDS 43043147 43043302 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene exon 43043147 43043302 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene CDS 43047065 43047152 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene exon 43047065 43047152 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene CDS 43048361 43048516 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene exon 43048361 43048516 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene CDS 43052658 43052894 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene exon 43052658 43052894 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene CDS 43056975 43057097 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene exon 43056975 43057097 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene CDS 43058163 43058302 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene exon 43058163 43060030 0.000000 + . gene_id "HNF4A"; transcript_id "NM_001030003:uc002xlu.3"; -chr20 hg19_knownGene CDS 42984445 42984493 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene exon 42984441 42984493 0.000000 + . gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene CDS 43034698 43034872 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene exon 43034698 43034872 0.000000 + . gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene CDS 43036021 43036115 0.000000 + 1 gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene exon 43036021 43036115 0.000000 + . gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene CDS 43042334 43042440 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene exon 43042334 43042440 0.000000 + . gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene CDS 43043147 43043302 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene exon 43043147 43043302 0.000000 + . gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene CDS 43047065 43047152 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene exon 43047065 43047152 0.000000 + . gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene CDS 43048361 43048516 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene exon 43048361 43048516 0.000000 + . gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene CDS 43052658 43052894 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene exon 43052658 43052894 0.000000 + . gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene CDS 43056975 43057127 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene exon 43056975 43057127 0.000000 + . gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene CDS 43058163 43058302 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene exon 43058163 43060030 0.000000 + . gene_id "HNF4A"; transcript_id "NM_175914:uc002xlv.3"; -chr20 hg19_knownGene CDS 43030013 43030127 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene exon 43029924 43030127 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene CDS 43034698 43034872 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene exon 43034698 43034872 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene CDS 43036021 43036115 0.000000 + 1 gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene exon 43036021 43036115 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene CDS 43042334 43042440 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene exon 43042334 43042440 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene CDS 43043147 43043302 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene exon 43043147 43043302 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene CDS 43047065 43047152 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene exon 43047065 43047152 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene CDS 43048361 43048516 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene exon 43048361 43048516 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene CDS 43052658 43052894 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene exon 43052658 43052894 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene CDS 43056975 43057097 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene exon 43056975 43057097 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene CDS 43058163 43058302 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene exon 43058163 43060030 0.000000 + . gene_id "HNF4A"; transcript_id "NM_178849:uc002xlz.3"; -chr20 hg19_knownGene CDS 43030013 43030127 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene exon 43029924 43030127 0.000000 + . gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene CDS 43034698 43034872 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene exon 43034698 43034872 0.000000 + . gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene CDS 43036021 43036115 0.000000 + 1 gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene exon 43036021 43036115 0.000000 + . gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene CDS 43042334 43042440 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene exon 43042334 43042440 0.000000 + . gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene CDS 43043147 43043302 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene exon 43043147 43043302 0.000000 + . gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene CDS 43047065 43047152 0.000000 + 0 gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene exon 43047065 43047152 0.000000 + . gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene CDS 43048361 43048516 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene exon 43048361 43048516 0.000000 + . gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene CDS 43052658 43052894 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene exon 43052658 43052894 0.000000 + . gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene CDS 43056975 43057127 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene exon 43056975 43057127 0.000000 + . gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene CDS 43058163 43058302 0.000000 + 2 gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene exon 43058163 43060030 0.000000 + . gene_id "HNF4A"; transcript_id "NM_000457:uc002xma.3"; -chr20 hg19_knownGene CDS 43030125 43030127 0.000000 + 0 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43029924 43030127 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene CDS 43031194 43031284 0.000000 + 0 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43031194 43031284 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene CDS 43034698 43034872 0.000000 + 2 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43034698 43034872 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene CDS 43036021 43036115 0.000000 + 1 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43036021 43036115 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene CDS 43042334 43042440 0.000000 + 2 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43042334 43042440 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene CDS 43043147 43043302 0.000000 + 0 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43043147 43043302 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene CDS 43047065 43047152 0.000000 + 0 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43047065 43047152 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene CDS 43048361 43048516 0.000000 + 2 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43048361 43048516 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene CDS 43052658 43052894 0.000000 + 2 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43052658 43052894 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene CDS 43056975 43057127 0.000000 + 2 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43056975 43057127 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene CDS 43058163 43058302 0.000000 + 2 gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43058163 43060030 0.000000 + . gene_id "HNF4A"; transcript_id "Z49825:uc010ggq.3"; -chr20 hg19_knownGene exon 43089673 43089934 0.000000 + . gene_id "Metazoa_SRP"; transcript_id ":uc021wee.1"; -chr20 hg19_knownGene CDS 43090528 43090922 0.000000 - 2 gene_id "C20orf62"; transcript_id "BC030259:uc002xmb.3"; -chr20 hg19_knownGene exon 43090403 43090922 0.000000 - . gene_id "C20orf62"; transcript_id "BC030259:uc002xmb.3"; -chr20 hg19_knownGene CDS 43093805 43093919 0.000000 - 0 gene_id "C20orf62"; transcript_id "BC030259:uc002xmb.3"; -chr20 hg19_knownGene exon 43093805 43093984 0.000000 - . gene_id "C20orf62"; transcript_id "BC030259:uc002xmb.3"; -chr20 hg19_knownGene exon 43104547 43104631 0.000000 + . gene_id "TTPAL"; transcript_id "NM_024331:uc002xmc.1"; -chr20 hg19_knownGene exon 43107264 43107287 0.000000 + . gene_id "TTPAL"; transcript_id "NM_024331:uc002xmc.1"; -chr20 hg19_knownGene CDS 43108640 43109084 0.000000 + 0 gene_id "TTPAL"; transcript_id "NM_024331:uc002xmc.1"; -chr20 hg19_knownGene exon 43108625 43109084 0.000000 + . gene_id "TTPAL"; transcript_id "NM_024331:uc002xmc.1"; -chr20 hg19_knownGene CDS 43112977 43113170 0.000000 + 2 gene_id "TTPAL"; transcript_id "NM_024331:uc002xmc.1"; -chr20 hg19_knownGene exon 43112977 43113170 0.000000 + . gene_id "TTPAL"; transcript_id "NM_024331:uc002xmc.1"; -chr20 hg19_knownGene CDS 43115236 43115346 0.000000 + 0 gene_id "TTPAL"; transcript_id "NM_024331:uc002xmc.1"; -chr20 hg19_knownGene exon 43115236 43115346 0.000000 + . gene_id "TTPAL"; transcript_id "NM_024331:uc002xmc.1"; -chr20 hg19_knownGene CDS 43117904 43118179 0.000000 + 0 gene_id "TTPAL"; transcript_id "NM_024331:uc002xmc.1"; -chr20 hg19_knownGene exon 43117904 43123244 0.000000 + . gene_id "TTPAL"; transcript_id "NM_024331:uc002xmc.1"; -chr20 hg19_knownGene exon 43104547 43104631 0.000000 + . gene_id "TTPAL"; transcript_id "NM_001039199:uc002xmd.1"; -chr20 hg19_knownGene CDS 43108640 43109084 0.000000 + 0 gene_id "TTPAL"; transcript_id "NM_001039199:uc002xmd.1"; -chr20 hg19_knownGene exon 43108625 43109084 0.000000 + . gene_id "TTPAL"; transcript_id "NM_001039199:uc002xmd.1"; -chr20 hg19_knownGene CDS 43112977 43113170 0.000000 + 2 gene_id "TTPAL"; transcript_id "NM_001039199:uc002xmd.1"; -chr20 hg19_knownGene exon 43112977 43113170 0.000000 + . gene_id "TTPAL"; transcript_id "NM_001039199:uc002xmd.1"; -chr20 hg19_knownGene CDS 43115236 43115346 0.000000 + 0 gene_id "TTPAL"; transcript_id "NM_001039199:uc002xmd.1"; -chr20 hg19_knownGene exon 43115236 43115346 0.000000 + . gene_id "TTPAL"; transcript_id "NM_001039199:uc002xmd.1"; -chr20 hg19_knownGene CDS 43117904 43118179 0.000000 + 0 gene_id "TTPAL"; transcript_id "NM_001039199:uc002xmd.1"; -chr20 hg19_knownGene exon 43117904 43123244 0.000000 + . gene_id "TTPAL"; transcript_id "NM_001039199:uc002xmd.1"; -chr20 hg19_knownGene CDS 43109007 43109084 0.000000 + 0 gene_id "TTPAL"; transcript_id "AK307236:uc010ggr.1"; -chr20 hg19_knownGene exon 43108609 43109084 0.000000 + . gene_id "TTPAL"; transcript_id "AK307236:uc010ggr.1"; -chr20 hg19_knownGene CDS 43115236 43115346 0.000000 + 0 gene_id "TTPAL"; transcript_id "AK307236:uc010ggr.1"; -chr20 hg19_knownGene exon 43115236 43115346 0.000000 + . gene_id "TTPAL"; transcript_id "AK307236:uc010ggr.1"; -chr20 hg19_knownGene CDS 43117904 43118179 0.000000 + 0 gene_id "TTPAL"; transcript_id "AK307236:uc010ggr.1"; -chr20 hg19_knownGene exon 43117904 43123244 0.000000 + . gene_id "TTPAL"; transcript_id "AK307236:uc010ggr.1"; -chr20 hg19_knownGene exon 43124864 43124996 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43128940 43129075 0.000000 - 1 gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene exon 43128899 43129075 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43129714 43129941 0.000000 - 1 gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene exon 43129714 43129941 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43132456 43132636 0.000000 - 2 gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene exon 43132456 43132636 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43133442 43133532 0.000000 - 0 gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene exon 43133442 43133532 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43135468 43135637 0.000000 - 2 gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene exon 43135468 43135637 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43138532 43138669 0.000000 - 2 gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene exon 43138532 43138669 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43139930 43140009 0.000000 - 1 gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene exon 43139930 43140009 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43141442 43141635 0.000000 - 0 gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene exon 43141442 43141635 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43142520 43142681 0.000000 - 0 gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene exon 43142520 43142681 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43150554 43150592 0.000000 - 0 gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene exon 43150554 43150726 0.000000 - . gene_id "SERINC3"; transcript_id "NM_198941:uc002xme.3"; -chr20 hg19_knownGene CDS 43128940 43129075 0.000000 - 1 gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene exon 43127901 43129075 0.000000 - . gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene CDS 43129714 43129941 0.000000 - 1 gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene exon 43129714 43129941 0.000000 - . gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene CDS 43132456 43132636 0.000000 - 2 gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene exon 43132456 43132636 0.000000 - . gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene CDS 43133442 43133532 0.000000 - 0 gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene exon 43133442 43133532 0.000000 - . gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene CDS 43135468 43135637 0.000000 - 2 gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene exon 43135468 43135637 0.000000 - . gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene CDS 43138532 43138669 0.000000 - 2 gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene exon 43138532 43138669 0.000000 - . gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene CDS 43139930 43140009 0.000000 - 1 gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene exon 43139930 43140009 0.000000 - . gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene CDS 43141442 43141635 0.000000 - 0 gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene exon 43141442 43141635 0.000000 - . gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene CDS 43142520 43142681 0.000000 - 0 gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene exon 43142520 43142681 0.000000 - . gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene CDS 43150554 43150592 0.000000 - 0 gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene exon 43150554 43150726 0.000000 - . gene_id "SERINC3"; transcript_id "NM_006811:uc002xmf.1"; -chr20 hg19_knownGene CDS 43128940 43129075 0.000000 - 1 gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43127901 43129075 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene CDS 43129714 43129941 0.000000 - 1 gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43129714 43129941 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene CDS 43132456 43132636 0.000000 - 2 gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43132456 43132636 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene CDS 43133442 43133532 0.000000 - 0 gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43133442 43133532 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene CDS 43135468 43135637 0.000000 - 2 gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43135468 43135637 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene CDS 43138532 43138669 0.000000 - 2 gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43138532 43138669 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene CDS 43139930 43140009 0.000000 - 1 gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43139930 43140009 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene CDS 43141442 43141635 0.000000 - 0 gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43141442 43141635 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene CDS 43142520 43142699 0.000000 - 0 gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43142520 43142705 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43147953 43148055 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene exon 43150554 43150726 0.000000 - . gene_id "SERINC3"; transcript_id "AK309993:uc010ggs.1"; -chr20 hg19_knownGene CDS 43128940 43129075 0.000000 - 1 gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43127901 43129075 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene CDS 43129714 43129941 0.000000 - 1 gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43129714 43129941 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene CDS 43132456 43132636 0.000000 - 2 gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43132456 43132636 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene CDS 43133442 43133532 0.000000 - 0 gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43133442 43133532 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene CDS 43135468 43135637 0.000000 - 2 gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43135468 43135637 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene CDS 43138532 43138669 0.000000 - 2 gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43138532 43138669 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene CDS 43139930 43140009 0.000000 - 1 gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43139930 43140009 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene CDS 43141442 43141635 0.000000 - 0 gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43141442 43141635 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene CDS 43142520 43142555 0.000000 - 0 gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43142520 43142681 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43147953 43148055 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43150554 43150726 0.000000 - . gene_id "SERINC3"; transcript_id "AK300618:uc010zwp.1"; -chr20 hg19_knownGene exon 43160436 43160619 0.000000 + . gene_id "PKIG"; transcript_id "NM_181805:uc002xmg.3"; -chr20 hg19_knownGene exon 43211226 43211372 0.000000 + . gene_id "PKIG"; transcript_id "NM_181805:uc002xmg.3"; -chr20 hg19_knownGene exon 43213741 43213845 0.000000 + . gene_id "PKIG"; transcript_id "NM_181805:uc002xmg.3"; -chr20 hg19_knownGene exon 43218438 43218507 0.000000 + . gene_id "PKIG"; transcript_id "NM_181805:uc002xmg.3"; -chr20 hg19_knownGene CDS 43243198 43243348 0.000000 + 0 gene_id "PKIG"; transcript_id "NM_181805:uc002xmg.3"; -chr20 hg19_knownGene exon 43243175 43243348 0.000000 + . gene_id "PKIG"; transcript_id "NM_181805:uc002xmg.3"; -chr20 hg19_knownGene CDS 43246926 43247002 0.000000 + 2 gene_id "PKIG"; transcript_id "NM_181805:uc002xmg.3"; -chr20 hg19_knownGene exon 43246926 43247678 0.000000 + . gene_id "PKIG"; transcript_id "NM_181805:uc002xmg.3"; -chr20 hg19_knownGene exon 43160436 43160619 0.000000 + . gene_id "PKIG"; transcript_id "NM_181804:uc002xmh.3"; -chr20 hg19_knownGene exon 43211226 43211372 0.000000 + . gene_id "PKIG"; transcript_id "NM_181804:uc002xmh.3"; -chr20 hg19_knownGene exon 43218438 43218507 0.000000 + . gene_id "PKIG"; transcript_id "NM_181804:uc002xmh.3"; -chr20 hg19_knownGene CDS 43243198 43243348 0.000000 + 0 gene_id "PKIG"; transcript_id "NM_181804:uc002xmh.3"; -chr20 hg19_knownGene exon 43243175 43243348 0.000000 + . gene_id "PKIG"; transcript_id "NM_181804:uc002xmh.3"; -chr20 hg19_knownGene CDS 43246926 43247002 0.000000 + 2 gene_id "PKIG"; transcript_id "NM_181804:uc002xmh.3"; -chr20 hg19_knownGene exon 43246926 43247678 0.000000 + . gene_id "PKIG"; transcript_id "NM_181804:uc002xmh.3"; -chr20 hg19_knownGene exon 43160436 43160619 0.000000 + . gene_id "PKIG"; transcript_id "NM_007066:uc002xmi.3"; -chr20 hg19_knownGene exon 43218438 43218507 0.000000 + . gene_id "PKIG"; transcript_id "NM_007066:uc002xmi.3"; -chr20 hg19_knownGene CDS 43243198 43243348 0.000000 + 0 gene_id "PKIG"; transcript_id "NM_007066:uc002xmi.3"; -chr20 hg19_knownGene exon 43243175 43243348 0.000000 + . gene_id "PKIG"; transcript_id "NM_007066:uc002xmi.3"; -chr20 hg19_knownGene CDS 43246926 43247002 0.000000 + 2 gene_id "PKIG"; transcript_id "NM_007066:uc002xmi.3"; -chr20 hg19_knownGene exon 43246926 43247678 0.000000 + . gene_id "PKIG"; transcript_id "NM_007066:uc002xmi.3"; -chr20 hg19_knownGene CDS 43248478 43248488 0.000000 - 2 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43248163 43248488 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43248940 43249042 0.000000 - 0 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43248940 43249042 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43249659 43249788 0.000000 - 1 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43249659 43249788 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43251229 43251293 0.000000 - 0 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43251229 43251293 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43251470 43251571 0.000000 - 0 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43251470 43251571 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43251648 43251719 0.000000 - 0 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43251648 43251719 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43252843 43252970 0.000000 - 2 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43252843 43252970 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43254210 43254325 0.000000 - 1 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43254210 43254325 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43255097 43255240 0.000000 - 1 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43255097 43255240 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43257688 43257810 0.000000 - 1 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43257688 43257810 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43264868 43264929 0.000000 - 0 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43264868 43264929 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene CDS 43280216 43280248 0.000000 - 0 gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43280216 43280376 0.000000 - . gene_id "ADA"; transcript_id "NM_000022:uc002xmj.3"; -chr20 hg19_knownGene exon 43285092 43285692 0.000000 - . gene_id "LOC79015"; transcript_id "NR_034104:uc002xmk.4"; -chr20 hg19_knownGene exon 43287636 43287822 0.000000 - . gene_id "LOC79015"; transcript_id "NR_034104:uc002xmk.4"; -chr20 hg19_knownGene exon 43288352 43288419 0.000000 - . gene_id "LOC79015"; transcript_id "NR_034104:uc002xmk.4"; -chr20 hg19_knownGene exon 43291995 43292194 0.000000 - . gene_id "LOC79015"; transcript_id "NR_034104:uc002xmk.4"; -chr20 hg19_knownGene exon 43300280 43300380 0.000000 - . gene_id "LOC79015"; transcript_id "NR_034104:uc002xmk.4"; -chr20 hg19_knownGene CDS 43344032 43344091 0.000000 + 0 gene_id "WISP2"; transcript_id "AK074695:uc002xmo.1"; -chr20 hg19_knownGene exon 43343885 43344091 0.000000 + . gene_id "WISP2"; transcript_id "AK074695:uc002xmo.1"; -chr20 hg19_knownGene CDS 43348538 43348789 0.000000 + 0 gene_id "WISP2"; transcript_id "AK074695:uc002xmo.1"; -chr20 hg19_knownGene exon 43348538 43350152 0.000000 + . gene_id "WISP2"; transcript_id "AK074695:uc002xmo.1"; -chr20 hg19_knownGene CDS 43344032 43344091 0.000000 + 0 gene_id "WISP2"; transcript_id "NM_003881:uc002xmp.3"; -chr20 hg19_knownGene exon 43343885 43344091 0.000000 + . gene_id "WISP2"; transcript_id "NM_003881:uc002xmp.3"; -chr20 hg19_knownGene CDS 43348538 43348754 0.000000 + 0 gene_id "WISP2"; transcript_id "NM_003881:uc002xmp.3"; -chr20 hg19_knownGene exon 43348538 43348754 0.000000 + . gene_id "WISP2"; transcript_id "NM_003881:uc002xmp.3"; -chr20 hg19_knownGene CDS 43353379 43353633 0.000000 + 2 gene_id "WISP2"; transcript_id "NM_003881:uc002xmp.3"; -chr20 hg19_knownGene exon 43353379 43353633 0.000000 + . gene_id "WISP2"; transcript_id "NM_003881:uc002xmp.3"; -chr20 hg19_knownGene CDS 43355728 43355945 0.000000 + 2 gene_id "WISP2"; transcript_id "NM_003881:uc002xmp.3"; -chr20 hg19_knownGene exon 43355728 43356452 0.000000 + . gene_id "WISP2"; transcript_id "NM_003881:uc002xmp.3"; -chr20 hg19_knownGene CDS 43344032 43344091 0.000000 + 0 gene_id "WISP2"; transcript_id "BC058074:uc002xmq.3"; -chr20 hg19_knownGene exon 43343885 43344091 0.000000 + . gene_id "WISP2"; transcript_id "BC058074:uc002xmq.3"; -chr20 hg19_knownGene CDS 43348538 43348762 0.000000 + 0 gene_id "WISP2"; transcript_id "BC058074:uc002xmq.3"; -chr20 hg19_knownGene exon 43348538 43348762 0.000000 + . gene_id "WISP2"; transcript_id "BC058074:uc002xmq.3"; -chr20 hg19_knownGene CDS 43355728 43356096 0.000000 + 0 gene_id "WISP2"; transcript_id "BC058074:uc002xmq.3"; -chr20 hg19_knownGene exon 43355728 43356452 0.000000 + . gene_id "WISP2"; transcript_id "BC058074:uc002xmq.3"; -chr20 hg19_knownGene exon 43289219 43292194 0.000000 - . gene_id "LOC79015"; transcript_id "AK090842:uc002xml.1"; -chr20 hg19_knownGene exon 43297225 43297317 0.000000 - . gene_id "LOC79015"; transcript_id "AK090842:uc002xml.1"; -chr20 hg19_knownGene exon 43324032 43324148 0.000000 - . gene_id "LOC79015"; transcript_id "AK090842:uc002xml.1"; -chr20 hg19_knownGene exon 43367461 43367608 0.000000 - . gene_id "LOC79015"; transcript_id "AK090842:uc002xml.1"; -chr20 hg19_knownGene CDS 43374552 43374834 0.000000 + 0 gene_id "KCNK15"; transcript_id "NM_022358:uc002xmr.3"; -chr20 hg19_knownGene exon 43374488 43374834 0.000000 + . gene_id "KCNK15"; transcript_id "NM_022358:uc002xmr.3"; -chr20 hg19_knownGene CDS 43378770 43379476 0.000000 + 2 gene_id "KCNK15"; transcript_id "NM_022358:uc002xmr.3"; -chr20 hg19_knownGene exon 43378770 43380954 0.000000 + . gene_id "KCNK15"; transcript_id "NM_022358:uc002xmr.3"; -chr20 hg19_knownGene CDS 43384778 43384993 0.000000 - 0 gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene exon 43380445 43384993 0.000000 - . gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene CDS 43385539 43385678 0.000000 - 2 gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene exon 43385539 43385678 0.000000 - . gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene CDS 43386311 43386412 0.000000 - 2 gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene exon 43386311 43386412 0.000000 - . gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene CDS 43386713 43386825 0.000000 - 1 gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene exon 43386713 43386825 0.000000 - . gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene CDS 43399916 43400057 0.000000 - 2 gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene exon 43399916 43400057 0.000000 - . gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene CDS 43438816 43438912 0.000000 - 0 gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene exon 43438816 43438979 0.000000 - . gene_id "RIMS4"; transcript_id "NM_001205317:uc010ggu.3"; -chr20 hg19_knownGene CDS 43384778 43384993 0.000000 - 0 gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene exon 43380445 43384993 0.000000 - . gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene CDS 43385539 43385678 0.000000 - 2 gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene exon 43385539 43385678 0.000000 - . gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene CDS 43386311 43386412 0.000000 - 2 gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene exon 43386311 43386412 0.000000 - . gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene CDS 43386713 43386825 0.000000 - 1 gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene exon 43386713 43386825 0.000000 - . gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene CDS 43399916 43400054 0.000000 - 2 gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene exon 43399916 43400054 0.000000 - . gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene CDS 43438816 43438912 0.000000 - 0 gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene exon 43438816 43438979 0.000000 - . gene_id "RIMS4"; transcript_id "NM_182970:uc002xms.3"; -chr20 hg19_knownGene exon 43514344 43514527 0.000000 + . gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene exon 43516289 43516383 0.000000 + . gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene CDS 43530175 43530474 0.000000 + 0 gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene exon 43530172 43530474 0.000000 + . gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene CDS 43532634 43532757 0.000000 + 0 gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene exon 43532634 43532757 0.000000 + . gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene CDS 43533609 43533772 0.000000 + 2 gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene exon 43533609 43533772 0.000000 + . gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene CDS 43534642 43534737 0.000000 + 0 gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene exon 43534642 43534737 0.000000 + . gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene CDS 43535023 43535076 0.000000 + 0 gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene exon 43535023 43537161 0.000000 + . gene_id "YWHAB"; transcript_id "NM_003404:uc002xmt.3"; -chr20 hg19_knownGene exon 43514344 43514527 0.000000 + . gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene CDS 43530175 43530474 0.000000 + 0 gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene exon 43530172 43530474 0.000000 + . gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene CDS 43532634 43532757 0.000000 + 0 gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene exon 43532634 43532757 0.000000 + . gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene CDS 43533609 43533772 0.000000 + 2 gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene exon 43533609 43533772 0.000000 + . gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene CDS 43534642 43534737 0.000000 + 0 gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene exon 43534642 43534737 0.000000 + . gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene CDS 43535023 43535076 0.000000 + 0 gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene exon 43535023 43537161 0.000000 + . gene_id "YWHAB"; transcript_id "NM_139323:uc002xmu.3"; -chr20 hg19_knownGene CDS 43538785 43538977 0.000000 + 0 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43538703 43538977 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43541301 43541494 0.000000 + 2 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43541301 43541494 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43545397 43545512 0.000000 + 0 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43545397 43545512 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43547547 43547686 0.000000 + 1 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43547547 43547686 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43547824 43547918 0.000000 + 2 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43547824 43547918 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43550235 43550372 0.000000 + 0 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43550235 43550372 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43552802 43552897 0.000000 + 0 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43552802 43552897 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43559101 43559367 0.000000 + 0 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43559101 43559367 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43560983 43561073 0.000000 + 0 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43560983 43561073 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43561713 43561826 0.000000 + 2 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43561713 43561826 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43564032 43564138 0.000000 + 2 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43564032 43564138 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43565278 43565371 0.000000 + 0 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43565278 43565371 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43566702 43566832 0.000000 + 2 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43566702 43566832 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene CDS 43567315 43567380 0.000000 + 0 gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43567315 43567389 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43567767 43567962 0.000000 + . gene_id "PABPC1L"; transcript_id "NM_001124756:uc010ggv.1"; -chr20 hg19_knownGene exon 43538703 43538977 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43541301 43541494 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43545397 43545512 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43547547 43547686 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43547824 43547918 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43550235 43550372 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43552802 43552897 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43559159 43559367 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43561713 43561826 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43564032 43564138 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43565278 43565371 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43566702 43566832 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43567315 43567389 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43567767 43567962 0.000000 + . gene_id "PABPC1L"; transcript_id "EU190483:uc010zwq.1"; -chr20 hg19_knownGene exon 43552794 43552897 0.000000 + . gene_id "PABPC1L"; transcript_id "AX721304:uc002xmv.2"; -chr20 hg19_knownGene exon 43559101 43559367 0.000000 + . gene_id "PABPC1L"; transcript_id "AX721304:uc002xmv.2"; -chr20 hg19_knownGene exon 43561698 43561826 0.000000 + . gene_id "PABPC1L"; transcript_id "AX721304:uc002xmv.2"; -chr20 hg19_knownGene exon 43564032 43564143 0.000000 + . gene_id "PABPC1L"; transcript_id "AX721304:uc002xmv.2"; -chr20 hg19_knownGene exon 43565278 43565371 0.000000 + . gene_id "PABPC1L"; transcript_id "AX721304:uc002xmv.2"; -chr20 hg19_knownGene exon 43566686 43566832 0.000000 + . gene_id "PABPC1L"; transcript_id "AX721304:uc002xmv.2"; -chr20 hg19_knownGene exon 43567315 43567389 0.000000 + . gene_id "PABPC1L"; transcript_id "AX721304:uc002xmv.2"; -chr20 hg19_knownGene exon 43567767 43567962 0.000000 + . gene_id "PABPC1L"; transcript_id "AX721304:uc002xmv.2"; -chr20 hg19_knownGene CDS 43561721 43561826 0.000000 + 0 gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene exon 43560820 43561826 0.000000 + . gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene CDS 43564032 43564138 0.000000 + 2 gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene exon 43564032 43564138 0.000000 + . gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene CDS 43565278 43565371 0.000000 + 0 gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene exon 43565278 43565371 0.000000 + . gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene CDS 43566702 43566832 0.000000 + 2 gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene exon 43566702 43566832 0.000000 + . gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene CDS 43567315 43567380 0.000000 + 0 gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene exon 43567315 43567389 0.000000 + . gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene exon 43567767 43567962 0.000000 + . gene_id "PABPC1L"; transcript_id "AK124047:uc002xmw.2"; -chr20 hg19_knownGene CDS 43561721 43561826 0.000000 + 0 gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene exon 43560820 43561826 0.000000 + . gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene CDS 43564032 43564138 0.000000 + 2 gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene exon 43564032 43564138 0.000000 + . gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene CDS 43565278 43565371 0.000000 + 0 gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene exon 43565278 43565371 0.000000 + . gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene CDS 43566702 43566832 0.000000 + 2 gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene exon 43566702 43566832 0.000000 + . gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene CDS 43584174 43584245 0.000000 + 0 gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene exon 43584174 43584261 0.000000 + . gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene exon 43586978 43587799 0.000000 + . gene_id "PABPC1L"; transcript_id "BC068104:uc002xmx.3"; -chr20 hg19_knownGene CDS 43571753 43571854 0.000000 - 0 gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene exon 43570771 43571854 0.000000 - . gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene CDS 43572094 43572220 0.000000 - 1 gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene exon 43572094 43572220 0.000000 - . gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene CDS 43577371 43577518 0.000000 - 2 gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene exon 43577371 43577518 0.000000 - . gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene CDS 43580474 43580643 0.000000 - 1 gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene exon 43580474 43580643 0.000000 - . gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene CDS 43583709 43583861 0.000000 - 1 gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene exon 43583709 43583861 0.000000 - . gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene CDS 43585027 43585126 0.000000 - 2 gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene exon 43585027 43585126 0.000000 - . gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene CDS 43588848 43588974 0.000000 - 0 gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene exon 43588848 43589114 0.000000 - . gene_id "TOMM34"; transcript_id "NM_006809:uc002xmy.3"; -chr20 hg19_knownGene exon 43592440 43594089 0.000000 - . gene_id "LOC100505826"; transcript_id "NR_038341:uc002xna.2"; -chr20 hg19_knownGene exon 43594203 43594326 0.000000 - . gene_id "LOC100505826"; transcript_id "NR_038341:uc002xna.2"; -chr20 hg19_knownGene exon 43594758 43595099 0.000000 - . gene_id "LOC100505826"; transcript_id "NR_038341:uc002xna.2"; -chr20 hg19_knownGene CDS 43595210 43595244 0.000000 + 0 gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene exon 43595120 43595244 0.000000 + . gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene CDS 43600719 43600799 0.000000 + 1 gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene exon 43600719 43600799 0.000000 + . gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene CDS 43607084 43607212 0.000000 + 1 gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene exon 43607084 43607212 0.000000 + . gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene CDS 43610470 43610584 0.000000 + 1 gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene exon 43610470 43610584 0.000000 + . gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene CDS 43615773 43615937 0.000000 + 0 gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene exon 43615773 43615937 0.000000 + . gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene CDS 43623731 43623898 0.000000 + 0 gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene exon 43623731 43623898 0.000000 + . gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene CDS 43625810 43625947 0.000000 + 0 gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene exon 43625810 43625947 0.000000 + . gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene CDS 43629033 43629212 0.000000 + 0 gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene exon 43629033 43629632 0.000000 + . gene_id "STK4"; transcript_id "AK309169:uc010ggw.1"; -chr20 hg19_knownGene CDS 43595210 43595244 0.000000 + 0 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43595120 43595244 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43600719 43600799 0.000000 + 1 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43600719 43600799 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43607084 43607212 0.000000 + 1 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43607084 43607212 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43610470 43610584 0.000000 + 1 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43610470 43610584 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43615773 43615937 0.000000 + 0 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43615773 43615937 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43623731 43623898 0.000000 + 0 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43623731 43623898 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43625810 43625947 0.000000 + 0 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43625810 43625947 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43629033 43629161 0.000000 + 0 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43629033 43629161 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43629808 43629994 0.000000 + 0 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43629808 43629994 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43653614 43653771 0.000000 + 2 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43653614 43653771 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43703659 43703814 0.000000 + 0 gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene exon 43703659 43708593 0.000000 + . gene_id "STK4"; transcript_id "NM_006282:uc002xnb.3"; -chr20 hg19_knownGene CDS 43595210 43595244 0.000000 + 0 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43595120 43595244 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43600719 43600799 0.000000 + 1 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43600719 43600799 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43607084 43607212 0.000000 + 1 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43607084 43607212 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43610470 43610584 0.000000 + 1 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43610470 43610584 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43615773 43615937 0.000000 + 0 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43615773 43615937 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43623731 43623898 0.000000 + 0 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43623731 43623898 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43625810 43625947 0.000000 + 0 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43625810 43625947 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43629033 43629161 0.000000 + 0 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43629033 43629161 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43629808 43629994 0.000000 + 0 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43629808 43629994 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43653614 43653771 0.000000 + 2 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43653614 43653771 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43681727 43681807 0.000000 + 0 gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43681727 43681821 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene exon 43703659 43708593 0.000000 + . gene_id "STK4"; transcript_id "BC038850:uc010ggx.3"; -chr20 hg19_knownGene CDS 43595210 43595244 0.000000 + 0 gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43595120 43595244 0.000000 + . gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene CDS 43600719 43600799 0.000000 + 1 gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43600719 43600799 0.000000 + . gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene CDS 43607084 43607212 0.000000 + 1 gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43607084 43607212 0.000000 + . gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene CDS 43610470 43610584 0.000000 + 1 gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43610470 43610584 0.000000 + . gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene CDS 43623731 43623898 0.000000 + 0 gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43623731 43623898 0.000000 + . gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene CDS 43625810 43625947 0.000000 + 0 gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43625810 43625947 0.000000 + . gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene CDS 43629033 43629161 0.000000 + 0 gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43629033 43629161 0.000000 + . gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene CDS 43629808 43629994 0.000000 + 0 gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43629808 43629994 0.000000 + . gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene CDS 43653614 43653771 0.000000 + 2 gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43653614 43653771 0.000000 + . gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene CDS 43703659 43703814 0.000000 + 0 gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43703659 43708593 0.000000 + . gene_id "STK4"; transcript_id "CR933633:uc010ggy.3"; -chr20 hg19_knownGene exon 43706692 43708618 0.000000 + . gene_id "AB209315"; transcript_id "AB209315:uc021wef.1"; -chr20 hg19_knownGene CDS 43723514 43723981 0.000000 - 0 gene_id "KCNS1"; transcript_id "NM_002251:uc002xnc.3"; -chr20 hg19_knownGene exon 43720950 43723981 0.000000 - . gene_id "KCNS1"; transcript_id "NM_002251:uc002xnc.3"; -chr20 hg19_knownGene CDS 43726303 43727336 0.000000 - 2 gene_id "KCNS1"; transcript_id "NM_002251:uc002xnc.3"; -chr20 hg19_knownGene exon 43726303 43727336 0.000000 - . gene_id "KCNS1"; transcript_id "NM_002251:uc002xnc.3"; -chr20 hg19_knownGene CDS 43727802 43727877 0.000000 - 0 gene_id "KCNS1"; transcript_id "NM_002251:uc002xnc.3"; -chr20 hg19_knownGene exon 43727802 43727880 0.000000 - . gene_id "KCNS1"; transcript_id "NM_002251:uc002xnc.3"; -chr20 hg19_knownGene exon 43728801 43729002 0.000000 - . gene_id "KCNS1"; transcript_id "NM_002251:uc002xnc.3"; -chr20 hg19_knownGene exon 43729562 43729753 0.000000 - . gene_id "KCNS1"; transcript_id "NM_002251:uc002xnc.3"; -chr20 hg19_knownGene CDS 43723514 43723981 0.000000 - 0 gene_id "KCNS1"; transcript_id "AK289735:uc002xnd.3"; -chr20 hg19_knownGene exon 43720950 43723981 0.000000 - . gene_id "KCNS1"; transcript_id "AK289735:uc002xnd.3"; -chr20 hg19_knownGene CDS 43726303 43727336 0.000000 - 2 gene_id "KCNS1"; transcript_id "AK289735:uc002xnd.3"; -chr20 hg19_knownGene exon 43726303 43727336 0.000000 - . gene_id "KCNS1"; transcript_id "AK289735:uc002xnd.3"; -chr20 hg19_knownGene CDS 43727802 43727877 0.000000 - 0 gene_id "KCNS1"; transcript_id "AK289735:uc002xnd.3"; -chr20 hg19_knownGene exon 43727802 43727880 0.000000 - . gene_id "KCNS1"; transcript_id "AK289735:uc002xnd.3"; -chr20 hg19_knownGene exon 43729562 43729753 0.000000 - . gene_id "KCNS1"; transcript_id "AK289735:uc002xnd.3"; -chr20 hg19_knownGene CDS 43738653 43738654 0.000000 - 2 gene_id "WFDC5"; transcript_id "NM_145652:uc002xne.2"; -chr20 hg19_knownGene exon 43738093 43738654 0.000000 - . gene_id "WFDC5"; transcript_id "NM_145652:uc002xne.2"; -chr20 hg19_knownGene CDS 43739041 43739181 0.000000 - 2 gene_id "WFDC5"; transcript_id "NM_145652:uc002xne.2"; -chr20 hg19_knownGene exon 43739041 43739181 0.000000 - . gene_id "WFDC5"; transcript_id "NM_145652:uc002xne.2"; -chr20 hg19_knownGene CDS 43739276 43739416 0.000000 - 2 gene_id "WFDC5"; transcript_id "NM_145652:uc002xne.2"; -chr20 hg19_knownGene exon 43739276 43739416 0.000000 - . gene_id "WFDC5"; transcript_id "NM_145652:uc002xne.2"; -chr20 hg19_knownGene CDS 43743640 43743724 0.000000 - 0 gene_id "WFDC5"; transcript_id "NM_145652:uc002xne.2"; -chr20 hg19_knownGene exon 43743640 43743813 0.000000 - . gene_id "WFDC5"; transcript_id "NM_145652:uc002xne.2"; -chr20 hg19_knownGene CDS 43752490 43752584 0.000000 - 2 gene_id "WFDC12"; transcript_id "NM_080869:uc002xnf.1"; -chr20 hg19_knownGene exon 43752067 43752584 0.000000 - . gene_id "WFDC12"; transcript_id "NM_080869:uc002xnf.1"; -chr20 hg19_knownGene CDS 43752748 43752906 0.000000 - 2 gene_id "WFDC12"; transcript_id "NM_080869:uc002xnf.1"; -chr20 hg19_knownGene exon 43752748 43752906 0.000000 - . gene_id "WFDC12"; transcript_id "NM_080869:uc002xnf.1"; -chr20 hg19_knownGene CDS 43753010 43753088 0.000000 - 0 gene_id "WFDC12"; transcript_id "NM_080869:uc002xnf.1"; -chr20 hg19_knownGene exon 43753010 43753106 0.000000 - . gene_id "WFDC12"; transcript_id "NM_080869:uc002xnf.1"; -chr20 hg19_knownGene CDS 43803564 43803642 0.000000 + 0 gene_id "PI3"; transcript_id "NM_002638:uc002xng.3"; -chr20 hg19_knownGene exon 43803540 43803642 0.000000 + . gene_id "PI3"; transcript_id "NM_002638:uc002xng.3"; -chr20 hg19_knownGene CDS 43804502 43804773 0.000000 + 2 gene_id "PI3"; transcript_id "NM_002638:uc002xng.3"; -chr20 hg19_knownGene exon 43804502 43804777 0.000000 + . gene_id "PI3"; transcript_id "NM_002638:uc002xng.3"; -chr20 hg19_knownGene exon 43805011 43805185 0.000000 + . gene_id "PI3"; transcript_id "NM_002638:uc002xng.3"; -chr20 hg19_knownGene CDS 43835695 43835770 0.000000 + 0 gene_id "SEMG1"; transcript_id "NM_003007:uc002xni.2"; -chr20 hg19_knownGene exon 43835638 43835770 0.000000 + . gene_id "SEMG1"; transcript_id "NM_003007:uc002xni.2"; -chr20 hg19_knownGene CDS 43836015 43837324 0.000000 + 2 gene_id "SEMG1"; transcript_id "NM_003007:uc002xni.2"; -chr20 hg19_knownGene exon 43836015 43837371 0.000000 + . gene_id "SEMG1"; transcript_id "NM_003007:uc002xni.2"; -chr20 hg19_knownGene exon 43838242 43838414 0.000000 + . gene_id "SEMG1"; transcript_id "NM_003007:uc002xni.2"; -chr20 hg19_knownGene CDS 43835695 43835770 0.000000 + 0 gene_id "SEMG1"; transcript_id "BC007096:uc002xnj.2"; -chr20 hg19_knownGene exon 43835638 43835770 0.000000 + . gene_id "SEMG1"; transcript_id "BC007096:uc002xnj.2"; -chr20 hg19_knownGene CDS 43836015 43836784 0.000000 + 2 gene_id "SEMG1"; transcript_id "BC007096:uc002xnj.2"; -chr20 hg19_knownGene exon 43836015 43836784 0.000000 + . gene_id "SEMG1"; transcript_id "BC007096:uc002xnj.2"; -chr20 hg19_knownGene CDS 43836965 43837324 0.000000 + 0 gene_id "SEMG1"; transcript_id "BC007096:uc002xnj.2"; -chr20 hg19_knownGene exon 43836965 43837371 0.000000 + . gene_id "SEMG1"; transcript_id "BC007096:uc002xnj.2"; -chr20 hg19_knownGene exon 43838242 43838414 0.000000 + . gene_id "SEMG1"; transcript_id "BC007096:uc002xnj.2"; -chr20 hg19_knownGene CDS 43835695 43835770 0.000000 + 0 gene_id "SEMG2"; transcript_id "AK291811:uc010ggz.3"; -chr20 hg19_knownGene exon 43835638 43835770 0.000000 + . gene_id "SEMG2"; transcript_id "AK291811:uc010ggz.3"; -chr20 hg19_knownGene CDS 43850350 43852019 0.000000 + 2 gene_id "SEMG2"; transcript_id "AK291811:uc010ggz.3"; -chr20 hg19_knownGene exon 43850350 43852066 0.000000 + . gene_id "SEMG2"; transcript_id "AK291811:uc010ggz.3"; -chr20 hg19_knownGene exon 43852932 43853099 0.000000 + . gene_id "SEMG2"; transcript_id "AK291811:uc010ggz.3"; -chr20 hg19_knownGene CDS 43850031 43850106 0.000000 + 0 gene_id "SEMG2"; transcript_id "NM_003008:uc002xnk.3"; -chr20 hg19_knownGene exon 43850010 43850106 0.000000 + . gene_id "SEMG2"; transcript_id "NM_003008:uc002xnk.3"; -chr20 hg19_knownGene CDS 43850350 43852019 0.000000 + 2 gene_id "SEMG2"; transcript_id "NM_003008:uc002xnk.3"; -chr20 hg19_knownGene exon 43850350 43852066 0.000000 + . gene_id "SEMG2"; transcript_id "NM_003008:uc002xnk.3"; -chr20 hg19_knownGene exon 43852932 43853099 0.000000 + . gene_id "SEMG2"; transcript_id "NM_003008:uc002xnk.3"; -chr20 hg19_knownGene CDS 43850031 43850106 0.000000 + 0 gene_id "SEMG2"; transcript_id "AX772816:uc002xnl.3"; -chr20 hg19_knownGene exon 43850010 43850106 0.000000 + . gene_id "SEMG2"; transcript_id "AX772816:uc002xnl.3"; -chr20 hg19_knownGene CDS 43850350 43851423 0.000000 + 2 gene_id "SEMG2"; transcript_id "AX772816:uc002xnl.3"; -chr20 hg19_knownGene exon 43850350 43851423 0.000000 + . gene_id "SEMG2"; transcript_id "AX772816:uc002xnl.3"; -chr20 hg19_knownGene CDS 43851784 43852019 0.000000 + 2 gene_id "SEMG2"; transcript_id "AX772816:uc002xnl.3"; -chr20 hg19_knownGene exon 43851784 43852066 0.000000 + . gene_id "SEMG2"; transcript_id "AX772816:uc002xnl.3"; -chr20 hg19_knownGene exon 43852932 43853099 0.000000 + . gene_id "SEMG2"; transcript_id "AX772816:uc002xnl.3"; -chr20 hg19_knownGene CDS 43881059 43881060 0.000000 - 2 gene_id "SLPI"; transcript_id "NM_003064:uc002xnm.1"; -chr20 hg19_knownGene exon 43880879 43881060 0.000000 - . gene_id "SLPI"; transcript_id "NM_003064:uc002xnm.1"; -chr20 hg19_knownGene CDS 43881643 43881792 0.000000 - 2 gene_id "SLPI"; transcript_id "NM_003064:uc002xnm.1"; -chr20 hg19_knownGene exon 43881643 43881792 0.000000 - . gene_id "SLPI"; transcript_id "NM_003064:uc002xnm.1"; -chr20 hg19_knownGene CDS 43882216 43882374 0.000000 - 2 gene_id "SLPI"; transcript_id "NM_003064:uc002xnm.1"; -chr20 hg19_knownGene exon 43882216 43882374 0.000000 - . gene_id "SLPI"; transcript_id "NM_003064:uc002xnm.1"; -chr20 hg19_knownGene CDS 43883100 43883184 0.000000 - 0 gene_id "SLPI"; transcript_id "NM_003064:uc002xnm.1"; -chr20 hg19_knownGene exon 43883100 43883206 0.000000 - . gene_id "SLPI"; transcript_id "NM_003064:uc002xnm.1"; -chr20 hg19_knownGene CDS 43922552 43922655 0.000000 - 2 gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene exon 43922548 43922655 0.000000 - . gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene CDS 43926558 43926710 0.000000 - 2 gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene exon 43926558 43926710 0.000000 - . gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene CDS 43926810 43927223 0.000000 - 2 gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene exon 43926810 43927223 0.000000 - . gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene CDS 43929527 43929649 0.000000 - 2 gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene exon 43929527 43929649 0.000000 - . gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene CDS 43929742 43929864 0.000000 - 2 gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene exon 43929742 43929864 0.000000 - . gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene CDS 43929961 43930083 0.000000 - 2 gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene exon 43929961 43930083 0.000000 - . gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene CDS 43932868 43933354 0.000000 - 0 gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene exon 43932868 43933388 0.000000 - . gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene exon 43934150 43934256 0.000000 - . gene_id "MATN4"; transcript_id "BC143625:uc010zwr.1"; -chr20 hg19_knownGene CDS 43922410 43922465 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene exon 43922087 43922465 0.000000 - . gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene CDS 43922548 43922655 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene exon 43922548 43922655 0.000000 - . gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene CDS 43926558 43926710 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene exon 43926558 43926710 0.000000 - . gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene CDS 43926810 43927223 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene exon 43926810 43927223 0.000000 - . gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene CDS 43929527 43929649 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene exon 43929527 43929649 0.000000 - . gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene CDS 43929742 43929864 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene exon 43929742 43929864 0.000000 - . gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene CDS 43929961 43930083 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene exon 43929961 43930083 0.000000 - . gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene CDS 43932868 43933437 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene exon 43932868 43933437 0.000000 - . gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene CDS 43934150 43934222 0.000000 - 0 gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene exon 43934150 43934256 0.000000 - . gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene exon 43936815 43936967 0.000000 - . gene_id "MATN4"; transcript_id "NM_003833:uc002xnn.2"; -chr20 hg19_knownGene CDS 43922410 43922465 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene exon 43922087 43922465 0.000000 - . gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene CDS 43922548 43922655 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene exon 43922548 43922655 0.000000 - . gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene CDS 43926558 43926710 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene exon 43926558 43926710 0.000000 - . gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene CDS 43926810 43927223 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene exon 43926810 43927223 0.000000 - . gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene CDS 43929527 43929649 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene exon 43929527 43929649 0.000000 - . gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene CDS 43929742 43929864 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene exon 43929742 43929864 0.000000 - . gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene CDS 43932868 43933437 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene exon 43932868 43933437 0.000000 - . gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene CDS 43934150 43934222 0.000000 - 0 gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene exon 43934150 43934256 0.000000 - . gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene exon 43936815 43936967 0.000000 - . gene_id "MATN4"; transcript_id "NM_030590:uc002xno.2"; -chr20 hg19_knownGene CDS 43922410 43922465 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene exon 43922087 43922465 0.000000 - . gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene CDS 43922548 43922655 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene exon 43922548 43922655 0.000000 - . gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene CDS 43926558 43926710 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene exon 43926558 43926710 0.000000 - . gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene CDS 43926810 43927223 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene exon 43926810 43927223 0.000000 - . gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene CDS 43929527 43929649 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene exon 43929527 43929649 0.000000 - . gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene CDS 43932868 43933437 0.000000 - 2 gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene exon 43932868 43933437 0.000000 - . gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene CDS 43934150 43934222 0.000000 - 0 gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene exon 43934150 43934256 0.000000 - . gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene exon 43936815 43936967 0.000000 - . gene_id "MATN4"; transcript_id "NM_030592:uc002xnp.2"; -chr20 hg19_knownGene CDS 43922552 43922655 0.000000 - 2 gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene exon 43922548 43922655 0.000000 - . gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene CDS 43926558 43926710 0.000000 - 2 gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene exon 43926558 43926710 0.000000 - . gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene CDS 43926810 43927223 0.000000 - 2 gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene exon 43926810 43927223 0.000000 - . gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene CDS 43929527 43929649 0.000000 - 2 gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene exon 43929527 43929649 0.000000 - . gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene CDS 43929742 43929864 0.000000 - 2 gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene exon 43929742 43929864 0.000000 - . gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene CDS 43929961 43930083 0.000000 - 2 gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene exon 43929961 43930083 0.000000 - . gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene CDS 43932868 43933437 0.000000 - 2 gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene exon 43932868 43933437 0.000000 - . gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene CDS 43934150 43934222 0.000000 - 0 gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene exon 43934150 43934256 0.000000 - . gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene exon 43936815 43936937 0.000000 - . gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene exon 43937082 43937169 0.000000 - . gene_id "MATN4"; transcript_id "AK074593:uc002xnr.1"; -chr20 hg19_knownGene CDS 43935563 43935584 0.000000 + 0 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43935491 43935584 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43936783 43936891 0.000000 + 2 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43936783 43936891 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43938207 43938332 0.000000 + 1 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43938207 43938332 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43940229 43940299 0.000000 + 1 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43940229 43940299 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43940479 43940594 0.000000 + 2 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43940479 43940594 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43940861 43941035 0.000000 + 0 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43940861 43941035 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43942108 43942245 0.000000 + 2 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43942108 43942245 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43942675 43942784 0.000000 + 2 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43942675 43942784 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43943053 43943205 0.000000 + 0 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43943053 43943205 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43944827 43944982 0.000000 + 0 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43944827 43944982 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43945117 43945220 0.000000 + 0 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43945117 43945220 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43945326 43945596 0.000000 + 1 gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene exon 43945326 43946464 0.000000 + . gene_id "RBPJL"; transcript_id "NM_014276:uc002xns.3"; -chr20 hg19_knownGene CDS 43935563 43935584 0.000000 + 0 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43935491 43935584 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43936783 43936891 0.000000 + 2 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43936783 43936891 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43938207 43938332 0.000000 + 1 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43938207 43938332 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43940229 43940299 0.000000 + 1 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43940229 43940299 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43940479 43940594 0.000000 + 2 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43940479 43940594 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43940861 43941035 0.000000 + 0 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43940861 43941035 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43942108 43942245 0.000000 + 2 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43942108 43942245 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43942675 43942784 0.000000 + 2 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43942675 43942784 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43943053 43943205 0.000000 + 0 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43943053 43943205 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43944827 43944982 0.000000 + 0 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43944827 43944982 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43945117 43945230 0.000000 + 0 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43945117 43945230 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene CDS 43945326 43945448 0.000000 + 0 gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43945326 43946464 0.000000 + . gene_id "RBPJL"; transcript_id "AB026048:uc002xnt.3"; -chr20 hg19_knownGene exon 43951001 43951073 0.000000 + . gene_id "TRNA_Pseudo"; transcript_id ":uc021weg.1"; -chr20 hg19_knownGene CDS 43955907 43956055 0.000000 - 2 gene_id "SDC4"; transcript_id "NM_002999:uc002xnu.3"; -chr20 hg19_knownGene exon 43953929 43956055 0.000000 - . gene_id "SDC4"; transcript_id "NM_002999:uc002xnu.3"; -chr20 hg19_knownGene CDS 43959006 43959204 0.000000 - 0 gene_id "SDC4"; transcript_id "NM_002999:uc002xnu.3"; -chr20 hg19_knownGene exon 43959006 43959204 0.000000 - . gene_id "SDC4"; transcript_id "NM_002999:uc002xnu.3"; -chr20 hg19_knownGene CDS 43961663 43961709 0.000000 - 2 gene_id "SDC4"; transcript_id "NM_002999:uc002xnu.3"; -chr20 hg19_knownGene exon 43961663 43961709 0.000000 - . gene_id "SDC4"; transcript_id "NM_002999:uc002xnu.3"; -chr20 hg19_knownGene CDS 43964422 43964560 0.000000 - 0 gene_id "SDC4"; transcript_id "NM_002999:uc002xnu.3"; -chr20 hg19_knownGene exon 43964422 43964560 0.000000 - . gene_id "SDC4"; transcript_id "NM_002999:uc002xnu.3"; -chr20 hg19_knownGene CDS 43976965 43977024 0.000000 - 0 gene_id "SDC4"; transcript_id "NM_002999:uc002xnu.3"; -chr20 hg19_knownGene exon 43976965 43977064 0.000000 - . gene_id "SDC4"; transcript_id "NM_002999:uc002xnu.3"; -chr20 hg19_knownGene CDS 43955907 43956055 0.000000 - 2 gene_id "SDC4"; transcript_id "AK303964:uc010zws.2"; -chr20 hg19_knownGene exon 43953929 43956055 0.000000 - . gene_id "SDC4"; transcript_id "AK303964:uc010zws.2"; -chr20 hg19_knownGene CDS 43959006 43959204 0.000000 - 0 gene_id "SDC4"; transcript_id "AK303964:uc010zws.2"; -chr20 hg19_knownGene exon 43959006 43959204 0.000000 - . gene_id "SDC4"; transcript_id "AK303964:uc010zws.2"; -chr20 hg19_knownGene CDS 43961663 43961692 0.000000 - 0 gene_id "SDC4"; transcript_id "AK303964:uc010zws.2"; -chr20 hg19_knownGene exon 43961663 43961709 0.000000 - . gene_id "SDC4"; transcript_id "AK303964:uc010zws.2"; -chr20 hg19_knownGene exon 43976965 43977064 0.000000 - . gene_id "SDC4"; transcript_id "AK303964:uc010zws.2"; -chr20 hg19_knownGene exon 43990577 43990669 0.000000 + . gene_id "SYS1"; transcript_id "NM_001197129:uc021weh.1"; -chr20 hg19_knownGene exon 43991809 43991955 0.000000 + . gene_id "SYS1"; transcript_id "NM_001197129:uc021weh.1"; -chr20 hg19_knownGene CDS 43992172 43992333 0.000000 + 0 gene_id "SYS1"; transcript_id "NM_001197129:uc021weh.1"; -chr20 hg19_knownGene exon 43992169 43992333 0.000000 + . gene_id "SYS1"; transcript_id "NM_001197129:uc021weh.1"; -chr20 hg19_knownGene CDS 43994259 43994326 0.000000 + 0 gene_id "SYS1"; transcript_id "NM_001197129:uc021weh.1"; -chr20 hg19_knownGene exon 43994259 43994326 0.000000 + . gene_id "SYS1"; transcript_id "NM_001197129:uc021weh.1"; -chr20 hg19_knownGene CDS 43995515 43995752 0.000000 + 1 gene_id "SYS1"; transcript_id "NM_001197129:uc021weh.1"; -chr20 hg19_knownGene exon 43995515 43997862 0.000000 + . gene_id "SYS1"; transcript_id "NM_001197129:uc021weh.1"; -chr20 hg19_knownGene exon 43991740 43991955 0.000000 + . gene_id "SYS1"; transcript_id "NM_033542:uc002xnv.3"; -chr20 hg19_knownGene CDS 43992172 43992333 0.000000 + 0 gene_id "SYS1"; transcript_id "NM_033542:uc002xnv.3"; -chr20 hg19_knownGene exon 43992169 43992333 0.000000 + . gene_id "SYS1"; transcript_id "NM_033542:uc002xnv.3"; -chr20 hg19_knownGene CDS 43994259 43994326 0.000000 + 0 gene_id "SYS1"; transcript_id "NM_033542:uc002xnv.3"; -chr20 hg19_knownGene exon 43994259 43994326 0.000000 + . gene_id "SYS1"; transcript_id "NM_033542:uc002xnv.3"; -chr20 hg19_knownGene CDS 43995515 43995752 0.000000 + 1 gene_id "SYS1"; transcript_id "NM_033542:uc002xnv.3"; -chr20 hg19_knownGene exon 43995515 43997862 0.000000 + . gene_id "SYS1"; transcript_id "NM_033542:uc002xnv.3"; -chr20 hg19_knownGene exon 43991809 43991955 0.000000 + . gene_id "SYS1"; transcript_id "AK309429:uc010gha.3"; -chr20 hg19_knownGene exon 43992169 43992333 0.000000 + . gene_id "SYS1"; transcript_id "AK309429:uc010gha.3"; -chr20 hg19_knownGene exon 43994187 43994326 0.000000 + . gene_id "SYS1"; transcript_id "AK309429:uc010gha.3"; -chr20 hg19_knownGene exon 43995515 43997862 0.000000 + . gene_id "SYS1"; transcript_id "AK309429:uc010gha.3"; -chr20 hg19_knownGene exon 43991740 43991955 0.000000 + . gene_id "SYS1"; transcript_id "NM_001099791:uc002xnw.2"; -chr20 hg19_knownGene CDS 43992172 43992333 0.000000 + 0 gene_id "SYS1"; transcript_id "NM_001099791:uc002xnw.2"; -chr20 hg19_knownGene exon 43992169 43992333 0.000000 + . gene_id "SYS1"; transcript_id "NM_001099791:uc002xnw.2"; -chr20 hg19_knownGene CDS 43994259 43994324 0.000000 + 0 gene_id "SYS1"; transcript_id "NM_001099791:uc002xnw.2"; -chr20 hg19_knownGene exon 43994259 43994326 0.000000 + . gene_id "SYS1"; transcript_id "NM_001099791:uc002xnw.2"; -chr20 hg19_knownGene exon 44002934 44005442 0.000000 + . gene_id "SYS1"; transcript_id "NM_001099791:uc002xnw.2"; -chr20 hg19_knownGene CDS 44002550 44002651 0.000000 - 0 gene_id "TP53TG5"; transcript_id "NM_014477:uc002xny.3"; -chr20 hg19_knownGene exon 44002520 44002651 0.000000 - . gene_id "TP53TG5"; transcript_id "NM_014477:uc002xny.3"; -chr20 hg19_knownGene CDS 44003679 44004192 0.000000 - 1 gene_id "TP53TG5"; transcript_id "NM_014477:uc002xny.3"; -chr20 hg19_knownGene exon 44003679 44004192 0.000000 - . gene_id "TP53TG5"; transcript_id "NM_014477:uc002xny.3"; -chr20 hg19_knownGene CDS 44005852 44005982 0.000000 - 0 gene_id "TP53TG5"; transcript_id "NM_014477:uc002xny.3"; -chr20 hg19_knownGene exon 44005852 44005982 0.000000 - . gene_id "TP53TG5"; transcript_id "NM_014477:uc002xny.3"; -chr20 hg19_knownGene CDS 44006179 44006253 0.000000 - 0 gene_id "TP53TG5"; transcript_id "NM_014477:uc002xny.3"; -chr20 hg19_knownGene exon 44006179 44006253 0.000000 - . gene_id "TP53TG5"; transcript_id "NM_014477:uc002xny.3"; -chr20 hg19_knownGene CDS 44006829 44006876 0.000000 - 0 gene_id "TP53TG5"; transcript_id "NM_014477:uc002xny.3"; -chr20 hg19_knownGene exon 44006829 44006957 0.000000 - . gene_id "TP53TG5"; transcript_id "NM_014477:uc002xny.3"; -chr20 hg19_knownGene exon 43991809 43991955 0.000000 + . gene_id "DBNDD2"; transcript_id "NR_003189:uc002xnx.3"; -chr20 hg19_knownGene exon 43992169 43992333 0.000000 + . gene_id "DBNDD2"; transcript_id "NR_003189:uc002xnx.3"; -chr20 hg19_knownGene exon 43994259 43994326 0.000000 + . gene_id "DBNDD2"; transcript_id "NR_003189:uc002xnx.3"; -chr20 hg19_knownGene CDS 44037108 44037246 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NR_003189:uc002xnx.3"; -chr20 hg19_knownGene exon 44037100 44037246 0.000000 + . gene_id "DBNDD2"; transcript_id "NR_003189:uc002xnx.3"; -chr20 hg19_knownGene CDS 44037441 44037578 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NR_003189:uc002xnx.3"; -chr20 hg19_knownGene exon 44037441 44037578 0.000000 + . gene_id "DBNDD2"; transcript_id "NR_003189:uc002xnx.3"; -chr20 hg19_knownGene CDS 44038572 44038777 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NR_003189:uc002xnx.3"; -chr20 hg19_knownGene exon 44038572 44039250 0.000000 + . gene_id "DBNDD2"; transcript_id "NR_003189:uc002xnx.3"; -chr20 hg19_knownGene exon 44034633 44034661 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001197139:uc021wei.1"; -chr20 hg19_knownGene CDS 44037108 44037246 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NM_001197139:uc021wei.1"; -chr20 hg19_knownGene exon 44037100 44037246 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001197139:uc021wei.1"; -chr20 hg19_knownGene CDS 44037441 44037578 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001197139:uc021wei.1"; -chr20 hg19_knownGene exon 44037441 44037578 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001197139:uc021wei.1"; -chr20 hg19_knownGene CDS 44038572 44038777 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001197139:uc021wei.1"; -chr20 hg19_knownGene exon 44038572 44039250 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001197139:uc021wei.1"; -chr20 hg19_knownGene exon 44034655 44034850 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048221:uc002xnz.3"; -chr20 hg19_knownGene CDS 44037108 44037246 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NM_001048221:uc002xnz.3"; -chr20 hg19_knownGene exon 44037100 44037246 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048221:uc002xnz.3"; -chr20 hg19_knownGene CDS 44037441 44037578 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001048221:uc002xnz.3"; -chr20 hg19_knownGene exon 44037441 44037578 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048221:uc002xnz.3"; -chr20 hg19_knownGene CDS 44038572 44038777 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001048221:uc002xnz.3"; -chr20 hg19_knownGene exon 44038572 44039250 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048221:uc002xnz.3"; -chr20 hg19_knownGene exon 44034655 44034850 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048222:uc002xoa.3"; -chr20 hg19_knownGene CDS 44037108 44037246 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NM_001048222:uc002xoa.3"; -chr20 hg19_knownGene exon 44037100 44037246 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048222:uc002xoa.3"; -chr20 hg19_knownGene CDS 44037441 44037637 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001048222:uc002xoa.3"; -chr20 hg19_knownGene exon 44037441 44037676 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048222:uc002xoa.3"; -chr20 hg19_knownGene exon 44038572 44039250 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048222:uc002xoa.3"; -chr20 hg19_knownGene exon 44034821 44034895 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001197140:uc021wej.1"; -chr20 hg19_knownGene CDS 44037108 44037246 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NM_001197140:uc021wej.1"; -chr20 hg19_knownGene exon 44037100 44037246 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001197140:uc021wej.1"; -chr20 hg19_knownGene CDS 44037441 44037578 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001197140:uc021wej.1"; -chr20 hg19_knownGene exon 44037441 44037578 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001197140:uc021wej.1"; -chr20 hg19_knownGene CDS 44038572 44038777 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001197140:uc021wej.1"; -chr20 hg19_knownGene exon 44038572 44039250 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001197140:uc021wej.1"; -chr20 hg19_knownGene CDS 44035092 44035250 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NM_018478:uc002xob.3"; -chr20 hg19_knownGene exon 44034861 44035250 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_018478:uc002xob.3"; -chr20 hg19_knownGene CDS 44036973 44037246 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NM_018478:uc002xob.3"; -chr20 hg19_knownGene exon 44036973 44037246 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_018478:uc002xob.3"; -chr20 hg19_knownGene CDS 44037441 44037578 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_018478:uc002xob.3"; -chr20 hg19_knownGene exon 44037441 44037578 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_018478:uc002xob.3"; -chr20 hg19_knownGene CDS 44038572 44038777 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_018478:uc002xob.3"; -chr20 hg19_knownGene exon 44038572 44039250 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_018478:uc002xob.3"; -chr20 hg19_knownGene exon 44035228 44035372 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048223:uc002xoc.3"; -chr20 hg19_knownGene CDS 44037108 44037246 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NM_001048223:uc002xoc.3"; -chr20 hg19_knownGene exon 44037100 44037246 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048223:uc002xoc.3"; -chr20 hg19_knownGene CDS 44037441 44037578 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001048223:uc002xoc.3"; -chr20 hg19_knownGene exon 44037441 44037578 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048223:uc002xoc.3"; -chr20 hg19_knownGene CDS 44038572 44038777 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001048223:uc002xoc.3"; -chr20 hg19_knownGene exon 44038572 44039250 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048223:uc002xoc.3"; -chr20 hg19_knownGene exon 44035228 44035372 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048224:uc002xod.3"; -chr20 hg19_knownGene CDS 44037108 44037246 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NM_001048224:uc002xod.3"; -chr20 hg19_knownGene exon 44037100 44037246 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048224:uc002xod.3"; -chr20 hg19_knownGene CDS 44037441 44037637 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001048224:uc002xod.3"; -chr20 hg19_knownGene exon 44037441 44037676 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048224:uc002xod.3"; -chr20 hg19_knownGene exon 44038572 44039250 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048224:uc002xod.3"; -chr20 hg19_knownGene CDS 44036802 44037246 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NM_001048226:uc002xog.3"; -chr20 hg19_knownGene exon 44036629 44037246 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048226:uc002xog.3"; -chr20 hg19_knownGene CDS 44037441 44037637 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001048226:uc002xog.3"; -chr20 hg19_knownGene exon 44037441 44037676 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048226:uc002xog.3"; -chr20 hg19_knownGene exon 44038572 44039250 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048226:uc002xog.3"; -chr20 hg19_knownGene CDS 44036802 44037246 0.000000 + 0 gene_id "DBNDD2"; transcript_id "NM_001048225:uc002xof.3"; -chr20 hg19_knownGene exon 44036629 44037246 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048225:uc002xof.3"; -chr20 hg19_knownGene CDS 44037441 44037578 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001048225:uc002xof.3"; -chr20 hg19_knownGene exon 44037441 44037578 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048225:uc002xof.3"; -chr20 hg19_knownGene CDS 44038572 44038777 0.000000 + 2 gene_id "DBNDD2"; transcript_id "NM_001048225:uc002xof.3"; -chr20 hg19_knownGene exon 44038572 44039250 0.000000 + . gene_id "DBNDD2"; transcript_id "NM_001048225:uc002xof.3"; -chr20 hg19_knownGene CDS 44044797 44044983 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene CDS 44045157 44045304 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene exon 44045157 44045304 0.000000 + . gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene CDS 44047492 44047619 0.000000 + 1 gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene exon 44047492 44047619 0.000000 + . gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene CDS 44047935 44048035 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene exon 44047935 44048035 0.000000 + . gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene CDS 44048144 44048230 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene CDS 44049168 44049329 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK311492:uc010ghb.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK301815:uc010zwt.2"; -chr20 hg19_knownGene exon 44045157 44045334 0.000000 + . gene_id "PIGT"; transcript_id "AK301815:uc010zwt.2"; -chr20 hg19_knownGene exon 44047935 44048035 0.000000 + . gene_id "PIGT"; transcript_id "AK301815:uc010zwt.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK301815:uc010zwt.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK301815:uc010zwt.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK301815:uc010zwt.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK301815:uc010zwt.2"; -chr20 hg19_knownGene CDS 44044797 44044983 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene CDS 44047492 44047619 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene exon 44047492 44047619 0.000000 + . gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene CDS 44048144 44048230 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene CDS 44050023 44050219 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK311416:uc010ghd.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK311520:uc010ghc.2"; -chr20 hg19_knownGene exon 44045157 44045334 0.000000 + . gene_id "PIGT"; transcript_id "AK311520:uc010ghc.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK311520:uc010ghc.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK311520:uc010ghc.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK311520:uc010ghc.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK311520:uc010ghc.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK311520:uc010ghc.2"; -chr20 hg19_knownGene CDS 44044797 44044983 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene CDS 44045157 44045334 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene exon 44045157 44045334 0.000000 + . gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene CDS 44047918 44048035 0.000000 + 1 gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene exon 44047918 44048035 0.000000 + . gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene CDS 44048144 44048230 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene CDS 44050023 44050219 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK311522:uc010ghe.2"; -chr20 hg19_knownGene CDS 44044797 44044983 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene CDS 44045157 44045294 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene exon 44045157 44045294 0.000000 + . gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene CDS 44047492 44047619 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene exon 44047492 44047619 0.000000 + . gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene CDS 44048144 44048230 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene CDS 44050023 44050223 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene CDS 44052856 44053016 0.000000 + 2 gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "AK311100:uc010ghf.2"; -chr20 hg19_knownGene CDS 44044797 44044983 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44045157 44045334 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44045157 44045334 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44047492 44047619 0.000000 + 1 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44047492 44047619 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44047935 44048035 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44047935 44048035 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44048144 44048230 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44050023 44050223 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "NM_015937:uc002xoh.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene CDS 44048989 44049069 0.000000 + 0 gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene CDS 44050023 44050223 0.000000 + 2 gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "AK299013:uc010zwz.2"; -chr20 hg19_knownGene CDS 44044797 44044983 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44045157 44045294 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44045157 44045294 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44047935 44048035 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44047935 44048035 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44048144 44048230 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44050023 44050223 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184728:uc010zww.2"; -chr20 hg19_knownGene CDS 44044797 44044983 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene CDS 44047935 44048035 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene exon 44047935 44048035 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene CDS 44048144 44048230 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene CDS 44050023 44050223 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184730:uc010zwy.2"; -chr20 hg19_knownGene CDS 44044797 44044983 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene CDS 44045157 44045334 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44045157 44045334 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene CDS 44047492 44047619 0.000000 + 1 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44047492 44047619 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene CDS 44047935 44048035 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44047935 44048035 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene CDS 44048144 44048230 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "NM_001184729:uc002xoj.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44045157 44045294 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44047492 44047619 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44047935 44048035 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene CDS 44048989 44049069 0.000000 + 0 gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene CDS 44050023 44050223 0.000000 + 2 gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "AK316358:uc010zwu.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44045157 44045334 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44047492 44047619 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44047935 44048035 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44049148 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "AK123590:uc002xoi.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44047492 44047619 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44047935 44048035 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene CDS 44048989 44049069 0.000000 + 0 gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene CDS 44050023 44050223 0.000000 + 2 gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "AK293686:uc010zwv.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44045157 44045334 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene CDS 44047521 44047619 0.000000 + 0 gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44047492 44047619 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene CDS 44048144 44048230 0.000000 + 0 gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene CDS 44050023 44050223 0.000000 + 2 gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "AK293294:uc010zwx.2"; -chr20 hg19_knownGene exon 44044707 44044983 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene exon 44045157 44045334 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene CDS 44047959 44048035 0.000000 + 0 gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene exon 44047935 44048035 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene CDS 44048113 44048230 0.000000 + 1 gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene exon 44048113 44048230 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene CDS 44050023 44050223 0.000000 + 2 gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "AK296063:uc010zxa.2"; -chr20 hg19_knownGene CDS 44047874 44048035 0.000000 + 0 gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene exon 44046813 44048035 0.000000 + . gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene CDS 44048144 44048230 0.000000 + 0 gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene exon 44048144 44048230 0.000000 + . gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene CDS 44048776 44048863 0.000000 + 0 gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene exon 44048776 44048863 0.000000 + . gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene CDS 44048972 44049069 0.000000 + 2 gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene CDS 44049168 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene exon 44049168 44049333 0.000000 + . gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "BX537612:uc002xol.1"; -chr20 hg19_knownGene exon 44048546 44048863 0.000000 + . gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene exon 44048972 44049069 0.000000 + . gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene CDS 44049273 44049333 0.000000 + 0 gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene exon 44049148 44049333 0.000000 + . gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene CDS 44050023 44050223 0.000000 + 2 gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene exon 44050023 44050223 0.000000 + . gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene CDS 44052856 44053021 0.000000 + 2 gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene exon 44052856 44053021 0.000000 + . gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene CDS 44053136 44053219 0.000000 + 1 gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene exon 44053136 44053219 0.000000 + . gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene CDS 44054214 44054463 0.000000 + 1 gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene exon 44054214 44054884 0.000000 + . gene_id "PIGT"; transcript_id "AK297830:uc010zxb.1"; -chr20 hg19_knownGene CDS 44098422 44098500 0.000000 + 0 gene_id "WFDC2"; transcript_id "NM_006103:uc002xoo.3"; -chr20 hg19_knownGene exon 44098394 44098500 0.000000 + . gene_id "WFDC2"; transcript_id "NM_006103:uc002xoo.3"; -chr20 hg19_knownGene CDS 44099029 44099172 0.000000 + 2 gene_id "WFDC2"; transcript_id "NM_006103:uc002xoo.3"; -chr20 hg19_knownGene exon 44099029 44099172 0.000000 + . gene_id "WFDC2"; transcript_id "NM_006103:uc002xoo.3"; -chr20 hg19_knownGene CDS 44108582 44108730 0.000000 + 2 gene_id "WFDC2"; transcript_id "NM_006103:uc002xoo.3"; -chr20 hg19_knownGene exon 44108582 44108734 0.000000 + . gene_id "WFDC2"; transcript_id "NM_006103:uc002xoo.3"; -chr20 hg19_knownGene exon 44110011 44110172 0.000000 + . gene_id "WFDC2"; transcript_id "NM_006103:uc002xoo.3"; -chr20 hg19_knownGene exon 44098394 44098500 0.000000 + . gene_id "WFDC2"; transcript_id "AF330259:uc002xoq.3"; -chr20 hg19_knownGene exon 44099029 44099172 0.000000 + . gene_id "WFDC2"; transcript_id "AF330259:uc002xoq.3"; -chr20 hg19_knownGene exon 44099793 44099921 0.000000 + . gene_id "WFDC2"; transcript_id "AF330259:uc002xoq.3"; -chr20 hg19_knownGene exon 44108582 44108734 0.000000 + . gene_id "WFDC2"; transcript_id "AF330259:uc002xoq.3"; -chr20 hg19_knownGene exon 44110011 44110172 0.000000 + . gene_id "WFDC2"; transcript_id "AF330259:uc002xoq.3"; -chr20 hg19_knownGene CDS 44098422 44098500 0.000000 + 0 gene_id "WFDC2"; transcript_id "AF330260:uc002xop.3"; -chr20 hg19_knownGene exon 44098394 44098500 0.000000 + . gene_id "WFDC2"; transcript_id "AF330260:uc002xop.3"; -chr20 hg19_knownGene CDS 44108582 44108730 0.000000 + 2 gene_id "WFDC2"; transcript_id "AF330260:uc002xop.3"; -chr20 hg19_knownGene exon 44108582 44108734 0.000000 + . gene_id "WFDC2"; transcript_id "AF330260:uc002xop.3"; -chr20 hg19_knownGene exon 44110011 44110172 0.000000 + . gene_id "WFDC2"; transcript_id "AF330260:uc002xop.3"; -chr20 hg19_knownGene CDS 44108512 44108730 0.000000 + 0 gene_id "WFDC2"; transcript_id "AF330261:uc002xor.3"; -chr20 hg19_knownGene exon 44108485 44108734 0.000000 + . gene_id "WFDC2"; transcript_id "AF330261:uc002xor.3"; -chr20 hg19_knownGene exon 44110011 44110172 0.000000 + . gene_id "WFDC2"; transcript_id "AF330261:uc002xor.3"; -chr20 hg19_knownGene CDS 44141294 44141484 0.000000 - 2 gene_id "SPINT3"; transcript_id "NM_006652:uc010ghg.1"; -chr20 hg19_knownGene exon 44141101 44141484 0.000000 - . gene_id "SPINT3"; transcript_id "NM_006652:uc010ghg.1"; -chr20 hg19_knownGene CDS 44144173 44144248 0.000000 - 0 gene_id "SPINT3"; transcript_id "NM_006652:uc010ghg.1"; -chr20 hg19_knownGene exon 44144173 44144264 0.000000 - . gene_id "SPINT3"; transcript_id "NM_006652:uc010ghg.1"; -chr20 hg19_knownGene CDS 44163109 44163144 0.000000 - 0 gene_id "WFDC6"; transcript_id "NM_080827:uc002xos.1"; -chr20 hg19_knownGene exon 44162836 44163144 0.000000 - . gene_id "WFDC6"; transcript_id "NM_080827:uc002xos.1"; -chr20 hg19_knownGene CDS 44166603 44166733 0.000000 - 2 gene_id "WFDC6"; transcript_id "NM_080827:uc002xos.1"; -chr20 hg19_knownGene exon 44166603 44166733 0.000000 - . gene_id "WFDC6"; transcript_id "NM_080827:uc002xos.1"; -chr20 hg19_knownGene CDS 44167956 44168046 0.000000 - 0 gene_id "WFDC6"; transcript_id "NM_080827:uc002xos.1"; -chr20 hg19_knownGene exon 44167956 44168134 0.000000 - . gene_id "WFDC6"; transcript_id "NM_080827:uc002xos.1"; -chr20 hg19_knownGene CDS 44166175 44166189 0.000000 - 0 gene_id "SPINLW1-WFDC6"; transcript_id "NM_001198986:uc010zxc.2"; -chr20 hg19_knownGene exon 44164919 44166189 0.000000 - . gene_id "SPINLW1-WFDC6"; transcript_id "NM_001198986:uc010zxc.2"; -chr20 hg19_knownGene CDS 44166603 44166733 0.000000 - 2 gene_id "SPINLW1-WFDC6"; transcript_id "NM_001198986:uc010zxc.2"; -chr20 hg19_knownGene exon 44166603 44166733 0.000000 - . gene_id "SPINLW1-WFDC6"; transcript_id "NM_001198986:uc010zxc.2"; -chr20 hg19_knownGene CDS 44171339 44171506 0.000000 - 2 gene_id "SPINLW1-WFDC6"; transcript_id "NM_001198986:uc010zxc.2"; -chr20 hg19_knownGene exon 44171339 44171506 0.000000 - . gene_id "SPINLW1-WFDC6"; transcript_id "NM_001198986:uc010zxc.2"; -chr20 hg19_knownGene CDS 44174278 44174409 0.000000 - 2 gene_id "SPINLW1-WFDC6"; transcript_id "NM_001198986:uc010zxc.2"; -chr20 hg19_knownGene exon 44174278 44174409 0.000000 - . gene_id "SPINLW1-WFDC6"; transcript_id "NM_001198986:uc010zxc.2"; -chr20 hg19_knownGene CDS 44175906 44175996 0.000000 - 0 gene_id "SPINLW1-WFDC6"; transcript_id "NM_001198986:uc010zxc.2"; -chr20 hg19_knownGene exon 44175906 44176065 0.000000 - . gene_id "SPINLW1-WFDC6"; transcript_id "NM_001198986:uc010zxc.2"; -chr20 hg19_knownGene CDS 44170786 44170793 0.000000 - 2 gene_id "SPINLW1"; transcript_id "NM_020398:uc002xou.3"; -chr20 hg19_knownGene exon 44169265 44170793 0.000000 - . gene_id "SPINLW1"; transcript_id "NM_020398:uc002xou.3"; -chr20 hg19_knownGene CDS 44171339 44171506 0.000000 - 2 gene_id "SPINLW1"; transcript_id "NM_020398:uc002xou.3"; -chr20 hg19_knownGene exon 44171339 44171506 0.000000 - . gene_id "SPINLW1"; transcript_id "NM_020398:uc002xou.3"; -chr20 hg19_knownGene CDS 44174278 44174409 0.000000 - 2 gene_id "SPINLW1"; transcript_id "NM_020398:uc002xou.3"; -chr20 hg19_knownGene exon 44174278 44174409 0.000000 - . gene_id "SPINLW1"; transcript_id "NM_020398:uc002xou.3"; -chr20 hg19_knownGene CDS 44175906 44175996 0.000000 - 0 gene_id "SPINLW1"; transcript_id "NM_020398:uc002xou.3"; -chr20 hg19_knownGene exon 44175906 44176065 0.000000 - . gene_id "SPINLW1"; transcript_id "NM_020398:uc002xou.3"; -chr20 hg19_knownGene CDS 44174198 44174409 0.000000 - 2 gene_id "SPINLW1"; transcript_id "AK126022:uc002xov.2"; -chr20 hg19_knownGene exon 44170484 44174409 0.000000 - . gene_id "SPINLW1"; transcript_id "AK126022:uc002xov.2"; -chr20 hg19_knownGene CDS 44175906 44175996 0.000000 - 0 gene_id "SPINLW1"; transcript_id "AK126022:uc002xov.2"; -chr20 hg19_knownGene exon 44175906 44176065 0.000000 - . gene_id "SPINLW1"; transcript_id "AK126022:uc002xov.2"; -chr20 hg19_knownGene exon 44188397 44188515 0.000000 - . gene_id "5S_rRNA"; transcript_id ":uc021wek.1"; -chr20 hg19_knownGene exon 44179791 44180251 0.000000 - . gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene CDS 44180668 44180804 0.000000 - 2 gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene exon 44180662 44180804 0.000000 - . gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene CDS 44181775 44181915 0.000000 - 2 gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene exon 44181775 44181915 0.000000 - . gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene CDS 44184340 44184507 0.000000 - 2 gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene exon 44184340 44184507 0.000000 - . gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene CDS 44187491 44187631 0.000000 - 2 gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene exon 44187491 44187631 0.000000 - . gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene CDS 44190749 44190858 0.000000 - 1 gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene exon 44190749 44190858 0.000000 - . gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene CDS 44207861 44207886 0.000000 - 0 gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene exon 44207861 44207965 0.000000 - . gene_id "WFDC8"; transcript_id "NM_181510:uc002xow.3"; -chr20 hg19_knownGene CDS 44180668 44180804 0.000000 - 2 gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene exon 44180401 44180804 0.000000 - . gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene CDS 44181775 44181915 0.000000 - 2 gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene exon 44181775 44181915 0.000000 - . gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene CDS 44184340 44184507 0.000000 - 2 gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene exon 44184340 44184507 0.000000 - . gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene CDS 44187491 44187631 0.000000 - 2 gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene exon 44187491 44187631 0.000000 - . gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene CDS 44190749 44190858 0.000000 - 1 gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene exon 44190749 44190858 0.000000 - . gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene CDS 44207861 44207886 0.000000 - 0 gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene exon 44207861 44207965 0.000000 - . gene_id "WFDC8"; transcript_id "NM_130896:uc002xox.3"; -chr20 hg19_knownGene CDS 44258453 44258543 0.000000 + 0 gene_id "WFDC10A"; transcript_id "NM_080753:uc002xoz.3"; -chr20 hg19_knownGene exon 44258385 44258543 0.000000 + . gene_id "WFDC10A"; transcript_id "NM_080753:uc002xoz.3"; -chr20 hg19_knownGene CDS 44259509 44259654 0.000000 + 2 gene_id "WFDC10A"; transcript_id "NM_080753:uc002xoz.3"; -chr20 hg19_knownGene exon 44259509 44259831 0.000000 + . gene_id "WFDC10A"; transcript_id "NM_080753:uc002xoz.3"; -chr20 hg19_knownGene CDS 44236752 44236779 0.000000 - 1 gene_id "WFDC9"; transcript_id "NM_147198:uc002xoy.3"; -chr20 hg19_knownGene exon 44236578 44236779 0.000000 - . gene_id "WFDC9"; transcript_id "NM_147198:uc002xoy.3"; -chr20 hg19_knownGene CDS 44237302 44237449 0.000000 - 2 gene_id "WFDC9"; transcript_id "NM_147198:uc002xoy.3"; -chr20 hg19_knownGene exon 44237302 44237449 0.000000 - . gene_id "WFDC9"; transcript_id "NM_147198:uc002xoy.3"; -chr20 hg19_knownGene CDS 44238730 44238820 0.000000 - 0 gene_id "WFDC9"; transcript_id "NM_147198:uc002xoy.3"; -chr20 hg19_knownGene exon 44238730 44238878 0.000000 - . gene_id "WFDC9"; transcript_id "NM_147198:uc002xoy.3"; -chr20 hg19_knownGene exon 44243267 44243360 0.000000 - . gene_id "WFDC9"; transcript_id "NM_147198:uc002xoy.3"; -chr20 hg19_knownGene exon 44259842 44259907 0.000000 - . gene_id "WFDC9"; transcript_id "NM_147198:uc002xoy.3"; -chr20 hg19_knownGene CDS 44277361 44277378 0.000000 - 0 gene_id "WFDC11"; transcript_id "NM_147197:uc002xpa.3"; -chr20 hg19_knownGene exon 44277202 44277378 0.000000 - . gene_id "WFDC11"; transcript_id "NM_147197:uc002xpa.3"; -chr20 hg19_knownGene CDS 44277896 44278038 0.000000 - 2 gene_id "WFDC11"; transcript_id "NM_147197:uc002xpa.3"; -chr20 hg19_knownGene exon 44277896 44278038 0.000000 - . gene_id "WFDC11"; transcript_id "NM_147197:uc002xpa.3"; -chr20 hg19_knownGene CDS 44279140 44279239 0.000000 - 0 gene_id "WFDC11"; transcript_id "NM_147197:uc002xpa.3"; -chr20 hg19_knownGene exon 44279140 44279290 0.000000 - . gene_id "WFDC11"; transcript_id "NM_147197:uc002xpa.3"; -chr20 hg19_knownGene exon 44295727 44295808 0.000000 - . gene_id "WFDC11"; transcript_id "NM_147197:uc002xpa.3"; -chr20 hg19_knownGene exon 44298817 44298878 0.000000 - . gene_id "WFDC11"; transcript_id "NM_147197:uc002xpa.3"; -chr20 hg19_knownGene CDS 44313472 44313599 0.000000 - 2 gene_id "WFDC10B"; transcript_id "NM_172006:uc002xpb.3"; -chr20 hg19_knownGene exon 44313290 44313599 0.000000 - . gene_id "WFDC10B"; transcript_id "NM_172006:uc002xpb.3"; -chr20 hg19_knownGene CDS 44314541 44314631 0.000000 - 0 gene_id "WFDC10B"; transcript_id "NM_172006:uc002xpb.3"; -chr20 hg19_knownGene exon 44314541 44314695 0.000000 - . gene_id "WFDC10B"; transcript_id "NM_172006:uc002xpb.3"; -chr20 hg19_knownGene exon 44333136 44333200 0.000000 - . gene_id "WFDC10B"; transcript_id "NM_172006:uc002xpb.3"; -chr20 hg19_knownGene exon 44333557 44333658 0.000000 - . gene_id "WFDC10B"; transcript_id "NM_172006:uc002xpb.3"; -chr20 hg19_knownGene CDS 44313472 44313599 0.000000 - 2 gene_id "WFDC10B"; transcript_id "NM_172131:uc002xpc.3"; -chr20 hg19_knownGene exon 44313290 44313599 0.000000 - . gene_id "WFDC10B"; transcript_id "NM_172131:uc002xpc.3"; -chr20 hg19_knownGene CDS 44333136 44333200 0.000000 - 1 gene_id "WFDC10B"; transcript_id "NM_172131:uc002xpc.3"; -chr20 hg19_knownGene exon 44333136 44333200 0.000000 - . gene_id "WFDC10B"; transcript_id "NM_172131:uc002xpc.3"; -chr20 hg19_knownGene CDS 44333557 44333630 0.000000 - 0 gene_id "WFDC10B"; transcript_id "NM_172131:uc002xpc.3"; -chr20 hg19_knownGene exon 44333557 44333658 0.000000 - . gene_id "WFDC10B"; transcript_id "NM_172131:uc002xpc.3"; -chr20 hg19_knownGene CDS 44330763 44330850 0.000000 + 0 gene_id "WFDC13"; transcript_id "NM_172005:uc002xpd.3"; -chr20 hg19_knownGene exon 44330655 44330850 0.000000 + . gene_id "WFDC13"; transcript_id "NM_172005:uc002xpd.3"; -chr20 hg19_knownGene CDS 44333083 44333233 0.000000 + 2 gene_id "WFDC13"; transcript_id "NM_172005:uc002xpd.3"; -chr20 hg19_knownGene exon 44333083 44333233 0.000000 + . gene_id "WFDC13"; transcript_id "NM_172005:uc002xpd.3"; -chr20 hg19_knownGene CDS 44334502 44334541 0.000000 + 1 gene_id "WFDC13"; transcript_id "NM_172005:uc002xpd.3"; -chr20 hg19_knownGene exon 44334502 44334566 0.000000 + . gene_id "WFDC13"; transcript_id "NM_172005:uc002xpd.3"; -chr20 hg19_knownGene exon 44336497 44337456 0.000000 + . gene_id "WFDC13"; transcript_id "NM_172005:uc002xpd.3"; -chr20 hg19_knownGene CDS 44351007 44351121 0.000000 + 0 gene_id "SPINT4"; transcript_id "NM_178455:uc002xpe.1"; -chr20 hg19_knownGene exon 44350988 44351121 0.000000 + . gene_id "SPINT4"; transcript_id "NM_178455:uc002xpe.1"; -chr20 hg19_knownGene CDS 44352519 44352696 0.000000 + 2 gene_id "SPINT4"; transcript_id "NM_178455:uc002xpe.1"; -chr20 hg19_knownGene exon 44352519 44352696 0.000000 + . gene_id "SPINT4"; transcript_id "NM_178455:uc002xpe.1"; -chr20 hg19_knownGene CDS 44354268 44354271 0.000000 + 1 gene_id "SPINT4"; transcript_id "NM_178455:uc002xpe.1"; -chr20 hg19_knownGene exon 44354268 44354335 0.000000 + . gene_id "SPINT4"; transcript_id "NM_178455:uc002xpe.1"; -chr20 hg19_knownGene exon 44407337 44407462 0.000000 + . gene_id "U6atac"; transcript_id ":uc021wel.1"; -chr20 hg19_knownGene CDS 44403070 44403083 0.000000 - 2 gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene exon 44402847 44403083 0.000000 - . gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene CDS 44404056 44404241 0.000000 - 2 gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene exon 44404056 44404241 0.000000 - . gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene CDS 44405714 44405848 0.000000 - 2 gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene exon 44405714 44405848 0.000000 - . gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene CDS 44416475 44416621 0.000000 - 2 gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene exon 44416475 44416621 0.000000 - . gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene CDS 44417570 44417698 0.000000 - 2 gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene exon 44417570 44417698 0.000000 - . gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene CDS 44418533 44418614 0.000000 - 0 gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene exon 44418533 44418621 0.000000 - . gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene exon 44420471 44420547 0.000000 - . gene_id "WFDC3"; transcript_id "NM_080614:uc002xpf.1"; -chr20 hg19_knownGene exon 44402847 44403083 0.000000 - . gene_id "WFDC3"; transcript_id "BC102013:uc002xpj.1"; -chr20 hg19_knownGene exon 44404056 44404241 0.000000 - . gene_id "WFDC3"; transcript_id "BC102013:uc002xpj.1"; -chr20 hg19_knownGene exon 44405714 44405848 0.000000 - . gene_id "WFDC3"; transcript_id "BC102013:uc002xpj.1"; -chr20 hg19_knownGene exon 44416475 44416621 0.000000 - . gene_id "WFDC3"; transcript_id "BC102013:uc002xpj.1"; -chr20 hg19_knownGene exon 44417570 44417698 0.000000 - . gene_id "WFDC3"; transcript_id "BC102013:uc002xpj.1"; -chr20 hg19_knownGene exon 44420471 44420547 0.000000 - . gene_id "WFDC3"; transcript_id "BC102013:uc002xpj.1"; -chr20 hg19_knownGene exon 44402847 44403083 0.000000 - . gene_id "WFDC3"; transcript_id "BC026014:uc002xph.1"; -chr20 hg19_knownGene exon 44404056 44404241 0.000000 - . gene_id "WFDC3"; transcript_id "BC026014:uc002xph.1"; -chr20 hg19_knownGene exon 44416475 44416621 0.000000 - . gene_id "WFDC3"; transcript_id "BC026014:uc002xph.1"; -chr20 hg19_knownGene exon 44417570 44417698 0.000000 - . gene_id "WFDC3"; transcript_id "BC026014:uc002xph.1"; -chr20 hg19_knownGene exon 44420471 44420547 0.000000 - . gene_id "WFDC3"; transcript_id "BC026014:uc002xph.1"; -chr20 hg19_knownGene exon 44402847 44403083 0.000000 - . gene_id "WFDC3"; transcript_id "BC102014:uc010ghh.1"; -chr20 hg19_knownGene exon 44404056 44404241 0.000000 - . gene_id "WFDC3"; transcript_id "BC102014:uc010ghh.1"; -chr20 hg19_knownGene exon 44416475 44416621 0.000000 - . gene_id "WFDC3"; transcript_id "BC102014:uc010ghh.1"; -chr20 hg19_knownGene exon 44420471 44420547 0.000000 - . gene_id "WFDC3"; transcript_id "BC102014:uc010ghh.1"; -chr20 hg19_knownGene CDS 44420644 44420748 0.000000 + 0 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44420576 44420748 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44421316 44421386 0.000000 + 0 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44421316 44421386 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44422560 44422656 0.000000 + 1 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44422560 44422656 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44423984 44424082 0.000000 + 0 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44423984 44424082 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44429713 44429781 0.000000 + 0 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44429713 44429781 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44430041 44430097 0.000000 + 0 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44430041 44430097 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44430638 44430696 0.000000 + 0 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44430638 44430696 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44431972 44432017 0.000000 + 1 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44431972 44432017 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44433785 44433843 0.000000 + 0 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44433785 44433843 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44433945 44434005 0.000000 + 1 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44433945 44434005 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44437753 44437824 0.000000 + 0 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44437753 44437824 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44439524 44439579 0.000000 + 0 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44439524 44439579 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44439696 44439831 0.000000 + 1 gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene exon 44439696 44440066 0.000000 + . gene_id "DNTTIP1"; transcript_id "NM_052951:uc002xpk.3"; -chr20 hg19_knownGene CDS 44441335 44441435 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene exon 44441255 44441435 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene CDS 44442076 44442103 0.000000 + 1 gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene exon 44442076 44442103 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene CDS 44443023 44443109 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene exon 44443023 44443109 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene CDS 44444029 44444179 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene exon 44444029 44444179 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene CDS 44444493 44444552 0.000000 + 2 gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene exon 44444493 44444552 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene CDS 44445348 44445403 0.000000 + 2 gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene exon 44445348 44445596 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181799:uc002xpl.3"; -chr20 hg19_knownGene CDS 44441335 44441435 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene exon 44441255 44441435 0.000000 + . gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene CDS 44442076 44442103 0.000000 + 1 gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene exon 44442076 44442103 0.000000 + . gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene CDS 44443023 44443109 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene exon 44443023 44443109 0.000000 + . gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene CDS 44444180 44444384 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene exon 44444180 44444384 0.000000 + . gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene CDS 44444493 44444552 0.000000 + 2 gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene exon 44444493 44444552 0.000000 + . gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene CDS 44445348 44445403 0.000000 + 2 gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene exon 44445348 44445596 0.000000 + . gene_id "UBE2C"; transcript_id "NM_007019:uc002xpm.3"; -chr20 hg19_knownGene CDS 44442092 44442103 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181802:uc002xpn.3"; -chr20 hg19_knownGene exon 44441255 44442103 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181802:uc002xpn.3"; -chr20 hg19_knownGene CDS 44443023 44443109 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181802:uc002xpn.3"; -chr20 hg19_knownGene exon 44443023 44443109 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181802:uc002xpn.3"; -chr20 hg19_knownGene CDS 44444180 44444384 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181802:uc002xpn.3"; -chr20 hg19_knownGene exon 44444180 44444384 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181802:uc002xpn.3"; -chr20 hg19_knownGene CDS 44444493 44444552 0.000000 + 2 gene_id "UBE2C"; transcript_id "NM_181802:uc002xpn.3"; -chr20 hg19_knownGene exon 44444493 44444552 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181802:uc002xpn.3"; -chr20 hg19_knownGene CDS 44445348 44445403 0.000000 + 2 gene_id "UBE2C"; transcript_id "NM_181802:uc002xpn.3"; -chr20 hg19_knownGene exon 44445348 44445596 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181802:uc002xpn.3"; -chr20 hg19_knownGene CDS 44441335 44441435 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181800:uc002xpo.3"; -chr20 hg19_knownGene exon 44441255 44441435 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181800:uc002xpo.3"; -chr20 hg19_knownGene CDS 44442076 44442103 0.000000 + 1 gene_id "UBE2C"; transcript_id "NM_181800:uc002xpo.3"; -chr20 hg19_knownGene exon 44442076 44442103 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181800:uc002xpo.3"; -chr20 hg19_knownGene CDS 44444180 44444384 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181800:uc002xpo.3"; -chr20 hg19_knownGene exon 44444180 44444384 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181800:uc002xpo.3"; -chr20 hg19_knownGene CDS 44444493 44444552 0.000000 + 2 gene_id "UBE2C"; transcript_id "NM_181800:uc002xpo.3"; -chr20 hg19_knownGene exon 44444493 44444552 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181800:uc002xpo.3"; -chr20 hg19_knownGene CDS 44445348 44445403 0.000000 + 2 gene_id "UBE2C"; transcript_id "NM_181800:uc002xpo.3"; -chr20 hg19_knownGene exon 44445348 44445596 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181800:uc002xpo.3"; -chr20 hg19_knownGene CDS 44441335 44441435 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181803:uc002xpp.3"; -chr20 hg19_knownGene exon 44441255 44441435 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181803:uc002xpp.3"; -chr20 hg19_knownGene CDS 44442076 44442103 0.000000 + 1 gene_id "UBE2C"; transcript_id "NM_181803:uc002xpp.3"; -chr20 hg19_knownGene exon 44442076 44442103 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181803:uc002xpp.3"; -chr20 hg19_knownGene CDS 44444493 44444513 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181803:uc002xpp.3"; -chr20 hg19_knownGene exon 44444493 44444552 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181803:uc002xpp.3"; -chr20 hg19_knownGene exon 44445348 44445596 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181803:uc002xpp.3"; -chr20 hg19_knownGene exon 44441672 44441929 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene CDS 44442092 44442103 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene exon 44442076 44442103 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene CDS 44443023 44443109 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene exon 44443023 44443109 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene CDS 44444180 44444384 0.000000 + 0 gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene exon 44444180 44444384 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene CDS 44444493 44444552 0.000000 + 2 gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene exon 44444493 44444552 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene CDS 44445348 44445403 0.000000 + 2 gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene exon 44445348 44445596 0.000000 + . gene_id "UBE2C"; transcript_id "NM_181801:uc002xpq.3"; -chr20 hg19_knownGene CDS 44451990 44452018 0.000000 - 2 gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene exon 44451855 44452018 0.000000 - . gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene CDS 44452630 44452766 0.000000 - 1 gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene exon 44452630 44452766 0.000000 - . gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene CDS 44452931 44453045 0.000000 - 2 gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene exon 44452931 44453045 0.000000 - . gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene CDS 44453134 44453277 0.000000 - 2 gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene exon 44453134 44453277 0.000000 - . gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene CDS 44453422 44453473 0.000000 - 0 gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene exon 44453422 44453473 0.000000 - . gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene CDS 44455885 44455887 0.000000 - 0 gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene exon 44455885 44455953 0.000000 - . gene_id "TNNC2"; transcript_id "NM_003279:uc002xpr.3"; -chr20 hg19_knownGene CDS 44469398 44469949 0.000000 + 0 gene_id "SNX21"; transcript_id "AF258570:uc002xpz.1"; -chr20 hg19_knownGene exon 44469087 44471102 0.000000 + . gene_id "SNX21"; transcript_id "AF258570:uc002xpz.1"; -chr20 hg19_knownGene CDS 44462559 44462579 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_001042632:uc002xpt.1"; -chr20 hg19_knownGene exon 44462470 44462579 0.000000 + . gene_id "SNX21"; transcript_id "NM_001042632:uc002xpt.1"; -chr20 hg19_knownGene CDS 44462840 44463107 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_001042632:uc002xpt.1"; -chr20 hg19_knownGene exon 44462840 44463107 0.000000 + . gene_id "SNX21"; transcript_id "NM_001042632:uc002xpt.1"; -chr20 hg19_knownGene CDS 44463598 44463748 0.000000 + 2 gene_id "SNX21"; transcript_id "NM_001042632:uc002xpt.1"; -chr20 hg19_knownGene exon 44463598 44463748 0.000000 + . gene_id "SNX21"; transcript_id "NM_001042632:uc002xpt.1"; -chr20 hg19_knownGene CDS 44469278 44469293 0.000000 + 1 gene_id "SNX21"; transcript_id "NM_001042632:uc002xpt.1"; -chr20 hg19_knownGene exon 44469278 44471914 0.000000 + . gene_id "SNX21"; transcript_id "NM_001042632:uc002xpt.1"; -chr20 hg19_knownGene CDS 44462559 44462579 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_152897:uc002xps.1"; -chr20 hg19_knownGene exon 44462470 44462579 0.000000 + . gene_id "SNX21"; transcript_id "NM_152897:uc002xps.1"; -chr20 hg19_knownGene CDS 44462840 44463107 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_152897:uc002xps.1"; -chr20 hg19_knownGene exon 44462840 44463107 0.000000 + . gene_id "SNX21"; transcript_id "NM_152897:uc002xps.1"; -chr20 hg19_knownGene CDS 44463598 44463755 0.000000 + 2 gene_id "SNX21"; transcript_id "NM_152897:uc002xps.1"; -chr20 hg19_knownGene exon 44463598 44463755 0.000000 + . gene_id "SNX21"; transcript_id "NM_152897:uc002xps.1"; -chr20 hg19_knownGene CDS 44469278 44469419 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_152897:uc002xps.1"; -chr20 hg19_knownGene exon 44469278 44469419 0.000000 + . gene_id "SNX21"; transcript_id "NM_152897:uc002xps.1"; -chr20 hg19_knownGene CDS 44470672 44470679 0.000000 + 2 gene_id "SNX21"; transcript_id "NM_152897:uc002xps.1"; -chr20 hg19_knownGene exon 44470672 44471914 0.000000 + . gene_id "SNX21"; transcript_id "NM_152897:uc002xps.1"; -chr20 hg19_knownGene CDS 44462559 44462579 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_001042633:uc002xpu.1"; -chr20 hg19_knownGene exon 44462470 44462579 0.000000 + . gene_id "SNX21"; transcript_id "NM_001042633:uc002xpu.1"; -chr20 hg19_knownGene CDS 44462840 44463107 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_001042633:uc002xpu.1"; -chr20 hg19_knownGene exon 44462840 44463107 0.000000 + . gene_id "SNX21"; transcript_id "NM_001042633:uc002xpu.1"; -chr20 hg19_knownGene CDS 44463598 44463755 0.000000 + 2 gene_id "SNX21"; transcript_id "NM_001042633:uc002xpu.1"; -chr20 hg19_knownGene exon 44463598 44463755 0.000000 + . gene_id "SNX21"; transcript_id "NM_001042633:uc002xpu.1"; -chr20 hg19_knownGene CDS 44469087 44469097 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_001042633:uc002xpu.1"; -chr20 hg19_knownGene exon 44469087 44469097 0.000000 + . gene_id "SNX21"; transcript_id "NM_001042633:uc002xpu.1"; -chr20 hg19_knownGene CDS 44469278 44469293 0.000000 + 1 gene_id "SNX21"; transcript_id "NM_001042633:uc002xpu.1"; -chr20 hg19_knownGene exon 44469278 44471914 0.000000 + . gene_id "SNX21"; transcript_id "NM_001042633:uc002xpu.1"; -chr20 hg19_knownGene CDS 44462559 44462579 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_033421:uc002xpv.1"; -chr20 hg19_knownGene exon 44462470 44462579 0.000000 + . gene_id "SNX21"; transcript_id "NM_033421:uc002xpv.1"; -chr20 hg19_knownGene CDS 44462840 44463107 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_033421:uc002xpv.1"; -chr20 hg19_knownGene exon 44462840 44463107 0.000000 + . gene_id "SNX21"; transcript_id "NM_033421:uc002xpv.1"; -chr20 hg19_knownGene CDS 44463598 44463755 0.000000 + 2 gene_id "SNX21"; transcript_id "NM_033421:uc002xpv.1"; -chr20 hg19_knownGene exon 44463598 44463755 0.000000 + . gene_id "SNX21"; transcript_id "NM_033421:uc002xpv.1"; -chr20 hg19_knownGene CDS 44469278 44469949 0.000000 + 0 gene_id "SNX21"; transcript_id "NM_033421:uc002xpv.1"; -chr20 hg19_knownGene exon 44469278 44471914 0.000000 + . gene_id "SNX21"; transcript_id "NM_033421:uc002xpv.1"; -chr20 hg19_knownGene exon 44462470 44462579 0.000000 + . gene_id "SNX21"; transcript_id "BC012904:uc002xpw.1"; -chr20 hg19_knownGene exon 44462840 44463107 0.000000 + . gene_id "SNX21"; transcript_id "BC012904:uc002xpw.1"; -chr20 hg19_knownGene exon 44463598 44463755 0.000000 + . gene_id "SNX21"; transcript_id "BC012904:uc002xpw.1"; -chr20 hg19_knownGene exon 44466907 44466999 0.000000 + . gene_id "SNX21"; transcript_id "BC012904:uc002xpw.1"; -chr20 hg19_knownGene exon 44468961 44469097 0.000000 + . gene_id "SNX21"; transcript_id "BC012904:uc002xpw.1"; -chr20 hg19_knownGene CDS 44469398 44469949 0.000000 + 0 gene_id "SNX21"; transcript_id "BC012904:uc002xpw.1"; -chr20 hg19_knownGene exon 44469278 44471914 0.000000 + . gene_id "SNX21"; transcript_id "BC012904:uc002xpw.1"; -chr20 hg19_knownGene CDS 44462846 44463107 0.000000 + 0 gene_id "SNX21"; transcript_id "AK297622:uc010zxd.1"; -chr20 hg19_knownGene exon 44462807 44463107 0.000000 + . gene_id "SNX21"; transcript_id "AK297622:uc010zxd.1"; -chr20 hg19_knownGene CDS 44463598 44463755 0.000000 + 2 gene_id "SNX21"; transcript_id "AK297622:uc010zxd.1"; -chr20 hg19_knownGene exon 44463598 44463755 0.000000 + . gene_id "SNX21"; transcript_id "AK297622:uc010zxd.1"; -chr20 hg19_knownGene CDS 44469087 44469097 0.000000 + 0 gene_id "SNX21"; transcript_id "AK297622:uc010zxd.1"; -chr20 hg19_knownGene exon 44469087 44469097 0.000000 + . gene_id "SNX21"; transcript_id "AK297622:uc010zxd.1"; -chr20 hg19_knownGene CDS 44469278 44469293 0.000000 + 1 gene_id "SNX21"; transcript_id "AK297622:uc010zxd.1"; -chr20 hg19_knownGene exon 44469278 44471914 0.000000 + . gene_id "SNX21"; transcript_id "AK297622:uc010zxd.1"; -chr20 hg19_knownGene exon 44463216 44463755 0.000000 + . gene_id "SNX21"; transcript_id "AX746933:uc002xpy.1"; -chr20 hg19_knownGene exon 44469087 44469097 0.000000 + . gene_id "SNX21"; transcript_id "AX746933:uc002xpy.1"; -chr20 hg19_knownGene CDS 44469398 44469949 0.000000 + 0 gene_id "SNX21"; transcript_id "AX746933:uc002xpy.1"; -chr20 hg19_knownGene exon 44469278 44471914 0.000000 + . gene_id "SNX21"; transcript_id "AX746933:uc002xpy.1"; -chr20 hg19_knownGene CDS 44470480 44470595 0.000000 - 2 gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene exon 44470360 44470595 0.000000 - . gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene CDS 44472166 44472360 0.000000 - 2 gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene exon 44472166 44472360 0.000000 - . gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene CDS 44472902 44473059 0.000000 - 1 gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene exon 44472902 44473059 0.000000 - . gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene CDS 44477089 44477314 0.000000 - 2 gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene exon 44477089 44477314 0.000000 - . gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene CDS 44483798 44483931 0.000000 - 1 gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene exon 44483798 44483931 0.000000 - . gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene CDS 44485827 44485954 0.000000 - 0 gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene exon 44485827 44486048 0.000000 - . gene_id "ACOT8"; transcript_id "NM_005469:uc002xqa.2"; -chr20 hg19_knownGene CDS 44472825 44473059 0.000000 - 1 gene_id "ACOT8"; transcript_id "AK296973:uc010zxe.2"; -chr20 hg19_knownGene exon 44470662 44473059 0.000000 - . gene_id "ACOT8"; transcript_id "AK296973:uc010zxe.2"; -chr20 hg19_knownGene CDS 44477089 44477314 0.000000 - 2 gene_id "ACOT8"; transcript_id "AK296973:uc010zxe.2"; -chr20 hg19_knownGene exon 44477089 44477314 0.000000 - . gene_id "ACOT8"; transcript_id "AK296973:uc010zxe.2"; -chr20 hg19_knownGene CDS 44483798 44483931 0.000000 - 1 gene_id "ACOT8"; transcript_id "AK296973:uc010zxe.2"; -chr20 hg19_knownGene exon 44483798 44483931 0.000000 - . gene_id "ACOT8"; transcript_id "AK296973:uc010zxe.2"; -chr20 hg19_knownGene CDS 44485827 44485954 0.000000 - 0 gene_id "ACOT8"; transcript_id "AK296973:uc010zxe.2"; -chr20 hg19_knownGene exon 44485827 44486048 0.000000 - . gene_id "ACOT8"; transcript_id "AK296973:uc010zxe.2"; -chr20 hg19_knownGene CDS 44472825 44473059 0.000000 - 1 gene_id "ACOT8"; transcript_id "AK292494:uc002xqc.2"; -chr20 hg19_knownGene exon 44470662 44473059 0.000000 - . gene_id "ACOT8"; transcript_id "AK292494:uc002xqc.2"; -chr20 hg19_knownGene CDS 44477089 44477314 0.000000 - 2 gene_id "ACOT8"; transcript_id "AK292494:uc002xqc.2"; -chr20 hg19_knownGene exon 44477089 44477314 0.000000 - . gene_id "ACOT8"; transcript_id "AK292494:uc002xqc.2"; -chr20 hg19_knownGene CDS 44485827 44485929 0.000000 - 0 gene_id "ACOT8"; transcript_id "AK292494:uc002xqc.2"; -chr20 hg19_knownGene exon 44485827 44486048 0.000000 - . gene_id "ACOT8"; transcript_id "AK292494:uc002xqc.2"; -chr20 hg19_knownGene CDS 44472006 44472037 0.000000 - 2 gene_id "ACOT8"; transcript_id "AK298783:uc010zxf.2"; -chr20 hg19_knownGene exon 44471386 44472037 0.000000 - . gene_id "ACOT8"; transcript_id "AK298783:uc010zxf.2"; -chr20 hg19_knownGene CDS 44472166 44472360 0.000000 - 2 gene_id "ACOT8"; transcript_id "AK298783:uc010zxf.2"; -chr20 hg19_knownGene exon 44472166 44472360 0.000000 - . gene_id "ACOT8"; transcript_id "AK298783:uc010zxf.2"; -chr20 hg19_knownGene CDS 44472902 44473059 0.000000 - 1 gene_id "ACOT8"; transcript_id "AK298783:uc010zxf.2"; -chr20 hg19_knownGene exon 44472902 44473059 0.000000 - . gene_id "ACOT8"; transcript_id "AK298783:uc010zxf.2"; -chr20 hg19_knownGene CDS 44485827 44485954 0.000000 - 0 gene_id "ACOT8"; transcript_id "AK298783:uc010zxf.2"; -chr20 hg19_knownGene exon 44485827 44486048 0.000000 - . gene_id "ACOT8"; transcript_id "AK298783:uc010zxf.2"; -chr20 hg19_knownGene exon 44486220 44486619 0.000000 + . gene_id "ZSWIM3"; transcript_id "NR_037628:uc010zxg.2"; -chr20 hg19_knownGene CDS 44501328 44501464 0.000000 + 0 gene_id "ZSWIM3"; transcript_id "NR_037628:uc010zxg.2"; -chr20 hg19_knownGene exon 44501310 44501464 0.000000 + . gene_id "ZSWIM3"; transcript_id "NR_037628:uc010zxg.2"; -chr20 hg19_knownGene CDS 44505353 44507285 0.000000 + 1 gene_id "ZSWIM3"; transcript_id "NR_037628:uc010zxg.2"; -chr20 hg19_knownGene exon 44505353 44507769 0.000000 + . gene_id "ZSWIM3"; transcript_id "NR_037628:uc010zxg.2"; -chr20 hg19_knownGene CDS 44486465 44486619 0.000000 + 0 gene_id "ZSWIM3"; transcript_id "NM_080752:uc002xqd.3"; -chr20 hg19_knownGene exon 44486220 44486619 0.000000 + . gene_id "ZSWIM3"; transcript_id "NM_080752:uc002xqd.3"; -chr20 hg19_knownGene CDS 44505353 44507285 0.000000 + 1 gene_id "ZSWIM3"; transcript_id "NM_080752:uc002xqd.3"; -chr20 hg19_knownGene exon 44505353 44507769 0.000000 + . gene_id "ZSWIM3"; transcript_id "NM_080752:uc002xqd.3"; -chr20 hg19_knownGene CDS 44511232 44512686 0.000000 + 0 gene_id "ZSWIM1"; transcript_id "CCDS13382:uc021wem.1"; -chr20 hg19_knownGene exon 44511232 44512689 0.000000 + . gene_id "ZSWIM1"; transcript_id "CCDS13382:uc021wem.1"; -chr20 hg19_knownGene exon 44509848 44509900 0.000000 + . gene_id "ZSWIM1"; transcript_id "NM_080603:uc010ghi.3"; -chr20 hg19_knownGene CDS 44511232 44512686 0.000000 + 0 gene_id "ZSWIM1"; transcript_id "NM_080603:uc010ghi.3"; -chr20 hg19_knownGene exon 44511172 44513905 0.000000 + . gene_id "ZSWIM1"; transcript_id "NM_080603:uc010ghi.3"; -chr20 hg19_knownGene CDS 44515159 44515784 0.000000 - 2 gene_id "SPATA25"; transcript_id "NM_080608:uc002xqf.3"; -chr20 hg19_knownGene exon 44515130 44515784 0.000000 - . gene_id "SPATA25"; transcript_id "NM_080608:uc002xqf.3"; -chr20 hg19_knownGene CDS 44516175 44516229 0.000000 - 0 gene_id "SPATA25"; transcript_id "NM_080608:uc002xqf.3"; -chr20 hg19_knownGene exon 44516175 44516238 0.000000 - . gene_id "SPATA25"; transcript_id "NM_080608:uc002xqf.3"; -chr20 hg19_knownGene CDS 44517400 44517512 0.000000 - 2 gene_id "NEURL2"; transcript_id "NM_080749:uc002xqg.1"; -chr20 hg19_knownGene exon 44517267 44517512 0.000000 - . gene_id "NEURL2"; transcript_id "NM_080749:uc002xqg.1"; -chr20 hg19_knownGene CDS 44518889 44519630 0.000000 - 0 gene_id "NEURL2"; transcript_id "NM_080749:uc002xqg.1"; -chr20 hg19_knownGene exon 44518889 44519901 0.000000 - . gene_id "NEURL2"; transcript_id "NM_080749:uc002xqg.1"; -chr20 hg19_knownGene CDS 44519965 44520018 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44519591 44520018 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44520208 44520401 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44520208 44520401 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44520555 44520666 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44520555 44520666 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44520912 44520962 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44520912 44520962 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44521037 44521123 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44521037 44521123 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44521364 44521519 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44521364 44521519 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44521859 44521950 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44521859 44521950 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44522627 44522711 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44522627 44522711 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44523289 44523380 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44523289 44523380 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44523462 44523540 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44523462 44523540 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44523633 44523772 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44523633 44523772 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44525604 44525679 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44525604 44525679 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44526356 44526445 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44526356 44526445 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44526644 44526748 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44526644 44526748 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene CDS 44527006 44527086 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44527006 44527458 0.000000 + . gene_id "CTSA"; transcript_id "NM_000308:uc002xqh.3"; -chr20 hg19_knownGene exon 44519591 44520064 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44520208 44520401 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44520208 44520401 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44520555 44520666 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44520555 44520666 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44520912 44520962 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44520912 44520962 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44521037 44521123 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44521037 44521123 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44521364 44521519 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44521364 44521519 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44521859 44521950 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44521859 44521950 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44522627 44522711 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44522627 44522711 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44523289 44523380 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44523289 44523380 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44523462 44523540 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44523462 44523540 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44523633 44523772 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44523633 44523772 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44525604 44525679 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44525604 44525679 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44526356 44526445 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44526356 44526445 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44526644 44526748 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44526644 44526748 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44527006 44527086 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene exon 44527006 44527458 0.000000 + . gene_id "CTSA"; transcript_id "NM_001127695:uc002xqj.4"; -chr20 hg19_knownGene CDS 44519965 44520018 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44519591 44520018 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44520208 44520401 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44520208 44520401 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44520555 44520666 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44520555 44520666 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44521037 44521123 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44521037 44521123 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44521364 44521519 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44521364 44521519 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44521859 44521950 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44521859 44521950 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44522627 44522711 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44522627 44522711 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44523289 44523380 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44523289 44523380 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44523462 44523540 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44523462 44523540 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44523633 44523772 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44523633 44523772 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44525604 44525679 0.000000 + 1 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44525604 44525679 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44526356 44526445 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44526356 44526445 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44526644 44526748 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44526644 44526748 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene CDS 44527006 44527086 0.000000 + 0 gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44527006 44527458 0.000000 + . gene_id "CTSA"; transcript_id "NM_001167594:uc010zxi.2"; -chr20 hg19_knownGene exon 44519591 44520018 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44520208 44520401 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44520555 44520666 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44520912 44520962 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44521037 44521123 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44521364 44521526 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44521859 44521950 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44522627 44522711 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44523289 44523380 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44523462 44523540 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44523633 44523772 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44525604 44525679 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44526356 44526445 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44526644 44526748 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene exon 44527006 44527458 0.000000 + . gene_id "CTSA"; transcript_id "AK172808:uc002xqi.3"; -chr20 hg19_knownGene CDS 44527583 44527702 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44527259 44527702 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44528101 44528177 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44528101 44528177 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44528261 44528324 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44528261 44528324 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44528475 44528517 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44528475 44528517 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44530906 44530973 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44530906 44530973 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44531079 44531243 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44531079 44531243 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44533439 44533498 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44533439 44533498 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44533581 44533757 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44533581 44533757 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44534907 44534998 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44534907 44534998 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44536331 44536394 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44536331 44536394 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44536480 44536543 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44536480 44536543 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44538155 44538310 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44538155 44538310 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44538581 44538645 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44538581 44538709 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene exon 44539510 44539633 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242921:uc002xql.2"; -chr20 hg19_knownGene CDS 44527583 44527702 0.000000 - 0 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44527259 44527702 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44528101 44528177 0.000000 - 2 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44528101 44528177 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44528261 44528324 0.000000 - 0 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44528261 44528324 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44528475 44528517 0.000000 - 1 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44528475 44528517 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44530906 44530973 0.000000 - 0 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44530906 44530973 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44531079 44531243 0.000000 - 0 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44531079 44531243 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44533439 44533498 0.000000 - 0 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44533439 44533498 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44533581 44533757 0.000000 - 0 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44533581 44533757 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44534907 44534998 0.000000 - 2 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44534907 44534998 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44536331 44536394 0.000000 - 0 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44536331 44536394 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44536480 44536543 0.000000 - 1 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44536480 44536543 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44538155 44538310 0.000000 - 1 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44538155 44538310 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44538581 44538709 0.000000 - 1 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44538581 44538709 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44539791 44539890 0.000000 - 2 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44539791 44539890 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44539992 44540151 0.000000 - 0 gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene exon 44539992 44540686 0.000000 - . gene_id "PLTP"; transcript_id "AK097009:uc002xqm.2"; -chr20 hg19_knownGene CDS 44527583 44527702 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44527259 44527702 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44528101 44528177 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44528101 44528177 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44528261 44528324 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44528261 44528324 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44528475 44528517 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44528475 44528517 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44530906 44530973 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44530906 44530973 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44531079 44531243 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44531079 44531243 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44533439 44533498 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44533439 44533498 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44533581 44533757 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44533581 44533757 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44534907 44534998 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44534907 44534998 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44536331 44536394 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44536331 44536394 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44536480 44536543 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44536480 44536543 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44538155 44538310 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44538155 44538310 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44538581 44538709 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44538581 44538709 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44539791 44539890 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44539791 44539890 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44539992 44540091 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44539992 44540102 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene exon 44540718 44541003 0.000000 - . gene_id "PLTP"; transcript_id "NM_006227:uc002xqn.2"; -chr20 hg19_knownGene CDS 44527583 44527702 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44527259 44527702 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44528101 44528177 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44528101 44528177 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44528261 44528324 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44528261 44528324 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44528475 44528517 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44528475 44528517 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44530906 44530973 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44530906 44530973 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44531079 44531243 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44531079 44531243 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44533439 44533498 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44533439 44533498 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44533581 44533757 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44533581 44533757 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44534907 44534998 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44534907 44534998 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44536331 44536394 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44536331 44536394 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44536480 44536543 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44536480 44536543 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44538581 44538709 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44538581 44538709 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44539791 44539890 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44539791 44539890 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44539992 44540091 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44539992 44540102 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene exon 44540718 44541003 0.000000 - . gene_id "PLTP"; transcript_id "NM_182676:uc002xqo.2"; -chr20 hg19_knownGene CDS 44527583 44527702 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44527259 44527702 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44528101 44528177 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44528101 44528177 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44528261 44528324 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44528261 44528324 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44528475 44528517 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44528475 44528517 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44530906 44530973 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44530906 44530973 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44531079 44531243 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44531079 44531243 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44533439 44533498 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44533439 44533498 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44533581 44533757 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44533581 44533757 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44534907 44534998 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44534907 44534998 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44536331 44536394 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44536331 44536394 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44536480 44536543 0.000000 - 1 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44536480 44536543 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44539791 44539890 0.000000 - 2 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44539791 44539890 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44539992 44540091 0.000000 - 0 gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44539992 44540102 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene exon 44540718 44541003 0.000000 - . gene_id "PLTP"; transcript_id "NM_001242920:uc010zxj.2"; -chr20 hg19_knownGene CDS 44527583 44527702 0.000000 - 0 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44527259 44527702 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44528101 44528177 0.000000 - 2 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44528101 44528177 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44528261 44528324 0.000000 - 0 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44528261 44528324 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44528475 44528517 0.000000 - 1 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44528475 44528517 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44530906 44530973 0.000000 - 0 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44530906 44530973 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44531079 44531243 0.000000 - 0 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44531079 44531243 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44533439 44533498 0.000000 - 0 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44533439 44533498 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44533581 44533757 0.000000 - 0 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44533581 44533757 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44534907 44534998 0.000000 - 2 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44534907 44534998 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44536331 44536394 0.000000 - 0 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44536331 44536394 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44536480 44536543 0.000000 - 1 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44536480 44536543 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44538155 44538310 0.000000 - 1 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44538155 44538310 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44538581 44538709 0.000000 - 1 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44538581 44538709 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44539791 44539882 0.000000 - 0 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44539791 44539882 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene CDS 44540031 44540045 0.000000 - 0 gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44540031 44540102 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44540718 44541003 0.000000 - . gene_id "PLTP"; transcript_id "AK092397:uc002xqq.2"; -chr20 hg19_knownGene exon 44563317 44563443 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44566057 44566224 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44567639 44567762 0.000000 + 0 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44567620 44567762 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44567854 44567978 0.000000 + 2 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44567854 44567978 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44569114 44569251 0.000000 + 0 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44569114 44569251 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44569448 44569578 0.000000 + 0 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44569448 44569578 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44569692 44569846 0.000000 + 1 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44569692 44569846 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44571736 44571883 0.000000 + 2 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44571736 44571883 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44571979 44572062 0.000000 + 1 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44571979 44572062 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44572305 44572404 0.000000 + 1 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44572305 44572404 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44573507 44573669 0.000000 + 0 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44573507 44573669 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44574350 44574522 0.000000 + 2 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44574350 44574522 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44574668 44574754 0.000000 + 0 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44574668 44574754 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44574839 44575023 0.000000 + 0 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44574839 44575023 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44575712 44575805 0.000000 + 1 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44575712 44575805 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44575902 44576077 0.000000 + 0 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44575902 44576077 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene CDS 44576163 44576391 0.000000 + 1 gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44576163 44576662 0.000000 + . gene_id "PCIF1"; transcript_id "NM_022104:uc002xqs.3"; -chr20 hg19_knownGene exon 44573507 44573669 0.000000 + . gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene CDS 44574442 44574522 0.000000 + 0 gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene exon 44574350 44574522 0.000000 + . gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene CDS 44574668 44574754 0.000000 + 0 gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene exon 44574668 44574754 0.000000 + . gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene CDS 44574839 44575023 0.000000 + 0 gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene exon 44574839 44575023 0.000000 + . gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene CDS 44575712 44575805 0.000000 + 1 gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene exon 44575712 44575805 0.000000 + . gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene CDS 44575902 44576249 0.000000 + 0 gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene exon 44575902 44576662 0.000000 + . gene_id "PCIF1"; transcript_id "AL137473:uc002xqt.3"; -chr20 hg19_knownGene CDS 44577595 44577719 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44577292 44577719 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44577809 44577890 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44577809 44577890 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44577972 44578037 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44577972 44578037 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44578124 44578207 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44578124 44578207 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44578439 44578516 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44578439 44578516 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44578605 44578708 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44578605 44578708 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44578858 44579012 0.000000 - 1 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44578858 44579012 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44579092 44579234 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44579092 44579234 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44580786 44581160 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44580786 44581160 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44581237 44581348 0.000000 - 1 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44581237 44581348 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44582328 44582365 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene exon 44582328 44583343 0.000000 - . gene_id "ZNF335"; transcript_id "AK122963:uc002xqv.3"; -chr20 hg19_knownGene CDS 44596077 44596273 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK054694:uc002xqy.3"; -chr20 hg19_knownGene exon 44595520 44596273 0.000000 - . gene_id "ZNF335"; transcript_id "AK054694:uc002xqy.3"; -chr20 hg19_knownGene CDS 44596373 44596721 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK054694:uc002xqy.3"; -chr20 hg19_knownGene exon 44596373 44597497 0.000000 - . gene_id "ZNF335"; transcript_id "AK054694:uc002xqy.3"; -chr20 hg19_knownGene CDS 44594271 44594413 0.000000 - 2 gene_id "ZNF335"; transcript_id "AX747567:uc002xqx.1"; -chr20 hg19_knownGene exon 44594267 44594413 0.000000 - . gene_id "ZNF335"; transcript_id "AX747567:uc002xqx.1"; -chr20 hg19_knownGene CDS 44596133 44596273 0.000000 - 2 gene_id "ZNF335"; transcript_id "AX747567:uc002xqx.1"; -chr20 hg19_knownGene exon 44596133 44596273 0.000000 - . gene_id "ZNF335"; transcript_id "AX747567:uc002xqx.1"; -chr20 hg19_knownGene CDS 44596373 44596666 0.000000 - 2 gene_id "ZNF335"; transcript_id "AX747567:uc002xqx.1"; -chr20 hg19_knownGene exon 44596373 44596666 0.000000 - . gene_id "ZNF335"; transcript_id "AX747567:uc002xqx.1"; -chr20 hg19_knownGene CDS 44596924 44597001 0.000000 - 2 gene_id "ZNF335"; transcript_id "AX747567:uc002xqx.1"; -chr20 hg19_knownGene exon 44596924 44597001 0.000000 - . gene_id "ZNF335"; transcript_id "AX747567:uc002xqx.1"; -chr20 hg19_knownGene CDS 44598090 44598435 0.000000 - 0 gene_id "ZNF335"; transcript_id "AX747567:uc002xqx.1"; -chr20 hg19_knownGene exon 44598090 44598864 0.000000 - . gene_id "ZNF335"; transcript_id "AX747567:uc002xqx.1"; -chr20 hg19_knownGene CDS 44577595 44577719 0.000000 - 2 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44577292 44577719 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44577809 44577890 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44577809 44577890 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44577972 44578037 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44577972 44578037 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44578124 44578207 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44578124 44578207 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44578439 44578516 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44578439 44578516 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44578605 44578708 0.000000 - 2 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44578605 44578708 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44578858 44579012 0.000000 - 1 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44578858 44579012 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44579092 44579234 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44579092 44579234 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44580786 44581160 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44580786 44581160 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44581237 44581348 0.000000 - 1 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44581237 44581348 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44582328 44582587 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44582328 44582587 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44586225 44586319 0.000000 - 2 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44586225 44586319 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44586474 44586567 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44586474 44586567 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44587840 44588072 0.000000 - 2 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44587840 44588072 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44588847 44589007 0.000000 - 1 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44588847 44589007 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44589088 44589164 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44589088 44589164 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44589255 44589371 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44589255 44589371 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44589503 44589521 0.000000 - 1 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44589503 44589521 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44590709 44590821 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44590709 44590821 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44592112 44592289 0.000000 - 1 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44592112 44592289 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44592377 44592629 0.000000 - 2 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44592377 44592629 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44594267 44594413 0.000000 - 2 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44594267 44594413 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44596133 44596273 0.000000 - 2 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44596133 44596273 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44596373 44596666 0.000000 - 2 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44596373 44596666 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44596924 44597001 0.000000 - 2 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44596924 44597001 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44598090 44598330 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44598090 44598330 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44599849 44600049 0.000000 - 0 gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44599849 44600099 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene exon 44600761 44600833 0.000000 - . gene_id "ZNF335"; transcript_id "NM_022095:uc002xqw.3"; -chr20 hg19_knownGene CDS 44577595 44577719 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44577292 44577719 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44577809 44577890 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44577809 44577890 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44577972 44578037 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44577972 44578037 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44578124 44578207 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44578124 44578207 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44578439 44578516 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44578439 44578516 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44578605 44578708 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44578605 44578708 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44578858 44579012 0.000000 - 1 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44578858 44579012 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44579092 44579234 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44579092 44579234 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44580786 44581160 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44580786 44581160 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44581237 44581348 0.000000 - 1 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44581237 44581348 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44582328 44582587 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44582328 44582587 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44586225 44586319 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44586225 44586319 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44586474 44586567 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44586474 44586567 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44587840 44588072 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44587840 44588072 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44588847 44589007 0.000000 - 1 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44588847 44589007 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44589088 44589164 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44589088 44589164 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44589255 44589371 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44589255 44589371 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44589503 44589521 0.000000 - 1 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44589503 44589521 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44590709 44590821 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44590709 44590821 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44592112 44592289 0.000000 - 1 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44592112 44592289 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44592377 44592629 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44592377 44592629 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44594267 44594413 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44594267 44594413 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44596133 44596273 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44596133 44596273 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44596373 44596666 0.000000 - 2 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44596373 44596666 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44600761 44600815 0.000000 - 0 gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene exon 44600761 44600833 0.000000 - . gene_id "ZNF335"; transcript_id "AK296989:uc010zxk.2"; -chr20 hg19_knownGene CDS 44637566 44637703 0.000000 + 0 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44637547 44637703 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44638505 44638737 0.000000 + 0 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44638505 44638737 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44639122 44639270 0.000000 + 1 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44639122 44639270 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44639561 44639689 0.000000 + 2 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44639561 44639689 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44639782 44639955 0.000000 + 2 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44639782 44639955 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44640213 44640386 0.000000 + 2 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44640213 44640386 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44640776 44640952 0.000000 + 2 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44640776 44640952 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44641066 44641221 0.000000 + 2 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44641066 44641221 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44641894 44642173 0.000000 + 2 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44641894 44642173 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44642296 44642435 0.000000 + 1 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44642296 44642435 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44642763 44642913 0.000000 + 2 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44642763 44642913 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44643010 44643113 0.000000 + 1 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44643010 44643113 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44644889 44645004 0.000000 + 2 gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene exon 44644889 44645200 0.000000 + . gene_id "MMP9"; transcript_id "NM_004994:uc002xqz.3"; -chr20 hg19_knownGene CDS 44657984 44658035 0.000000 + 0 gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene exon 44657821 44658035 0.000000 + . gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene CDS 44663587 44663681 0.000000 + 2 gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene exon 44663587 44663681 0.000000 + . gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene CDS 44664043 44664174 0.000000 + 0 gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene exon 44664043 44664174 0.000000 + . gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene CDS 44664416 44664562 0.000000 + 0 gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene exon 44664416 44664562 0.000000 + . gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene CDS 44665380 44665434 0.000000 + 0 gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene exon 44665380 44665434 0.000000 + . gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene CDS 44665894 44666024 0.000000 + 2 gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene exon 44665894 44666024 0.000000 + . gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene CDS 44669012 44669254 0.000000 + 0 gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene exon 44669012 44669799 0.000000 + . gene_id "SLC12A5"; transcript_id "AK098371:uc002xra.2"; -chr20 hg19_knownGene exon 44657821 44658035 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene exon 44663587 44663681 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene exon 44664043 44664174 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene exon 44664416 44664562 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene exon 44665380 44665434 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene exon 44665894 44665921 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene exon 44674517 44674635 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene exon 44674977 44675075 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene exon 44676093 44676212 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene exon 44676620 44676724 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene exon 44678261 44678429 0.000000 + . gene_id "SLC12A5"; transcript_id "AK296331:uc010zxm.1"; -chr20 hg19_knownGene CDS 44650405 44650525 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44650329 44650525 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44663587 44663681 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44663587 44663681 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44664043 44664174 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44664043 44664174 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44664416 44664562 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44664416 44664562 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44665380 44665434 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44665380 44665434 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44665894 44666024 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44665894 44666024 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44669012 44669253 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44669012 44669253 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44669968 44670179 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44669968 44670179 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44671792 44671962 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44671792 44671962 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44672272 44672370 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44672272 44672370 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44672515 44672572 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44672515 44672572 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44673605 44673779 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44673605 44673779 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44674517 44674635 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44674517 44674635 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44674977 44675075 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44674977 44675075 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44676093 44676212 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44676093 44676212 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44676620 44676724 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44676620 44676724 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44678261 44678429 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44678261 44678429 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44680314 44680509 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44680314 44680509 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44681596 44681765 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44681596 44681765 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44682217 44682348 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44682217 44682348 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44683555 44683662 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44683555 44683662 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44684789 44684911 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44684789 44684911 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44685004 44685203 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44685004 44685203 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44685536 44685550 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44685536 44685550 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44685809 44685942 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44685809 44685942 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44686153 44686241 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene exon 44686153 44688789 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_001134771:uc010zxl.1"; -chr20 hg19_knownGene CDS 44657984 44658035 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44657821 44658035 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44663587 44663681 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44663587 44663681 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44664043 44664174 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44664043 44664174 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44664416 44664562 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44664416 44664562 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44665380 44665434 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44665380 44665434 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44665894 44666024 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44665894 44666024 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44669012 44669253 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44669012 44669253 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44669968 44670179 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44669968 44670179 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44671792 44671962 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44671792 44671962 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44672272 44672370 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44672272 44672370 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44672515 44672572 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44672515 44672572 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44673605 44673779 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44673605 44673779 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44674517 44674635 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44674517 44674635 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44674977 44675075 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44674977 44675075 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44676093 44676212 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44676093 44676212 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44676620 44676724 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44676620 44676724 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44678261 44678429 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44678261 44678429 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44680314 44680509 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44680314 44680509 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44681596 44681765 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44681596 44681765 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44682217 44682348 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44682217 44682348 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44683555 44683662 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44683555 44683662 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44684789 44684911 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44684789 44684911 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44685004 44685203 0.000000 + 0 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44685004 44685203 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44685536 44685550 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44685536 44685550 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44685809 44685942 0.000000 + 1 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44685809 44685942 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44686153 44686241 0.000000 + 2 gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene exon 44686153 44688789 0.000000 + . gene_id "SLC12A5"; transcript_id "NM_020708:uc002xrb.2"; -chr20 hg19_knownGene CDS 44691484 44691528 0.000000 - 0 gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene exon 44689626 44691528 0.000000 - . gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene CDS 44691976 44692319 0.000000 - 2 gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene exon 44691976 44692319 0.000000 - . gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene CDS 44693668 44693867 0.000000 - 1 gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene exon 44693668 44693867 0.000000 - . gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene CDS 44695694 44695820 0.000000 - 2 gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene exon 44695694 44695820 0.000000 - . gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene CDS 44697141 44697277 0.000000 - 1 gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene exon 44697141 44697277 0.000000 - . gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene CDS 44698849 44698877 0.000000 - 0 gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene exon 44698849 44699175 0.000000 - . gene_id "NCOA5"; transcript_id "BC056872:uc002xrc.3"; -chr20 hg19_knownGene CDS 44690942 44691528 0.000000 - 2 gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene exon 44689626 44691528 0.000000 - . gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene CDS 44691999 44692319 0.000000 - 2 gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene exon 44691999 44692319 0.000000 - . gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene CDS 44693668 44693867 0.000000 - 1 gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene exon 44693668 44693867 0.000000 - . gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene CDS 44695694 44695820 0.000000 - 2 gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene exon 44695694 44695820 0.000000 - . gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene CDS 44697141 44697277 0.000000 - 1 gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene exon 44697141 44697277 0.000000 - . gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene CDS 44698849 44699175 0.000000 - 1 gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene exon 44698849 44699175 0.000000 - . gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene CDS 44708026 44708063 0.000000 - 0 gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene exon 44708026 44708591 0.000000 - . gene_id "NCOA5"; transcript_id "AF470686:uc002xrd.3"; -chr20 hg19_knownGene CDS 44690942 44691528 0.000000 - 2 gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene exon 44689626 44691528 0.000000 - . gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene CDS 44691999 44692319 0.000000 - 2 gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene exon 44691999 44692319 0.000000 - . gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene CDS 44693668 44693867 0.000000 - 1 gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene exon 44693668 44693867 0.000000 - . gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene CDS 44695694 44695820 0.000000 - 2 gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene exon 44695694 44695820 0.000000 - . gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene CDS 44697141 44697277 0.000000 - 1 gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene exon 44697141 44697277 0.000000 - . gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene CDS 44698849 44699175 0.000000 - 1 gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene exon 44698849 44699175 0.000000 - . gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene CDS 44708026 44708063 0.000000 - 0 gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene exon 44708026 44708092 0.000000 - . gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene exon 44718456 44718580 0.000000 - . gene_id "NCOA5"; transcript_id "NM_020967:uc002xre.3"; -chr20 hg19_knownGene CDS 44746983 44747033 0.000000 + 0 gene_id "CD40"; transcript_id "AB209660:uc002xrf.1"; -chr20 hg19_knownGene exon 44746906 44747033 0.000000 + . gene_id "CD40"; transcript_id "AB209660:uc002xrf.1"; -chr20 hg19_knownGene CDS 44750459 44750537 0.000000 + 0 gene_id "CD40"; transcript_id "AB209660:uc002xrf.1"; -chr20 hg19_knownGene exon 44750459 44750537 0.000000 + . gene_id "CD40"; transcript_id "AB209660:uc002xrf.1"; -chr20 hg19_knownGene CDS 44750872 44750997 0.000000 + 2 gene_id "CD40"; transcript_id "AB209660:uc002xrf.1"; -chr20 hg19_knownGene exon 44750872 44750997 0.000000 + . gene_id "CD40"; transcript_id "AB209660:uc002xrf.1"; -chr20 hg19_knownGene CDS 44751249 44751442 0.000000 + 2 gene_id "CD40"; transcript_id "AB209660:uc002xrf.1"; -chr20 hg19_knownGene exon 44751249 44752939 0.000000 + . gene_id "CD40"; transcript_id "AB209660:uc002xrf.1"; -chr20 hg19_knownGene CDS 44746983 44747033 0.000000 + 0 gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene exon 44746906 44747033 0.000000 + . gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene CDS 44750459 44750537 0.000000 + 0 gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene exon 44750459 44750537 0.000000 + . gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene CDS 44750872 44750997 0.000000 + 2 gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene exon 44750872 44750997 0.000000 + . gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene CDS 44751249 44751395 0.000000 + 2 gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene exon 44751249 44751395 0.000000 + . gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene CDS 44751765 44751858 0.000000 + 2 gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene exon 44751765 44751858 0.000000 + . gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene CDS 44755279 44755340 0.000000 + 1 gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene exon 44755279 44755340 0.000000 + . gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene CDS 44756777 44756863 0.000000 + 2 gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene exon 44756777 44756863 0.000000 + . gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene CDS 44756969 44756997 0.000000 + 2 gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene exon 44756969 44756997 0.000000 + . gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene CDS 44757521 44757676 0.000000 + 0 gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene exon 44757521 44758384 0.000000 + . gene_id "CD40"; transcript_id "NM_001250:uc002xrg.1"; -chr20 hg19_knownGene CDS 44746983 44747033 0.000000 + 0 gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene exon 44746906 44747033 0.000000 + . gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene CDS 44750459 44750537 0.000000 + 0 gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene exon 44750459 44750537 0.000000 + . gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene CDS 44750872 44750997 0.000000 + 2 gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene exon 44750872 44750997 0.000000 + . gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene CDS 44751249 44751395 0.000000 + 2 gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene exon 44751249 44751395 0.000000 + . gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene CDS 44751765 44751858 0.000000 + 2 gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene exon 44751765 44751858 0.000000 + . gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene CDS 44756777 44756863 0.000000 + 1 gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene exon 44756777 44756863 0.000000 + . gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene CDS 44756969 44756993 0.000000 + 1 gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene exon 44756969 44756997 0.000000 + . gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene exon 44757521 44758384 0.000000 + . gene_id "CD40"; transcript_id "NM_152854:uc002xrh.1"; -chr20 hg19_knownGene exon 44746906 44747033 0.000000 + . gene_id "CD40"; transcript_id "AX781593:uc002xrj.1"; -chr20 hg19_knownGene exon 44750459 44750537 0.000000 + . gene_id "CD40"; transcript_id "AX781593:uc002xrj.1"; -chr20 hg19_knownGene exon 44750872 44750997 0.000000 + . gene_id "CD40"; transcript_id "AX781593:uc002xrj.1"; -chr20 hg19_knownGene exon 44751249 44751395 0.000000 + . gene_id "CD40"; transcript_id "AX781593:uc002xrj.1"; -chr20 hg19_knownGene exon 44755279 44755340 0.000000 + . gene_id "CD40"; transcript_id "AX781593:uc002xrj.1"; -chr20 hg19_knownGene exon 44756777 44756863 0.000000 + . gene_id "CD40"; transcript_id "AX781593:uc002xrj.1"; -chr20 hg19_knownGene exon 44756969 44756997 0.000000 + . gene_id "CD40"; transcript_id "AX781593:uc002xrj.1"; -chr20 hg19_knownGene exon 44757521 44758384 0.000000 + . gene_id "CD40"; transcript_id "AX781593:uc002xrj.1"; -chr20 hg19_knownGene exon 44746906 44747033 0.000000 + . gene_id "CD40"; transcript_id "BC064518:uc002xrk.1"; -chr20 hg19_knownGene exon 44750459 44750537 0.000000 + . gene_id "CD40"; transcript_id "BC064518:uc002xrk.1"; -chr20 hg19_knownGene exon 44750872 44750997 0.000000 + . gene_id "CD40"; transcript_id "BC064518:uc002xrk.1"; -chr20 hg19_knownGene exon 44751249 44751395 0.000000 + . gene_id "CD40"; transcript_id "BC064518:uc002xrk.1"; -chr20 hg19_knownGene exon 44756618 44756863 0.000000 + . gene_id "CD40"; transcript_id "BC064518:uc002xrk.1"; -chr20 hg19_knownGene exon 44756969 44756997 0.000000 + . gene_id "CD40"; transcript_id "BC064518:uc002xrk.1"; -chr20 hg19_knownGene exon 44757521 44758384 0.000000 + . gene_id "CD40"; transcript_id "BC064518:uc002xrk.1"; -chr20 hg19_knownGene CDS 44838945 44839199 0.000000 - 0 gene_id "CDH22"; transcript_id "BC031232:uc002xrn.2"; -chr20 hg19_knownGene exon 44838460 44839199 0.000000 - . gene_id "CDH22"; transcript_id "BC031232:uc002xrn.2"; -chr20 hg19_knownGene CDS 44841634 44841827 0.000000 - 2 gene_id "CDH22"; transcript_id "BC031232:uc002xrn.2"; -chr20 hg19_knownGene exon 44841634 44841827 0.000000 - . gene_id "CDH22"; transcript_id "BC031232:uc002xrn.2"; -chr20 hg19_knownGene CDS 44845465 44845555 0.000000 - 0 gene_id "CDH22"; transcript_id "BC031232:uc002xrn.2"; -chr20 hg19_knownGene exon 44845465 44845632 0.000000 - . gene_id "CDH22"; transcript_id "BC031232:uc002xrn.2"; -chr20 hg19_knownGene exon 44848437 44848552 0.000000 - . gene_id "CDH22"; transcript_id "BC031232:uc002xrn.2"; -chr20 hg19_knownGene exon 44849067 44849488 0.000000 - . gene_id "CDH22"; transcript_id "BC031232:uc002xrn.2"; -chr20 hg19_knownGene CDS 44803148 44803716 0.000000 - 2 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44802376 44803716 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44806585 44806836 0.000000 - 2 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44806585 44806836 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44815227 44815344 0.000000 - 0 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44815227 44815344 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44815465 44815586 0.000000 - 2 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44815465 44815586 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44828062 44828198 0.000000 - 1 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44828062 44828198 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44838946 44839199 0.000000 - 0 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44838946 44839199 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44841634 44841827 0.000000 - 2 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44841634 44841827 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44845465 44845632 0.000000 - 2 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44845465 44845632 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44856147 44856266 0.000000 - 2 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44856147 44856266 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44869602 44869896 0.000000 - 0 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44869602 44869896 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44879679 44879933 0.000000 - 0 gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene exon 44879679 44880332 0.000000 - . gene_id "CDH22"; transcript_id "NM_021248:uc002xrm.2"; -chr20 hg19_knownGene CDS 44803148 44803716 0.000000 - 2 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44802376 44803716 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene CDS 44806585 44806836 0.000000 - 2 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44806585 44806836 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene CDS 44815227 44815344 0.000000 - 0 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44815227 44815344 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene CDS 44815465 44815586 0.000000 - 2 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44815465 44815586 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene CDS 44828062 44828198 0.000000 - 1 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44828062 44828198 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene CDS 44838946 44839199 0.000000 - 0 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44838946 44839199 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene CDS 44841634 44841827 0.000000 - 2 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44841634 44841827 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene CDS 44845465 44845632 0.000000 - 2 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44845465 44845632 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene CDS 44856147 44856266 0.000000 - 2 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44856147 44856266 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene CDS 44869602 44869896 0.000000 - 0 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44869602 44869896 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene CDS 44879679 44879933 0.000000 - 0 gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44879679 44880332 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44936894 44937137 0.000000 - . gene_id "CDH22"; transcript_id "AK289584:uc010ghk.1"; -chr20 hg19_knownGene exon 44987234 44987262 0.000000 - . gene_id "DQ587006"; transcript_id "DQ587006:uc021wen.1"; -chr20 hg19_knownGene CDS 44979036 44979163 0.000000 - 2 gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene exon 44978177 44979163 0.000000 - . gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene CDS 44979400 44979529 0.000000 - 0 gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene exon 44979400 44979529 0.000000 - . gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene CDS 44980690 44980865 0.000000 - 2 gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene exon 44980690 44980865 0.000000 - . gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene CDS 44983521 44983604 0.000000 - 2 gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene exon 44983521 44983604 0.000000 - . gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene CDS 44983712 44983880 0.000000 - 0 gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene exon 44983712 44983880 0.000000 - . gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene CDS 44984441 44984513 0.000000 - 1 gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene exon 44984441 44984513 0.000000 - . gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene CDS 44985213 44985276 0.000000 - 2 gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene exon 44985213 44985276 0.000000 - . gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene CDS 44986262 44986412 0.000000 - 0 gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene exon 44986262 44986412 0.000000 - . gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene CDS 44987026 44987145 0.000000 - 0 gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene exon 44987026 44987597 0.000000 - . gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene exon 44991725 44991813 0.000000 - . gene_id "SLC35C2"; transcript_id "BC025277:uc002xro.3"; -chr20 hg19_knownGene CDS 44979036 44979163 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene exon 44978177 44979163 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene CDS 44979400 44979529 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene exon 44979400 44979529 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene CDS 44980690 44980865 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene exon 44980690 44980865 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene CDS 44983521 44983604 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene exon 44983521 44983604 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene CDS 44983712 44983817 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene exon 44983712 44983817 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene CDS 44984441 44984513 0.000000 - 1 gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene exon 44984441 44984513 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene CDS 44985213 44985276 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene exon 44985213 44985276 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene CDS 44986262 44986412 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene exon 44986262 44986412 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene CDS 44987026 44987145 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene exon 44987026 44987402 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene exon 44993010 44993064 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173073:uc002xrp.3"; -chr20 hg19_knownGene CDS 44979036 44979163 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene exon 44978177 44979163 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene CDS 44979400 44979529 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene exon 44979400 44979529 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene CDS 44980690 44980865 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene exon 44980690 44980865 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene CDS 44983521 44983604 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene exon 44983521 44983604 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene CDS 44983712 44983880 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene exon 44983712 44983880 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene CDS 44984441 44984513 0.000000 - 1 gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene exon 44984441 44984513 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene CDS 44985213 44985276 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene exon 44985213 44985276 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene CDS 44986262 44986412 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene exon 44986262 44986412 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene CDS 44987026 44987145 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene exon 44987026 44987402 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene exon 44993010 44993064 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_015945:uc002xrq.3"; -chr20 hg19_knownGene CDS 44979036 44979163 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene exon 44978177 44979163 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene CDS 44979400 44979529 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene exon 44979400 44979529 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene CDS 44980690 44980865 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene exon 44980690 44980865 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene CDS 44983521 44983604 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene exon 44983521 44983604 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene CDS 44983712 44983880 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene exon 44983712 44983880 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene CDS 44984441 44984513 0.000000 - 1 gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene exon 44984441 44984513 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene CDS 44985213 44985276 0.000000 - 2 gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene exon 44985213 44985276 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene CDS 44986262 44986412 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene exon 44986262 44986412 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene CDS 44987026 44987145 0.000000 - 0 gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene exon 44987026 44987597 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene exon 44993010 44993064 0.000000 - . gene_id "SLC35C2"; transcript_id "NM_173179:uc002xrr.3"; -chr20 hg19_knownGene CDS 44979036 44979163 0.000000 - 2 gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene exon 44978177 44979163 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene CDS 44979400 44979529 0.000000 - 0 gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene exon 44979400 44979529 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene CDS 44980690 44980865 0.000000 - 2 gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene exon 44980690 44980865 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene CDS 44983521 44983604 0.000000 - 2 gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene exon 44983521 44983604 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene CDS 44983712 44983817 0.000000 - 0 gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene exon 44983712 44983817 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene CDS 44984441 44984506 0.000000 - 0 gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene exon 44984441 44984513 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene exon 44985213 44985276 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene exon 44986262 44986341 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene exon 44987026 44987402 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene exon 44993010 44993064 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300798:uc010zxn.2"; -chr20 hg19_knownGene CDS 44979036 44979163 0.000000 - 2 gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene exon 44978177 44979163 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene CDS 44979400 44979529 0.000000 - 0 gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene exon 44979400 44979529 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene CDS 44980690 44980865 0.000000 - 2 gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene exon 44980690 44980865 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene CDS 44983521 44983604 0.000000 - 2 gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene exon 44983521 44983604 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene CDS 44983712 44983880 0.000000 - 0 gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene exon 44983712 44983880 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene CDS 44984441 44984506 0.000000 - 0 gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene exon 44984441 44984513 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene exon 44985213 44985276 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene exon 44986262 44986341 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene exon 44987026 44987402 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene exon 44993010 44993064 0.000000 - . gene_id "SLC35C2"; transcript_id "AK300207:uc010zxo.2"; -chr20 hg19_knownGene CDS 44979036 44979163 0.000000 - 2 gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44978177 44979163 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene CDS 44979400 44979529 0.000000 - 0 gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44979400 44979529 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene CDS 44980690 44980865 0.000000 - 2 gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44980690 44980865 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene CDS 44983521 44983604 0.000000 - 2 gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44983521 44983604 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene CDS 44983712 44983880 0.000000 - 0 gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44983712 44983880 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene CDS 44984441 44984513 0.000000 - 1 gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44984441 44984513 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene CDS 44985213 44985276 0.000000 - 2 gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44985213 44985276 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene CDS 44986262 44986412 0.000000 - 0 gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44986262 44986412 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene CDS 44987026 44987197 0.000000 - 1 gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44987026 44987197 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene CDS 44987330 44987364 0.000000 - 0 gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44987330 44987402 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene exon 44993010 44993064 0.000000 - . gene_id "SLC35C2"; transcript_id "AK301022:uc010zxp.2"; -chr20 hg19_knownGene CDS 44998818 44999164 0.000000 - 2 gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene exon 44998605 44999164 0.000000 - . gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene CDS 44999991 45000098 0.000000 - 2 gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene exon 44999991 45000098 0.000000 - . gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene CDS 45000218 45000330 0.000000 - 1 gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene exon 45000218 45000330 0.000000 - . gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene CDS 45000445 45000608 0.000000 - 0 gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene exon 45000445 45000608 0.000000 - . gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene CDS 45002038 45002174 0.000000 - 2 gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene exon 45002038 45002174 0.000000 - . gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene CDS 45002971 45003079 0.000000 - 0 gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene exon 45002971 45003079 0.000000 - . gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene CDS 45003175 45003279 0.000000 - 0 gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene exon 45003175 45003279 0.000000 - . gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene CDS 45003875 45004009 0.000000 - 0 gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene exon 45003875 45004009 0.000000 - . gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene CDS 45004307 45004393 0.000000 - 0 gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene exon 45004307 45004429 0.000000 - . gene_id "ELMO2"; transcript_id "AL713765:uc002xrv.1"; -chr20 hg19_knownGene CDS 44996002 44996199 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 44994690 44996199 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 44997530 44997607 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 44997530 44997607 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 44999082 44999164 0.000000 - 2 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 44999082 44999164 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 44999991 45000098 0.000000 - 2 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 44999991 45000098 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 45000218 45000330 0.000000 - 1 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 45000218 45000330 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 45000445 45000608 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 45000445 45000608 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 45002038 45002174 0.000000 - 2 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 45002038 45002174 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 45002971 45003079 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 45002971 45003079 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 45003175 45003279 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 45003175 45003279 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 45003875 45004009 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 45003875 45004009 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 45004307 45004429 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 45004307 45004429 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 45005343 45005345 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene exon 45005343 45005578 0.000000 - . gene_id "ELMO2"; transcript_id "AK302710:uc010zxq.1"; -chr20 hg19_knownGene CDS 44996002 44996199 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 44994690 44996199 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 44997530 44997607 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 44997530 44997607 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 44999082 44999164 0.000000 - 2 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 44999082 44999164 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 44999991 45000098 0.000000 - 2 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 44999991 45000098 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 45000218 45000330 0.000000 - 1 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 45000218 45000330 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 45000445 45000608 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 45000445 45000608 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 45002038 45002174 0.000000 - 2 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 45002038 45002174 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 45002971 45003079 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 45002971 45003079 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 45003175 45003279 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 45003175 45003279 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 45003875 45004009 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 45003875 45004009 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 45004307 45004429 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 45004307 45004429 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 45008892 45008939 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene exon 45008892 45011132 0.000000 - . gene_id "ELMO2"; transcript_id "BC036483:uc002xrs.1"; -chr20 hg19_knownGene CDS 45002017 45002174 0.000000 - 2 gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene exon 45001474 45002174 0.000000 - . gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene CDS 45002971 45003079 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene exon 45002971 45003079 0.000000 - . gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene CDS 45003175 45003279 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene exon 45003175 45003279 0.000000 - . gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene CDS 45003875 45004009 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene exon 45003875 45004009 0.000000 - . gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene CDS 45004307 45004429 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene exon 45004307 45004429 0.000000 - . gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene CDS 45008892 45008942 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene exon 45008892 45008942 0.000000 - . gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene CDS 45012055 45012133 0.000000 - 1 gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene exon 45012055 45012133 0.000000 - . gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene CDS 45014763 45014890 0.000000 - 0 gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene exon 45014763 45014914 0.000000 - . gene_id "ELMO2"; transcript_id "BC014207:uc002xrw.3"; -chr20 hg19_knownGene CDS 44996002 44996199 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 44994690 44996199 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 44997530 44997607 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 44997530 44997607 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 44999082 44999164 0.000000 - 2 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 44999082 44999164 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 44999991 45000098 0.000000 - 2 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 44999991 45000098 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45000218 45000330 0.000000 - 1 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45000218 45000330 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45000445 45000608 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45000445 45000608 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45002038 45002174 0.000000 - 2 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45002038 45002174 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45002971 45003079 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45002971 45003079 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45003175 45003279 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45003175 45003279 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45003875 45004009 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45003875 45004009 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45004307 45004429 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45004307 45004429 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45008892 45008942 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45008892 45008942 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45012055 45012133 0.000000 - 1 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45012055 45012133 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45014763 45014914 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45014763 45014914 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45015977 45016076 0.000000 - 1 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45015977 45016076 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45017678 45017859 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45017678 45017859 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45021732 45021782 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45021732 45021782 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45022168 45022240 0.000000 - 1 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45022168 45022240 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45022688 45022728 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45022688 45022728 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 45023044 45023121 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45023044 45023171 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45027336 45027410 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene exon 45035187 45035271 0.000000 - . gene_id "ELMO2"; transcript_id "NM_133171:uc002xrt.1"; -chr20 hg19_knownGene CDS 44996002 44996199 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 44994690 44996199 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 44997530 44997607 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 44997530 44997607 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 44999082 44999164 0.000000 - 2 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 44999082 44999164 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 44999991 45000098 0.000000 - 2 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 44999991 45000098 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45000218 45000330 0.000000 - 1 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45000218 45000330 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45000445 45000608 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45000445 45000608 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45002038 45002174 0.000000 - 2 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45002038 45002174 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45002971 45003079 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45002971 45003079 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45003175 45003279 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45003175 45003279 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45003875 45004009 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45003875 45004009 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45004307 45004429 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45004307 45004429 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45008892 45008942 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45008892 45008942 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45012055 45012133 0.000000 - 1 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45012055 45012133 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45014763 45014914 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45014763 45014914 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45015977 45016076 0.000000 - 1 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45015977 45016076 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45017678 45017859 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45017678 45017859 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45021732 45021782 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45021732 45021782 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45022168 45022240 0.000000 - 1 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45022168 45022240 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45022688 45022728 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45022688 45022728 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 45023044 45023121 0.000000 - 0 gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45023044 45023142 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene exon 45035187 45035271 0.000000 - . gene_id "ELMO2"; transcript_id "NM_182764:uc002xru.1"; -chr20 hg19_knownGene CDS 44996002 44996199 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 44994690 44996199 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 44997530 44997607 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 44997530 44997607 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 44999082 44999164 0.000000 - 2 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 44999082 44999164 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 44999991 45000098 0.000000 - 2 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 44999991 45000098 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45000218 45000330 0.000000 - 1 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45000218 45000330 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45000445 45000608 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45000445 45000608 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45002038 45002174 0.000000 - 2 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45002038 45002174 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45002971 45003079 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45002971 45003079 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45003175 45003279 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45003175 45003279 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45003875 45004009 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45003875 45004009 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45004307 45004429 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45004307 45004429 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45008892 45008942 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45008892 45008942 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45010845 45010880 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45010845 45010880 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45012055 45012133 0.000000 - 1 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45012055 45012133 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45014763 45014914 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45014763 45014914 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45015977 45016076 0.000000 - 1 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45015977 45016076 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45017678 45017859 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45017678 45017859 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45021732 45021782 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45021732 45021782 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45022168 45022240 0.000000 - 1 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45022168 45022240 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45022688 45022728 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45022688 45022728 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45023044 45023121 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45023044 45023171 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45027336 45027410 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene exon 45035187 45035271 0.000000 - . gene_id "ELMO2"; transcript_id "AK299318:uc010zxr.1"; -chr20 hg19_knownGene CDS 45003878 45004009 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45003875 45004009 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 45004307 45004429 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45004307 45004429 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 45008892 45008942 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45008892 45008942 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 45012055 45012133 0.000000 - 1 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45012055 45012133 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 45014763 45014914 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45014763 45014914 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 45015977 45016076 0.000000 - 1 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45015977 45016076 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 45017678 45017859 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45017678 45017859 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 45021732 45021782 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45021732 45021782 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 45022168 45022240 0.000000 - 1 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45022168 45022240 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 45022688 45022728 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45022688 45022728 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 45023044 45023121 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45023044 45023142 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45027336 45027410 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene exon 45035187 45035271 0.000000 - . gene_id "ELMO2"; transcript_id "AK057032:uc002xrx.1"; -chr20 hg19_knownGene CDS 44996002 44996199 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 44994690 44996199 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 44997530 44997607 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 44997530 44997607 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 44999082 44999164 0.000000 - 2 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 44999082 44999164 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 44999991 45000098 0.000000 - 2 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 44999991 45000098 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 45000218 45000330 0.000000 - 1 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45000218 45000330 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 45000445 45000608 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45000445 45000608 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 45002038 45002174 0.000000 - 2 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45002038 45002174 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 45002971 45003079 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45002971 45003079 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 45003175 45003279 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45003175 45003279 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 45003875 45004009 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45003875 45004009 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 45004307 45004429 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45004307 45004429 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 45008892 45008942 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45008892 45008942 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 45012055 45012133 0.000000 - 1 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45012055 45012133 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene CDS 45014763 45014890 0.000000 - 0 gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45014763 45014914 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45017678 45017859 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45021732 45021782 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45022168 45022240 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45022688 45022728 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45023044 45023142 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45061533 45061704 0.000000 - . gene_id "ELMO2"; transcript_id "AK293861:uc010zxs.1"; -chr20 hg19_knownGene exon 45085131 45086282 0.000000 - . gene_id "BC100777"; transcript_id "BC100777:uc021weo.1"; -chr20 hg19_knownGene exon 45092299 45093931 0.000000 - . gene_id "MKRN7P"; transcript_id "NR_026640:uc010zxt.2"; -chr20 hg19_knownGene CDS 45129938 45131736 0.000000 - 2 gene_id "ZNF334"; transcript_id "AL833936:uc002xsa.3"; -chr20 hg19_knownGene exon 45129707 45131736 0.000000 - . gene_id "ZNF334"; transcript_id "AL833936:uc002xsa.3"; -chr20 hg19_knownGene CDS 45132853 45132998 0.000000 - 1 gene_id "ZNF334"; transcript_id "AL833936:uc002xsa.3"; -chr20 hg19_knownGene exon 45132853 45132998 0.000000 - . gene_id "ZNF334"; transcript_id "AL833936:uc002xsa.3"; -chr20 hg19_knownGene CDS 45133253 45133379 0.000000 - 2 gene_id "ZNF334"; transcript_id "AL833936:uc002xsa.3"; -chr20 hg19_knownGene exon 45133253 45133379 0.000000 - . gene_id "ZNF334"; transcript_id "AL833936:uc002xsa.3"; -chr20 hg19_knownGene CDS 45134946 45134982 0.000000 - 0 gene_id "ZNF334"; transcript_id "AL833936:uc002xsa.3"; -chr20 hg19_knownGene exon 45134946 45135444 0.000000 - . gene_id "ZNF334"; transcript_id "AL833936:uc002xsa.3"; -chr20 hg19_knownGene CDS 45129938 45131736 0.000000 - 2 gene_id "ZNF334"; transcript_id "AK057717:uc002xsb.3"; -chr20 hg19_knownGene exon 45129707 45131736 0.000000 - . gene_id "ZNF334"; transcript_id "AK057717:uc002xsb.3"; -chr20 hg19_knownGene CDS 45132853 45132945 0.000000 - 2 gene_id "ZNF334"; transcript_id "AK057717:uc002xsb.3"; -chr20 hg19_knownGene exon 45132853 45132945 0.000000 - . gene_id "ZNF334"; transcript_id "AK057717:uc002xsb.3"; -chr20 hg19_knownGene CDS 45133253 45133286 0.000000 - 0 gene_id "ZNF334"; transcript_id "AK057717:uc002xsb.3"; -chr20 hg19_knownGene exon 45133253 45133379 0.000000 - . gene_id "ZNF334"; transcript_id "AK057717:uc002xsb.3"; -chr20 hg19_knownGene exon 45134946 45135444 0.000000 - . gene_id "ZNF334"; transcript_id "AK057717:uc002xsb.3"; -chr20 hg19_knownGene CDS 45129938 45131736 0.000000 - 2 gene_id "ZNF334"; transcript_id "NM_199441:uc002xsd.3"; -chr20 hg19_knownGene exon 45129707 45131736 0.000000 - . gene_id "ZNF334"; transcript_id "NM_199441:uc002xsd.3"; -chr20 hg19_knownGene CDS 45132853 45132945 0.000000 - 2 gene_id "ZNF334"; transcript_id "NM_199441:uc002xsd.3"; -chr20 hg19_knownGene exon 45132853 45132945 0.000000 - . gene_id "ZNF334"; transcript_id "NM_199441:uc002xsd.3"; -chr20 hg19_knownGene CDS 45133253 45133286 0.000000 - 0 gene_id "ZNF334"; transcript_id "NM_199441:uc002xsd.3"; -chr20 hg19_knownGene exon 45133253 45133379 0.000000 - . gene_id "ZNF334"; transcript_id "NM_199441:uc002xsd.3"; -chr20 hg19_knownGene exon 45134946 45135097 0.000000 - . gene_id "ZNF334"; transcript_id "NM_199441:uc002xsd.3"; -chr20 hg19_knownGene exon 45140721 45140779 0.000000 - . gene_id "ZNF334"; transcript_id "NM_199441:uc002xsd.3"; -chr20 hg19_knownGene exon 45141179 45142194 0.000000 - . gene_id "ZNF334"; transcript_id "NM_199441:uc002xsd.3"; -chr20 hg19_knownGene CDS 45129938 45131736 0.000000 - 2 gene_id "ZNF334"; transcript_id "NM_018102:uc002xsc.3"; -chr20 hg19_knownGene exon 45129707 45131736 0.000000 - . gene_id "ZNF334"; transcript_id "NM_018102:uc002xsc.3"; -chr20 hg19_knownGene CDS 45132853 45132945 0.000000 - 2 gene_id "ZNF334"; transcript_id "NM_018102:uc002xsc.3"; -chr20 hg19_knownGene exon 45132853 45132945 0.000000 - . gene_id "ZNF334"; transcript_id "NM_018102:uc002xsc.3"; -chr20 hg19_knownGene CDS 45133253 45133379 0.000000 - 0 gene_id "ZNF334"; transcript_id "NM_018102:uc002xsc.3"; -chr20 hg19_knownGene exon 45133253 45133379 0.000000 - . gene_id "ZNF334"; transcript_id "NM_018102:uc002xsc.3"; -chr20 hg19_knownGene CDS 45140721 45140741 0.000000 - 0 gene_id "ZNF334"; transcript_id "NM_018102:uc002xsc.3"; -chr20 hg19_knownGene exon 45140721 45140779 0.000000 - . gene_id "ZNF334"; transcript_id "NM_018102:uc002xsc.3"; -chr20 hg19_knownGene exon 45142049 45142194 0.000000 - . gene_id "ZNF334"; transcript_id "NM_018102:uc002xsc.3"; -chr20 hg19_knownGene CDS 45129938 45131736 0.000000 - 2 gene_id "ZNF334"; transcript_id "AK095611:uc010ghl.3"; -chr20 hg19_knownGene exon 45129707 45131736 0.000000 - . gene_id "ZNF334"; transcript_id "AK095611:uc010ghl.3"; -chr20 hg19_knownGene CDS 45132853 45132945 0.000000 - 2 gene_id "ZNF334"; transcript_id "AK095611:uc010ghl.3"; -chr20 hg19_knownGene exon 45132853 45132945 0.000000 - . gene_id "ZNF334"; transcript_id "AK095611:uc010ghl.3"; -chr20 hg19_knownGene CDS 45133253 45133379 0.000000 - 0 gene_id "ZNF334"; transcript_id "AK095611:uc010ghl.3"; -chr20 hg19_knownGene exon 45133253 45133379 0.000000 - . gene_id "ZNF334"; transcript_id "AK095611:uc010ghl.3"; -chr20 hg19_knownGene CDS 45138244 45138261 0.000000 - 0 gene_id "ZNF334"; transcript_id "AK095611:uc010ghl.3"; -chr20 hg19_knownGene exon 45138244 45138390 0.000000 - . gene_id "ZNF334"; transcript_id "AK095611:uc010ghl.3"; -chr20 hg19_knownGene exon 45140721 45140779 0.000000 - . gene_id "ZNF334"; transcript_id "AK095611:uc010ghl.3"; -chr20 hg19_knownGene exon 45142136 45142194 0.000000 - . gene_id "ZNF334"; transcript_id "AK095611:uc010ghl.3"; -chr20 hg19_knownGene CDS 45169916 45170566 0.000000 - 0 gene_id "C20orf123"; transcript_id "NM_080721:uc010zxu.1"; -chr20 hg19_knownGene exon 45169585 45170566 0.000000 - . gene_id "C20orf123"; transcript_id "NM_080721:uc010zxu.1"; -chr20 hg19_knownGene CDS 45173966 45174968 0.000000 - 1 gene_id "C20orf123"; transcript_id "NM_080721:uc010zxu.1"; -chr20 hg19_knownGene exon 45173966 45174968 0.000000 - . gene_id "C20orf123"; transcript_id "NM_080721:uc010zxu.1"; -chr20 hg19_knownGene CDS 45179156 45179199 0.000000 - 0 gene_id "C20orf123"; transcript_id "NM_080721:uc010zxu.1"; -chr20 hg19_knownGene exon 45179156 45179213 0.000000 - . gene_id "C20orf123"; transcript_id "NM_080721:uc010zxu.1"; -chr20 hg19_knownGene CDS 45188664 45188837 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK123351:uc002xse.2"; -chr20 hg19_knownGene exon 45186462 45188837 0.000000 - . gene_id "SLC13A3"; transcript_id "AK123351:uc002xse.2"; -chr20 hg19_knownGene CDS 45192053 45192157 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK123351:uc002xse.2"; -chr20 hg19_knownGene exon 45192053 45192254 0.000000 - . gene_id "SLC13A3"; transcript_id "AK123351:uc002xse.2"; -chr20 hg19_knownGene CDS 45188664 45188837 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK310767:uc010ghm.2"; -chr20 hg19_knownGene exon 45186462 45188837 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310767:uc010ghm.2"; -chr20 hg19_knownGene CDS 45192053 45192190 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK310767:uc010ghm.2"; -chr20 hg19_knownGene exon 45192053 45192190 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310767:uc010ghm.2"; -chr20 hg19_knownGene CDS 45194868 45195122 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK310767:uc010ghm.2"; -chr20 hg19_knownGene exon 45194868 45195314 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310767:uc010ghm.2"; -chr20 hg19_knownGene CDS 45188664 45188837 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK303709:uc010zxv.2"; -chr20 hg19_knownGene exon 45186462 45188837 0.000000 - . gene_id "SLC13A3"; transcript_id "AK303709:uc010zxv.2"; -chr20 hg19_knownGene CDS 45192053 45192190 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK303709:uc010zxv.2"; -chr20 hg19_knownGene exon 45192053 45192190 0.000000 - . gene_id "SLC13A3"; transcript_id "AK303709:uc010zxv.2"; -chr20 hg19_knownGene CDS 45194868 45195029 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK303709:uc010zxv.2"; -chr20 hg19_knownGene exon 45194868 45195029 0.000000 - . gene_id "SLC13A3"; transcript_id "AK303709:uc010zxv.2"; -chr20 hg19_knownGene CDS 45212211 45212297 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK303709:uc010zxv.2"; -chr20 hg19_knownGene exon 45212211 45212308 0.000000 - . gene_id "SLC13A3"; transcript_id "AK303709:uc010zxv.2"; -chr20 hg19_knownGene CDS 45188664 45188837 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45186462 45188837 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45192053 45192190 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45192053 45192190 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45194868 45195029 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45194868 45195029 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45204212 45204324 0.000000 - 2 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45204212 45204324 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45212211 45212308 0.000000 - 1 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45212211 45212308 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45216698 45216802 0.000000 - 1 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45216698 45216802 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45217799 45217894 0.000000 - 1 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45217799 45217894 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45221043 45221168 0.000000 - 1 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45221043 45221168 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45224796 45224981 0.000000 - 1 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45224796 45224981 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45228610 45228676 0.000000 - 2 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45228610 45228676 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45239085 45239248 0.000000 - 1 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45239085 45239248 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45242099 45242382 0.000000 - 0 gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene exon 45242099 45242525 0.000000 - . gene_id "SLC13A3"; transcript_id "AK310960:uc010ghn.2"; -chr20 hg19_knownGene CDS 45188664 45188837 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45186462 45188837 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45192053 45192190 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45192053 45192190 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45194868 45195029 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45194868 45195029 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45204212 45204324 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45204212 45204324 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45212211 45212308 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45212211 45212308 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45216698 45216802 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45216698 45216802 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45217799 45217894 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45217799 45217894 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45221043 45221168 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45221043 45221168 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45224796 45224981 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45224796 45224981 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45228610 45228676 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45228610 45228676 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45239085 45239248 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45239085 45239248 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45242099 45242364 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45242099 45242364 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45279950 45280060 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene exon 45279950 45280100 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_022829:uc002xsf.2"; -chr20 hg19_knownGene CDS 45188664 45188837 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45186462 45188837 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45192053 45192190 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45192053 45192190 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45194868 45195029 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45194868 45195029 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45204212 45204324 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45204212 45204324 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45212211 45212308 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45212211 45212308 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45216698 45216802 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45216698 45216802 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45217799 45217894 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45217799 45217894 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45221043 45221168 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45221043 45221168 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45224796 45224981 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45224796 45224981 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45228610 45228676 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45228610 45228676 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45239085 45239248 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45239085 45239248 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45242099 45242181 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45242099 45242191 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene exon 45279950 45280100 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193342:uc010zxx.2"; -chr20 hg19_knownGene CDS 45188664 45188837 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45186462 45188837 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45192053 45192190 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45192053 45192190 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45194868 45195029 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45194868 45195029 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45204212 45204324 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45204212 45204324 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45212211 45212308 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45212211 45212308 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45216698 45216802 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45216698 45216802 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45217799 45217894 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45217799 45217894 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45221043 45221085 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45221043 45221085 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45224796 45224981 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45224796 45224981 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45239085 45239248 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45239085 45239248 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45242099 45242364 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45242099 45242364 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45279950 45280060 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene exon 45279950 45280100 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193339:uc010zxw.2"; -chr20 hg19_knownGene CDS 45237542 45237696 0.000000 - 2 gene_id "SLC13A3"; transcript_id "BC014931:uc002xsi.4"; -chr20 hg19_knownGene exon 45237349 45237696 0.000000 - . gene_id "SLC13A3"; transcript_id "BC014931:uc002xsi.4"; -chr20 hg19_knownGene CDS 45239085 45239248 0.000000 - 1 gene_id "SLC13A3"; transcript_id "BC014931:uc002xsi.4"; -chr20 hg19_knownGene exon 45239085 45239248 0.000000 - . gene_id "SLC13A3"; transcript_id "BC014931:uc002xsi.4"; -chr20 hg19_knownGene CDS 45242099 45242334 0.000000 - 0 gene_id "SLC13A3"; transcript_id "BC014931:uc002xsi.4"; -chr20 hg19_knownGene exon 45242099 45242364 0.000000 - . gene_id "SLC13A3"; transcript_id "BC014931:uc002xsi.4"; -chr20 hg19_knownGene exon 45298682 45298778 0.000000 - . gene_id "SLC13A3"; transcript_id "BC014931:uc002xsi.4"; -chr20 hg19_knownGene CDS 45188664 45188837 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45186462 45188837 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45192053 45192190 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45192053 45192190 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45194868 45195029 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45194868 45195029 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45204212 45204324 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45204212 45204324 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45212211 45212308 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45212211 45212308 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45216698 45216802 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45216698 45216802 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45217799 45217894 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45217799 45217894 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45221043 45221168 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45221043 45221168 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45224796 45224981 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45224796 45224981 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45228610 45228676 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45228610 45228676 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45239085 45239248 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45239085 45239248 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45242099 45242334 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45242099 45242364 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45298682 45298778 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene exon 45313035 45313124 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001011554:uc002xsg.2"; -chr20 hg19_knownGene CDS 45188664 45188837 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45186462 45188837 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45192053 45192190 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45192053 45192190 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45194868 45195029 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45194868 45195029 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45204212 45204324 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45204212 45204324 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45212211 45212308 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45212211 45212308 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45217799 45217894 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45217799 45217894 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45221043 45221168 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45221043 45221168 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45224796 45224981 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45224796 45224981 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45228610 45228676 0.000000 - 2 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45228610 45228676 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45239085 45239248 0.000000 - 1 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45239085 45239248 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45242099 45242334 0.000000 - 0 gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45242099 45242364 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45298682 45298778 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene exon 45313035 45313124 0.000000 - . gene_id "SLC13A3"; transcript_id "NM_001193340:uc010gho.2"; -chr20 hg19_knownGene CDS 45315796 45315870 0.000000 - 0 gene_id "TP53RK"; transcript_id "BC019621:uc002xsj.3"; -chr20 hg19_knownGene exon 45313004 45315870 0.000000 - . gene_id "TP53RK"; transcript_id "BC019621:uc002xsj.3"; -chr20 hg19_knownGene CDS 45317766 45318053 0.000000 - 0 gene_id "TP53RK"; transcript_id "BC019621:uc002xsj.3"; -chr20 hg19_knownGene exon 45317766 45318079 0.000000 - . gene_id "TP53RK"; transcript_id "BC019621:uc002xsj.3"; -chr20 hg19_knownGene CDS 45315395 45315870 0.000000 - 2 gene_id "TP53RK"; transcript_id "NM_033550:uc002xsk.3"; -chr20 hg19_knownGene exon 45313004 45315870 0.000000 - . gene_id "TP53RK"; transcript_id "NM_033550:uc002xsk.3"; -chr20 hg19_knownGene CDS 45317771 45318053 0.000000 - 0 gene_id "TP53RK"; transcript_id "NM_033550:uc002xsk.3"; -chr20 hg19_knownGene exon 45317771 45318276 0.000000 - . gene_id "TP53RK"; transcript_id "NM_033550:uc002xsk.3"; -chr20 hg19_knownGene CDS 45338376 45338379 0.000000 + 0 gene_id "SLC2A10"; transcript_id "NM_030777:uc002xsl.3"; -chr20 hg19_knownGene exon 45338279 45338379 0.000000 + . gene_id "SLC2A10"; transcript_id "NM_030777:uc002xsl.3"; -chr20 hg19_knownGene CDS 45353680 45354963 0.000000 + 2 gene_id "SLC2A10"; transcript_id "NM_030777:uc002xsl.3"; -chr20 hg19_knownGene exon 45353680 45354963 0.000000 + . gene_id "SLC2A10"; transcript_id "NM_030777:uc002xsl.3"; -chr20 hg19_knownGene CDS 45355503 45355625 0.000000 + 2 gene_id "SLC2A10"; transcript_id "NM_030777:uc002xsl.3"; -chr20 hg19_knownGene exon 45355503 45355625 0.000000 + . gene_id "SLC2A10"; transcript_id "NM_030777:uc002xsl.3"; -chr20 hg19_knownGene CDS 45357992 45358127 0.000000 + 2 gene_id "SLC2A10"; transcript_id "NM_030777:uc002xsl.3"; -chr20 hg19_knownGene exon 45357992 45358127 0.000000 + . gene_id "SLC2A10"; transcript_id "NM_030777:uc002xsl.3"; -chr20 hg19_knownGene CDS 45362395 45362470 0.000000 + 1 gene_id "SLC2A10"; transcript_id "NM_030777:uc002xsl.3"; -chr20 hg19_knownGene exon 45362395 45364985 0.000000 + . gene_id "SLC2A10"; transcript_id "NM_030777:uc002xsl.3"; -chr20 hg19_knownGene exon 45606874 45607275 0.000000 + . gene_id "EYA2"; transcript_id "AF387364:uc021wep.1"; -chr20 hg19_knownGene exon 45618640 45618758 0.000000 + . gene_id "EYA2"; transcript_id "AF387364:uc021wep.1"; -chr20 hg19_knownGene exon 45795609 45795700 0.000000 + . gene_id "MIR3616"; transcript_id "NR_037410:uc021weq.1"; -chr20 hg19_knownGene exon 45523263 45523626 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45618650 45618758 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45618640 45618758 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45630067 45630112 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45630067 45630112 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45633581 45633723 0.000000 + 1 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45633581 45633723 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45644820 45644936 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45644820 45644936 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45700824 45700891 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45700824 45700891 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45702797 45702974 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45702797 45702974 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45717878 45718020 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45717878 45718020 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45725724 45725807 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45725724 45725807 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45771698 45771787 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45771698 45771787 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45797787 45797845 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45797787 45797845 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45801355 45801515 0.000000 + 1 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45801355 45801515 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45808446 45808560 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45808446 45808560 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45809463 45809584 0.000000 + 1 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45809463 45809584 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45811939 45812039 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45811939 45812039 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene CDS 45816701 45816778 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45816701 45817492 0.000000 + . gene_id "EYA2"; transcript_id "NM_005244:uc002xsm.3"; -chr20 hg19_knownGene exon 45523263 45523626 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45618650 45618758 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45618640 45618758 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45630067 45630112 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45630067 45630112 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45633581 45633723 0.000000 + 1 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45633581 45633723 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45644820 45644936 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45644820 45644936 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45700824 45700891 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45700824 45700891 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45702797 45702974 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45702797 45702974 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45717878 45718020 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45717878 45718020 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45725724 45725807 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45725724 45725807 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45771698 45771787 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45771698 45771787 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45797787 45797845 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45797787 45797845 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45801355 45801515 0.000000 + 1 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45801355 45801515 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45811939 45812039 0.000000 + 2 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45811939 45812039 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45816701 45816778 0.000000 + 0 gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene exon 45816701 45817492 0.000000 + . gene_id "EYA2"; transcript_id "NM_172110:uc010ghp.3"; -chr20 hg19_knownGene CDS 45618650 45618758 0.000000 + 0 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45618640 45618758 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45630067 45630112 0.000000 + 2 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45630067 45630112 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45633581 45633723 0.000000 + 1 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45633581 45633723 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45644820 45644936 0.000000 + 2 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45644820 45644936 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45700824 45700891 0.000000 + 2 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45700824 45700891 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45702797 45702974 0.000000 + 0 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45702797 45702974 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45717878 45718020 0.000000 + 2 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45717878 45718020 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45725724 45725807 0.000000 + 0 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45725724 45725807 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45797787 45797845 0.000000 + 0 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45797787 45797845 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45801355 45801515 0.000000 + 1 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45801355 45801515 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45808446 45808560 0.000000 + 2 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45808446 45808560 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45809463 45809584 0.000000 + 1 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45809463 45809584 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45811939 45812039 0.000000 + 2 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45811939 45812039 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45816701 45816778 0.000000 + 0 gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene exon 45816701 45817492 0.000000 + . gene_id "EYA2"; transcript_id "AY705349:uc002xsq.3"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene CDS 45865070 45865162 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene exon 45867640 45867893 0.000000 - . gene_id "ZMYND8"; transcript_id "AK001175:uc002xsr.1"; -chr20 hg19_knownGene CDS 45839306 45839542 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45905058 45905508 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "AK074262:uc010ghq.1"; -chr20 hg19_knownGene CDS 45867287 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45866073 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45927473 45927616 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45927473 45927616 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45947695 45947776 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene exon 45947695 45947805 0.000000 - . gene_id "ZMYND8"; transcript_id "AL137703:uc002xtg.3"; -chr20 hg19_knownGene CDS 45947365 45947934 0.000000 + 0 gene_id "LOC100131496"; transcript_id "NR_024594:uc010zyb.2"; -chr20 hg19_knownGene exon 45947246 45949498 0.000000 + . gene_id "LOC100131496"; transcript_id "NR_024594:uc010zyb.2"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45927473 45927616 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45927473 45927616 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45976600 45976624 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368678:uc010ghr.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45927473 45927616 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45927473 45927616 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45976600 45976624 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368677:uc002xst.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45927473 45927691 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45927473 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45976600 45976624 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ082999:uc002xsu.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45867502 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45867502 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45927473 45927616 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45927473 45927616 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45976600 45976624 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368680:uc002xsv.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45914440 45914570 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45927473 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368675:uc002xsw.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45914440 45914570 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45927473 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368676:uc002xsx.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45927473 45927616 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45927473 45927616 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45976600 45976624 0.000000 - 0 gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "DQ368672:uc002xsy.1"; -chr20 hg19_knownGene CDS 45867287 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45866073 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45927473 45927616 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45927473 45927616 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45976600 45976670 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45976761 45976771 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene exon 45976761 45976859 0.000000 - . gene_id "ZMYND8"; transcript_id "AK309228:uc010ghs.2"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45927473 45927616 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45927473 45927616 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene CDS 45976600 45976624 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45981226 45981268 0.000000 - . gene_id "ZMYND8"; transcript_id "AK122966:uc002xsz.1"; -chr20 hg19_knownGene exon 45979228 45982111 0.000000 - . gene_id "AK098067"; transcript_id "AK098067:uc002xti.1"; -chr20 hg19_knownGene exon 45981305 45981484 0.000000 + . gene_id "BC047609"; transcript_id "BC047609:uc002xtj.3"; -chr20 hg19_knownGene exon 45981749 45983376 0.000000 + . gene_id "BC047609"; transcript_id "BC047609:uc002xtj.3"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45867502 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45867502 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45927473 45927691 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45927473 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45976600 45976624 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene exon 45984194 45984401 0.000000 - . gene_id "ZMYND8"; transcript_id "AB032951:uc002xta.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45867502 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45867502 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45927473 45927691 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45927473 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45976600 45976670 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45985124 45985158 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene exon 45985124 45985240 0.000000 - . gene_id "ZMYND8"; transcript_id "AK295747:uc010zxy.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45927473 45927691 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45927473 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45976600 45976670 0.000000 - 1 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45985401 45985414 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene exon 45985401 45985474 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183047:uc002xtb.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45867502 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45867502 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45927473 45927616 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45927473 45927616 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45976600 45976670 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45978605 45978633 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45978605 45978732 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45984194 45984264 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene exon 45985401 45985474 0.000000 - . gene_id "ZMYND8"; transcript_id "AK294511:uc002xss.2"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45927473 45927616 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45927473 45927616 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45976600 45976670 0.000000 - 1 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45985401 45985414 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene exon 45985401 45985474 0.000000 - . gene_id "ZMYND8"; transcript_id "BC144289:uc010zxz.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45927473 45927691 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45927473 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45976600 45976670 0.000000 - 1 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45985401 45985414 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene exon 45985401 45985474 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_012408:uc002xtc.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45927473 45927616 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45927473 45927616 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45976600 45976670 0.000000 - 1 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45985401 45985414 0.000000 - 0 gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene exon 45985401 45985474 0.000000 - . gene_id "ZMYND8"; transcript_id "NM_183048:uc002xtd.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45867640 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45867640 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45927473 45927691 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45927473 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45976600 45976624 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45984194 45984264 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene exon 45985401 45985474 0.000000 - . gene_id "ZMYND8"; transcript_id "BX641005:uc002xte.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45867502 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45867502 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45927473 45927691 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45927473 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45976600 45976624 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45984194 45984264 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene exon 45985401 45985474 0.000000 - . gene_id "ZMYND8"; transcript_id "AK299899:uc010zya.1"; -chr20 hg19_knownGene CDS 45839409 45839542 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45838381 45839542 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45841287 45841370 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45841287 45841370 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45848909 45848975 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45848909 45848975 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45849965 45850125 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45849965 45850125 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45852970 45853209 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45852970 45853209 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45855946 45856024 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45855946 45856024 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45858472 45858552 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45858472 45858552 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45865070 45865260 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45865070 45865260 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45867502 45867882 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45867502 45867882 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45874752 45875261 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45874752 45875261 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45878031 45878183 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45878031 45878183 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45891032 45891172 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45891032 45891172 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45905058 45905539 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45905058 45905539 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45910846 45910961 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45910846 45910961 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45912315 45912392 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45912315 45912392 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45915973 45916028 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45915973 45916028 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45918931 45919018 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45918931 45919018 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45920540 45920632 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45920540 45920632 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45923410 45923523 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45923410 45923523 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45927473 45927691 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45927473 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45976600 45976670 0.000000 - 1 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45985401 45985414 0.000000 - 0 gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene exon 45985401 45985474 0.000000 - . gene_id "ZMYND8"; transcript_id "AK225857:uc002xtf.1"; -chr20 hg19_knownGene CDS 45927464 45927691 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC092432:uc002xth.3"; -chr20 hg19_knownGene exon 45926888 45927691 0.000000 - . gene_id "ZMYND8"; transcript_id "BC092432:uc002xth.3"; -chr20 hg19_knownGene CDS 45938800 45938948 0.000000 - 2 gene_id "ZMYND8"; transcript_id "BC092432:uc002xth.3"; -chr20 hg19_knownGene exon 45938800 45938948 0.000000 - . gene_id "ZMYND8"; transcript_id "BC092432:uc002xth.3"; -chr20 hg19_knownGene CDS 45976600 45976670 0.000000 - 1 gene_id "ZMYND8"; transcript_id "BC092432:uc002xth.3"; -chr20 hg19_knownGene exon 45976600 45976670 0.000000 - . gene_id "ZMYND8"; transcript_id "BC092432:uc002xth.3"; -chr20 hg19_knownGene CDS 45985401 45985414 0.000000 - 0 gene_id "ZMYND8"; transcript_id "BC092432:uc002xth.3"; -chr20 hg19_knownGene exon 45985401 45985474 0.000000 - . gene_id "ZMYND8"; transcript_id "BC092432:uc002xth.3"; -chr20 hg19_knownGene exon 46130675 46133202 0.000000 + . gene_id "BC036778"; transcript_id "BC036778:uc010ghu.1"; -chr20 hg19_knownGene exon 46130601 46130763 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46211927 46212005 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46250992 46251074 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46250973 46251074 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46252655 46252827 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46252655 46252827 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46254125 46254225 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46254125 46254225 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46255746 46255920 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46255746 46255920 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46256305 46256493 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46256305 46256493 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46256666 46256767 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46256666 46256767 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46262240 46262380 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46262240 46262380 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46262792 46262939 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46262792 46262939 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46264066 46264457 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46264066 46264457 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46264635 46265506 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46264635 46265506 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46266392 46266527 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46266392 46266527 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46267752 46267946 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46267752 46267946 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46268321 46268566 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46268321 46268566 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46268669 46268795 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46268669 46268795 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46270957 46271128 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46270957 46271128 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46275817 46276110 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46275817 46276110 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46277749 46277853 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46277749 46277853 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46279726 46280020 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46279726 46280020 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46281150 46281324 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46281150 46281324 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46281675 46281816 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46281675 46281816 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene CDS 46282150 46282158 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46282150 46285621 0.000000 + . gene_id "NCOA3"; transcript_id "NM_181659:uc002xtk.3"; -chr20 hg19_knownGene exon 46130601 46130763 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46211927 46212005 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46250992 46251074 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46250973 46251074 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46252655 46252827 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46252655 46252827 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46254125 46254225 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46254125 46254225 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46255746 46255920 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46255746 46255920 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46256305 46256493 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46256305 46256493 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46256666 46256767 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46256666 46256767 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46262240 46262380 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46262240 46262380 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46262792 46262939 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46262792 46262939 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46264066 46264457 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46264066 46264457 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46264635 46265506 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46264635 46265506 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46266392 46266527 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46266392 46266527 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46267752 46267946 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46267752 46267946 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46268321 46268566 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46268321 46268566 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46268669 46268795 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46268669 46268795 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46270957 46271128 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46270957 46271128 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46275817 46276110 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46275817 46276110 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46277749 46277841 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46277749 46277841 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46279726 46280020 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46279726 46280020 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46281150 46281324 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46281150 46281324 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46281675 46281816 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46281675 46281816 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene CDS 46282150 46282158 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46282150 46285621 0.000000 + . gene_id "NCOA3"; transcript_id "NM_006534:uc002xtl.3"; -chr20 hg19_knownGene exon 46130601 46130763 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46211927 46212005 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46250992 46251074 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46250973 46251074 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46252655 46252827 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46252655 46252827 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46254125 46254225 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46254125 46254225 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46255746 46255920 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46255746 46255920 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46256305 46256493 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46256305 46256493 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46256666 46256767 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46256666 46256767 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46262240 46262380 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46262240 46262380 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46262792 46262939 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46262792 46262939 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46264066 46264457 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46264066 46264457 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46264635 46265506 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46264635 46265506 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46266392 46266527 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46266392 46266527 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46267752 46267946 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46267752 46267946 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46268321 46268566 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46268321 46268566 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46268669 46268795 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46268669 46268795 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46270957 46271128 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46270957 46271128 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46275817 46276110 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46275817 46276110 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46277749 46277853 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46277749 46277853 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46279729 46280020 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46279729 46280020 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46281150 46281324 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46281150 46281324 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46281675 46281816 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46281675 46281816 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene CDS 46282150 46282158 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46282150 46285621 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174087:uc002xtn.3"; -chr20 hg19_knownGene exon 46130601 46130763 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46211927 46212005 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46250992 46251074 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46250973 46251074 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46252655 46252827 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46252655 46252827 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46254125 46254225 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46254125 46254225 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46255746 46255920 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46255746 46255920 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46256305 46256493 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46256305 46256493 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46256666 46256767 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46256666 46256767 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46262240 46262380 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46262240 46262380 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46262762 46262939 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46262762 46262939 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46264066 46264457 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46264066 46264457 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46264635 46265506 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46264635 46265506 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46266392 46266527 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46266392 46266527 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46267752 46267946 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46267752 46267946 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46268366 46268566 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46268366 46268566 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46268669 46268795 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46268669 46268795 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46270957 46271128 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46270957 46271128 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46275817 46276110 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46275817 46276110 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46277749 46277841 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46277749 46277841 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46279726 46280020 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46279726 46280020 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46281150 46281324 0.000000 + 2 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46281150 46281324 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46281675 46281816 0.000000 + 1 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46281675 46281816 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene CDS 46282150 46282158 0.000000 + 0 gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46282150 46285621 0.000000 + . gene_id "NCOA3"; transcript_id "NM_001174088:uc010ght.2"; -chr20 hg19_knownGene exon 46130601 46130763 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46211927 46212005 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46250992 46251074 0.000000 + 0 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46250973 46251074 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46252655 46252827 0.000000 + 1 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46252655 46252827 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46254125 46254225 0.000000 + 2 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46254125 46254225 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46255746 46255920 0.000000 + 0 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46255746 46255920 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46256305 46256493 0.000000 + 2 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46256305 46256493 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46256666 46256767 0.000000 + 2 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46256666 46256767 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46262240 46262380 0.000000 + 2 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46262240 46262380 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46262792 46262939 0.000000 + 2 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46262792 46262939 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46264066 46264457 0.000000 + 1 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46264066 46264457 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46264635 46265506 0.000000 + 2 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46264635 46265506 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46266392 46266527 0.000000 + 0 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46266392 46266527 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46267752 46267946 0.000000 + 2 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46267752 46267946 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46268321 46268566 0.000000 + 2 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46268321 46268566 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46268669 46268795 0.000000 + 2 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46268669 46268795 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46270957 46271128 0.000000 + 1 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46270957 46271128 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46275817 46276110 0.000000 + 0 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46275817 46276110 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46277749 46277841 0.000000 + 0 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46277749 46277841 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46279729 46280020 0.000000 + 0 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46279729 46280020 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46281150 46281324 0.000000 + 2 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46281150 46281324 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46281675 46281816 0.000000 + 1 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46281675 46281816 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene CDS 46282150 46282158 0.000000 + 0 gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46282150 46285621 0.000000 + . gene_id "NCOA3"; transcript_id "BC122547:uc002xtm.3"; -chr20 hg19_knownGene exon 46255746 46255920 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46256367 46256493 0.000000 + 0 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46256305 46256493 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46256666 46256767 0.000000 + 2 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46256666 46256767 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46262240 46262380 0.000000 + 2 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46262240 46262380 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46262813 46262939 0.000000 + 2 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46262813 46262939 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46264066 46264457 0.000000 + 1 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46264066 46264457 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46264635 46265506 0.000000 + 2 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46264635 46265506 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46266392 46266527 0.000000 + 0 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46266392 46266527 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46267752 46267946 0.000000 + 2 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46267752 46267946 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46268321 46268566 0.000000 + 2 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46268321 46268566 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46268669 46268795 0.000000 + 2 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46268669 46268795 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46270957 46271128 0.000000 + 1 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46270957 46271128 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46275817 46276110 0.000000 + 0 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46275817 46276110 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46277749 46277853 0.000000 + 0 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46277749 46277853 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46279726 46280020 0.000000 + 0 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46279726 46280020 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46281150 46281324 0.000000 + 2 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46281150 46281324 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46281675 46281816 0.000000 + 1 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46281675 46281816 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46282150 46282158 0.000000 + 0 gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene exon 46282150 46285621 0.000000 + . gene_id "NCOA3"; transcript_id "AK302595:uc010zyc.2"; -chr20 hg19_knownGene CDS 46287109 46287136 0.000000 - 1 gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene exon 46286150 46287136 0.000000 - . gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene CDS 46288441 46288474 0.000000 - 2 gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene exon 46288441 46288474 0.000000 - . gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene CDS 46290517 46290640 0.000000 - 0 gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene exon 46290517 46290640 0.000000 - . gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene CDS 46291814 46291956 0.000000 - 2 gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene exon 46291814 46291956 0.000000 - . gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene CDS 46292197 46292260 0.000000 - 0 gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene exon 46292197 46292366 0.000000 - . gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene exon 46292874 46292933 0.000000 - . gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene exon 46293943 46294037 0.000000 - . gene_id "SULF2"; transcript_id "BC073790:uc010zyd.2"; -chr20 hg19_knownGene CDS 46287109 46287136 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46286150 46287136 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46288143 46288196 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46288143 46288196 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46288441 46288474 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46288441 46288474 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46290517 46290640 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46290517 46290640 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46291814 46291956 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46291814 46291956 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46292197 46292366 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46292197 46292366 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46292874 46292933 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46292874 46292933 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46293943 46294037 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46293943 46294037 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46294601 46294697 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46294601 46294697 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46295004 46295232 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46295004 46295232 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46300942 46301137 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46300942 46301137 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46305238 46305367 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46305238 46305367 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46305822 46305878 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46305822 46305878 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46307420 46307548 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46307420 46307548 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46311738 46311913 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46311738 46311913 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46313175 46313325 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46313175 46313325 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46318870 46319039 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46318870 46319039 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46331263 46331414 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46331263 46331414 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46365447 46365686 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46365447 46365686 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46385933 46386107 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46385933 46386207 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene exon 46414579 46414808 0.000000 - . gene_id "SULF2"; transcript_id "NM_018837:uc002xto.3"; -chr20 hg19_knownGene CDS 46318869 46319039 0.000000 - 0 gene_id "SULF2"; transcript_id "AK308829:uc010ghv.1"; -chr20 hg19_knownGene exon 46318292 46319039 0.000000 - . gene_id "SULF2"; transcript_id "AK308829:uc010ghv.1"; -chr20 hg19_knownGene CDS 46331263 46331414 0.000000 - 2 gene_id "SULF2"; transcript_id "AK308829:uc010ghv.1"; -chr20 hg19_knownGene exon 46331263 46331414 0.000000 - . gene_id "SULF2"; transcript_id "AK308829:uc010ghv.1"; -chr20 hg19_knownGene CDS 46365447 46365686 0.000000 - 2 gene_id "SULF2"; transcript_id "AK308829:uc010ghv.1"; -chr20 hg19_knownGene exon 46365447 46365686 0.000000 - . gene_id "SULF2"; transcript_id "AK308829:uc010ghv.1"; -chr20 hg19_knownGene CDS 46385933 46386107 0.000000 - 0 gene_id "SULF2"; transcript_id "AK308829:uc010ghv.1"; -chr20 hg19_knownGene exon 46385933 46386207 0.000000 - . gene_id "SULF2"; transcript_id "AK308829:uc010ghv.1"; -chr20 hg19_knownGene exon 46414579 46414808 0.000000 - . gene_id "SULF2"; transcript_id "AK308829:uc010ghv.1"; -chr20 hg19_knownGene CDS 46287109 46287136 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46286150 46287136 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46288143 46288196 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46288143 46288196 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46288441 46288465 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46288441 46288465 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46290517 46290640 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46290517 46290640 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46291814 46291956 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46291814 46291956 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46292197 46292366 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46292197 46292366 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46292874 46292933 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46292874 46292933 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46293943 46294037 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46293943 46294037 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46294601 46294697 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46294601 46294697 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46295004 46295232 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46295004 46295232 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46300942 46301137 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46300942 46301137 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46305238 46305367 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46305238 46305367 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46305822 46305878 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46305822 46305878 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46307420 46307548 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46307420 46307548 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46311738 46311913 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46311738 46311913 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46313175 46313325 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46313175 46313325 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46318870 46319039 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46318870 46319039 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46331263 46331414 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46331263 46331414 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46365447 46365686 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46365447 46365686 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46385933 46386107 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46385933 46386207 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene exon 46414792 46415360 0.000000 - . gene_id "SULF2"; transcript_id "NM_198596:uc002xtr.3"; -chr20 hg19_knownGene CDS 46287109 46287136 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46286150 46287136 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46288143 46288196 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46288143 46288196 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46288441 46288474 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46288441 46288474 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46290517 46290640 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46290517 46290640 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46291814 46291956 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46291814 46291956 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46292197 46292366 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46292197 46292366 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46292874 46292933 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46292874 46292933 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46293943 46294037 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46293943 46294037 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46294601 46294697 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46294601 46294697 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46295004 46295232 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46295004 46295232 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46300942 46301137 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46300942 46301137 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46305238 46305367 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46305238 46305367 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46305822 46305878 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46305822 46305878 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46307420 46307548 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46307420 46307548 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46311738 46311913 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46311738 46311913 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46313175 46313325 0.000000 - 1 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46313175 46313325 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46318870 46319039 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46318870 46319039 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46331263 46331414 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46331263 46331414 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46365447 46365686 0.000000 - 2 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46365447 46365686 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene CDS 46385933 46386107 0.000000 - 0 gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46385933 46386207 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46414792 46415360 0.000000 - . gene_id "SULF2"; transcript_id "NM_001161841:uc002xtq.3"; -chr20 hg19_knownGene exon 46585043 46585193 0.000000 + . gene_id "BX648826"; transcript_id "BX648826:uc002xts.1"; -chr20 hg19_knownGene exon 46585484 46585597 0.000000 + . gene_id "BX648826"; transcript_id "BX648826:uc002xts.1"; -chr20 hg19_knownGene exon 46585732 46586880 0.000000 + . gene_id "BX648826"; transcript_id "BX648826:uc002xts.1"; -chr20 hg19_knownGene exon 46587007 46589679 0.000000 + . gene_id "BX648826"; transcript_id "BX648826:uc002xts.1"; -chr20 hg19_knownGene exon 46988654 46988893 0.000000 + . gene_id "LINC00494"; transcript_id "NR_026958:uc002xtt.2"; -chr20 hg19_knownGene exon 46993632 46993940 0.000000 + . gene_id "LINC00494"; transcript_id "NR_026958:uc002xtt.2"; -chr20 hg19_knownGene exon 46995217 46995376 0.000000 + . gene_id "LINC00494"; transcript_id "NR_026958:uc002xtt.2"; -chr20 hg19_knownGene exon 46995479 46995802 0.000000 + . gene_id "LINC00494"; transcript_id "NR_026958:uc002xtt.2"; -chr20 hg19_knownGene exon 46996823 46999381 0.000000 + . gene_id "LINC00494"; transcript_id "NR_026958:uc002xtt.2"; -chr20 hg19_knownGene exon 46994390 46994750 0.000000 + . gene_id "LINC00494"; transcript_id "AL832259:uc010zye.1"; -chr20 hg19_knownGene exon 46995217 46995376 0.000000 + . gene_id "LINC00494"; transcript_id "AL832259:uc010zye.1"; -chr20 hg19_knownGene exon 46996823 46999381 0.000000 + . gene_id "LINC00494"; transcript_id "AL832259:uc010zye.1"; -chr20 hg19_knownGene exon 47240793 47243446 0.000000 - . gene_id "AX746653"; transcript_id "AX746653:uc021wer.1"; -chr20 hg19_knownGene CDS 47242426 47242465 0.000000 - 1 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47240793 47242465 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47244086 47244153 0.000000 - 0 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47244086 47244153 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47244399 47244501 0.000000 - 1 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47244399 47244501 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47245987 47246159 0.000000 - 0 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47245987 47246159 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47247266 47247332 0.000000 - 1 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47247266 47247332 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47248815 47248929 0.000000 - 2 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47248815 47248929 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47249034 47249177 0.000000 - 2 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47249034 47249177 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47251214 47251313 0.000000 - 0 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47251214 47251313 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47253001 47253221 0.000000 - 2 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47253001 47253221 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47254249 47254290 0.000000 - 2 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47254249 47254290 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47256304 47256432 0.000000 - 2 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47256304 47256432 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47258706 47258796 0.000000 - 0 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47258706 47258796 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47258945 47259027 0.000000 - 2 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47258945 47259027 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47260947 47261035 0.000000 - 1 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47260947 47261035 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47262389 47262595 0.000000 - 1 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47262389 47262595 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47265838 47266114 0.000000 - 2 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47265838 47266114 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47266534 47266744 0.000000 - 0 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47266534 47266744 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47267432 47267593 0.000000 - 0 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47267432 47267593 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47267934 47268121 0.000000 - 2 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47267934 47268121 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47269124 47269244 0.000000 - 0 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47269124 47269244 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47269899 47270035 0.000000 - 2 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47269899 47270035 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47271828 47271913 0.000000 - 1 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47271828 47271913 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47273016 47273029 0.000000 - 0 gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene exon 47273016 47273118 0.000000 - . gene_id "PREX1"; transcript_id "AL136579:uc002xtv.1"; -chr20 hg19_knownGene CDS 47242426 47242465 0.000000 - 1 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47240793 47242465 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47244086 47244153 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47244086 47244153 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47244399 47244501 0.000000 - 1 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47244399 47244501 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47245987 47246159 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47245987 47246159 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47247266 47247332 0.000000 - 1 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47247266 47247332 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47248815 47248929 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47248815 47248929 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47249034 47249177 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47249034 47249177 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47251214 47251313 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47251214 47251313 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47253001 47253221 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47253001 47253221 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47254249 47254290 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47254249 47254290 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47256304 47256432 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47256304 47256432 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47258706 47258796 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47258706 47258796 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47258945 47259027 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47258945 47259027 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47260947 47261035 0.000000 - 1 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47260947 47261035 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47262389 47262595 0.000000 - 1 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47262389 47262595 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47265838 47266114 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47265838 47266114 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47266534 47266744 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47266534 47266744 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47267432 47267593 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47267432 47267593 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47267934 47268121 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47267934 47268121 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47269124 47269244 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47269124 47269244 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47269899 47270035 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47269899 47270035 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47271828 47271913 0.000000 - 1 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47271828 47271913 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47273578 47273726 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47273578 47273726 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47274674 47274766 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47274674 47274766 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47276457 47276599 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47276457 47276599 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47282821 47282893 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47282821 47282893 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47292731 47292806 0.000000 - 1 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47292731 47292806 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47295898 47295947 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47295898 47295947 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47296189 47296292 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47296189 47296292 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47297773 47297873 0.000000 - 1 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47297773 47297873 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47305195 47305342 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47305195 47305342 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47307485 47307634 0.000000 - 2 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47307485 47307634 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47309210 47309328 0.000000 - 1 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47309210 47309328 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47317291 47317424 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47317291 47317424 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47324798 47324959 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47324798 47324959 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47342827 47342928 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47342827 47342928 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47351083 47351187 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47351083 47351187 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47361562 47361684 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47361562 47361684 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47364346 47364417 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47364346 47364417 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene CDS 47444179 47444397 0.000000 - 0 gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47444179 47444420 0.000000 - . gene_id "PREX1"; transcript_id "NM_020820:uc002xtw.1"; -chr20 hg19_knownGene exon 47551778 47552227 0.000000 + . gene_id "FKSG56"; transcript_id "AF336886:uc010ghw.2"; -chr20 hg19_knownGene CDS 47538427 47538547 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47538275 47538547 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47557736 47557766 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47557736 47557766 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47558401 47558524 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47558401 47558524 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47567860 47568006 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47567860 47568006 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47569242 47569421 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47569242 47569421 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47570093 47570327 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47570093 47570327 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47580367 47580435 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47580367 47580435 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47582409 47582560 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47582409 47582560 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47585684 47585814 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47585684 47585814 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47587657 47587891 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47587657 47587891 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47588863 47588962 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47588863 47588962 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47589682 47589821 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47589682 47589821 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47591303 47591411 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47591303 47591411 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47592553 47592736 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47592553 47592736 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47601266 47601377 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47601266 47601377 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47601945 47602150 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47601945 47602150 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47604841 47604925 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47604841 47604925 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47605028 47605199 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47605028 47605199 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47605822 47605973 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47605822 47605973 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47606093 47606221 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47606093 47606221 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47607577 47607735 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47607577 47607735 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47610988 47611135 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47610988 47611135 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47612320 47612419 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47612320 47612419 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47614730 47614770 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47614730 47614770 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47614873 47615042 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47614873 47615042 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47621607 47621758 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47621607 47621758 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47626769 47626941 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47626769 47626941 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47628461 47628621 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47628461 47628621 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47630101 47630231 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47630101 47630231 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47630368 47630497 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47630368 47630497 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47632817 47632952 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47632817 47632952 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47633786 47633924 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47633786 47633924 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47634033 47634087 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47634033 47634087 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47635421 47635535 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47635421 47635535 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47639588 47639718 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47639588 47639718 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47641850 47642018 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47641850 47642018 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47645067 47645205 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47645067 47645205 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47648586 47648703 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47648586 47648703 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene CDS 47649560 47649733 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47649560 47653230 0.000000 + . gene_id "ARFGEF2"; transcript_id "NM_006420:uc002xtx.4"; -chr20 hg19_knownGene exon 47601329 47601405 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47601996 47602150 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47601945 47602150 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47604841 47604925 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47604841 47604925 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47605028 47605199 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47605028 47605199 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47605822 47605973 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47605822 47605973 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47606093 47606221 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47606093 47606221 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47607577 47607735 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47607577 47607735 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47610988 47611135 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47610988 47611135 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47612320 47612419 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47612320 47612419 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47614730 47614770 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47614730 47614770 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47614873 47615042 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47614873 47615042 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47621607 47621758 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47621607 47621758 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47626769 47626941 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47626769 47626941 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47628461 47628621 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47628461 47628621 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47630101 47630231 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47630101 47630231 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47630368 47630497 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47630368 47630497 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47632817 47632952 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47632817 47632952 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47633786 47633924 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47633786 47633924 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47634033 47634087 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47634033 47634087 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47635421 47635535 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47635421 47635535 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47639588 47639718 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47639588 47639718 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47641850 47642018 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47641850 47642018 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47645067 47645205 0.000000 + 2 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47645067 47645205 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47648586 47648703 0.000000 + 1 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47648586 47648703 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene CDS 47649560 47649733 0.000000 + 0 gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47649560 47653230 0.000000 + . gene_id "ARFGEF2"; transcript_id "AK302526:uc010zyf.2"; -chr20 hg19_knownGene exon 47662838 47662960 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47675001 47675085 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47674990 47675085 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47679739 47679881 0.000000 + 2 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47679739 47679881 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47682729 47682830 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47682729 47682830 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47682902 47683047 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47682902 47683047 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47683727 47683817 0.000000 + 1 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47683727 47683817 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47685252 47685359 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47685252 47685359 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47686742 47686834 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47686742 47686834 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47688823 47688990 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47688823 47688990 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47689105 47689234 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47689105 47689234 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47691322 47691387 0.000000 + 2 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47691322 47691387 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47691855 47692057 0.000000 + 2 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47691855 47692057 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47693517 47693601 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47693517 47693601 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47695098 47695159 0.000000 + 2 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47695098 47695159 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47700563 47700699 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47700563 47700699 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47701820 47701923 0.000000 + 1 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47701820 47701923 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47704546 47704643 0.000000 + 2 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47704546 47704643 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47705784 47705934 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47705784 47705934 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47706075 47706283 0.000000 + 2 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47706075 47706283 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47707279 47707376 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47707279 47707376 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47707474 47707559 0.000000 + 1 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47707474 47707559 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47708583 47708664 0.000000 + 2 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47708583 47708664 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47710677 47710823 0.000000 + 1 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47710677 47710823 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47711269 47711500 0.000000 + 1 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47711269 47711500 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene CDS 47712886 47712972 0.000000 + 0 gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47712886 47713486 0.000000 + . gene_id "CSE1L"; transcript_id "NM_001316:uc002xty.3"; -chr20 hg19_knownGene exon 47662838 47662960 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47674990 47675085 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47679820 47679830 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47679739 47679830 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47685347 47685359 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47685347 47685359 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47686742 47686834 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47686742 47686834 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47688823 47688990 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47688823 47688990 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47689105 47689234 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47689105 47689234 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47691322 47691387 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47691322 47691387 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47691855 47692057 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47691855 47692057 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47693517 47693601 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47693517 47693601 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47695098 47695159 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47695098 47695159 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47700563 47700699 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47700563 47700699 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47701820 47701923 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47701820 47701923 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47704546 47704643 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47704546 47704643 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47705784 47705934 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47705784 47705934 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47706075 47706283 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47706075 47706283 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47707279 47707376 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47707279 47707376 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47707474 47707559 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47707474 47707559 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47708583 47708664 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47708583 47708664 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47710677 47710823 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47710677 47710823 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47711269 47711500 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47711269 47711500 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47712886 47712972 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene exon 47712886 47713486 0.000000 + . gene_id "CSE1L"; transcript_id "AK300589:uc010zyg.2"; -chr20 hg19_knownGene CDS 47675001 47675085 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47674990 47675085 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47679739 47679881 0.000000 + 2 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47679739 47679881 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47682729 47682830 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47682729 47682830 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47682902 47683047 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47682902 47683047 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47683727 47683817 0.000000 + 1 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47683727 47683817 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47685252 47685359 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47685252 47685359 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47686742 47686834 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47686742 47686834 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47689105 47689234 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47689105 47689234 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47691322 47691387 0.000000 + 2 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47691322 47691387 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47691855 47692057 0.000000 + 2 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47691855 47692057 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47693517 47693601 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47693517 47693601 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47695098 47695159 0.000000 + 2 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47695098 47695159 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47700563 47700699 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47700563 47700699 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47701820 47701923 0.000000 + 1 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47701820 47701923 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47704546 47704643 0.000000 + 2 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47704546 47704643 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47705784 47705934 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47705784 47705934 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47706075 47706283 0.000000 + 2 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47706075 47706283 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47707279 47707376 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47707279 47707376 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47707474 47707559 0.000000 + 1 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47707474 47707559 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47708583 47708664 0.000000 + 2 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47708583 47708664 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47710677 47710823 0.000000 + 1 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47710677 47710823 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47711269 47711500 0.000000 + 1 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47711269 47711500 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene CDS 47712886 47712972 0.000000 + 0 gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47712886 47713486 0.000000 + . gene_id "CSE1L"; transcript_id "EF426455:uc010ghx.3"; -chr20 hg19_knownGene exon 47688823 47688990 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47689222 47689234 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47689105 47689234 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47691322 47691387 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47691322 47691387 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47691855 47692057 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47691855 47692057 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47693517 47693601 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47693517 47693601 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47695098 47695159 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47695098 47695159 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47700563 47700623 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47700563 47700623 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47701828 47701923 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47701828 47701923 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47704546 47704643 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47704546 47704643 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47705784 47705934 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47705784 47705934 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47706075 47706283 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47706075 47706283 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47707279 47707376 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47707279 47707376 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47707474 47707559 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47707474 47707559 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47708583 47708664 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47708583 47708664 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47710677 47710823 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47710677 47710823 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47711269 47711500 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47711269 47711500 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47712886 47712972 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene exon 47712886 47713486 0.000000 + . gene_id "CSE1L"; transcript_id "AK225610:uc010ghy.3"; -chr20 hg19_knownGene CDS 47689222 47689234 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47689105 47689234 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47691322 47691387 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47691322 47691387 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47691855 47692057 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47691855 47692057 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47693517 47693601 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47693517 47693601 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47695098 47695159 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47695098 47695159 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47700563 47700699 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47700563 47700699 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47701820 47701923 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47701820 47701923 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47704546 47704643 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47704546 47704643 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47705784 47705934 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47705784 47705934 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47706075 47706283 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47706075 47706283 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47707279 47707376 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47707279 47707376 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47707474 47707559 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47707474 47707559 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47708583 47708664 0.000000 + 2 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47708583 47708664 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47710677 47710823 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47710677 47710823 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47711269 47711500 0.000000 + 1 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47711269 47711500 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47712713 47712721 0.000000 + 0 gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47712713 47712737 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene exon 47712886 47713486 0.000000 + . gene_id "CSE1L"; transcript_id "AK298477:uc010zyh.2"; -chr20 hg19_knownGene CDS 47731418 47731430 0.000000 - 1 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47729876 47731430 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47732319 47732404 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47732319 47732404 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47733663 47733785 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47733663 47733785 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47734314 47734633 0.000000 - 2 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47734314 47734633 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47734870 47734945 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47734870 47734945 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47736519 47736665 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47736519 47736665 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47739629 47739772 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47739629 47739772 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47740912 47741124 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47740912 47741124 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47752370 47752468 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47752370 47752468 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47768119 47768284 0.000000 - 1 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47768119 47768284 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47770470 47770570 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47770470 47770608 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47790732 47790806 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47795659 47795781 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene exon 47804653 47804904 0.000000 - . gene_id "STAU1"; transcript_id "NM_004602:uc002xua.3"; -chr20 hg19_knownGene CDS 47731418 47731430 0.000000 - 1 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47729876 47731430 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47732319 47732404 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47732319 47732404 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47733663 47733785 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47733663 47733785 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47734314 47734633 0.000000 - 2 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47734314 47734633 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47734870 47734945 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47734870 47734945 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47736519 47736665 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47736519 47736665 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47739629 47739772 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47739629 47739772 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47740912 47741142 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47740912 47741142 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47752370 47752468 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47752370 47752468 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47768119 47768284 0.000000 - 1 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47768119 47768284 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47770470 47770570 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47770470 47770608 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47790732 47790806 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47795659 47795781 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene exon 47804653 47804904 0.000000 - . gene_id "STAU1"; transcript_id "NM_001037328:uc002xub.3"; -chr20 hg19_knownGene CDS 47731418 47731430 0.000000 - 1 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47729876 47731430 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47732319 47732404 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47732319 47732404 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47733663 47733785 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47733663 47733785 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47734314 47734633 0.000000 - 2 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47734314 47734633 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47734870 47734945 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47734870 47734945 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47736519 47736665 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47736519 47736665 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47739629 47739772 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47739629 47739772 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47740912 47741124 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47740912 47741124 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47752370 47752468 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47752370 47752468 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47768119 47768284 0.000000 - 1 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47768119 47768284 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47770470 47770608 0.000000 - 2 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47770470 47770608 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47782534 47782738 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47782534 47782822 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47790732 47790806 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene exon 47804653 47804904 0.000000 - . gene_id "STAU1"; transcript_id "NM_017453:uc002xud.3"; -chr20 hg19_knownGene CDS 47731418 47731430 0.000000 - 1 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47729876 47731430 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47732319 47732404 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47732319 47732404 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47733663 47733785 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47733663 47733785 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47734314 47734633 0.000000 - 2 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47734314 47734633 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47734870 47734945 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47734870 47734945 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47736519 47736665 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47736519 47736665 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47739629 47739772 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47739629 47739772 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47740912 47741124 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47740912 47741124 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47752370 47752468 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47752370 47752468 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47768119 47768284 0.000000 - 1 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47768119 47768284 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47770470 47770570 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47770470 47770608 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47790732 47790806 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene exon 47804653 47804904 0.000000 - . gene_id "STAU1"; transcript_id "NM_017452:uc002xuc.3"; -chr20 hg19_knownGene CDS 47731418 47731430 0.000000 - 1 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47729876 47731430 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47732319 47732404 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47732319 47732404 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47733663 47733785 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47733663 47733785 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47734314 47734633 0.000000 - 2 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47734314 47734633 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47734870 47734945 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47734870 47734945 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47736519 47736665 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47736519 47736665 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47739629 47739772 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47739629 47739772 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47740912 47741124 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47740912 47741124 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47752370 47752468 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47752370 47752468 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47768119 47768284 0.000000 - 1 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47768119 47768284 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47770470 47770570 0.000000 - 0 gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47770470 47770608 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene exon 47804653 47804904 0.000000 - . gene_id "STAU1"; transcript_id "NM_017454:uc002xue.3"; -chr20 hg19_knownGene CDS 47731418 47731430 0.000000 - 1 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47729876 47731430 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47732319 47732404 0.000000 - 0 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47732319 47732404 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47733663 47733785 0.000000 - 0 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47733663 47733785 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47734314 47734633 0.000000 - 2 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47734314 47734633 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47734870 47734945 0.000000 - 0 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47734870 47734945 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47736519 47736665 0.000000 - 0 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47736519 47736665 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47739629 47739772 0.000000 - 0 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47739629 47739772 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47740912 47741142 0.000000 - 0 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47740912 47741142 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47752370 47752468 0.000000 - 0 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47752370 47752468 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47768119 47768284 0.000000 - 1 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47768119 47768284 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47770470 47770570 0.000000 - 0 gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47770470 47770608 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47790732 47790806 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene exon 47804653 47804904 0.000000 - . gene_id "STAU1"; transcript_id "AY546099:uc002xuf.3"; -chr20 hg19_knownGene CDS 47731418 47731430 0.000000 - 1 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47729876 47731430 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47732319 47732404 0.000000 - 0 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47732319 47732404 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47733663 47733785 0.000000 - 0 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47733663 47733785 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47734314 47734633 0.000000 - 2 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47734314 47734633 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47734870 47734945 0.000000 - 0 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47734870 47734945 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47736519 47736665 0.000000 - 0 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47736519 47736665 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47739629 47739772 0.000000 - 0 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47739629 47739772 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47740912 47741124 0.000000 - 0 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47740912 47741124 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47752370 47752468 0.000000 - 0 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47752370 47752468 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47768119 47768284 0.000000 - 1 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47768119 47768284 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47770470 47770608 0.000000 - 2 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47770470 47770608 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47782534 47782738 0.000000 - 0 gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47782534 47782822 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47790732 47790806 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene exon 47805183 47805288 0.000000 - . gene_id "STAU1"; transcript_id "AB209561:uc002xug.3"; -chr20 hg19_knownGene CDS 47835893 47836078 0.000000 + 0 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47835832 47836078 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47837989 47838135 0.000000 + 0 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47837989 47838135 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47839494 47839553 0.000000 + 0 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47839494 47839553 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47839805 47839970 0.000000 + 0 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47839805 47839970 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47841482 47841528 0.000000 + 2 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47841482 47841528 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47841650 47841736 0.000000 + 0 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47841650 47841736 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47842967 47843072 0.000000 + 0 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47842967 47843072 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47845252 47845425 0.000000 + 2 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47845252 47845425 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47846736 47846886 0.000000 + 2 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47846736 47846886 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47849843 47849942 0.000000 + 1 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47849843 47849942 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47850105 47850246 0.000000 + 0 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47850105 47850246 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47851472 47851625 0.000000 + 2 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47851472 47851625 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47852687 47852768 0.000000 + 1 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47852687 47852768 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47852870 47853047 0.000000 + 0 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47852870 47853047 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47855486 47855592 0.000000 + 2 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47855486 47855592 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47855773 47855875 0.000000 + 0 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47855773 47855875 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47858430 47858524 0.000000 + 2 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47858430 47858524 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47858620 47858743 0.000000 + 0 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47858620 47858743 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47859131 47859218 0.000000 + 2 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47859131 47859218 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47860166 47860240 0.000000 + 1 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47860166 47860240 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47860353 47860368 0.000000 + 1 gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene exon 47860353 47860614 0.000000 + . gene_id "DDX27"; transcript_id "NM_017895:uc002xuh.3"; -chr20 hg19_knownGene CDS 47863807 47866248 0.000000 - 0 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47862439 47866248 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47868064 47868159 0.000000 - 0 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47868064 47868159 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47869257 47869367 0.000000 - 0 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47869257 47869367 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47870203 47870348 0.000000 - 2 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47870203 47870348 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47871032 47871186 0.000000 - 1 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47871032 47871186 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47872345 47872484 0.000000 - 0 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47872345 47872484 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47873954 47874201 0.000000 - 2 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47873954 47874201 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47877000 47877114 0.000000 - 0 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47877000 47877114 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47879871 47880020 0.000000 - 0 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47879871 47880020 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47881253 47881401 0.000000 - 2 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47881253 47881401 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47882672 47882803 0.000000 - 2 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47882672 47882803 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47886479 47888287 0.000000 - 2 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47886479 47888287 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene CDS 47892316 47892376 0.000000 - 0 gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47892316 47892424 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47894558 47894756 0.000000 - . gene_id "ZNFX1"; transcript_id "NM_021035:uc002xui.3"; -chr20 hg19_knownGene exon 47895482 47895560 0.000000 + . gene_id "SNORD12C"; transcript_id "NR_002433:uc010ghz.3"; -chr20 hg19_knownGene exon 47896850 47896952 0.000000 + . gene_id "SNORD12B"; transcript_id "NR_003695:uc010gia.1"; -chr20 hg19_knownGene exon 47897220 47897309 0.000000 + . gene_id "SNORD12"; transcript_id "NR_003030:uc002xup.1"; -chr20 hg19_knownGene exon 47894715 47895253 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003604:uc002xul.4"; -chr20 hg19_knownGene exon 47895641 47895745 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003604:uc002xul.4"; -chr20 hg19_knownGene exon 47897022 47897107 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003604:uc002xul.4"; -chr20 hg19_knownGene exon 47897440 47897501 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003604:uc002xul.4"; -chr20 hg19_knownGene exon 47905582 47905795 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003604:uc002xul.4"; -chr20 hg19_knownGene exon 47894715 47894934 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003605:uc002xuj.3"; -chr20 hg19_knownGene exon 47895641 47895745 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003605:uc002xuj.3"; -chr20 hg19_knownGene exon 47897022 47897107 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003605:uc002xuj.3"; -chr20 hg19_knownGene exon 47897440 47897501 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003605:uc002xuj.3"; -chr20 hg19_knownGene exon 47905582 47905795 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003605:uc002xuj.3"; -chr20 hg19_knownGene exon 47894715 47895253 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_036658:uc002xum.4"; -chr20 hg19_knownGene exon 47895641 47895745 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_036658:uc002xum.4"; -chr20 hg19_knownGene exon 47897022 47897107 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_036658:uc002xum.4"; -chr20 hg19_knownGene exon 47905582 47905795 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_036658:uc002xum.4"; -chr20 hg19_knownGene exon 47894715 47895253 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003606:uc002xun.4"; -chr20 hg19_knownGene exon 47895641 47895745 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003606:uc002xun.4"; -chr20 hg19_knownGene exon 47905582 47905795 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_003606:uc002xun.4"; -chr20 hg19_knownGene exon 47895179 47895275 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_036659:uc002xuo.3"; -chr20 hg19_knownGene exon 47895641 47895745 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_036659:uc002xuo.3"; -chr20 hg19_knownGene exon 47897022 47897107 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_036659:uc002xuo.3"; -chr20 hg19_knownGene exon 47905582 47905795 0.000000 + . gene_id "ZNFX1-AS1"; transcript_id "NR_036659:uc002xuo.3"; -chr20 hg19_knownGene exon 47980423 47983826 0.000000 - . gene_id "AK055386"; transcript_id "AK055386:uc002xuq.1"; -chr20 hg19_knownGene CDS 47989523 47991529 0.000000 - 0 gene_id "KCNB1"; transcript_id "NM_004975:uc002xur.1"; -chr20 hg19_knownGene exon 47988505 47991529 0.000000 - . gene_id "KCNB1"; transcript_id "NM_004975:uc002xur.1"; -chr20 hg19_knownGene CDS 48098451 48099017 0.000000 - 0 gene_id "KCNB1"; transcript_id "NM_004975:uc002xur.1"; -chr20 hg19_knownGene exon 48098451 48099183 0.000000 - . gene_id "KCNB1"; transcript_id "NM_004975:uc002xur.1"; -chr20 hg19_knownGene CDS 47989523 47991529 0.000000 - 0 gene_id "KCNB1"; transcript_id "L02840:uc002xus.1"; -chr20 hg19_knownGene exon 47988505 47991529 0.000000 - . gene_id "KCNB1"; transcript_id "L02840:uc002xus.1"; -chr20 hg19_knownGene CDS 48098451 48099017 0.000000 - 0 gene_id "KCNB1"; transcript_id "L02840:uc002xus.1"; -chr20 hg19_knownGene exon 48098451 48099183 0.000000 - . gene_id "KCNB1"; transcript_id "L02840:uc002xus.1"; -chr20 hg19_knownGene exon 48100479 48100490 0.000000 - . gene_id "KCNB1"; transcript_id "L02840:uc002xus.1"; -chr20 hg19_knownGene CDS 48124460 48124601 0.000000 - 1 gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene exon 48120411 48124601 0.000000 - . gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene CDS 48127565 48127716 0.000000 - 0 gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene exon 48127565 48127716 0.000000 - . gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene CDS 48129617 48129798 0.000000 - 2 gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene exon 48129617 48129798 0.000000 - . gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene CDS 48130764 48130932 0.000000 - 0 gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene exon 48130764 48130932 0.000000 - . gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene CDS 48140595 48140776 0.000000 - 2 gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene exon 48140595 48140776 0.000000 - . gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene CDS 48156107 48156258 0.000000 - 1 gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene exon 48156107 48156258 0.000000 - . gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene CDS 48160842 48160985 0.000000 - 1 gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene exon 48160842 48160985 0.000000 - . gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene CDS 48164378 48164556 0.000000 - 0 gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene exon 48164378 48164556 0.000000 - . gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene CDS 48166603 48166726 0.000000 - 1 gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene exon 48166603 48166726 0.000000 - . gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene CDS 48184580 48184653 0.000000 - 0 gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene exon 48184580 48184707 0.000000 - . gene_id "PTGIS"; transcript_id "NM_000961:uc002xut.3"; -chr20 hg19_knownGene CDS 48124460 48124601 0.000000 - 1 gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene exon 48120411 48124601 0.000000 - . gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene CDS 48127565 48127716 0.000000 - 0 gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene exon 48127565 48127716 0.000000 - . gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene CDS 48129617 48129798 0.000000 - 2 gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene exon 48129617 48129798 0.000000 - . gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene CDS 48130764 48130932 0.000000 - 0 gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene exon 48130764 48130932 0.000000 - . gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene CDS 48140595 48140776 0.000000 - 2 gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene exon 48140595 48140776 0.000000 - . gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene CDS 48156107 48156258 0.000000 - 1 gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene exon 48156107 48156258 0.000000 - . gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene CDS 48160842 48160945 0.000000 - 0 gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene exon 48160842 48160985 0.000000 - . gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene exon 48166603 48166726 0.000000 - . gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene exon 48184580 48184707 0.000000 - . gene_id "PTGIS"; transcript_id "BC143381:uc010zyi.2"; -chr20 hg19_knownGene CDS 48252852 48252996 0.000000 - 1 gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene exon 48249483 48252996 0.000000 - . gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene CDS 48253878 48253979 0.000000 - 1 gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene exon 48253878 48253979 0.000000 - . gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene CDS 48256215 48256337 0.000000 - 1 gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene exon 48256215 48256337 0.000000 - . gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene CDS 48257015 48257202 0.000000 - 0 gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene exon 48257015 48257202 0.000000 - . gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene CDS 48259005 48259121 0.000000 - 0 gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene exon 48259005 48259121 0.000000 - . gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene CDS 48260063 48260187 0.000000 - 2 gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene exon 48260063 48260187 0.000000 - . gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene CDS 48263502 48263615 0.000000 - 2 gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene exon 48263502 48263615 0.000000 - . gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene CDS 48273105 48273239 0.000000 - 2 gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene exon 48273105 48273239 0.000000 - . gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene CDS 48330113 48330227 0.000000 - 0 gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene exon 48330113 48330421 0.000000 - . gene_id "B4GALT5"; transcript_id "NM_004776:uc002xuu.4"; -chr20 hg19_knownGene CDS 48429460 48429485 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene exon 48429250 48429485 0.000000 + . gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene CDS 48431545 48431726 0.000000 + 1 gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene exon 48431545 48431726 0.000000 + . gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene CDS 48439598 48439678 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene exon 48439598 48439678 0.000000 + . gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene CDS 48456078 48456136 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene exon 48456078 48456136 0.000000 + . gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene CDS 48461573 48461656 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene exon 48461573 48461656 0.000000 + . gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene CDS 48466116 48466217 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene exon 48466116 48466217 0.000000 + . gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene CDS 48467299 48467381 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene exon 48467299 48467381 0.000000 + . gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene CDS 48471975 48472118 0.000000 + 1 gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene exon 48471975 48472118 0.000000 + . gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene CDS 48479466 48479601 0.000000 + 1 gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene exon 48479466 48479604 0.000000 + . gene_id "SLC9A8"; transcript_id "AK300318:uc010zyj.1"; -chr20 hg19_knownGene CDS 48429460 48429485 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene exon 48429250 48429485 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene CDS 48431545 48431726 0.000000 + 1 gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene exon 48431545 48431726 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene CDS 48439598 48439678 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene exon 48439598 48439678 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene CDS 48456078 48456136 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene exon 48456078 48456136 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene CDS 48461573 48461656 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene exon 48461573 48461656 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene CDS 48466116 48466217 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene exon 48466116 48466217 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene CDS 48471975 48472118 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene exon 48471975 48472118 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene CDS 48479466 48479471 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene exon 48479466 48479604 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295822:uc010zyk.1"; -chr20 hg19_knownGene CDS 48429460 48429485 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene exon 48429250 48429485 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene CDS 48431545 48431726 0.000000 + 1 gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene exon 48431545 48431726 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene CDS 48439598 48439678 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene exon 48439598 48439678 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene CDS 48456078 48456136 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene exon 48456078 48456136 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene CDS 48466116 48466217 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene exon 48466116 48466217 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene CDS 48471975 48472118 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene exon 48471975 48472118 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene CDS 48479466 48479471 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene exon 48479466 48479604 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295665:uc010zyl.1"; -chr20 hg19_knownGene CDS 48429460 48429485 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene exon 48429250 48429485 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene CDS 48431545 48431726 0.000000 + 1 gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene exon 48431545 48431726 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene CDS 48439598 48439678 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene exon 48439598 48439678 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene CDS 48456078 48456136 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene exon 48456078 48456136 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene CDS 48461573 48461656 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene exon 48461573 48461656 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene CDS 48471975 48472118 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene exon 48471975 48472118 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene CDS 48479466 48479471 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene exon 48479466 48479604 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gib.1"; -chr20 hg19_knownGene CDS 48481324 48481381 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK310530:uc010gic.3"; -chr20 hg19_knownGene exon 48481276 48481381 0.000000 + . gene_id "SLC9A8"; transcript_id "AK310530:uc010gic.3"; -chr20 hg19_knownGene CDS 48491242 48491358 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK310530:uc010gic.3"; -chr20 hg19_knownGene exon 48491242 48491358 0.000000 + . gene_id "SLC9A8"; transcript_id "AK310530:uc010gic.3"; -chr20 hg19_knownGene CDS 48494518 48494600 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK310530:uc010gic.3"; -chr20 hg19_knownGene exon 48494518 48494600 0.000000 + . gene_id "SLC9A8"; transcript_id "AK310530:uc010gic.3"; -chr20 hg19_knownGene CDS 48497461 48497572 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK310530:uc010gic.3"; -chr20 hg19_knownGene exon 48497461 48497572 0.000000 + . gene_id "SLC9A8"; transcript_id "AK310530:uc010gic.3"; -chr20 hg19_knownGene CDS 48500383 48500687 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK310530:uc010gic.3"; -chr20 hg19_knownGene exon 48500383 48500795 0.000000 + . gene_id "SLC9A8"; transcript_id "AK310530:uc010gic.3"; -chr20 hg19_knownGene CDS 48429460 48429485 0.000000 + 0 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48429250 48429485 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48431545 48431726 0.000000 + 1 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48431545 48431726 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48439598 48439678 0.000000 + 2 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48439598 48439678 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48456078 48456136 0.000000 + 2 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48456078 48456136 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48461573 48461656 0.000000 + 0 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48461573 48461656 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48466116 48466217 0.000000 + 0 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48466116 48466217 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48467347 48467381 0.000000 + 0 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48467347 48467381 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48471975 48472118 0.000000 + 1 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48471975 48472118 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48479466 48479604 0.000000 + 1 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48479466 48479604 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48481276 48481381 0.000000 + 0 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48481276 48481381 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48491242 48491358 0.000000 + 2 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48491242 48491358 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48494518 48494600 0.000000 + 2 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48494518 48494600 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48497461 48497572 0.000000 + 0 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48497461 48497572 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48500383 48500603 0.000000 + 2 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48500383 48500603 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48503289 48503435 0.000000 + 0 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48503289 48503435 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene CDS 48504366 48504470 0.000000 + 0 gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48504366 48508772 0.000000 + . gene_id "SLC9A8"; transcript_id "NM_015266:uc002xuv.1"; -chr20 hg19_knownGene exon 48429250 48429485 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48431545 48431726 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48439598 48439678 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48456078 48456136 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48461573 48461656 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48466116 48466217 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48471975 48472118 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene CDS 48481324 48481381 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48481265 48481381 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene CDS 48491242 48491358 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48491242 48491358 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene CDS 48494518 48494600 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48494518 48494600 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene CDS 48497461 48497572 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48497461 48497572 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene CDS 48500383 48500603 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48500383 48500603 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene CDS 48503289 48503435 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48503289 48503435 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene CDS 48504366 48504470 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene exon 48504366 48508772 0.000000 + . gene_id "SLC9A8"; transcript_id "AK295803:uc010zym.1"; -chr20 hg19_knownGene CDS 48481352 48481381 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK308328:uc010gid.3"; -chr20 hg19_knownGene exon 48481276 48481381 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gid.3"; -chr20 hg19_knownGene CDS 48497461 48497572 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK308328:uc010gid.3"; -chr20 hg19_knownGene exon 48497461 48497572 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gid.3"; -chr20 hg19_knownGene CDS 48500383 48500603 0.000000 + 2 gene_id "SLC9A8"; transcript_id "AK308328:uc010gid.3"; -chr20 hg19_knownGene exon 48500383 48500603 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gid.3"; -chr20 hg19_knownGene CDS 48503289 48503435 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK308328:uc010gid.3"; -chr20 hg19_knownGene exon 48503289 48503435 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gid.3"; -chr20 hg19_knownGene CDS 48504366 48504470 0.000000 + 0 gene_id "SLC9A8"; transcript_id "AK308328:uc010gid.3"; -chr20 hg19_knownGene exon 48504366 48508772 0.000000 + . gene_id "SLC9A8"; transcript_id "AK308328:uc010gid.3"; -chr20 hg19_knownGene CDS 48522159 48523382 0.000000 - 0 gene_id "SPATA2"; transcript_id "NM_001135773:uc010gie.3"; -chr20 hg19_knownGene exon 48519929 48523382 0.000000 - . gene_id "SPATA2"; transcript_id "NM_001135773:uc010gie.3"; -chr20 hg19_knownGene CDS 48524692 48525027 0.000000 - 0 gene_id "SPATA2"; transcript_id "NM_001135773:uc010gie.3"; -chr20 hg19_knownGene exon 48524692 48525129 0.000000 - . gene_id "SPATA2"; transcript_id "NM_001135773:uc010gie.3"; -chr20 hg19_knownGene exon 48530029 48530276 0.000000 - . gene_id "SPATA2"; transcript_id "NM_001135773:uc010gie.3"; -chr20 hg19_knownGene CDS 48522159 48523382 0.000000 - 0 gene_id "SPATA2"; transcript_id "NM_006038:uc002xuw.3"; -chr20 hg19_knownGene exon 48519929 48523382 0.000000 - . gene_id "SPATA2"; transcript_id "NM_006038:uc002xuw.3"; -chr20 hg19_knownGene CDS 48524692 48525027 0.000000 - 0 gene_id "SPATA2"; transcript_id "NM_006038:uc002xuw.3"; -chr20 hg19_knownGene exon 48524692 48525129 0.000000 - . gene_id "SPATA2"; transcript_id "NM_006038:uc002xuw.3"; -chr20 hg19_knownGene exon 48531917 48532080 0.000000 - . gene_id "SPATA2"; transcript_id "NM_006038:uc002xuw.3"; -chr20 hg19_knownGene CDS 48522159 48523307 0.000000 - 0 gene_id "SPATA2"; transcript_id "AK295536:uc010zyn.2"; -chr20 hg19_knownGene exon 48519929 48523382 0.000000 - . gene_id "SPATA2"; transcript_id "AK295536:uc010zyn.2"; -chr20 hg19_knownGene exon 48531917 48532080 0.000000 - . gene_id "SPATA2"; transcript_id "AK295536:uc010zyn.2"; -chr20 hg19_knownGene CDS 48552950 48553089 0.000000 + 0 gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene exon 48552914 48553089 0.000000 + . gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene CDS 48558098 48558248 0.000000 + 1 gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene exon 48558098 48558248 0.000000 + . gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene CDS 48561919 48562025 0.000000 + 0 gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene exon 48561919 48562025 0.000000 + . gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene CDS 48562673 48562787 0.000000 + 1 gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene exon 48562673 48562787 0.000000 + . gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene CDS 48565785 48565892 0.000000 + 0 gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene exon 48565785 48565892 0.000000 + . gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene CDS 48568613 48568675 0.000000 + 0 gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene exon 48568613 48570422 0.000000 + . gene_id "RNF114"; transcript_id "NM_018683:uc002xux.3"; -chr20 hg19_knownGene exon 48552914 48553089 0.000000 + . gene_id "RNF114"; transcript_id "AK091976:uc002xuy.3"; -chr20 hg19_knownGene exon 48558120 48558248 0.000000 + . gene_id "RNF114"; transcript_id "AK091976:uc002xuy.3"; -chr20 hg19_knownGene exon 48561919 48562025 0.000000 + . gene_id "RNF114"; transcript_id "AK091976:uc002xuy.3"; -chr20 hg19_knownGene exon 48562673 48562787 0.000000 + . gene_id "RNF114"; transcript_id "AK091976:uc002xuy.3"; -chr20 hg19_knownGene exon 48565785 48565892 0.000000 + . gene_id "RNF114"; transcript_id "AK091976:uc002xuy.3"; -chr20 hg19_knownGene exon 48568613 48570422 0.000000 + . gene_id "RNF114"; transcript_id "AK091976:uc002xuy.3"; -chr20 hg19_knownGene CDS 48599597 48599678 0.000000 + 0 gene_id "SNAI1"; transcript_id "NM_005985:uc002xuz.3"; -chr20 hg19_knownGene exon 48599513 48599678 0.000000 + . gene_id "SNAI1"; transcript_id "NM_005985:uc002xuz.3"; -chr20 hg19_knownGene CDS 48600361 48600888 0.000000 + 2 gene_id "SNAI1"; transcript_id "NM_005985:uc002xuz.3"; -chr20 hg19_knownGene exon 48600361 48600888 0.000000 + . gene_id "SNAI1"; transcript_id "NM_005985:uc002xuz.3"; -chr20 hg19_knownGene CDS 48604409 48604590 0.000000 + 2 gene_id "SNAI1"; transcript_id "NM_005985:uc002xuz.3"; -chr20 hg19_knownGene exon 48604409 48605420 0.000000 + . gene_id "SNAI1"; transcript_id "NM_005985:uc002xuz.3"; -chr20 hg19_knownGene exon 48697661 48699451 0.000000 - . gene_id "UBE2V1"; transcript_id "BX648147:uc002xvb.3"; -chr20 hg19_knownGene exon 48700666 48700791 0.000000 - . gene_id "UBE2V1"; transcript_id "BX648147:uc002xvb.3"; -chr20 hg19_knownGene exon 48729644 48729710 0.000000 - . gene_id "UBE2V1"; transcript_id "BX648147:uc002xvb.3"; -chr20 hg19_knownGene CDS 48699308 48699451 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_001032288:uc002xva.3"; -chr20 hg19_knownGene exon 48697661 48699451 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_001032288:uc002xva.3"; -chr20 hg19_knownGene CDS 48700666 48700791 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_001032288:uc002xva.3"; -chr20 hg19_knownGene exon 48700666 48700791 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_001032288:uc002xva.3"; -chr20 hg19_knownGene CDS 48713209 48713357 0.000000 - 2 gene_id "UBE2V1"; transcript_id "NM_001032288:uc002xva.3"; -chr20 hg19_knownGene exon 48713209 48713357 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_001032288:uc002xva.3"; -chr20 hg19_knownGene CDS 48729644 48729665 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_001032288:uc002xva.3"; -chr20 hg19_knownGene exon 48729644 48729710 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_001032288:uc002xva.3"; -chr20 hg19_knownGene CDS 48699308 48699451 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_022442:uc002xvc.3"; -chr20 hg19_knownGene exon 48697661 48699451 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_022442:uc002xvc.3"; -chr20 hg19_knownGene CDS 48700666 48700791 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_022442:uc002xvc.3"; -chr20 hg19_knownGene exon 48700666 48700791 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_022442:uc002xvc.3"; -chr20 hg19_knownGene CDS 48732022 48732060 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_022442:uc002xvc.3"; -chr20 hg19_knownGene exon 48732022 48732158 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_022442:uc002xvc.3"; -chr20 hg19_knownGene exon 48732367 48732491 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_022442:uc002xvc.3"; -chr20 hg19_knownGene CDS 48699308 48699451 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_199144:uc002xvd.3"; -chr20 hg19_knownGene exon 48697661 48699451 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_199144:uc002xvd.3"; -chr20 hg19_knownGene CDS 48700666 48700791 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_199144:uc002xvd.3"; -chr20 hg19_knownGene exon 48700666 48700791 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_199144:uc002xvd.3"; -chr20 hg19_knownGene CDS 48713209 48713357 0.000000 - 2 gene_id "UBE2V1"; transcript_id "NM_199144:uc002xvd.3"; -chr20 hg19_knownGene exon 48713209 48713357 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_199144:uc002xvd.3"; -chr20 hg19_knownGene CDS 48732022 48732112 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_199144:uc002xvd.3"; -chr20 hg19_knownGene exon 48732022 48732158 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_199144:uc002xvd.3"; -chr20 hg19_knownGene exon 48732236 48732494 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_199144:uc002xvd.3"; -chr20 hg19_knownGene CDS 48699308 48699451 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_021988:uc002xve.3"; -chr20 hg19_knownGene exon 48697661 48699451 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_021988:uc002xve.3"; -chr20 hg19_knownGene CDS 48700666 48700791 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_021988:uc002xve.3"; -chr20 hg19_knownGene exon 48700666 48700791 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_021988:uc002xve.3"; -chr20 hg19_knownGene CDS 48713209 48713357 0.000000 - 2 gene_id "UBE2V1"; transcript_id "NM_021988:uc002xve.3"; -chr20 hg19_knownGene exon 48713209 48713357 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_021988:uc002xve.3"; -chr20 hg19_knownGene CDS 48732022 48732112 0.000000 - 0 gene_id "UBE2V1"; transcript_id "NM_021988:uc002xve.3"; -chr20 hg19_knownGene exon 48732022 48732494 0.000000 - . gene_id "UBE2V1"; transcript_id "NM_021988:uc002xve.3"; -chr20 hg19_knownGene CDS 48741598 48741716 0.000000 - 2 gene_id "TMEM189"; transcript_id "AK304595:uc010zyp.1"; -chr20 hg19_knownGene exon 48740274 48741716 0.000000 - . gene_id "TMEM189"; transcript_id "AK304595:uc010zyp.1"; -chr20 hg19_knownGene CDS 48744512 48744724 0.000000 - 2 gene_id "TMEM189"; transcript_id "AK304595:uc010zyp.1"; -chr20 hg19_knownGene exon 48744512 48744724 0.000000 - . gene_id "TMEM189"; transcript_id "AK304595:uc010zyp.1"; -chr20 hg19_knownGene CDS 48746083 48746227 0.000000 - 0 gene_id "TMEM189"; transcript_id "AK304595:uc010zyp.1"; -chr20 hg19_knownGene exon 48746083 48746227 0.000000 - . gene_id "TMEM189"; transcript_id "AK304595:uc010zyp.1"; -chr20 hg19_knownGene CDS 48747393 48747484 0.000000 - 2 gene_id "TMEM189"; transcript_id "AK304595:uc010zyp.1"; -chr20 hg19_knownGene exon 48747393 48747484 0.000000 - . gene_id "TMEM189"; transcript_id "AK304595:uc010zyp.1"; -chr20 hg19_knownGene CDS 48747557 48747572 0.000000 - 0 gene_id "TMEM189"; transcript_id "AK304595:uc010zyp.1"; -chr20 hg19_knownGene exon 48747557 48747673 0.000000 - . gene_id "TMEM189"; transcript_id "AK304595:uc010zyp.1"; -chr20 hg19_knownGene CDS 48699308 48699451 0.000000 - 0 gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene exon 48697661 48699451 0.000000 - . gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene CDS 48700666 48700791 0.000000 - 0 gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene exon 48700666 48700791 0.000000 - . gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene CDS 48713209 48713357 0.000000 - 2 gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene exon 48713209 48713357 0.000000 - . gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene CDS 48744512 48744724 0.000000 - 2 gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene exon 48744512 48744724 0.000000 - . gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene CDS 48746083 48746227 0.000000 - 0 gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene exon 48746083 48746227 0.000000 - . gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene CDS 48747393 48747484 0.000000 - 2 gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene exon 48747393 48747484 0.000000 - . gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene CDS 48760039 48760158 0.000000 - 2 gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene exon 48760039 48760158 0.000000 - . gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene CDS 48770054 48770174 0.000000 - 0 gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene exon 48770054 48770335 0.000000 - . gene_id "TMEM189-UBE2V1"; transcript_id "NM_199203:uc002xvf.3"; -chr20 hg19_knownGene exon 48740274 48741716 0.000000 - . gene_id "TMEM189"; transcript_id "NR_027889:uc010zyq.1"; -chr20 hg19_knownGene exon 48744512 48744724 0.000000 - . gene_id "TMEM189"; transcript_id "NR_027889:uc010zyq.1"; -chr20 hg19_knownGene exon 48746083 48746227 0.000000 - . gene_id "TMEM189"; transcript_id "NR_027889:uc010zyq.1"; -chr20 hg19_knownGene exon 48747393 48747484 0.000000 - . gene_id "TMEM189"; transcript_id "NR_027889:uc010zyq.1"; -chr20 hg19_knownGene exon 48760039 48760158 0.000000 - . gene_id "TMEM189"; transcript_id "NR_027889:uc010zyq.1"; -chr20 hg19_knownGene exon 48767749 48767852 0.000000 - . gene_id "TMEM189"; transcript_id "NR_027889:uc010zyq.1"; -chr20 hg19_knownGene exon 48770054 48770335 0.000000 - . gene_id "TMEM189"; transcript_id "NR_027889:uc010zyq.1"; -chr20 hg19_knownGene CDS 48741598 48741716 0.000000 - 2 gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene exon 48740274 48741716 0.000000 - . gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene CDS 48744512 48744724 0.000000 - 2 gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene exon 48744512 48744724 0.000000 - . gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene CDS 48746083 48746227 0.000000 - 0 gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene exon 48746083 48746227 0.000000 - . gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene CDS 48747393 48747484 0.000000 - 2 gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene exon 48747393 48747484 0.000000 - . gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene CDS 48760039 48760158 0.000000 - 2 gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene exon 48760039 48760158 0.000000 - . gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene CDS 48770054 48770174 0.000000 - 0 gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene exon 48770054 48770335 0.000000 - . gene_id "TMEM189"; transcript_id "NM_199129:uc002xvg.2"; -chr20 hg19_knownGene CDS 48741598 48741716 0.000000 - 2 gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene exon 48740274 48741716 0.000000 - . gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene CDS 48744512 48744724 0.000000 - 2 gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene exon 48744512 48744724 0.000000 - . gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene CDS 48746083 48746227 0.000000 - 0 gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene exon 48746083 48746227 0.000000 - . gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene CDS 48747402 48747484 0.000000 - 2 gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene exon 48747402 48747484 0.000000 - . gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene CDS 48760039 48760158 0.000000 - 2 gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene exon 48760039 48760158 0.000000 - . gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene CDS 48770054 48770174 0.000000 - 0 gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene exon 48770054 48770335 0.000000 - . gene_id "TMEM189"; transcript_id "NM_001162505:uc010gif.2"; -chr20 hg19_knownGene CDS 48807571 48808605 0.000000 + 0 gene_id "CEBPB"; transcript_id "NM_005194:uc002xvi.2"; -chr20 hg19_knownGene exon 48807120 48809227 0.000000 + . gene_id "CEBPB"; transcript_id "NM_005194:uc002xvi.2"; -chr20 hg19_knownGene exon 48884035 48884200 0.000000 + . gene_id "AK307192"; transcript_id "AK307192:uc010zyr.2"; -chr20 hg19_knownGene CDS 48892207 48892272 0.000000 + 0 gene_id "AK307192"; transcript_id "AK307192:uc010zyr.2"; -chr20 hg19_knownGene exon 48892183 48892272 0.000000 + . gene_id "AK307192"; transcript_id "AK307192:uc010zyr.2"; -chr20 hg19_knownGene CDS 48894028 48894150 0.000000 + 0 gene_id "AK307192"; transcript_id "AK307192:uc010zyr.2"; -chr20 hg19_knownGene exon 48894028 48894150 0.000000 + . gene_id "AK307192"; transcript_id "AK307192:uc010zyr.2"; -chr20 hg19_knownGene CDS 48894714 48894863 0.000000 + 0 gene_id "AK307192"; transcript_id "AK307192:uc010zyr.2"; -chr20 hg19_knownGene exon 48894714 48895368 0.000000 + . gene_id "AK307192"; transcript_id "AK307192:uc010zyr.2"; -chr20 hg19_knownGene exon 48909257 48909367 0.000000 + . gene_id "LOC284751"; transcript_id "NR_034124:uc002xvk.2"; -chr20 hg19_knownGene exon 48914693 48914950 0.000000 + . gene_id "LOC284751"; transcript_id "NR_034124:uc002xvk.2"; -chr20 hg19_knownGene exon 48928342 48928551 0.000000 + . gene_id "LOC284751"; transcript_id "NR_034124:uc002xvk.2"; -chr20 hg19_knownGene exon 48928889 48928967 0.000000 + . gene_id "LOC284751"; transcript_id "NR_034124:uc002xvk.2"; -chr20 hg19_knownGene exon 48929837 48931456 0.000000 + . gene_id "LOC284751"; transcript_id "NR_034124:uc002xvk.2"; -chr20 hg19_knownGene exon 48952342 48952423 0.000000 - . gene_id "TRNA_Leu"; transcript_id ":uc021wes.1"; -chr20 hg19_knownGene CDS 49127065 49127127 0.000000 + 0 gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49126891 49127127 0.000000 + . gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene CDS 49177900 49177990 0.000000 + 0 gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49177900 49177990 0.000000 + . gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene CDS 49181506 49181606 0.000000 + 2 gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49181506 49181606 0.000000 + . gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene CDS 49184917 49185015 0.000000 + 0 gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49184917 49185015 0.000000 + . gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene CDS 49191054 49191191 0.000000 + 0 gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49191054 49191191 0.000000 + . gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene CDS 49194957 49195166 0.000000 + 0 gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49194957 49195166 0.000000 + . gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene CDS 49195705 49195866 0.000000 + 0 gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49195705 49195866 0.000000 + . gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene CDS 49196240 49196463 0.000000 + 0 gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49196240 49196463 0.000000 + . gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene CDS 49197802 49197997 0.000000 + 1 gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49197802 49197997 0.000000 + . gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene CDS 49199229 49199249 0.000000 + 0 gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49199229 49201086 0.000000 + . gene_id "PTPN1"; transcript_id "NM_002827:uc002xvl.3"; -chr20 hg19_knownGene exon 49126891 49127127 0.000000 + . gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene CDS 49181571 49181606 0.000000 + 0 gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene exon 49181506 49181606 0.000000 + . gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene CDS 49184917 49185015 0.000000 + 0 gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene exon 49184917 49185015 0.000000 + . gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene CDS 49191054 49191191 0.000000 + 0 gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene exon 49191054 49191191 0.000000 + . gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene CDS 49194957 49195166 0.000000 + 0 gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene exon 49194957 49195166 0.000000 + . gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene CDS 49195705 49195866 0.000000 + 0 gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene exon 49195705 49195866 0.000000 + . gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene CDS 49196240 49196463 0.000000 + 0 gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene exon 49196240 49196463 0.000000 + . gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene CDS 49197802 49197997 0.000000 + 1 gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene exon 49197802 49197997 0.000000 + . gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene CDS 49199229 49199249 0.000000 + 0 gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene exon 49199229 49201086 0.000000 + . gene_id "PTPN1"; transcript_id "AK299830:uc010zys.2"; -chr20 hg19_knownGene exon 49202323 49202416 0.000000 + . gene_id "MIR645"; transcript_id "NR_030375:uc021wet.1"; -chr20 hg19_knownGene CDS 49203772 49203869 0.000000 - 2 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49202647 49203869 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49204339 49204429 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49204339 49204429 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49206223 49206306 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49206223 49206306 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49208881 49209083 0.000000 - 2 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49208881 49209083 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49209572 49209733 0.000000 - 2 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49209572 49209733 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49211090 49211251 0.000000 - 2 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49211090 49211251 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49211906 49212041 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49211906 49212041 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49212677 49212800 0.000000 - 1 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49212677 49212800 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49214117 49214247 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49214117 49214247 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49218609 49219181 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49218609 49219181 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49221182 49221311 0.000000 - 1 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49221182 49221311 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49224926 49225071 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49224926 49225071 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49225150 49225275 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49225150 49225275 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49225449 49225492 0.000000 - 2 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49225449 49225492 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49225830 49225893 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49225830 49225893 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49226110 49226259 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49226110 49226259 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49227390 49227443 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49227390 49227443 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49227718 49227741 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49227718 49227741 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49232539 49232617 0.000000 - 1 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49232539 49232617 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49236523 49236669 0.000000 - 1 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49236523 49236669 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49247275 49247384 0.000000 - 0 gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49247275 49247393 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene exon 49253118 49253426 0.000000 - . gene_id "FAM65C"; transcript_id "NM_080829:uc002xvm.3"; -chr20 hg19_knownGene CDS 49214116 49214247 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49213515 49214247 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49218609 49219181 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49218609 49219181 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49221182 49221311 0.000000 - 1 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49221182 49221311 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49224926 49225071 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49224926 49225071 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49225150 49225275 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49225150 49225275 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49225449 49225492 0.000000 - 2 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49225449 49225492 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49225830 49225893 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49225830 49225893 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49226110 49226259 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49226110 49226259 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49227390 49227443 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49227390 49227443 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49227718 49227741 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49227718 49227741 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49232539 49232617 0.000000 - 1 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49232539 49232617 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49236523 49236669 0.000000 - 1 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49236523 49236669 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene CDS 49247275 49247384 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49247275 49247393 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49253118 49253426 0.000000 - . gene_id "FAM65C"; transcript_id "AK056792:uc002xvn.1"; -chr20 hg19_knownGene exon 49209572 49209733 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49211090 49211251 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49211906 49212015 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49212677 49212800 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49214117 49214247 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49218609 49219181 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49221182 49221311 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49224926 49225071 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49225150 49225275 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49225449 49225492 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49225830 49225893 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49226110 49226259 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49227390 49227443 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49227718 49227741 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49232539 49232617 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49236523 49236669 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49247275 49247393 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene exon 49307478 49307758 0.000000 - . gene_id "FAM65C"; transcript_id "AK295781:uc010zyu.1"; -chr20 hg19_knownGene CDS 49203772 49203869 0.000000 - 2 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49202647 49203869 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49204339 49204429 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49204339 49204429 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49206223 49206306 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49206223 49206306 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49208881 49209083 0.000000 - 2 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49208881 49209083 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49209572 49209733 0.000000 - 2 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49209572 49209733 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49211090 49211251 0.000000 - 2 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49211090 49211251 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49211906 49212041 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49211906 49212041 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49212677 49212800 0.000000 - 1 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49212677 49212800 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49214117 49214247 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49214117 49214247 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49218609 49219181 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49218609 49219181 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49221182 49221311 0.000000 - 1 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49221182 49221311 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49224926 49225071 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49224926 49225071 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49225150 49225275 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49225150 49225275 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49225449 49225492 0.000000 - 2 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49225449 49225492 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49225830 49225893 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49225830 49225893 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49226110 49226259 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49226110 49226259 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49227390 49227443 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49227390 49227443 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49227718 49227741 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49227718 49227741 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49232539 49232617 0.000000 - 1 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49232539 49232617 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49236523 49236669 0.000000 - 1 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49236523 49236669 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49247275 49247393 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49247275 49247393 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49307663 49307665 0.000000 - 0 gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene exon 49307663 49307916 0.000000 - . gene_id "FAM65C"; transcript_id "AK299337:uc010zyt.2"; -chr20 hg19_knownGene CDS 49348324 49348389 0.000000 + 0 gene_id "PARD6B"; transcript_id "NM_032521:uc002xvo.3"; -chr20 hg19_knownGene exon 49348081 49348389 0.000000 + . gene_id "PARD6B"; transcript_id "NM_032521:uc002xvo.3"; -chr20 hg19_knownGene CDS 49354394 49354616 0.000000 + 0 gene_id "PARD6B"; transcript_id "NM_032521:uc002xvo.3"; -chr20 hg19_knownGene exon 49354394 49354616 0.000000 + . gene_id "PARD6B"; transcript_id "NM_032521:uc002xvo.3"; -chr20 hg19_knownGene CDS 49366196 49367022 0.000000 + 2 gene_id "PARD6B"; transcript_id "NM_032521:uc002xvo.3"; -chr20 hg19_knownGene exon 49366196 49370278 0.000000 + . gene_id "PARD6B"; transcript_id "NM_032521:uc002xvo.3"; -chr20 hg19_knownGene CDS 49411531 49411710 0.000000 + 0 gene_id "BCAS4"; transcript_id "BC056883:uc002xvp.1"; -chr20 hg19_knownGene exon 49411467 49411710 0.000000 + . gene_id "BCAS4"; transcript_id "BC056883:uc002xvp.1"; -chr20 hg19_knownGene CDS 49434748 49434819 0.000000 + 0 gene_id "BCAS4"; transcript_id "BC056883:uc002xvp.1"; -chr20 hg19_knownGene exon 49434748 49434819 0.000000 + . gene_id "BCAS4"; transcript_id "BC056883:uc002xvp.1"; -chr20 hg19_knownGene CDS 49446816 49446917 0.000000 + 0 gene_id "BCAS4"; transcript_id "BC056883:uc002xvp.1"; -chr20 hg19_knownGene exon 49446816 49446917 0.000000 + . gene_id "BCAS4"; transcript_id "BC056883:uc002xvp.1"; -chr20 hg19_knownGene CDS 49457074 49457076 0.000000 + 0 gene_id "BCAS4"; transcript_id "BC056883:uc002xvp.1"; -chr20 hg19_knownGene exon 49457074 49457463 0.000000 + . gene_id "BCAS4"; transcript_id "BC056883:uc002xvp.1"; -chr20 hg19_knownGene CDS 49411531 49411710 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene exon 49411467 49411710 0.000000 + . gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene CDS 49434748 49434819 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene exon 49434748 49434819 0.000000 + . gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene CDS 49446816 49446917 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene exon 49446816 49446917 0.000000 + . gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene CDS 49458303 49458437 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene exon 49458303 49458437 0.000000 + . gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene CDS 49492534 49492630 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene exon 49492534 49492630 0.000000 + . gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene CDS 49493023 49493069 0.000000 + 2 gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene exon 49493023 49493714 0.000000 + . gene_id "BCAS4"; transcript_id "NM_017843:uc002xvq.3"; -chr20 hg19_knownGene CDS 49411531 49411710 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_198799:uc002xvr.3"; -chr20 hg19_knownGene exon 49411467 49411710 0.000000 + . gene_id "BCAS4"; transcript_id "NM_198799:uc002xvr.3"; -chr20 hg19_knownGene CDS 49434748 49434819 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_198799:uc002xvr.3"; -chr20 hg19_knownGene exon 49434748 49434819 0.000000 + . gene_id "BCAS4"; transcript_id "NM_198799:uc002xvr.3"; -chr20 hg19_knownGene CDS 49446816 49446917 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_198799:uc002xvr.3"; -chr20 hg19_knownGene exon 49446816 49446917 0.000000 + . gene_id "BCAS4"; transcript_id "NM_198799:uc002xvr.3"; -chr20 hg19_knownGene CDS 49458303 49458437 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_198799:uc002xvr.3"; -chr20 hg19_knownGene exon 49458303 49458437 0.000000 + . gene_id "BCAS4"; transcript_id "NM_198799:uc002xvr.3"; -chr20 hg19_knownGene CDS 49493023 49493142 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_198799:uc002xvr.3"; -chr20 hg19_knownGene exon 49493023 49493714 0.000000 + . gene_id "BCAS4"; transcript_id "NM_198799:uc002xvr.3"; -chr20 hg19_knownGene CDS 49411531 49411710 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_001010974:uc002xvs.3"; -chr20 hg19_knownGene exon 49411467 49411710 0.000000 + . gene_id "BCAS4"; transcript_id "NM_001010974:uc002xvs.3"; -chr20 hg19_knownGene CDS 49434748 49434819 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_001010974:uc002xvs.3"; -chr20 hg19_knownGene exon 49434748 49434819 0.000000 + . gene_id "BCAS4"; transcript_id "NM_001010974:uc002xvs.3"; -chr20 hg19_knownGene CDS 49446816 49446917 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_001010974:uc002xvs.3"; -chr20 hg19_knownGene exon 49446816 49446917 0.000000 + . gene_id "BCAS4"; transcript_id "NM_001010974:uc002xvs.3"; -chr20 hg19_knownGene CDS 49493023 49493142 0.000000 + 0 gene_id "BCAS4"; transcript_id "NM_001010974:uc002xvs.3"; -chr20 hg19_knownGene exon 49493023 49493714 0.000000 + . gene_id "BCAS4"; transcript_id "NM_001010974:uc002xvs.3"; -chr20 hg19_knownGene CDS 49507945 49511049 0.000000 - 0 gene_id "ADNP"; transcript_id "NM_015339:uc002xvt.1"; -chr20 hg19_knownGene exon 49506883 49511049 0.000000 - . gene_id "ADNP"; transcript_id "NM_015339:uc002xvt.1"; -chr20 hg19_knownGene CDS 49518554 49518646 0.000000 - 0 gene_id "ADNP"; transcript_id "NM_015339:uc002xvt.1"; -chr20 hg19_knownGene exon 49518554 49518646 0.000000 - . gene_id "ADNP"; transcript_id "NM_015339:uc002xvt.1"; -chr20 hg19_knownGene CDS 49520426 49520533 0.000000 - 0 gene_id "ADNP"; transcript_id "NM_015339:uc002xvt.1"; -chr20 hg19_knownGene exon 49520426 49520538 0.000000 - . gene_id "ADNP"; transcript_id "NM_015339:uc002xvt.1"; -chr20 hg19_knownGene exon 49545188 49545362 0.000000 - . gene_id "ADNP"; transcript_id "NM_015339:uc002xvt.1"; -chr20 hg19_knownGene exon 49547363 49547527 0.000000 - . gene_id "ADNP"; transcript_id "NM_015339:uc002xvt.1"; -chr20 hg19_knownGene CDS 49507945 49511049 0.000000 - 0 gene_id "ADNP"; transcript_id "NM_181442:uc002xvu.1"; -chr20 hg19_knownGene exon 49506883 49511049 0.000000 - . gene_id "ADNP"; transcript_id "NM_181442:uc002xvu.1"; -chr20 hg19_knownGene CDS 49518554 49518646 0.000000 - 0 gene_id "ADNP"; transcript_id "NM_181442:uc002xvu.1"; -chr20 hg19_knownGene exon 49518554 49518646 0.000000 - . gene_id "ADNP"; transcript_id "NM_181442:uc002xvu.1"; -chr20 hg19_knownGene CDS 49520426 49520533 0.000000 - 0 gene_id "ADNP"; transcript_id "NM_181442:uc002xvu.1"; -chr20 hg19_knownGene exon 49520426 49520538 0.000000 - . gene_id "ADNP"; transcript_id "NM_181442:uc002xvu.1"; -chr20 hg19_knownGene exon 49547363 49547527 0.000000 - . gene_id "ADNP"; transcript_id "NM_181442:uc002xvu.1"; -chr20 hg19_knownGene CDS 49551672 49551773 0.000000 - 0 gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene exon 49551405 49551773 0.000000 - . gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene CDS 49552685 49552799 0.000000 - 1 gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene exon 49552685 49552799 0.000000 - . gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene CDS 49557402 49557470 0.000000 - 1 gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene exon 49557402 49557470 0.000000 - . gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene CDS 49558568 49558663 0.000000 - 1 gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene exon 49558568 49558663 0.000000 - . gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene CDS 49562274 49562299 0.000000 - 0 gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene exon 49562274 49562299 0.000000 - . gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene CDS 49562384 49562460 0.000000 - 2 gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene exon 49562384 49562460 0.000000 - . gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene CDS 49565166 49565199 0.000000 - 0 gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene exon 49565166 49565199 0.000000 - . gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene CDS 49571723 49571822 0.000000 - 1 gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene exon 49571723 49571822 0.000000 - . gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene CDS 49574900 49575060 0.000000 - 0 gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene exon 49574900 49575060 0.000000 - . gene_id "DPM1"; transcript_id "NM_003859:uc002xvw.1"; -chr20 hg19_knownGene exon 49551405 49551773 0.000000 - . gene_id "DPM1"; transcript_id "BC008427:uc002xvx.1"; -chr20 hg19_knownGene exon 49552685 49552799 0.000000 - . gene_id "DPM1"; transcript_id "BC008427:uc002xvx.1"; -chr20 hg19_knownGene exon 49557402 49557492 0.000000 - . gene_id "DPM1"; transcript_id "BC008427:uc002xvx.1"; -chr20 hg19_knownGene exon 49558568 49558663 0.000000 - . gene_id "DPM1"; transcript_id "BC008427:uc002xvx.1"; -chr20 hg19_knownGene exon 49562274 49562299 0.000000 - . gene_id "DPM1"; transcript_id "BC008427:uc002xvx.1"; -chr20 hg19_knownGene exon 49562384 49562460 0.000000 - . gene_id "DPM1"; transcript_id "BC008427:uc002xvx.1"; -chr20 hg19_knownGene exon 49565166 49565199 0.000000 - . gene_id "DPM1"; transcript_id "BC008427:uc002xvx.1"; -chr20 hg19_knownGene exon 49571723 49571822 0.000000 - . gene_id "DPM1"; transcript_id "BC008427:uc002xvx.1"; -chr20 hg19_knownGene exon 49574900 49575060 0.000000 - . gene_id "DPM1"; transcript_id "BC008427:uc002xvx.1"; -chr20 hg19_knownGene CDS 49575380 49576759 0.000000 + 0 gene_id "MOCS3"; transcript_id "NM_014484:uc002xvy.1"; -chr20 hg19_knownGene exon 49575363 49577820 0.000000 + . gene_id "MOCS3"; transcript_id "NM_014484:uc002xvy.1"; -chr20 hg19_knownGene CDS 49626051 49626875 0.000000 - 0 gene_id "KCNG1"; transcript_id "BC006367:uc002xwb.3"; -chr20 hg19_knownGene exon 49625216 49626901 0.000000 - . gene_id "KCNG1"; transcript_id "BC006367:uc002xwb.3"; -chr20 hg19_knownGene exon 49628896 49628953 0.000000 - . gene_id "KCNG1"; transcript_id "BC006367:uc002xwb.3"; -chr20 hg19_knownGene exon 49639191 49639617 0.000000 - . gene_id "KCNG1"; transcript_id "BC006367:uc002xwb.3"; -chr20 hg19_knownGene CDS 49620579 49621343 0.000000 - 0 gene_id "KCNG1"; transcript_id "NM_002237:uc002xwa.4"; -chr20 hg19_knownGene exon 49620193 49621343 0.000000 - . gene_id "KCNG1"; transcript_id "NM_002237:uc002xwa.4"; -chr20 hg19_knownGene CDS 49626102 49626875 0.000000 - 0 gene_id "KCNG1"; transcript_id "NM_002237:uc002xwa.4"; -chr20 hg19_knownGene exon 49626102 49626901 0.000000 - . gene_id "KCNG1"; transcript_id "NM_002237:uc002xwa.4"; -chr20 hg19_knownGene exon 49639407 49639675 0.000000 - . gene_id "KCNG1"; transcript_id "NM_002237:uc002xwa.4"; -chr20 hg19_knownGene exon 50069442 50069514 0.000000 - . gene_id "MIR3194"; transcript_id "NR_036162:uc021weu.1"; -chr20 hg19_knownGene exon 50007765 50007988 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50015227 50015267 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene exon 50015180 50015267 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50048604 50049293 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene exon 50048604 50049293 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50051725 50051851 0.000000 - 0 gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene exon 50051725 50051851 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50052243 50052298 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene exon 50052243 50052298 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50071085 50071225 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene exon 50071085 50071225 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50090517 50090689 0.000000 - 1 gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene exon 50090517 50090689 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50091995 50092197 0.000000 - 0 gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene exon 50091995 50092197 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50133323 50133494 0.000000 - 1 gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene exon 50133323 50133494 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50139620 50140649 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene exon 50139620 50140649 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50158909 50159038 0.000000 - 0 gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene exon 50158909 50159258 0.000000 - . gene_id "NFATC2"; transcript_id "NM_012340:uc002xwc.3"; -chr20 hg19_knownGene CDS 50007936 50007988 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50007765 50007988 0.000000 - . gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene CDS 50048604 50049293 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50048604 50049293 0.000000 - . gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene CDS 50051725 50051851 0.000000 - 0 gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50051725 50051851 0.000000 - . gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene CDS 50052243 50052298 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50052243 50052298 0.000000 - . gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene CDS 50071085 50071225 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50071085 50071225 0.000000 - . gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene CDS 50090517 50090689 0.000000 - 1 gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50090517 50090689 0.000000 - . gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene CDS 50091995 50092197 0.000000 - 0 gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50091995 50092197 0.000000 - . gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene CDS 50133323 50133494 0.000000 - 1 gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50133323 50133494 0.000000 - . gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene CDS 50139620 50140649 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50139620 50140649 0.000000 - . gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene CDS 50158909 50159038 0.000000 - 0 gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50158909 50159258 0.000000 - . gene_id "NFATC2"; transcript_id "NM_173091:uc002xwd.3"; -chr20 hg19_knownGene exon 50007765 50007988 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene CDS 50015227 50015267 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene exon 50015180 50015267 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene CDS 50048604 50049293 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene exon 50048604 50049293 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene CDS 50051725 50051851 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene exon 50051725 50051851 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene CDS 50052243 50052298 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene exon 50052243 50052298 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene CDS 50071085 50071225 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene exon 50071085 50071225 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene CDS 50090517 50090689 0.000000 - 1 gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene exon 50090517 50090689 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene CDS 50091995 50092197 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene exon 50091995 50092197 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene CDS 50133323 50133494 0.000000 - 1 gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene exon 50133323 50133494 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene CDS 50139620 50140122 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene exon 50139620 50140135 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene exon 50158909 50159258 0.000000 - . gene_id "NFATC2"; transcript_id "EU887576:uc010zyv.2"; -chr20 hg19_knownGene CDS 50007936 50007988 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50007765 50007988 0.000000 - . gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene CDS 50048604 50049293 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50048604 50049293 0.000000 - . gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene CDS 50051725 50051851 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50051725 50051851 0.000000 - . gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene CDS 50052243 50052298 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50052243 50052298 0.000000 - . gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene CDS 50071085 50071225 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50071085 50071225 0.000000 - . gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene CDS 50090517 50090689 0.000000 - 1 gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50090517 50090689 0.000000 - . gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene CDS 50091995 50092197 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50091995 50092197 0.000000 - . gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene CDS 50133323 50133494 0.000000 - 1 gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50133323 50133494 0.000000 - . gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene CDS 50139620 50140122 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50139620 50140135 0.000000 - . gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50158909 50159258 0.000000 - . gene_id "NFATC2"; transcript_id "EU887580:uc010zyw.2"; -chr20 hg19_knownGene exon 50007765 50007988 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene CDS 50015227 50015267 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50015180 50015267 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene CDS 50048604 50049293 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50048604 50049293 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene CDS 50051725 50051851 0.000000 - 0 gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50051725 50051851 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene CDS 50052243 50052298 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50052243 50052298 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene CDS 50071085 50071225 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50071085 50071225 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene CDS 50090517 50090689 0.000000 - 1 gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50090517 50090689 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene CDS 50091995 50092197 0.000000 - 0 gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50091995 50092197 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene CDS 50133323 50133494 0.000000 - 1 gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50133323 50133494 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene CDS 50139620 50140649 0.000000 - 2 gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50139620 50140649 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene CDS 50179099 50179168 0.000000 - 0 gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50179099 50179168 0.000000 - . gene_id "NFATC2"; transcript_id "NM_001136021:uc010zyx.2"; -chr20 hg19_knownGene exon 50007765 50007988 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene CDS 50015227 50015267 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene exon 50015180 50015267 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene CDS 50048604 50049293 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene exon 50048604 50049293 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene CDS 50051725 50051851 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene exon 50051725 50051851 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene CDS 50052243 50052298 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene exon 50052243 50052298 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene CDS 50071085 50071225 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene exon 50071085 50071225 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene CDS 50090517 50090689 0.000000 - 1 gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene exon 50090517 50090689 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene CDS 50091995 50092197 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene exon 50091995 50092197 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene CDS 50133323 50133494 0.000000 - 1 gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene exon 50133323 50133494 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene CDS 50139620 50140122 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene exon 50139620 50140135 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene exon 50179099 50179168 0.000000 - . gene_id "NFATC2"; transcript_id "EU887575:uc010zyy.2"; -chr20 hg19_knownGene CDS 50007936 50007988 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene exon 50007765 50007988 0.000000 - . gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene CDS 50048604 50049293 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene exon 50048604 50049293 0.000000 - . gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene CDS 50051725 50051851 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene exon 50051725 50051851 0.000000 - . gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene CDS 50052243 50052298 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene exon 50052243 50052298 0.000000 - . gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene CDS 50071085 50071225 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene exon 50071085 50071225 0.000000 - . gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene CDS 50090517 50090689 0.000000 - 1 gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene exon 50090517 50090689 0.000000 - . gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene CDS 50091995 50092197 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene exon 50091995 50092197 0.000000 - . gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene CDS 50133323 50133494 0.000000 - 1 gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene exon 50133323 50133494 0.000000 - . gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene CDS 50139620 50140122 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene exon 50139620 50140135 0.000000 - . gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene exon 50179099 50179168 0.000000 - . gene_id "NFATC2"; transcript_id "EU887579:uc010zyz.2"; -chr20 hg19_knownGene CDS 50007936 50007988 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene exon 50007765 50007988 0.000000 - . gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene CDS 50048604 50049293 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene exon 50048604 50049293 0.000000 - . gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene CDS 50051725 50051851 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene exon 50051725 50051851 0.000000 - . gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene CDS 50052243 50052298 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene exon 50052243 50052298 0.000000 - . gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene CDS 50071085 50071225 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene exon 50071085 50071225 0.000000 - . gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene CDS 50090517 50090689 0.000000 - 1 gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene exon 50090517 50090689 0.000000 - . gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene CDS 50091995 50092197 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene exon 50091995 50092197 0.000000 - . gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene CDS 50133323 50133494 0.000000 - 1 gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene exon 50133323 50133494 0.000000 - . gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene CDS 50139620 50140649 0.000000 - 2 gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene exon 50139620 50140649 0.000000 - . gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene CDS 50179099 50179168 0.000000 - 0 gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene exon 50179099 50179168 0.000000 - . gene_id "NFATC2"; transcript_id "EU887577:uc002xwe.3"; -chr20 hg19_knownGene CDS 50217753 50217886 0.000000 - 2 gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50213314 50217886 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene CDS 50221356 50221559 0.000000 - 2 gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50221356 50221559 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene CDS 50224066 50224123 0.000000 - 0 gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50224066 50224123 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene CDS 50225057 50225165 0.000000 - 1 gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50225057 50225165 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene CDS 50226640 50226704 0.000000 - 0 gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50226640 50226704 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene CDS 50230216 50230302 0.000000 - 0 gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50230216 50230371 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50234029 50234039 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50292701 50292747 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50305603 50305678 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50307278 50307358 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50310547 50310641 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50312632 50312683 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene exon 50313963 50314042 0.000000 - . gene_id "ATP9A"; transcript_id "BC063701:uc002xwf.1"; -chr20 hg19_knownGene CDS 50217753 50217886 0.000000 - 2 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50213314 50217886 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50221356 50221559 0.000000 - 2 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50221356 50221559 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50224066 50224123 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50224066 50224123 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50225057 50225165 0.000000 - 1 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50225057 50225165 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50226640 50226704 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50226640 50226704 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50230216 50230371 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50230216 50230371 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50234029 50234093 0.000000 - 2 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50234029 50234093 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50235201 50235345 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50235201 50235345 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50235493 50235582 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50235493 50235582 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50238613 50238711 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50238613 50238711 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50241731 50241901 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50241731 50241901 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50244139 50244222 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50244139 50244222 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50245519 50245611 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50245519 50245611 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50255882 50256043 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50255882 50256043 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50273477 50273689 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50273477 50273689 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50286536 50286648 0.000000 - 2 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50286536 50286648 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50287654 50287796 0.000000 - 1 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50287654 50287796 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50290692 50290852 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50290692 50290852 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50292671 50292747 0.000000 - 2 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50292671 50292747 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50305603 50305678 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50305603 50305678 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50307278 50307358 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50307278 50307358 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50310547 50310641 0.000000 - 2 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50310547 50310641 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50312632 50312683 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50312632 50312683 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50313963 50314021 0.000000 - 2 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50313963 50314021 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50329505 50329613 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50329505 50329613 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50342358 50342471 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50342358 50342471 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50346373 50346517 0.000000 - 1 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50346373 50346517 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50384841 50384908 0.000000 - 0 gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene exon 50384841 50384908 0.000000 - . gene_id "ATP9A"; transcript_id "NM_006045:uc002xwg.1"; -chr20 hg19_knownGene CDS 50217753 50217886 0.000000 - 2 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50213314 50217886 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50221356 50221559 0.000000 - 2 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50221356 50221559 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50224066 50224123 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50224066 50224123 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50225057 50225165 0.000000 - 1 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50225057 50225165 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50226640 50226704 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50226640 50226704 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50230216 50230371 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50230216 50230371 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50234029 50234093 0.000000 - 2 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50234029 50234093 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50235201 50235345 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50235201 50235345 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50235493 50235582 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50235493 50235582 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50238613 50238711 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50238613 50238711 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50241731 50241901 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50241731 50241901 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50244139 50244222 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50244139 50244222 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50245519 50245611 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50245519 50245611 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50255882 50256043 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50255882 50256043 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50273477 50273689 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50273477 50273689 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50286536 50286648 0.000000 - 2 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50286536 50286648 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50287654 50287796 0.000000 - 1 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50287654 50287796 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50290692 50290852 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50290692 50290852 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50292671 50292747 0.000000 - 2 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50292671 50292747 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50329505 50329613 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50329505 50329613 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50342358 50342471 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50342358 50342471 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50346373 50346517 0.000000 - 1 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50346373 50346517 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50384841 50384863 0.000000 - 0 gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene exon 50384841 50384908 0.000000 - . gene_id "ATP9A"; transcript_id "AB385363:uc010gih.1"; -chr20 hg19_knownGene CDS 50400807 50401223 0.000000 - 0 gene_id "SALL4"; transcript_id "NM_020436:uc002xwh.4"; -chr20 hg19_knownGene exon 50400583 50401223 0.000000 - . gene_id "SALL4"; transcript_id "NM_020436:uc002xwh.4"; -chr20 hg19_knownGene CDS 50405400 50405680 0.000000 - 2 gene_id "SALL4"; transcript_id "NM_020436:uc002xwh.4"; -chr20 hg19_knownGene exon 50405400 50405680 0.000000 - . gene_id "SALL4"; transcript_id "NM_020436:uc002xwh.4"; -chr20 hg19_knownGene CDS 50406561 50408891 0.000000 - 2 gene_id "SALL4"; transcript_id "NM_020436:uc002xwh.4"; -chr20 hg19_knownGene exon 50406561 50408891 0.000000 - . gene_id "SALL4"; transcript_id "NM_020436:uc002xwh.4"; -chr20 hg19_knownGene CDS 50418818 50418947 0.000000 - 0 gene_id "SALL4"; transcript_id "NM_020436:uc002xwh.4"; -chr20 hg19_knownGene exon 50418818 50419048 0.000000 - . gene_id "SALL4"; transcript_id "NM_020436:uc002xwh.4"; -chr20 hg19_knownGene CDS 50400807 50401223 0.000000 - 0 gene_id "SALL4"; transcript_id "AY170621:uc010gii.3"; -chr20 hg19_knownGene exon 50400583 50401223 0.000000 - . gene_id "SALL4"; transcript_id "AY170621:uc010gii.3"; -chr20 hg19_knownGene CDS 50405400 50405680 0.000000 - 2 gene_id "SALL4"; transcript_id "AY170621:uc010gii.3"; -chr20 hg19_knownGene exon 50405400 50405680 0.000000 - . gene_id "SALL4"; transcript_id "AY170621:uc010gii.3"; -chr20 hg19_knownGene CDS 50407872 50408891 0.000000 - 2 gene_id "SALL4"; transcript_id "AY170621:uc010gii.3"; -chr20 hg19_knownGene exon 50407872 50408891 0.000000 - . gene_id "SALL4"; transcript_id "AY170621:uc010gii.3"; -chr20 hg19_knownGene CDS 50418818 50418947 0.000000 - 0 gene_id "SALL4"; transcript_id "AY170621:uc010gii.3"; -chr20 hg19_knownGene exon 50418818 50419048 0.000000 - . gene_id "SALL4"; transcript_id "AY170621:uc010gii.3"; -chr20 hg19_knownGene CDS 50400807 50401223 0.000000 - 0 gene_id "SALL4"; transcript_id "AY170622:uc002xwi.4"; -chr20 hg19_knownGene exon 50400583 50401223 0.000000 - . gene_id "SALL4"; transcript_id "AY170622:uc002xwi.4"; -chr20 hg19_knownGene CDS 50405400 50405680 0.000000 - 2 gene_id "SALL4"; transcript_id "AY170622:uc002xwi.4"; -chr20 hg19_knownGene exon 50405400 50405680 0.000000 - . gene_id "SALL4"; transcript_id "AY170622:uc002xwi.4"; -chr20 hg19_knownGene CDS 50418818 50418947 0.000000 - 0 gene_id "SALL4"; transcript_id "AY170622:uc002xwi.4"; -chr20 hg19_knownGene exon 50418818 50419048 0.000000 - . gene_id "SALL4"; transcript_id "AY170622:uc002xwi.4"; -chr20 hg19_knownGene CDS 50701099 50701805 0.000000 - 2 gene_id "ZFP64"; transcript_id "AK022690:uc002xwj.3"; -chr20 hg19_knownGene exon 50700550 50701805 0.000000 - . gene_id "ZFP64"; transcript_id "AK022690:uc002xwj.3"; -chr20 hg19_knownGene CDS 50704931 50705182 0.000000 - 2 gene_id "ZFP64"; transcript_id "AK022690:uc002xwj.3"; -chr20 hg19_knownGene exon 50704931 50705182 0.000000 - . gene_id "ZFP64"; transcript_id "AK022690:uc002xwj.3"; -chr20 hg19_knownGene CDS 50713912 50713974 0.000000 - 2 gene_id "ZFP64"; transcript_id "AK022690:uc002xwj.3"; -chr20 hg19_knownGene exon 50713912 50713974 0.000000 - . gene_id "ZFP64"; transcript_id "AK022690:uc002xwj.3"; -chr20 hg19_knownGene CDS 50714977 50715126 0.000000 - 2 gene_id "ZFP64"; transcript_id "AK022690:uc002xwj.3"; -chr20 hg19_knownGene exon 50714977 50715126 0.000000 - . gene_id "ZFP64"; transcript_id "AK022690:uc002xwj.3"; -chr20 hg19_knownGene CDS 50721671 50721776 0.000000 - 0 gene_id "ZFP64"; transcript_id "AK022690:uc002xwj.3"; -chr20 hg19_knownGene exon 50721671 50722023 0.000000 - . gene_id "ZFP64"; transcript_id "AK022690:uc002xwj.3"; -chr20 hg19_knownGene CDS 50701099 50701805 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene exon 50700550 50701805 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene CDS 50704931 50705182 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene exon 50704931 50705182 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene CDS 50713912 50713974 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene exon 50713912 50713974 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene CDS 50714977 50715126 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene exon 50714977 50715126 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene CDS 50776662 50776913 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene exon 50776662 50776913 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene CDS 50781234 50781296 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene exon 50781234 50781296 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene CDS 50782403 50782564 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene exon 50782403 50782564 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene CDS 50803371 50803610 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene exon 50803371 50803610 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene CDS 50808130 50808175 0.000000 - 0 gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene exon 50808130 50808524 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199427:uc002xwk.3"; -chr20 hg19_knownGene CDS 50768688 50769967 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene exon 50767817 50769967 0.000000 - . gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene CDS 50776662 50776913 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene exon 50776662 50776913 0.000000 - . gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene CDS 50781234 50781296 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene exon 50781234 50781296 0.000000 - . gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene CDS 50782403 50782564 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene exon 50782403 50782564 0.000000 - . gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene CDS 50803371 50803610 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene exon 50803371 50803610 0.000000 - . gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene CDS 50808130 50808175 0.000000 - 0 gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene exon 50808130 50808524 0.000000 - . gene_id "ZFP64"; transcript_id "NM_018197:uc002xwl.3"; -chr20 hg19_knownGene CDS 50768688 50769967 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene exon 50767817 50769967 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene CDS 50776662 50776913 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene exon 50776662 50776913 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene CDS 50781234 50781296 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene exon 50781234 50781296 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene CDS 50782403 50782564 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene exon 50782403 50782564 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene CDS 50803371 50803604 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene exon 50803371 50803604 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene CDS 50808130 50808175 0.000000 - 0 gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene exon 50808130 50808524 0.000000 - . gene_id "ZFP64"; transcript_id "NM_199426:uc002xwm.3"; -chr20 hg19_knownGene CDS 50768688 50769967 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_022088:uc002xwn.3"; -chr20 hg19_knownGene exon 50767817 50769967 0.000000 - . gene_id "ZFP64"; transcript_id "NM_022088:uc002xwn.3"; -chr20 hg19_knownGene CDS 50776662 50776913 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_022088:uc002xwn.3"; -chr20 hg19_knownGene exon 50776662 50776913 0.000000 - . gene_id "ZFP64"; transcript_id "NM_022088:uc002xwn.3"; -chr20 hg19_knownGene CDS 50781234 50781296 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_022088:uc002xwn.3"; -chr20 hg19_knownGene exon 50781234 50781296 0.000000 - . gene_id "ZFP64"; transcript_id "NM_022088:uc002xwn.3"; -chr20 hg19_knownGene CDS 50803371 50803610 0.000000 - 2 gene_id "ZFP64"; transcript_id "NM_022088:uc002xwn.3"; -chr20 hg19_knownGene exon 50803371 50803610 0.000000 - . gene_id "ZFP64"; transcript_id "NM_022088:uc002xwn.3"; -chr20 hg19_knownGene CDS 50808130 50808175 0.000000 - 0 gene_id "ZFP64"; transcript_id "NM_022088:uc002xwn.3"; -chr20 hg19_knownGene exon 50808130 50808524 0.000000 - . gene_id "ZFP64"; transcript_id "NM_022088:uc002xwn.3"; -chr20 hg19_knownGene exon 51218338 51218415 0.000000 - . gene_id "TRNA_Pseudo"; transcript_id ":uc021wev.1"; -chr20 hg19_knownGene exon 51714191 51714523 0.000000 + . gene_id "7SK"; transcript_id ":uc021wew.1"; -chr20 hg19_knownGene CDS 51589833 51589872 0.000000 + 0 gene_id "TSHZ2"; transcript_id "NM_173485:uc002xwo.3"; -chr20 hg19_knownGene exon 51588946 51589872 0.000000 + . gene_id "TSHZ2"; transcript_id "NM_173485:uc002xwo.3"; -chr20 hg19_knownGene CDS 51870038 51873099 0.000000 + 2 gene_id "TSHZ2"; transcript_id "NM_173485:uc002xwo.3"; -chr20 hg19_knownGene exon 51870038 51873110 0.000000 + . gene_id "TSHZ2"; transcript_id "NM_173485:uc002xwo.3"; -chr20 hg19_knownGene exon 52103683 52111869 0.000000 + . gene_id "TSHZ2"; transcript_id "NM_173485:uc002xwo.3"; -chr20 hg19_knownGene CDS 51802185 51802215 0.000000 + 0 gene_id "TSHZ2"; transcript_id "NM_001193421:uc021wex.1"; -chr20 hg19_knownGene exon 51801822 51802215 0.000000 + . gene_id "TSHZ2"; transcript_id "NM_001193421:uc021wex.1"; -chr20 hg19_knownGene CDS 51870038 51873099 0.000000 + 2 gene_id "TSHZ2"; transcript_id "NM_001193421:uc021wex.1"; -chr20 hg19_knownGene exon 51870038 51873110 0.000000 + . gene_id "TSHZ2"; transcript_id "NM_001193421:uc021wex.1"; -chr20 hg19_knownGene exon 52103683 52111869 0.000000 + . gene_id "TSHZ2"; transcript_id "NM_001193421:uc021wex.1"; -chr20 hg19_knownGene exon 52015467 52017025 0.000000 - . gene_id "AK056432"; transcript_id "AK056432:uc002xwp.1"; -chr20 hg19_knownGene exon 52017671 52017772 0.000000 - . gene_id "AK056432"; transcript_id "AK056432:uc002xwp.1"; -chr20 hg19_knownGene exon 52120648 52120860 0.000000 - . gene_id "AK056432"; transcript_id "AK056432:uc002xwp.1"; -chr20 hg19_knownGene exon 52183610 52185803 0.000000 - . gene_id "ZNF217"; transcript_id "NM_006526:uc002xwq.4"; -chr20 hg19_knownGene CDS 52188286 52188392 0.000000 - 2 gene_id "ZNF217"; transcript_id "NM_006526:uc002xwq.4"; -chr20 hg19_knownGene exon 52188260 52188392 0.000000 - . gene_id "ZNF217"; transcript_id "NM_006526:uc002xwq.4"; -chr20 hg19_knownGene CDS 52192266 52193819 0.000000 - 2 gene_id "ZNF217"; transcript_id "NM_006526:uc002xwq.4"; -chr20 hg19_knownGene exon 52192266 52193819 0.000000 - . gene_id "ZNF217"; transcript_id "NM_006526:uc002xwq.4"; -chr20 hg19_knownGene CDS 52194873 52194989 0.000000 - 2 gene_id "ZNF217"; transcript_id "NM_006526:uc002xwq.4"; -chr20 hg19_knownGene exon 52194873 52194989 0.000000 - . gene_id "ZNF217"; transcript_id "NM_006526:uc002xwq.4"; -chr20 hg19_knownGene CDS 52198000 52199365 0.000000 - 0 gene_id "ZNF217"; transcript_id "NM_006526:uc002xwq.4"; -chr20 hg19_knownGene exon 52198000 52199707 0.000000 - . gene_id "ZNF217"; transcript_id "NM_006526:uc002xwq.4"; -chr20 hg19_knownGene CDS 52192270 52193819 0.000000 - 2 gene_id "ZNF217"; transcript_id "AK290350:uc010gij.1"; -chr20 hg19_knownGene exon 52192266 52193819 0.000000 - . gene_id "ZNF217"; transcript_id "AK290350:uc010gij.1"; -chr20 hg19_knownGene CDS 52194873 52194989 0.000000 - 2 gene_id "ZNF217"; transcript_id "AK290350:uc010gij.1"; -chr20 hg19_knownGene exon 52194873 52194989 0.000000 - . gene_id "ZNF217"; transcript_id "AK290350:uc010gij.1"; -chr20 hg19_knownGene CDS 52198000 52199341 0.000000 - 0 gene_id "ZNF217"; transcript_id "AK290350:uc010gij.1"; -chr20 hg19_knownGene exon 52198000 52199707 0.000000 - . gene_id "ZNF217"; transcript_id "AK290350:uc010gij.1"; -chr20 hg19_knownGene exon 52210646 52210801 0.000000 - . gene_id "ZNF217"; transcript_id "AK290350:uc010gij.1"; -chr20 hg19_knownGene exon 52491040 52492248 0.000000 - . gene_id "SUMO1P1"; transcript_id "NR_002189:uc010gik.3"; -chr20 hg19_knownGene CDS 52561464 52561535 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene exon 52560079 52561535 0.000000 - . gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene CDS 52569971 52570234 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene exon 52569971 52570234 0.000000 - . gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene CDS 52601826 52602038 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene exon 52601826 52602038 0.000000 - . gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene CDS 52609051 52609185 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene exon 52609051 52609185 0.000000 - . gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene CDS 52611551 52611595 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene exon 52611551 52611595 0.000000 - . gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene CDS 52612431 52612451 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene exon 52612431 52612736 0.000000 - . gene_id "BCAS1"; transcript_id "AK294150:uc010zza.1"; -chr20 hg19_knownGene CDS 52561464 52561535 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene exon 52560079 52561535 0.000000 - . gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene CDS 52569971 52570234 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene exon 52569971 52570234 0.000000 - . gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene CDS 52583445 52583612 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene exon 52583445 52583612 0.000000 - . gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene CDS 52591928 52591969 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene exon 52591928 52591969 0.000000 - . gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene CDS 52601826 52602038 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene exon 52601826 52602038 0.000000 - . gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene CDS 52609051 52609185 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene exon 52609051 52609185 0.000000 - . gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene CDS 52611551 52611595 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene exon 52611551 52611595 0.000000 - . gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene CDS 52612431 52612589 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene exon 52612431 52612589 0.000000 - . gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene CDS 52644931 52645362 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene exon 52644931 52645511 0.000000 - . gene_id "BCAS1"; transcript_id "AK295318:uc010zzb.1"; -chr20 hg19_knownGene CDS 52561464 52561535 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene exon 52560079 52561535 0.000000 - . gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene CDS 52569971 52570234 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene exon 52569971 52570234 0.000000 - . gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene CDS 52601826 52602038 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene exon 52601826 52602038 0.000000 - . gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene CDS 52609051 52609185 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene exon 52609051 52609185 0.000000 - . gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene CDS 52611551 52611595 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene exon 52611551 52611595 0.000000 - . gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene CDS 52612431 52612589 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene exon 52612431 52612589 0.000000 - . gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene CDS 52644931 52645362 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene exon 52644931 52645511 0.000000 - . gene_id "BCAS1"; transcript_id "AK316038:uc010gim.2"; -chr20 hg19_knownGene exon 52684947 52685024 0.000000 - . gene_id "MIR4756"; transcript_id "NR_039913:uc021wey.1"; -chr20 hg19_knownGene CDS 52561464 52561535 0.000000 - 0 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52560079 52561535 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52569971 52570234 0.000000 - 0 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52569971 52570234 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52573971 52574036 0.000000 - 0 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52573971 52574036 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52583445 52583612 0.000000 - 0 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52583445 52583612 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52591928 52591969 0.000000 - 0 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52591928 52591969 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52601826 52602038 0.000000 - 0 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52601826 52602038 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52611551 52611595 0.000000 - 0 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52611551 52611595 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52612431 52612589 0.000000 - 0 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52612431 52612589 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52644931 52645511 0.000000 - 2 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52644931 52645511 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52674624 52674693 0.000000 - 0 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52674624 52674693 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52675186 52675257 0.000000 - 0 gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52675186 52675262 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene exon 52686972 52687304 0.000000 - . gene_id "BCAS1"; transcript_id "NM_003657:uc002xws.2"; -chr20 hg19_knownGene CDS 52561464 52561535 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52560079 52561535 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene CDS 52569971 52570234 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52569971 52570234 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene CDS 52573971 52574036 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52573971 52574036 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene CDS 52583445 52583612 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52583445 52583612 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene CDS 52601826 52602038 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52601826 52602038 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene CDS 52611551 52611595 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52611551 52611595 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene CDS 52612431 52612589 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52612431 52612589 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene CDS 52644931 52645511 0.000000 - 2 gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52644931 52645511 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene CDS 52674624 52674693 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52674624 52674693 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene CDS 52675186 52675257 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52675186 52675262 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene exon 52686972 52687304 0.000000 - . gene_id "BCAS1"; transcript_id "AK225656:uc002xwt.2"; -chr20 hg19_knownGene CDS 52561464 52561535 0.000000 - 0 gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene exon 52560079 52561535 0.000000 - . gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene CDS 52569971 52570234 0.000000 - 0 gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene exon 52569971 52570234 0.000000 - . gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene CDS 52591928 52591969 0.000000 - 0 gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene exon 52591928 52591969 0.000000 - . gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene CDS 52601826 52602038 0.000000 - 0 gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene exon 52601826 52602038 0.000000 - . gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene CDS 52611551 52611595 0.000000 - 0 gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene exon 52611551 52611595 0.000000 - . gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene CDS 52612431 52612589 0.000000 - 0 gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene exon 52612431 52612589 0.000000 - . gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene CDS 52644931 52645511 0.000000 - 2 gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene exon 52644931 52645511 0.000000 - . gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene CDS 52674624 52674693 0.000000 - 0 gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene exon 52674624 52674693 0.000000 - . gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene CDS 52675186 52675257 0.000000 - 0 gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene exon 52675186 52675262 0.000000 - . gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene exon 52686972 52687304 0.000000 - . gene_id "BCAS1"; transcript_id "BC024044:uc010gil.1"; -chr20 hg19_knownGene CDS 52644871 52645362 0.000000 - 0 gene_id "BCAS1"; transcript_id "AK304213:uc010zzc.2"; -chr20 hg19_knownGene exon 52644411 52645511 0.000000 - . gene_id "BCAS1"; transcript_id "AK304213:uc010zzc.2"; -chr20 hg19_knownGene exon 52686972 52687304 0.000000 - . gene_id "BCAS1"; transcript_id "AK304213:uc010zzc.2"; -chr20 hg19_knownGene exon 52769988 52771300 0.000000 - . gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene CDS 52773721 52773828 0.000000 - 0 gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene exon 52773708 52773828 0.000000 - . gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene CDS 52773927 52774124 0.000000 - 0 gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene exon 52773927 52774124 0.000000 - . gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene CDS 52774625 52774703 0.000000 - 1 gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene exon 52774625 52774703 0.000000 - . gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene CDS 52775496 52775662 0.000000 - 0 gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene exon 52775496 52775662 0.000000 - . gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene CDS 52779256 52779401 0.000000 - 2 gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene exon 52779256 52779401 0.000000 - . gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene CDS 52780991 52781102 0.000000 - 0 gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene exon 52780991 52781102 0.000000 - . gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene CDS 52782281 52782372 0.000000 - 2 gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene exon 52782281 52782372 0.000000 - . gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene CDS 52786131 52786227 0.000000 - 0 gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene exon 52786131 52786227 0.000000 - . gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene CDS 52788116 52788232 0.000000 - 0 gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene exon 52788116 52788492 0.000000 - . gene_id "CYP24A1"; transcript_id "AY858838:uc002xwu.1"; -chr20 hg19_knownGene exon 52769988 52771300 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52773721 52773828 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52773708 52773828 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52773927 52774124 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52773927 52774124 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52774625 52774703 0.000000 - 1 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52774625 52774703 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52775496 52775662 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52775496 52775662 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52779256 52779401 0.000000 - 2 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52779256 52779401 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52780991 52781102 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52780991 52781102 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52782281 52782372 0.000000 - 2 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52782281 52782372 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52786131 52786227 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52786131 52786227 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52788116 52788209 0.000000 - 1 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52788116 52788209 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52789448 52789638 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52789448 52789638 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene CDS 52789861 52790118 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52789861 52790516 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_000782:uc002xwv.2"; -chr20 hg19_knownGene exon 52769988 52771300 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52773721 52773828 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene exon 52773708 52773828 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52774625 52774703 0.000000 - 1 gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene exon 52774625 52774703 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52775496 52775662 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene exon 52775496 52775662 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52779256 52779401 0.000000 - 2 gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene exon 52779256 52779401 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52780991 52781102 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene exon 52780991 52781102 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52782281 52782372 0.000000 - 2 gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene exon 52782281 52782372 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52786131 52786227 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene exon 52786131 52786227 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52788116 52788209 0.000000 - 1 gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene exon 52788116 52788209 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52789448 52789638 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene exon 52789448 52789638 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52789861 52790118 0.000000 - 0 gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene exon 52789861 52790516 0.000000 - . gene_id "CYP24A1"; transcript_id "NM_001128915:uc002xww.2"; -chr20 hg19_knownGene CDS 52824640 52824663 0.000000 + 0 gene_id "PFDN4"; transcript_id "NM_002623:uc002xwx.3"; -chr20 hg19_knownGene exon 52824502 52824663 0.000000 + . gene_id "PFDN4"; transcript_id "NM_002623:uc002xwx.3"; -chr20 hg19_knownGene CDS 52830890 52830997 0.000000 + 0 gene_id "PFDN4"; transcript_id "NM_002623:uc002xwx.3"; -chr20 hg19_knownGene exon 52830890 52830997 0.000000 + . gene_id "PFDN4"; transcript_id "NM_002623:uc002xwx.3"; -chr20 hg19_knownGene CDS 52831839 52831979 0.000000 + 0 gene_id "PFDN4"; transcript_id "NM_002623:uc002xwx.3"; -chr20 hg19_knownGene exon 52831839 52831979 0.000000 + . gene_id "PFDN4"; transcript_id "NM_002623:uc002xwx.3"; -chr20 hg19_knownGene CDS 52835558 52835686 0.000000 + 0 gene_id "PFDN4"; transcript_id "NM_002623:uc002xwx.3"; -chr20 hg19_knownGene exon 52835558 52836492 0.000000 + . gene_id "PFDN4"; transcript_id "NM_002623:uc002xwx.3"; -chr20 hg19_knownGene CDS 53092486 53092551 0.000000 + 0 gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene exon 53092266 53092551 0.000000 + . gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene CDS 53171472 53171579 0.000000 + 0 gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene exon 53171472 53171579 0.000000 + . gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene CDS 53205022 53205136 0.000000 + 0 gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene exon 53205022 53205136 0.000000 + . gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene CDS 53205226 53205345 0.000000 + 2 gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene exon 53205226 53205345 0.000000 + . gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene CDS 53208155 53208344 0.000000 + 2 gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene exon 53208155 53208344 0.000000 + . gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene CDS 53226927 53227062 0.000000 + 1 gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene exon 53226927 53227062 0.000000 + . gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene CDS 53259997 53260117 0.000000 + 0 gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene exon 53259997 53260117 0.000000 + . gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene CDS 53266954 53267015 0.000000 + 2 gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene exon 53266954 53267710 0.000000 + . gene_id "DOK5"; transcript_id "NM_018431:uc002xwy.3"; -chr20 hg19_knownGene exon 53476227 53476351 0.000000 - . gene_id "U4atac"; transcript_id ":uc021wez.1"; -chr20 hg19_knownGene CDS 54573616 54573810 0.000000 - 0 gene_id "CBLN4"; transcript_id "NM_080617:uc002xxa.3"; -chr20 hg19_knownGene exon 54572496 54573810 0.000000 - . gene_id "CBLN4"; transcript_id "NM_080617:uc002xxa.3"; -chr20 hg19_knownGene CDS 54575787 54575903 0.000000 - 0 gene_id "CBLN4"; transcript_id "NM_080617:uc002xxa.3"; -chr20 hg19_knownGene exon 54575787 54575903 0.000000 - . gene_id "CBLN4"; transcript_id "NM_080617:uc002xxa.3"; -chr20 hg19_knownGene CDS 54578937 54579227 0.000000 - 0 gene_id "CBLN4"; transcript_id "NM_080617:uc002xxa.3"; -chr20 hg19_knownGene exon 54578937 54580012 0.000000 - . gene_id "CBLN4"; transcript_id "NM_080617:uc002xxa.3"; -chr20 hg19_knownGene exon 54780108 54780229 0.000000 - . gene_id "5S_rRNA"; transcript_id ":uc021wfa.1"; -chr20 hg19_knownGene CDS 54823900 54824868 0.000000 + 0 gene_id "MC3R"; transcript_id "NM_019888:uc002xxb.2"; -chr20 hg19_knownGene exon 54823788 54824871 0.000000 + . gene_id "MC3R"; transcript_id "NM_019888:uc002xxb.2"; -chr20 hg19_knownGene CDS 54934062 54934247 0.000000 + 0 gene_id "FAM210B"; transcript_id "NM_080821:uc002xxc.3"; -chr20 hg19_knownGene exon 54933983 54934247 0.000000 + . gene_id "FAM210B"; transcript_id "NM_080821:uc002xxc.3"; -chr20 hg19_knownGene CDS 54940143 54940318 0.000000 + 0 gene_id "FAM210B"; transcript_id "NM_080821:uc002xxc.3"; -chr20 hg19_knownGene exon 54940143 54940318 0.000000 + . gene_id "FAM210B"; transcript_id "NM_080821:uc002xxc.3"; -chr20 hg19_knownGene CDS 54941127 54941340 0.000000 + 1 gene_id "FAM210B"; transcript_id "NM_080821:uc002xxc.3"; -chr20 hg19_knownGene exon 54941127 54943718 0.000000 + . gene_id "FAM210B"; transcript_id "NM_080821:uc002xxc.3"; -chr20 hg19_knownGene CDS 54945217 54945396 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54944445 54945396 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene CDS 54945541 54945715 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54945541 54945715 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene CDS 54948464 54948612 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54948464 54948612 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene CDS 54956489 54956627 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54956489 54956627 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene CDS 54958041 54958232 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54958041 54958232 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene CDS 54959326 54959380 0.000000 - 2 gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54959326 54959380 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene CDS 54961313 54961589 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54961313 54961589 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene CDS 54963212 54963253 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54963212 54963258 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54963743 54963840 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54965612 54965721 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene exon 54966999 54967351 0.000000 - . gene_id "AURKA"; transcript_id "NM_198433:uc002xxd.1"; -chr20 hg19_knownGene CDS 54945217 54945396 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene exon 54944445 54945396 0.000000 - . gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene CDS 54945541 54945715 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene exon 54945541 54945715 0.000000 - . gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene CDS 54948464 54948612 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene exon 54948464 54948612 0.000000 - . gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene CDS 54956489 54956627 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene exon 54956489 54956627 0.000000 - . gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene CDS 54958041 54958232 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene exon 54958041 54958232 0.000000 - . gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene CDS 54959326 54959380 0.000000 - 2 gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene exon 54959326 54959380 0.000000 - . gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene CDS 54961313 54961589 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene exon 54961313 54961589 0.000000 - . gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene CDS 54963212 54963253 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene exon 54963212 54963258 0.000000 - . gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene exon 54965612 54965721 0.000000 - . gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene exon 54967210 54967351 0.000000 - . gene_id "AURKA"; transcript_id "NM_198434:uc002xxe.1"; -chr20 hg19_knownGene CDS 54945217 54945396 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene exon 54944445 54945396 0.000000 - . gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene CDS 54945541 54945715 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene exon 54945541 54945715 0.000000 - . gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene CDS 54948464 54948612 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene exon 54948464 54948612 0.000000 - . gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene CDS 54956489 54956627 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene exon 54956489 54956627 0.000000 - . gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene CDS 54958041 54958232 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene exon 54958041 54958232 0.000000 - . gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene CDS 54959326 54959380 0.000000 - 2 gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene exon 54959326 54959380 0.000000 - . gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene CDS 54961313 54961589 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene exon 54961313 54961589 0.000000 - . gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene CDS 54963212 54963253 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene exon 54963212 54963258 0.000000 - . gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene exon 54965612 54965721 0.000000 - . gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene exon 54967224 54967351 0.000000 - . gene_id "AURKA"; transcript_id "NM_198436:uc002xxf.1"; -chr20 hg19_knownGene CDS 54945217 54945396 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene exon 54944445 54945396 0.000000 - . gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene CDS 54945541 54945715 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene exon 54945541 54945715 0.000000 - . gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene CDS 54948464 54948612 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene exon 54948464 54948612 0.000000 - . gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene CDS 54956489 54956627 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene exon 54956489 54956627 0.000000 - . gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene CDS 54958041 54958232 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene exon 54958041 54958232 0.000000 - . gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene CDS 54959326 54959380 0.000000 - 2 gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene exon 54959326 54959380 0.000000 - . gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene CDS 54961313 54961589 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene exon 54961313 54961589 0.000000 - . gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene CDS 54963212 54963253 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene exon 54963212 54963258 0.000000 - . gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene exon 54967210 54967351 0.000000 - . gene_id "AURKA"; transcript_id "NM_198435:uc002xxg.1"; -chr20 hg19_knownGene CDS 54945217 54945396 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene exon 54944445 54945396 0.000000 - . gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene CDS 54945541 54945715 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene exon 54945541 54945715 0.000000 - . gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene CDS 54948464 54948612 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene exon 54948464 54948612 0.000000 - . gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene CDS 54956489 54956627 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene exon 54956489 54956627 0.000000 - . gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene CDS 54958041 54958232 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene exon 54958041 54958232 0.000000 - . gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene CDS 54959326 54959380 0.000000 - 2 gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene exon 54959326 54959380 0.000000 - . gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene CDS 54961313 54961589 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene exon 54961313 54961589 0.000000 - . gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene CDS 54963212 54963253 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene exon 54963212 54963258 0.000000 - . gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene exon 54967224 54967351 0.000000 - . gene_id "AURKA"; transcript_id "NM_198437:uc002xxh.1"; -chr20 hg19_knownGene CDS 54945217 54945396 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene exon 54944445 54945396 0.000000 - . gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene CDS 54945541 54945715 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene exon 54945541 54945715 0.000000 - . gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene CDS 54948464 54948612 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene exon 54948464 54948612 0.000000 - . gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene CDS 54956489 54956627 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene exon 54956489 54956627 0.000000 - . gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene CDS 54958041 54958232 0.000000 - 1 gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene exon 54958041 54958232 0.000000 - . gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene CDS 54959326 54959380 0.000000 - 2 gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene exon 54959326 54959380 0.000000 - . gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene CDS 54961313 54961589 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene exon 54961313 54961589 0.000000 - . gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene CDS 54963212 54963253 0.000000 - 0 gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene exon 54963212 54963258 0.000000 - . gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene exon 54966999 54967351 0.000000 - . gene_id "AURKA"; transcript_id "NM_003600:uc002xxi.1"; -chr20 hg19_knownGene CDS 54945217 54945396 0.000000 - 0 gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54944445 54945396 0.000000 - . gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene CDS 54945541 54945715 0.000000 - 1 gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54945541 54945715 0.000000 - . gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene CDS 54948464 54948612 0.000000 - 0 gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54948464 54948612 0.000000 - . gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene CDS 54956489 54956627 0.000000 - 1 gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54956489 54956627 0.000000 - . gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene CDS 54958041 54958232 0.000000 - 1 gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54958041 54958232 0.000000 - . gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene CDS 54959326 54959380 0.000000 - 2 gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54959326 54959380 0.000000 - . gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene CDS 54961313 54961589 0.000000 - 0 gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54961313 54961589 0.000000 - . gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene CDS 54963212 54963253 0.000000 - 0 gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54963212 54963258 0.000000 - . gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54963743 54963840 0.000000 - . gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54967224 54967351 0.000000 - . gene_id "AURKA"; transcript_id "BC001280:uc002xxj.1"; -chr20 hg19_knownGene exon 54944445 54945396 0.000000 - . gene_id "AURKA"; transcript_id "AK301769:uc010zzd.1"; -chr20 hg19_knownGene exon 54945541 54945715 0.000000 - . gene_id "AURKA"; transcript_id "AK301769:uc010zzd.1"; -chr20 hg19_knownGene exon 54948464 54948612 0.000000 - . gene_id "AURKA"; transcript_id "AK301769:uc010zzd.1"; -chr20 hg19_knownGene exon 54956489 54956627 0.000000 - . gene_id "AURKA"; transcript_id "AK301769:uc010zzd.1"; -chr20 hg19_knownGene exon 54958041 54958232 0.000000 - . gene_id "AURKA"; transcript_id "AK301769:uc010zzd.1"; -chr20 hg19_knownGene exon 54959326 54959380 0.000000 - . gene_id "AURKA"; transcript_id "AK301769:uc010zzd.1"; -chr20 hg19_knownGene exon 54961518 54961589 0.000000 - . gene_id "AURKA"; transcript_id "AK301769:uc010zzd.1"; -chr20 hg19_knownGene exon 54963212 54963258 0.000000 - . gene_id "AURKA"; transcript_id "AK301769:uc010zzd.1"; -chr20 hg19_knownGene exon 54967224 54967351 0.000000 - . gene_id "AURKA"; transcript_id "AK301769:uc010zzd.1"; -chr20 hg19_knownGene exon 54967427 54967594 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene CDS 54970609 54970777 0.000000 + 0 gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene exon 54970577 54970777 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene CDS 54972263 54972540 0.000000 + 2 gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene exon 54972263 54972540 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene CDS 54972700 54972897 0.000000 + 0 gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene exon 54972700 54972897 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene CDS 54974023 54974413 0.000000 + 0 gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene exon 54974023 54974413 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene CDS 54978524 54978780 0.000000 + 2 gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene exon 54978524 54979582 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033521:uc002xxl.1"; -chr20 hg19_knownGene exon 54967574 54967769 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene CDS 54970609 54970777 0.000000 + 0 gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene exon 54970577 54970777 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene CDS 54972263 54972540 0.000000 + 2 gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene exon 54972263 54972540 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene CDS 54972700 54972897 0.000000 + 0 gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene exon 54972700 54972897 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene CDS 54974023 54974413 0.000000 + 0 gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene exon 54974023 54974413 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene CDS 54978524 54978780 0.000000 + 2 gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene exon 54978524 54979582 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001324:uc002xxm.1"; -chr20 hg19_knownGene exon 54967707 54967871 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene CDS 54970609 54970777 0.000000 + 0 gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene exon 54970577 54970777 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene CDS 54972263 54972540 0.000000 + 2 gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene exon 54972263 54972540 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene CDS 54972700 54972897 0.000000 + 0 gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene exon 54972700 54972897 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene CDS 54974023 54974413 0.000000 + 0 gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene exon 54974023 54974413 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene CDS 54978524 54978780 0.000000 + 2 gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene exon 54978524 54979582 0.000000 + . gene_id "CSTF1"; transcript_id "NM_001033522:uc002xxn.1"; -chr20 hg19_knownGene CDS 54987515 54987550 0.000000 + 0 gene_id "CASS4"; transcript_id "BC027951:uc002xxq.4"; -chr20 hg19_knownGene exon 54987314 54987550 0.000000 + . gene_id "CASS4"; transcript_id "BC027951:uc002xxq.4"; -chr20 hg19_knownGene CDS 55012220 55012642 0.000000 + 0 gene_id "CASS4"; transcript_id "BC027951:uc002xxq.4"; -chr20 hg19_knownGene exon 55012220 55012642 0.000000 + . gene_id "CASS4"; transcript_id "BC027951:uc002xxq.4"; -chr20 hg19_knownGene CDS 55020956 55021057 0.000000 + 0 gene_id "CASS4"; transcript_id "BC027951:uc002xxq.4"; -chr20 hg19_knownGene exon 55020956 55021057 0.000000 + . gene_id "CASS4"; transcript_id "BC027951:uc002xxq.4"; -chr20 hg19_knownGene CDS 55025655 55025735 0.000000 + 0 gene_id "CASS4"; transcript_id "BC027951:uc002xxq.4"; -chr20 hg19_knownGene exon 55025655 55025735 0.000000 + . gene_id "CASS4"; transcript_id "BC027951:uc002xxq.4"; -chr20 hg19_knownGene CDS 55026875 55028248 0.000000 + 0 gene_id "CASS4"; transcript_id "BC027951:uc002xxq.4"; -chr20 hg19_knownGene exon 55026875 55028932 0.000000 + . gene_id "CASS4"; transcript_id "BC027951:uc002xxq.4"; -chr20 hg19_knownGene exon 54987168 54987270 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene CDS 54987515 54987550 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene exon 54987393 54987550 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene CDS 55012220 55012642 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene exon 55012220 55012642 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene CDS 55020956 55021057 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene exon 55020956 55021057 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene CDS 55025655 55025735 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene exon 55025655 55025735 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene CDS 55026875 55028185 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene exon 55026875 55028185 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene CDS 55033396 55033800 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene exon 55033396 55034396 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164116:uc002xxp.2"; -chr20 hg19_knownGene CDS 54987515 54987550 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene exon 54987314 54987550 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene CDS 55012220 55012480 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene exon 55012220 55012480 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene CDS 55020956 55021057 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene exon 55020956 55021057 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene CDS 55025655 55025735 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene exon 55025655 55025735 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene CDS 55026875 55028185 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene exon 55026875 55028185 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene CDS 55033396 55033800 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene exon 55033396 55034396 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164114:uc010zze.1"; -chr20 hg19_knownGene CDS 54987515 54987550 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene exon 54987314 54987550 0.000000 + . gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene CDS 55012220 55012642 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene exon 55012220 55012642 0.000000 + . gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene CDS 55020956 55021057 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene exon 55020956 55021057 0.000000 + . gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene CDS 55025655 55025735 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene exon 55025655 55025735 0.000000 + . gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene CDS 55026875 55028185 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene exon 55026875 55028185 0.000000 + . gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene CDS 55033396 55033800 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene exon 55033396 55034396 0.000000 + . gene_id "CASS4"; transcript_id "NM_020356:uc002xxr.2"; -chr20 hg19_knownGene CDS 54987515 54987550 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164115:uc010gio.2"; -chr20 hg19_knownGene exon 54987314 54987550 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164115:uc010gio.2"; -chr20 hg19_knownGene CDS 55012220 55012642 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164115:uc010gio.2"; -chr20 hg19_knownGene exon 55012220 55012642 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164115:uc010gio.2"; -chr20 hg19_knownGene CDS 55020956 55021057 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164115:uc010gio.2"; -chr20 hg19_knownGene exon 55020956 55021057 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164115:uc010gio.2"; -chr20 hg19_knownGene CDS 55025655 55025735 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164115:uc010gio.2"; -chr20 hg19_knownGene exon 55025655 55025735 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164115:uc010gio.2"; -chr20 hg19_knownGene CDS 55033396 55033800 0.000000 + 0 gene_id "CASS4"; transcript_id "NM_001164115:uc010gio.2"; -chr20 hg19_knownGene exon 55033396 55034396 0.000000 + . gene_id "CASS4"; transcript_id "NM_001164115:uc010gio.2"; -chr20 hg19_knownGene exon 55043647 55043822 0.000000 + . gene_id "C20orf43"; transcript_id "BC002769:uc002xxs.3"; -chr20 hg19_knownGene exon 55045656 55046005 0.000000 + . gene_id "C20orf43"; transcript_id "BC002769:uc002xxs.3"; -chr20 hg19_knownGene CDS 55043754 55043822 0.000000 + 0 gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene exon 55043647 55043822 0.000000 + . gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene CDS 55048357 55048451 0.000000 + 0 gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene exon 55048357 55048451 0.000000 + . gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene CDS 55049734 55049827 0.000000 + 1 gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene exon 55049734 55049827 0.000000 + . gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene CDS 55052041 55052180 0.000000 + 0 gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene exon 55052041 55052180 0.000000 + . gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene CDS 55059167 55059245 0.000000 + 1 gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene exon 55059167 55059245 0.000000 + . gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene CDS 55088371 55088484 0.000000 + 0 gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene exon 55088371 55088484 0.000000 + . gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene CDS 55091991 55092045 0.000000 + 0 gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene exon 55091991 55092045 0.000000 + . gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene CDS 55092162 55092257 0.000000 + 2 gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene exon 55092162 55092257 0.000000 + . gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene CDS 55093143 55093318 0.000000 + 2 gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene exon 55093143 55093942 0.000000 + . gene_id "C20orf43"; transcript_id "NM_016407:uc002xxt.2"; -chr20 hg19_knownGene CDS 55043754 55043822 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene exon 55043647 55043822 0.000000 + . gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene CDS 55047382 55047471 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene exon 55047382 55047471 0.000000 + . gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene CDS 55048357 55048451 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene exon 55048357 55048451 0.000000 + . gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene CDS 55049734 55049827 0.000000 + 1 gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene exon 55049734 55049827 0.000000 + . gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene CDS 55052041 55052180 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene exon 55052041 55052180 0.000000 + . gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene CDS 55059167 55059245 0.000000 + 1 gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene exon 55059167 55059245 0.000000 + . gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene CDS 55088371 55088484 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene exon 55088371 55088484 0.000000 + . gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene CDS 55091991 55092045 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene exon 55091991 55092045 0.000000 + . gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene CDS 55092162 55092257 0.000000 + 2 gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene exon 55092162 55092257 0.000000 + . gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene CDS 55093143 55093318 0.000000 + 2 gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene exon 55093143 55093942 0.000000 + . gene_id "C20orf43"; transcript_id "AK302029:uc010zzf.1"; -chr20 hg19_knownGene CDS 55043754 55043822 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene exon 55043647 55043822 0.000000 + . gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene CDS 55048357 55048451 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene exon 55048357 55048451 0.000000 + . gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene CDS 55049734 55049827 0.000000 + 1 gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene exon 55049734 55049827 0.000000 + . gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene CDS 55052041 55052180 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene exon 55052041 55052180 0.000000 + . gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene CDS 55059167 55059245 0.000000 + 1 gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene exon 55059167 55059245 0.000000 + . gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene CDS 55088371 55088484 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene exon 55088371 55088484 0.000000 + . gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene CDS 55091991 55092045 0.000000 + 0 gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene exon 55091991 55092045 0.000000 + . gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene CDS 55092165 55092257 0.000000 + 2 gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene exon 55092165 55092257 0.000000 + . gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene CDS 55093143 55093318 0.000000 + 2 gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene exon 55093143 55093942 0.000000 + . gene_id "C20orf43"; transcript_id "AK225135:uc002xxu.2"; -chr20 hg19_knownGene CDS 55066616 55066839 0.000000 - 2 gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene exon 55066548 55066839 0.000000 - . gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene CDS 55070258 55070353 0.000000 - 2 gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene exon 55070258 55070353 0.000000 - . gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene CDS 55071695 55072469 0.000000 - 0 gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene exon 55071695 55072469 0.000000 - . gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene CDS 55072473 55072664 0.000000 - 0 gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene exon 55072473 55072724 0.000000 - . gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene exon 55079111 55079350 0.000000 - . gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene exon 55088852 55088893 0.000000 - . gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene exon 55089141 55089361 0.000000 - . gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene exon 55100839 55100981 0.000000 - . gene_id "GCNT7"; transcript_id "NM_080615:uc010zzg.1"; -chr20 hg19_knownGene CDS 55099865 55100113 0.000000 + 0 gene_id "FAM209A"; transcript_id "NM_001012971:uc002xxx.3"; -chr20 hg19_knownGene exon 55099785 55100113 0.000000 + . gene_id "FAM209A"; transcript_id "NM_001012971:uc002xxx.3"; -chr20 hg19_knownGene CDS 55100860 55101123 0.000000 + 0 gene_id "FAM209A"; transcript_id "NM_001012971:uc002xxx.3"; -chr20 hg19_knownGene exon 55100860 55101208 0.000000 + . gene_id "FAM209A"; transcript_id "NM_001012971:uc002xxx.3"; -chr20 hg19_knownGene CDS 55099865 55100113 0.000000 + 0 gene_id "FAM209B"; transcript_id "BC105792:uc010zzh.2"; -chr20 hg19_knownGene exon 55099785 55100113 0.000000 + . gene_id "FAM209B"; transcript_id "BC105792:uc010zzh.2"; -chr20 hg19_knownGene CDS 55111228 55111491 0.000000 + 0 gene_id "FAM209B"; transcript_id "BC105792:uc010zzh.2"; -chr20 hg19_knownGene exon 55111228 55111576 0.000000 + . gene_id "FAM209B"; transcript_id "BC105792:uc010zzh.2"; -chr20 hg19_knownGene CDS 55108398 55108646 0.000000 + 0 gene_id "FAM209B"; transcript_id "NM_001013646:uc002xxz.3"; -chr20 hg19_knownGene exon 55108302 55108646 0.000000 + . gene_id "FAM209B"; transcript_id "NM_001013646:uc002xxz.3"; -chr20 hg19_knownGene CDS 55111228 55111491 0.000000 + 0 gene_id "FAM209B"; transcript_id "NM_001013646:uc002xxz.3"; -chr20 hg19_knownGene exon 55111228 55111576 0.000000 + . gene_id "FAM209B"; transcript_id "NM_001013646:uc002xxz.3"; -chr20 hg19_knownGene CDS 55204601 55204648 0.000000 + 0 gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene exon 55204358 55204648 0.000000 + . gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene CDS 55206261 55206746 0.000000 + 0 gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene exon 55206261 55206746 0.000000 + . gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene CDS 55206861 55206912 0.000000 + 0 gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene exon 55206861 55206912 0.000000 + . gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene CDS 55208409 55208625 0.000000 + 2 gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene exon 55208409 55208625 0.000000 + . gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene CDS 55209206 55209324 0.000000 + 1 gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene exon 55209206 55209324 0.000000 + . gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene CDS 55211666 55211810 0.000000 + 2 gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene exon 55211666 55211810 0.000000 + . gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene CDS 55212784 55213066 0.000000 + 1 gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene exon 55212784 55214338 0.000000 + . gene_id "TFAP2C"; transcript_id "NM_003222:uc002xya.3"; -chr20 hg19_knownGene exon 55205938 55206044 0.000000 + . gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene CDS 55206720 55206746 0.000000 + 0 gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene exon 55206261 55206746 0.000000 + . gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene CDS 55206861 55206912 0.000000 + 0 gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene exon 55206861 55206912 0.000000 + . gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene CDS 55208409 55208625 0.000000 + 2 gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene exon 55208409 55208625 0.000000 + . gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene CDS 55209206 55209324 0.000000 + 1 gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene exon 55209206 55209324 0.000000 + . gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene CDS 55211666 55211810 0.000000 + 2 gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene exon 55211666 55211810 0.000000 + . gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene CDS 55212784 55213066 0.000000 + 1 gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene exon 55212784 55214338 0.000000 + . gene_id "TFAP2C"; transcript_id "AK301572:uc010zzi.2"; -chr20 hg19_knownGene CDS 55746018 55746164 0.000000 - 0 gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene exon 55743809 55746164 0.000000 - . gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene CDS 55748256 55748366 0.000000 - 0 gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene exon 55748256 55748366 0.000000 - . gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene CDS 55749987 55750063 0.000000 - 2 gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene exon 55749987 55750063 0.000000 - . gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene CDS 55758778 55758975 0.000000 - 2 gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene exon 55758778 55758975 0.000000 - . gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene CDS 55777531 55777679 0.000000 - 1 gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene exon 55777531 55777679 0.000000 - . gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene CDS 55803285 55803477 0.000000 - 2 gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene exon 55803285 55803477 0.000000 - . gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene CDS 55840761 55841178 0.000000 - 0 gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene exon 55840761 55841707 0.000000 - . gene_id "BMP7"; transcript_id "NM_001719:uc010gip.1"; -chr20 hg19_knownGene CDS 55748166 55748366 0.000000 - 0 gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene exon 55748052 55748366 0.000000 - . gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene CDS 55749987 55750063 0.000000 - 2 gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene exon 55749987 55750063 0.000000 - . gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene CDS 55758778 55758975 0.000000 - 2 gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene exon 55758778 55758975 0.000000 - . gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene CDS 55777531 55777679 0.000000 - 1 gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene exon 55777531 55777679 0.000000 - . gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene CDS 55803285 55803477 0.000000 - 2 gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene exon 55803285 55803477 0.000000 - . gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene CDS 55840761 55841178 0.000000 - 0 gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene exon 55840761 55841707 0.000000 - . gene_id "BMP7"; transcript_id "BC004248:uc002xyc.3"; -chr20 hg19_knownGene exon 55841853 55842262 0.000000 + . gene_id "BC037891"; transcript_id "BC037891:uc010gir.2"; -chr20 hg19_knownGene exon 55857299 55858053 0.000000 + . gene_id "BC037891"; transcript_id "BC037891:uc010gir.2"; -chr20 hg19_knownGene exon 55896558 55896647 0.000000 - . gene_id "MIR4325"; transcript_id "NR_036219:uc021wfb.1"; -chr20 hg19_knownGene CDS 55904924 55905054 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55904831 55905054 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55906889 55907002 0.000000 + 1 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55906889 55907002 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55908244 55908332 0.000000 + 1 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55908244 55908332 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55908743 55908809 0.000000 + 2 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55908743 55908809 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55909043 55909151 0.000000 + 1 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55909043 55909151 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55909806 55909892 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55909806 55909892 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55910475 55910511 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55910475 55910511 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55910854 55910963 0.000000 + 2 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55910854 55910963 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55913332 55913431 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55913332 55913431 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55914045 55914082 0.000000 + 2 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55914045 55914082 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55915158 55915234 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55915158 55915234 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55917785 55917896 0.000000 + 1 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55917785 55917896 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55918397 55918513 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene exon 55918397 55919049 0.000000 + . gene_id "SPO11"; transcript_id "NM_012444:uc002xye.3"; -chr20 hg19_knownGene CDS 55904924 55905054 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55904831 55905054 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55908244 55908332 0.000000 + 1 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55908244 55908332 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55908743 55908809 0.000000 + 2 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55908743 55908809 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55909043 55909151 0.000000 + 1 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55909043 55909151 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55909806 55909892 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55909806 55909892 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55910475 55910511 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55910475 55910511 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55910854 55910963 0.000000 + 2 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55910854 55910963 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55913332 55913431 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55913332 55913431 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55914045 55914082 0.000000 + 2 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55914045 55914082 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55915158 55915234 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55915158 55915234 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55917785 55917896 0.000000 + 1 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55917785 55917896 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55918397 55918513 0.000000 + 0 gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene exon 55918397 55919049 0.000000 + . gene_id "SPO11"; transcript_id "NM_198265:uc002xyf.3"; -chr20 hg19_knownGene CDS 55934024 55934095 0.000000 - 0 gene_id "MTRNR2L3"; transcript_id "NM_001190472:uc021wfd.1"; -chr20 hg19_knownGene exon 55933496 55934878 0.000000 - . gene_id "MTRNR2L3"; transcript_id "NM_001190472:uc021wfd.1"; -chr20 hg19_knownGene exon 55926145 55926478 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55929088 55929184 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene CDS 55929793 55929872 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55929768 55929872 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene CDS 55931502 55931526 0.000000 + 1 gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55931502 55931526 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene CDS 55931553 55931594 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55931553 55931594 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene CDS 55940412 55940498 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55940412 55940498 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene CDS 55941863 55941949 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55941863 55941949 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene CDS 55942064 55942135 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55942064 55942135 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene CDS 55943761 55943868 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55943761 55943868 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene CDS 55948531 55948637 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55948531 55948637 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene CDS 55948719 55948794 0.000000 + 1 gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55948719 55948794 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene CDS 55949663 55950148 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55949663 55950408 0.000000 + . gene_id "RAE1"; transcript_id "AK309069:uc010gis.1"; -chr20 hg19_knownGene exon 55926145 55926478 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene CDS 55929095 55929184 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55929088 55929184 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene CDS 55929768 55929872 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55929768 55929872 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene CDS 55931502 55931594 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55931502 55931594 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene CDS 55940412 55940498 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55940412 55940498 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene CDS 55941863 55941949 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55941863 55941949 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene CDS 55942064 55942135 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55942064 55942135 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene CDS 55943761 55943868 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55943761 55943868 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene CDS 55948531 55948637 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55948531 55948637 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene CDS 55948719 55948794 0.000000 + 1 gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55948719 55948794 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene CDS 55949663 55950148 0.000000 + 0 gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55949663 55950408 0.000000 + . gene_id "RAE1"; transcript_id "AK309743:uc010git.1"; -chr20 hg19_knownGene exon 55926145 55926478 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55929095 55929184 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55929088 55929184 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55929768 55929872 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55929768 55929872 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55931502 55931594 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55931502 55931594 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55940412 55940498 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55940412 55940498 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55941863 55941949 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55941863 55941949 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55942064 55942135 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55942064 55942135 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55943761 55943868 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55943761 55943868 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55948531 55948637 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55948531 55948637 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55948719 55948794 0.000000 + 1 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55948719 55948794 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55949663 55949857 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55949663 55949857 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene CDS 55953069 55953152 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55953069 55953519 0.000000 + . gene_id "RAE1"; transcript_id "NM_003610:uc002xyg.3"; -chr20 hg19_knownGene exon 55926618 55926975 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55929095 55929184 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55929088 55929184 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55929768 55929872 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55929768 55929872 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55931502 55931594 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55931502 55931594 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55940412 55940498 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55940412 55940498 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55941863 55941949 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55941863 55941949 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55942064 55942135 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55942064 55942135 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55943761 55943868 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55943761 55943868 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55948531 55948637 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55948531 55948637 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55948719 55948794 0.000000 + 1 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55948719 55948794 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55949663 55949857 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55949663 55949857 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55953069 55953152 0.000000 + 0 gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene exon 55953069 55953519 0.000000 + . gene_id "RAE1"; transcript_id "NM_001015885:uc002xyi.3"; -chr20 hg19_knownGene CDS 55966638 55966874 0.000000 + 0 gene_id "RBM38"; transcript_id "NM_017495:uc010zzj.2"; -chr20 hg19_knownGene exon 55966454 55966874 0.000000 + . gene_id "RBM38"; transcript_id "NM_017495:uc010zzj.2"; -chr20 hg19_knownGene CDS 55967710 55967833 0.000000 + 0 gene_id "RBM38"; transcript_id "NM_017495:uc010zzj.2"; -chr20 hg19_knownGene exon 55967710 55967833 0.000000 + . gene_id "RBM38"; transcript_id "NM_017495:uc010zzj.2"; -chr20 hg19_knownGene CDS 55968335 55968389 0.000000 + 2 gene_id "RBM38"; transcript_id "NM_017495:uc010zzj.2"; -chr20 hg19_knownGene exon 55968335 55968389 0.000000 + . gene_id "RBM38"; transcript_id "NM_017495:uc010zzj.2"; -chr20 hg19_knownGene CDS 55982599 55982899 0.000000 + 1 gene_id "RBM38"; transcript_id "NM_017495:uc010zzj.2"; -chr20 hg19_knownGene exon 55982599 55984386 0.000000 + . gene_id "RBM38"; transcript_id "NM_017495:uc010zzj.2"; -chr20 hg19_knownGene CDS 55966638 55966874 0.000000 + 0 gene_id "RBM38"; transcript_id "NM_183425:uc010zzk.2"; -chr20 hg19_knownGene exon 55966454 55966874 0.000000 + . gene_id "RBM38"; transcript_id "NM_183425:uc010zzk.2"; -chr20 hg19_knownGene CDS 55967710 55967833 0.000000 + 0 gene_id "RBM38"; transcript_id "NM_183425:uc010zzk.2"; -chr20 hg19_knownGene exon 55967710 55967833 0.000000 + . gene_id "RBM38"; transcript_id "NM_183425:uc010zzk.2"; -chr20 hg19_knownGene CDS 55982599 55982600 0.000000 + 2 gene_id "RBM38"; transcript_id "NM_183425:uc010zzk.2"; -chr20 hg19_knownGene exon 55982599 55984386 0.000000 + . gene_id "RBM38"; transcript_id "NM_183425:uc010zzk.2"; -chr20 hg19_knownGene exon 55913213 55913256 0.000000 + . gene_id "MIR5095"; transcript_id "NR_039970:uc021wfc.1"; -chr20 hg19_knownGene exon 55998254 55998278 0.000000 + . gene_id "MIR5095"; transcript_id "NR_039970:uc021wfc.1"; -chr20 hg19_knownGene exon 56063879 56064269 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778130:uc010giu.3"; -chr20 hg19_knownGene exon 56073610 56073757 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778130:uc010giu.3"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778130:uc010giu.3"; -chr20 hg19_knownGene exon 56083662 56083760 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778130:uc010giu.3"; -chr20 hg19_knownGene exon 56063879 56064269 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778131:uc010giv.3"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778131:uc010giv.3"; -chr20 hg19_knownGene exon 56083662 56083760 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778131:uc010giv.3"; -chr20 hg19_knownGene CDS 56073609 56073757 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene exon 56072224 56073757 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene CDS 56078492 56078657 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene exon 56098719 56099923 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778110:uc010gix.1"; -chr20 hg19_knownGene CDS 56075312 56075466 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene exon 56074610 56075466 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene CDS 56078492 56078657 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene exon 56098719 56099923 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778115:uc010gje.3"; -chr20 hg19_knownGene CDS 56082642 56082848 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene exon 56081798 56082848 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene exon 56098719 56099923 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778121:uc010gjh.2"; -chr20 hg19_knownGene CDS 56090672 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778119:uc021wfe.1"; -chr20 hg19_knownGene exon 56089648 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778119:uc021wfe.1"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778119:uc021wfe.1"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778119:uc021wfe.1"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778119:uc021wfe.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778119:uc021wfe.1"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778119:uc021wfe.1"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778119:uc021wfe.1"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778119:uc021wfe.1"; -chr20 hg19_knownGene exon 56098719 56099923 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778119:uc021wfe.1"; -chr20 hg19_knownGene CDS 56093661 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778114:uc010gjk.1"; -chr20 hg19_knownGene exon 56093561 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778114:uc010gjk.1"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778114:uc010gjk.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778114:uc010gjk.1"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778114:uc010gjk.1"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778114:uc010gjk.1"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778114:uc010gjk.1"; -chr20 hg19_knownGene exon 56098719 56099923 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778114:uc010gjk.1"; -chr20 hg19_knownGene CDS 56071309 56071420 0.000000 - 1 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56071021 56071420 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56073610 56073757 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56073610 56073757 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56078492 56078657 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56098719 56099272 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene exon 56100084 56100183 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778111:uc010giw.1"; -chr20 hg19_knownGene CDS 56073609 56073757 0.000000 - 2 gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56072224 56073757 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene CDS 56078492 56078657 0.000000 - 0 gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56098719 56099272 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene exon 56100084 56100183 0.000000 - . gene_id "CTCFL"; transcript_id "NM_080618:uc002xym.2"; -chr20 hg19_knownGene CDS 56075312 56075466 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene exon 56074610 56075466 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene CDS 56078492 56078657 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene CDS 56094263 56094383 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene exon 56100084 56100183 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778124:uc010gjg.3"; -chr20 hg19_knownGene CDS 56075312 56075466 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene exon 56074610 56075466 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene CDS 56078492 56078657 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene CDS 56098124 56098262 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene exon 56100084 56100183 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778125:uc010gjf.3"; -chr20 hg19_knownGene CDS 56082642 56082848 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene exon 56081798 56082848 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene CDS 56098124 56098262 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene exon 56100084 56100183 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778126:uc010gji.2"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778129:uc021wff.1"; -chr20 hg19_knownGene exon 56090521 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778129:uc021wff.1"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778129:uc021wff.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778129:uc021wff.1"; -chr20 hg19_knownGene exon 56100084 56100183 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778129:uc021wff.1"; -chr20 hg19_knownGene CDS 56090672 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778128:uc021wfg.1"; -chr20 hg19_knownGene exon 56089648 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778128:uc021wfg.1"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778128:uc021wfg.1"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778128:uc021wfg.1"; -chr20 hg19_knownGene CDS 56094263 56094383 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778128:uc021wfg.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778128:uc021wfg.1"; -chr20 hg19_knownGene exon 56100084 56100183 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778128:uc021wfg.1"; -chr20 hg19_knownGene CDS 56073609 56073757 0.000000 - 2 gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56072224 56073757 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene CDS 56078492 56078657 0.000000 - 0 gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56098719 56099272 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene exon 56100084 56100633 0.000000 - . gene_id "CTCFL"; transcript_id "AK313990:uc010gjb.1"; -chr20 hg19_knownGene CDS 56073609 56073757 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene exon 56072224 56073757 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene CDS 56078492 56078657 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene exon 56098719 56099272 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene exon 56100084 56100633 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778112:uc010gja.1"; -chr20 hg19_knownGene CDS 56073609 56073757 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56072224 56073757 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene CDS 56078492 56078657 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56098719 56099272 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene exon 56100530 56100708 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778108:uc010gjc.1"; -chr20 hg19_knownGene CDS 56073609 56073757 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56072224 56073757 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene CDS 56078492 56078657 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56078492 56078657 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56098719 56099272 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56100084 56100183 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene exon 56100530 56100708 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778109:uc010gjd.1"; -chr20 hg19_knownGene CDS 56082642 56082848 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene exon 56081798 56082848 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene CDS 56083662 56083844 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene exon 56083662 56083844 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene CDS 56087648 56087808 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene exon 56087648 56087808 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene CDS 56089648 56089797 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene exon 56089648 56089797 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene CDS 56090770 56090890 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene exon 56090770 56090890 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene CDS 56093814 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene exon 56093814 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene exon 56098719 56099272 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene exon 56100530 56100708 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778122:uc010gjj.2"; -chr20 hg19_knownGene CDS 56093661 56093947 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778113:uc010gjl.1"; -chr20 hg19_knownGene exon 56093561 56093947 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778113:uc010gjl.1"; -chr20 hg19_knownGene CDS 56094263 56094433 0.000000 - 2 gene_id "CTCFL"; transcript_id "DQ778113:uc010gjl.1"; -chr20 hg19_knownGene exon 56094263 56094433 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778113:uc010gjl.1"; -chr20 hg19_knownGene CDS 56098124 56098334 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778113:uc010gjl.1"; -chr20 hg19_knownGene exon 56098124 56098334 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778113:uc010gjl.1"; -chr20 hg19_knownGene CDS 56098719 56099261 0.000000 - 0 gene_id "CTCFL"; transcript_id "DQ778113:uc010gjl.1"; -chr20 hg19_knownGene exon 56098719 56099272 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778113:uc010gjl.1"; -chr20 hg19_knownGene exon 56100530 56100708 0.000000 - . gene_id "CTCFL"; transcript_id "DQ778113:uc010gjl.1"; -chr20 hg19_knownGene exon 56136137 56136259 0.000000 + . gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene CDS 56136468 56136691 0.000000 + 0 gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene exon 56136428 56136691 0.000000 + . gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene CDS 56137127 56137308 0.000000 + 1 gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene exon 56137127 56137308 0.000000 + . gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene CDS 56137752 56137955 0.000000 + 2 gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene exon 56137752 56137955 0.000000 + . gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene CDS 56138084 56138271 0.000000 + 2 gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene exon 56138084 56138271 0.000000 + . gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene CDS 56138621 56138783 0.000000 + 0 gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene exon 56138621 56138783 0.000000 + . gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene CDS 56139225 56139449 0.000000 + 2 gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene exon 56139225 56139449 0.000000 + . gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene CDS 56139538 56139669 0.000000 + 2 gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene exon 56139538 56139669 0.000000 + . gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene CDS 56140096 56140191 0.000000 + 2 gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene exon 56140096 56140191 0.000000 + . gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene CDS 56140406 56140857 0.000000 + 2 gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene exon 56140406 56141513 0.000000 + . gene_id "PCK1"; transcript_id "NM_002591:uc002xyn.4"; -chr20 hg19_knownGene exon 56136137 56136259 0.000000 + . gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene CDS 56136682 56136691 0.000000 + 0 gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene exon 56136428 56136691 0.000000 + . gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene CDS 56139225 56139449 0.000000 + 2 gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene exon 56139225 56139449 0.000000 + . gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene CDS 56139538 56139669 0.000000 + 2 gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene exon 56139538 56139669 0.000000 + . gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene CDS 56140096 56140191 0.000000 + 2 gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene exon 56140096 56140191 0.000000 + . gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene CDS 56140406 56140857 0.000000 + 2 gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene exon 56140406 56141513 0.000000 + . gene_id "PCK1"; transcript_id "AK300072:uc010zzm.2"; -chr20 hg19_knownGene CDS 56179632 56179825 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene exon 56178902 56179825 0.000000 - . gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene CDS 56185205 56185423 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene exon 56185205 56185423 0.000000 - . gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene CDS 56186783 56186986 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene exon 56186783 56186986 0.000000 - . gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene CDS 56188219 56188386 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene exon 56188219 56188386 0.000000 - . gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene CDS 56189943 56190116 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene exon 56189943 56190116 0.000000 - . gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene CDS 56190568 56190636 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene exon 56190568 56190636 0.000000 - . gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene CDS 56191300 56191524 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene exon 56191300 56191524 0.000000 - . gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene CDS 56195318 56195351 0.000000 - 0 gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene exon 56195318 56195632 0.000000 - . gene_id "ZBP1"; transcript_id "NM_030776:uc002xyo.3"; -chr20 hg19_knownGene CDS 56179632 56179825 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene exon 56178902 56179825 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene CDS 56185205 56185423 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene exon 56185205 56185423 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene CDS 56186783 56186986 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene exon 56186783 56186986 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene CDS 56188219 56188383 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene exon 56188219 56188383 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene CDS 56189943 56190116 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene exon 56189943 56190116 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene CDS 56190568 56190636 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene exon 56190568 56190636 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene CDS 56191300 56191524 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene exon 56191300 56191524 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene CDS 56195318 56195351 0.000000 - 0 gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene exon 56195318 56195632 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160417:uc010gjm.3"; -chr20 hg19_knownGene CDS 56179632 56179825 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene exon 56178902 56179825 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene CDS 56185205 56185423 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene exon 56185205 56185423 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene CDS 56186783 56186986 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene exon 56186783 56186986 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene CDS 56188219 56188386 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene exon 56188219 56188386 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene CDS 56189943 56190116 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene exon 56189943 56190116 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene CDS 56190568 56190636 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene exon 56190568 56190636 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene CDS 56195318 56195351 0.000000 - 0 gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene exon 56195318 56195632 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160418:uc002xyp.3"; -chr20 hg19_knownGene CDS 56188145 56188386 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160419:uc010zzn.2"; -chr20 hg19_knownGene exon 56187941 56188386 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160419:uc010zzn.2"; -chr20 hg19_knownGene CDS 56189943 56190116 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160419:uc010zzn.2"; -chr20 hg19_knownGene exon 56189943 56190116 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160419:uc010zzn.2"; -chr20 hg19_knownGene CDS 56190568 56190636 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160419:uc010zzn.2"; -chr20 hg19_knownGene exon 56190568 56190636 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160419:uc010zzn.2"; -chr20 hg19_knownGene CDS 56191300 56191524 0.000000 - 2 gene_id "ZBP1"; transcript_id "NM_001160419:uc010zzn.2"; -chr20 hg19_knownGene exon 56191300 56191524 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160419:uc010zzn.2"; -chr20 hg19_knownGene CDS 56195318 56195351 0.000000 - 0 gene_id "ZBP1"; transcript_id "NM_001160419:uc010zzn.2"; -chr20 hg19_knownGene exon 56195318 56195632 0.000000 - . gene_id "ZBP1"; transcript_id "NM_001160419:uc010zzn.2"; -chr20 hg19_knownGene CDS 56227112 56227654 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_020182:uc002xyq.3"; -chr20 hg19_knownGene exon 56223452 56227654 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_020182:uc002xyq.3"; -chr20 hg19_knownGene CDS 56228089 56228142 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_020182:uc002xyq.3"; -chr20 hg19_knownGene exon 56228089 56228142 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_020182:uc002xyq.3"; -chr20 hg19_knownGene CDS 56234599 56234753 0.000000 - 2 gene_id "PMEPA1"; transcript_id "NM_020182:uc002xyq.3"; -chr20 hg19_knownGene exon 56234599 56234753 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_020182:uc002xyq.3"; -chr20 hg19_knownGene CDS 56284530 56284638 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_020182:uc002xyq.3"; -chr20 hg19_knownGene exon 56284530 56285031 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_020182:uc002xyq.3"; -chr20 hg19_knownGene CDS 56227112 56227654 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_199170:uc002xyr.3"; -chr20 hg19_knownGene exon 56223452 56227654 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199170:uc002xyr.3"; -chr20 hg19_knownGene CDS 56228089 56228142 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_199170:uc002xyr.3"; -chr20 hg19_knownGene exon 56228089 56228142 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199170:uc002xyr.3"; -chr20 hg19_knownGene CDS 56234599 56234712 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_199170:uc002xyr.3"; -chr20 hg19_knownGene exon 56234599 56234753 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199170:uc002xyr.3"; -chr20 hg19_knownGene exon 56285523 56285625 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199170:uc002xyr.3"; -chr20 hg19_knownGene CDS 56227112 56227654 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_199169:uc002xys.3"; -chr20 hg19_knownGene exon 56223452 56227654 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199169:uc002xys.3"; -chr20 hg19_knownGene CDS 56228089 56228142 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_199169:uc002xys.3"; -chr20 hg19_knownGene exon 56228089 56228142 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199169:uc002xys.3"; -chr20 hg19_knownGene CDS 56234599 56234753 0.000000 - 2 gene_id "PMEPA1"; transcript_id "NM_199169:uc002xys.3"; -chr20 hg19_knownGene exon 56234599 56234753 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199169:uc002xys.3"; -chr20 hg19_knownGene CDS 56285516 56285519 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_199169:uc002xys.3"; -chr20 hg19_knownGene exon 56285516 56285625 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199169:uc002xys.3"; -chr20 hg19_knownGene CDS 56227112 56227654 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_199171:uc002xyt.3"; -chr20 hg19_knownGene exon 56223452 56227654 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199171:uc002xyt.3"; -chr20 hg19_knownGene CDS 56228089 56228142 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_199171:uc002xyt.3"; -chr20 hg19_knownGene exon 56228089 56228142 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199171:uc002xyt.3"; -chr20 hg19_knownGene CDS 56234599 56234712 0.000000 - 0 gene_id "PMEPA1"; transcript_id "NM_199171:uc002xyt.3"; -chr20 hg19_knownGene exon 56234599 56234753 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199171:uc002xyt.3"; -chr20 hg19_knownGene exon 56286380 56286541 0.000000 - . gene_id "PMEPA1"; transcript_id "NM_199171:uc002xyt.3"; -chr20 hg19_knownGene exon 56285239 56287808 0.000000 + . gene_id "AK056098"; transcript_id "AK056098:uc002xyu.1"; -chr20 hg19_knownGene exon 56470450 56470500 0.000000 + . gene_id "MIR4532"; transcript_id "NR_039757:uc021wfh.1"; -chr20 hg19_knownGene CDS 56726021 56726088 0.000000 + 0 gene_id "C20orf85"; transcript_id "NM_178456:uc002xyv.3"; -chr20 hg19_knownGene exon 56725983 56726088 0.000000 + . gene_id "C20orf85"; transcript_id "NM_178456:uc002xyv.3"; -chr20 hg19_knownGene CDS 56728600 56728681 0.000000 + 1 gene_id "C20orf85"; transcript_id "NM_178456:uc002xyv.3"; -chr20 hg19_knownGene exon 56728600 56728681 0.000000 + . gene_id "C20orf85"; transcript_id "NM_178456:uc002xyv.3"; -chr20 hg19_knownGene CDS 56730524 56730625 0.000000 + 0 gene_id "C20orf85"; transcript_id "NM_178456:uc002xyv.3"; -chr20 hg19_knownGene exon 56730524 56730625 0.000000 + . gene_id "C20orf85"; transcript_id "NM_178456:uc002xyv.3"; -chr20 hg19_knownGene CDS 56735717 56735875 0.000000 + 0 gene_id "C20orf85"; transcript_id "NM_178456:uc002xyv.3"; -chr20 hg19_knownGene exon 56735717 56736183 0.000000 + . gene_id "C20orf85"; transcript_id "NM_178456:uc002xyv.3"; -chr20 hg19_knownGene exon 56806188 56806983 0.000000 - . gene_id "PPP4R1L"; transcript_id "AF119843:uc002xyw.3"; -chr20 hg19_knownGene exon 56807744 56807978 0.000000 - . gene_id "PPP4R1L"; transcript_id "AF119843:uc002xyw.3"; -chr20 hg19_knownGene exon 56810296 56810430 0.000000 - . gene_id "PPP4R1L"; transcript_id "AF119843:uc002xyw.3"; -chr20 hg19_knownGene exon 56811210 56811330 0.000000 - . gene_id "PPP4R1L"; transcript_id "AF119843:uc002xyw.3"; -chr20 hg19_knownGene exon 56813267 56813367 0.000000 - . gene_id "PPP4R1L"; transcript_id "AF119843:uc002xyw.3"; -chr20 hg19_knownGene exon 56814297 56814458 0.000000 - . gene_id "PPP4R1L"; transcript_id "AF119843:uc002xyw.3"; -chr20 hg19_knownGene exon 56814716 56814901 0.000000 - . gene_id "PPP4R1L"; transcript_id "AF119843:uc002xyw.3"; -chr20 hg19_knownGene exon 56815571 56815666 0.000000 - . gene_id "PPP4R1L"; transcript_id "AF119843:uc002xyw.3"; -chr20 hg19_knownGene exon 56818568 56818761 0.000000 - . gene_id "PPP4R1L"; transcript_id "AF119843:uc002xyw.3"; -chr20 hg19_knownGene exon 56820839 56821308 0.000000 - . gene_id "PPP4R1L"; transcript_id "AF119843:uc002xyw.3"; -chr20 hg19_knownGene exon 56807744 56807978 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56810333 56810430 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56811210 56811330 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56813267 56813367 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56814297 56814458 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56814716 56814901 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56815571 56815666 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56818568 56818761 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56820839 56821308 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56822378 56822562 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56823171 56823329 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56825943 56826008 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56826813 56826920 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56847825 56847931 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56861370 56861502 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56884282 56884326 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene exon 56884475 56884495 0.000000 - . gene_id "PPP4R1L"; transcript_id "NR_003505:uc010gjn.1"; -chr20 hg19_knownGene CDS 56821017 56821308 0.000000 - 1 gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene exon 56820839 56821308 0.000000 - . gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene CDS 56822378 56822562 0.000000 - 0 gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene exon 56822378 56822562 0.000000 - . gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene CDS 56823171 56823329 0.000000 - 0 gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene exon 56823171 56823329 0.000000 - . gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene CDS 56825943 56826008 0.000000 - 0 gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene exon 56825943 56826008 0.000000 - . gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene CDS 56826813 56826920 0.000000 - 0 gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene exon 56826813 56826920 0.000000 - . gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene CDS 56846419 56846561 0.000000 - 2 gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene exon 56846419 56846561 0.000000 - . gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene CDS 56847825 56847931 0.000000 - 1 gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene exon 56847825 56847931 0.000000 - . gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene CDS 56861370 56861502 0.000000 - 2 gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene exon 56861370 56861502 0.000000 - . gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene CDS 56884282 56884326 0.000000 - 2 gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene exon 56884282 56884326 0.000000 - . gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene CDS 56884475 56884481 0.000000 - 0 gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene exon 56884475 56884495 0.000000 - . gene_id "PPP4R1L"; transcript_id "AK299330:uc002xyy.1"; -chr20 hg19_knownGene CDS 56885033 56885068 0.000000 + 0 gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene exon 56884771 56885068 0.000000 + . gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene CDS 56886099 56886178 0.000000 + 0 gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene exon 56886099 56886178 0.000000 + . gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene CDS 56918774 56918855 0.000000 + 1 gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene exon 56918774 56918855 0.000000 + . gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene CDS 56928329 56928400 0.000000 + 0 gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene exon 56928329 56928400 0.000000 + . gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene CDS 56928488 56928594 0.000000 + 0 gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene exon 56928488 56928594 0.000000 + . gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene CDS 56929212 56929321 0.000000 + 1 gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene exon 56929212 56929321 0.000000 + . gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene CDS 56934662 56934756 0.000000 + 2 gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene exon 56934662 56942563 0.000000 + . gene_id "RAB22A"; transcript_id "NM_020673:uc002xyz.3"; -chr20 hg19_knownGene CDS 56964516 56964573 0.000000 + 0 gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene exon 56964175 56964573 0.000000 + . gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene CDS 56993267 56993419 0.000000 + 2 gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene exon 56993267 56993419 0.000000 + . gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene CDS 57009658 57009761 0.000000 + 2 gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene exon 57009658 57009761 0.000000 + . gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene CDS 57014001 57014081 0.000000 + 0 gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene exon 57014001 57014081 0.000000 + . gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene CDS 57015963 57016139 0.000000 + 0 gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene exon 57015963 57016139 0.000000 + . gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene CDS 57019133 57019288 0.000000 + 0 gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene exon 57019133 57026156 0.000000 + . gene_id "VAPB"; transcript_id "NM_004738:uc002xza.3"; -chr20 hg19_knownGene exon 56964175 56964573 0.000000 + . gene_id "VAPB"; transcript_id "NR_036633:uc010zzo.2"; -chr20 hg19_knownGene CDS 56993393 56993419 0.000000 + 0 gene_id "VAPB"; transcript_id "NR_036633:uc010zzo.2"; -chr20 hg19_knownGene exon 56993267 56993419 0.000000 + . gene_id "VAPB"; transcript_id "NR_036633:uc010zzo.2"; -chr20 hg19_knownGene CDS 57015963 57016139 0.000000 + 0 gene_id "VAPB"; transcript_id "NR_036633:uc010zzo.2"; -chr20 hg19_knownGene exon 57015963 57016139 0.000000 + . gene_id "VAPB"; transcript_id "NR_036633:uc010zzo.2"; -chr20 hg19_knownGene CDS 57019133 57019288 0.000000 + 0 gene_id "VAPB"; transcript_id "NR_036633:uc010zzo.2"; -chr20 hg19_knownGene exon 57019133 57026156 0.000000 + . gene_id "VAPB"; transcript_id "NR_036633:uc010zzo.2"; -chr20 hg19_knownGene CDS 56964516 56964573 0.000000 + 0 gene_id "VAPB"; transcript_id "NM_001195677:uc002xzd.2"; -chr20 hg19_knownGene exon 56964175 56964573 0.000000 + . gene_id "VAPB"; transcript_id "NM_001195677:uc002xzd.2"; -chr20 hg19_knownGene CDS 56993267 56993419 0.000000 + 2 gene_id "VAPB"; transcript_id "NM_001195677:uc002xzd.2"; -chr20 hg19_knownGene exon 56993267 56993419 0.000000 + . gene_id "VAPB"; transcript_id "NM_001195677:uc002xzd.2"; -chr20 hg19_knownGene CDS 57019133 57019218 0.000000 + 2 gene_id "VAPB"; transcript_id "NM_001195677:uc002xzd.2"; -chr20 hg19_knownGene exon 57019133 57026156 0.000000 + . gene_id "VAPB"; transcript_id "NM_001195677:uc002xzd.2"; -chr20 hg19_knownGene exon 56964175 56964573 0.000000 + . gene_id "VAPB"; transcript_id "AK127252:uc002xzb.3"; -chr20 hg19_knownGene exon 56965184 56965396 0.000000 + . gene_id "VAPB"; transcript_id "AK127252:uc002xzb.3"; -chr20 hg19_knownGene exon 56993267 56993419 0.000000 + . gene_id "VAPB"; transcript_id "AK127252:uc002xzb.3"; -chr20 hg19_knownGene exon 57014001 57014081 0.000000 + . gene_id "VAPB"; transcript_id "AK127252:uc002xzb.3"; -chr20 hg19_knownGene exon 57015963 57016139 0.000000 + . gene_id "VAPB"; transcript_id "AK127252:uc002xzb.3"; -chr20 hg19_knownGene exon 57019133 57026156 0.000000 + . gene_id "VAPB"; transcript_id "AK127252:uc002xzb.3"; -chr20 hg19_knownGene CDS 57035849 57036610 0.000000 - 0 gene_id "APCDD1L"; transcript_id "NM_153360:uc002xze.1"; -chr20 hg19_knownGene exon 57034426 57036610 0.000000 - . gene_id "APCDD1L"; transcript_id "NM_153360:uc002xze.1"; -chr20 hg19_knownGene CDS 57042162 57042714 0.000000 - 1 gene_id "APCDD1L"; transcript_id "NM_153360:uc002xze.1"; -chr20 hg19_knownGene exon 57042162 57042714 0.000000 - . gene_id "APCDD1L"; transcript_id "NM_153360:uc002xze.1"; -chr20 hg19_knownGene CDS 57045665 57045803 0.000000 - 2 gene_id "APCDD1L"; transcript_id "NM_153360:uc002xze.1"; -chr20 hg19_knownGene exon 57045665 57045803 0.000000 - . gene_id "APCDD1L"; transcript_id "NM_153360:uc002xze.1"; -chr20 hg19_knownGene CDS 57089715 57089763 0.000000 - 0 gene_id "APCDD1L"; transcript_id "NM_153360:uc002xze.1"; -chr20 hg19_knownGene exon 57089715 57089949 0.000000 - . gene_id "APCDD1L"; transcript_id "NM_153360:uc002xze.1"; -chr20 hg19_knownGene CDS 57035849 57036610 0.000000 - 0 gene_id "APCDD1L"; transcript_id "AK293299:uc010zzp.1"; -chr20 hg19_knownGene exon 57034426 57036610 0.000000 - . gene_id "APCDD1L"; transcript_id "AK293299:uc010zzp.1"; -chr20 hg19_knownGene CDS 57042162 57042714 0.000000 - 1 gene_id "APCDD1L"; transcript_id "AK293299:uc010zzp.1"; -chr20 hg19_knownGene exon 57042162 57042714 0.000000 - . gene_id "APCDD1L"; transcript_id "AK293299:uc010zzp.1"; -chr20 hg19_knownGene CDS 57045665 57045803 0.000000 - 2 gene_id "APCDD1L"; transcript_id "AK293299:uc010zzp.1"; -chr20 hg19_knownGene exon 57045665 57045803 0.000000 - . gene_id "APCDD1L"; transcript_id "AK293299:uc010zzp.1"; -chr20 hg19_knownGene CDS 57088873 57088954 0.000000 - 0 gene_id "APCDD1L"; transcript_id "AK293299:uc010zzp.1"; -chr20 hg19_knownGene exon 57088873 57089043 0.000000 - . gene_id "APCDD1L"; transcript_id "AK293299:uc010zzp.1"; -chr20 hg19_knownGene exon 57089715 57089949 0.000000 - . gene_id "APCDD1L"; transcript_id "AK293299:uc010zzp.1"; -chr20 hg19_knownGene exon 57090435 57090796 0.000000 + . gene_id "LOC149773"; transcript_id "AK091704:uc002xzf.1"; -chr20 hg19_knownGene exon 57098225 57098337 0.000000 + . gene_id "LOC149773"; transcript_id "AK091704:uc002xzf.1"; -chr20 hg19_knownGene exon 57098770 57101088 0.000000 + . gene_id "LOC149773"; transcript_id "AK091704:uc002xzf.1"; -chr20 hg19_knownGene exon 57090435 57090796 0.000000 + . gene_id "LOC149773"; transcript_id "NR_034147:uc002xzg.2"; -chr20 hg19_knownGene exon 57094560 57094655 0.000000 + . gene_id "LOC149773"; transcript_id "NR_034147:uc002xzg.2"; -chr20 hg19_knownGene exon 57096446 57096607 0.000000 + . gene_id "LOC149773"; transcript_id "NR_034147:uc002xzg.2"; -chr20 hg19_knownGene exon 57098225 57098337 0.000000 + . gene_id "LOC149773"; transcript_id "NR_034147:uc002xzg.2"; -chr20 hg19_knownGene exon 57098770 57098862 0.000000 + . gene_id "LOC149773"; transcript_id "NR_034147:uc002xzg.2"; -chr20 hg19_knownGene exon 57122868 57122984 0.000000 + . gene_id "LOC149773"; transcript_id "NR_034147:uc002xzg.2"; -chr20 hg19_knownGene exon 57193796 57194948 0.000000 + . gene_id "LOC149773"; transcript_id "NR_034147:uc002xzg.2"; -chr20 hg19_knownGene exon 57226309 57226490 0.000000 + . gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene exon 57227129 57227194 0.000000 + . gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene exon 57234679 57234690 0.000000 + . gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene CDS 57242561 57242653 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene exon 57242546 57242653 0.000000 + . gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene CDS 57243043 57243183 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene exon 57243043 57243183 0.000000 + . gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene CDS 57244347 57244509 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene exon 57244347 57244509 0.000000 + . gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene CDS 57245568 57245659 0.000000 + 2 gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene exon 57245568 57245659 0.000000 + . gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene CDS 57246210 57246353 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene exon 57246210 57246353 0.000000 + . gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene CDS 57248687 57248767 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene exon 57248687 57248767 0.000000 + . gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene CDS 57251243 57251344 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene exon 57251243 57254582 0.000000 + . gene_id "STX16"; transcript_id "NM_001204868:uc021wfi.1"; -chr20 hg19_knownGene CDS 57227063 57227143 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene exon 57226309 57227143 0.000000 + . gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene CDS 57234679 57234690 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene exon 57234679 57234690 0.000000 + . gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene CDS 57242546 57242653 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene exon 57242546 57242653 0.000000 + . gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene CDS 57243043 57243183 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene exon 57243043 57243183 0.000000 + . gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene CDS 57244347 57244509 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene exon 57244347 57244509 0.000000 + . gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene CDS 57245568 57245659 0.000000 + 2 gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene exon 57245568 57245659 0.000000 + . gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene CDS 57246210 57246353 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene exon 57246210 57246353 0.000000 + . gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene CDS 57248687 57248767 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene exon 57248687 57248767 0.000000 + . gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene CDS 57251243 57251344 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene exon 57251243 57254582 0.000000 + . gene_id "STX16"; transcript_id "NM_001134773:uc002xzk.3"; -chr20 hg19_knownGene CDS 57227063 57227194 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene exon 57226309 57227194 0.000000 + . gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene CDS 57234679 57234690 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene exon 57234679 57234690 0.000000 + . gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene CDS 57242546 57242653 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene exon 57242546 57242653 0.000000 + . gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene CDS 57243043 57243183 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene exon 57243043 57243183 0.000000 + . gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene CDS 57244347 57244509 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene exon 57244347 57244509 0.000000 + . gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene CDS 57245568 57245659 0.000000 + 2 gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene exon 57245568 57245659 0.000000 + . gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene CDS 57246210 57246353 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene exon 57246210 57246353 0.000000 + . gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene CDS 57248687 57248767 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene exon 57248687 57248767 0.000000 + . gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene CDS 57251243 57251344 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene exon 57251243 57254582 0.000000 + . gene_id "STX16"; transcript_id "NM_001001433:uc002xzi.3"; -chr20 hg19_knownGene exon 57226309 57226470 0.000000 + . gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene exon 57227129 57227194 0.000000 + . gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene exon 57234679 57234690 0.000000 + . gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene exon 57242546 57242653 0.000000 + . gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene exon 57243043 57243183 0.000000 + . gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene CDS 57245570 57245659 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene exon 57245568 57245659 0.000000 + . gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene CDS 57246210 57246353 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene exon 57246210 57246353 0.000000 + . gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene CDS 57248687 57248767 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene exon 57248687 57248767 0.000000 + . gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene CDS 57251243 57251344 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene exon 57251243 57254582 0.000000 + . gene_id "STX16"; transcript_id "NR_037942:uc010zzq.2"; -chr20 hg19_knownGene exon 57226309 57227143 0.000000 + . gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene exon 57234679 57234690 0.000000 + . gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene exon 57242546 57242653 0.000000 + . gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene exon 57243043 57243183 0.000000 + . gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene CDS 57245570 57245659 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene exon 57245568 57245659 0.000000 + . gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene CDS 57246210 57246353 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene exon 57246210 57246353 0.000000 + . gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene CDS 57248687 57248767 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene exon 57248687 57248767 0.000000 + . gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene CDS 57251243 57251344 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene exon 57251243 57254582 0.000000 + . gene_id "STX16"; transcript_id "NR_037941:uc002xzl.3"; -chr20 hg19_knownGene CDS 57227063 57227194 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene exon 57226309 57227194 0.000000 + . gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene CDS 57242546 57242653 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene exon 57242546 57242653 0.000000 + . gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene CDS 57243043 57243183 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene exon 57243043 57243183 0.000000 + . gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene CDS 57244347 57244509 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene exon 57244347 57244509 0.000000 + . gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene CDS 57245568 57245659 0.000000 + 2 gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene exon 57245568 57245659 0.000000 + . gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene CDS 57246210 57246353 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene exon 57246210 57246353 0.000000 + . gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene CDS 57248687 57248767 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene exon 57248687 57248767 0.000000 + . gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene CDS 57251243 57251344 0.000000 + 0 gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene exon 57251243 57254582 0.000000 + . gene_id "STX16"; transcript_id "NM_001134772:uc002xzm.3"; -chr20 hg19_knownGene CDS 57227063 57227143 0.000000 + 0 gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene exon 57226309 57227143 0.000000 + . gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene CDS 57242546 57242653 0.000000 + 0 gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene exon 57242546 57242653 0.000000 + . gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene CDS 57243043 57243183 0.000000 + 0 gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene exon 57243043 57243183 0.000000 + . gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene CDS 57244347 57244509 0.000000 + 0 gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene exon 57244347 57244509 0.000000 + . gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene CDS 57245568 57245659 0.000000 + 2 gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene exon 57245568 57245659 0.000000 + . gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene CDS 57246210 57246353 0.000000 + 0 gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene exon 57246210 57246353 0.000000 + . gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene CDS 57248687 57248767 0.000000 + 0 gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene exon 57248687 57248767 0.000000 + . gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene CDS 57251243 57251344 0.000000 + 0 gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene exon 57251243 57254582 0.000000 + . gene_id "STX16"; transcript_id "NM_003763:uc002xzj.3"; -chr20 hg19_knownGene exon 57226309 57226490 0.000000 + . gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene exon 57227129 57227143 0.000000 + . gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene exon 57242546 57242653 0.000000 + . gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene exon 57243043 57243183 0.000000 + . gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene CDS 57245570 57245659 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene exon 57245568 57245659 0.000000 + . gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene CDS 57246210 57246353 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene exon 57246210 57246353 0.000000 + . gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene CDS 57248687 57248767 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene exon 57248687 57248767 0.000000 + . gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene CDS 57251243 57251344 0.000000 + 0 gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene exon 57251243 57254582 0.000000 + . gene_id "STX16"; transcript_id "NR_037943:uc021wfj.1"; -chr20 hg19_knownGene exon 57268228 57268978 0.000000 + . gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene CDS 57269478 57269648 0.000000 + 0 gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene exon 57269478 57269648 0.000000 + . gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene CDS 57273740 57273829 0.000000 + 0 gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene exon 57273740 57273829 0.000000 + . gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene CDS 57274253 57274334 0.000000 + 0 gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene exon 57274253 57274334 0.000000 + . gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene CDS 57276072 57276214 0.000000 + 2 gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene exon 57276072 57276214 0.000000 + . gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene CDS 57282179 57282256 0.000000 + 0 gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene exon 57282179 57282256 0.000000 + . gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene CDS 57287535 57287813 0.000000 + 0 gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene exon 57287535 57290900 0.000000 + . gene_id "NPEPL1"; transcript_id "AL833971:uc002xzp.3"; -chr20 hg19_knownGene exon 57264187 57264267 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57266831 57266836 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57266780 57266836 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57268793 57268978 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57268793 57268978 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57269478 57269648 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57269478 57269648 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57273740 57273829 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57273740 57273829 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57274253 57274334 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57274253 57274334 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57276072 57276214 0.000000 + 2 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57276072 57276214 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57282179 57282256 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57282179 57282256 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57287535 57287635 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57287535 57287635 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57288476 57288599 0.000000 + 1 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57288476 57288599 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57288973 57289149 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57288973 57289149 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57289616 57289726 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57289616 57289726 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene CDS 57290224 57290379 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57290224 57291367 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204873:uc010zzr.2"; -chr20 hg19_knownGene exon 57264187 57264267 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57266821 57266886 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57266780 57266886 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57268793 57268978 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57268793 57268978 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57269478 57269648 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57269478 57269648 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57273740 57273829 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57273740 57273829 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57274253 57274334 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57274253 57274334 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57276072 57276214 0.000000 + 2 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57276072 57276214 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57282179 57282256 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57282179 57282256 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57287535 57287635 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57287535 57287635 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57288476 57288599 0.000000 + 1 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57288476 57288599 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57288973 57289149 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57288973 57289149 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57289616 57289726 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57289616 57289726 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57290224 57290379 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene exon 57290224 57291367 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_001204872:uc010gjo.2"; -chr20 hg19_knownGene CDS 57267957 57268106 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57267862 57268106 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57268793 57268978 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57268793 57268978 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57269478 57269648 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57269478 57269648 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57273740 57273829 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57273740 57273829 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57274253 57274334 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57274253 57274334 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57276072 57276214 0.000000 + 2 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57276072 57276214 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57282179 57282256 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57282179 57282256 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57287535 57287635 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57287535 57287635 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57288476 57288599 0.000000 + 1 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57288476 57288599 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57288973 57289149 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57288973 57289149 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57289616 57289726 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57289616 57289726 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene CDS 57290224 57290379 0.000000 + 0 gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57290224 57291367 0.000000 + . gene_id "NPEPL1"; transcript_id "NM_024663:uc010zzs.1"; -chr20 hg19_knownGene exon 57329406 57329478 0.000000 + . gene_id "BC007940"; transcript_id "BC007940:uc002xzq.1"; -chr20 hg19_knownGene exon 57329691 57329820 0.000000 + . gene_id "BC007940"; transcript_id "BC007940:uc002xzq.1"; -chr20 hg19_knownGene exon 57330478 57331891 0.000000 + . gene_id "BC007940"; transcript_id "BC007940:uc002xzq.1"; -chr20 hg19_knownGene exon 57392670 57392749 0.000000 - . gene_id "MIR296"; transcript_id "NR_029844:uc002xzr.1"; -chr20 hg19_knownGene exon 57393281 57393368 0.000000 - . gene_id "MIR298"; transcript_id "NR_030580:uc021wfk.1"; -chr20 hg19_knownGene CDS 57415162 57415896 0.000000 + 0 gene_id "GNAS"; transcript_id "CCDS13471:uc021wfm.1"; -chr20 hg19_knownGene exon 57415162 57415899 0.000000 + . gene_id "GNAS"; transcript_id "CCDS13471:uc021wfm.1"; -chr20 hg19_knownGene exon 57393973 57394310 0.000000 - . gene_id "GNAS-AS1"; transcript_id "NR_002785:uc002xzs.2"; -chr20 hg19_knownGene exon 57416992 57417284 0.000000 - . gene_id "GNAS-AS1"; transcript_id "NR_002785:uc002xzs.2"; -chr20 hg19_knownGene exon 57417488 57417600 0.000000 - . gene_id "GNAS-AS1"; transcript_id "NR_002785:uc002xzs.2"; -chr20 hg19_knownGene exon 57423934 57423972 0.000000 - . gene_id "GNAS-AS1"; transcript_id "NR_002785:uc002xzs.2"; -chr20 hg19_knownGene exon 57425585 57425958 0.000000 - . gene_id "GNAS-AS1"; transcript_id "NR_002785:uc002xzs.2"; -chr20 hg19_knownGene exon 57470252 57470739 0.000000 + . gene_id "AK093534"; transcript_id "AK093534:uc002yac.1"; -chr20 hg19_knownGene exon 57428036 57430388 0.000000 + . gene_id "GNAS"; transcript_id "AJ224867:uc002xzv.3"; -chr20 hg19_knownGene exon 57430609 57430699 0.000000 + . gene_id "GNAS"; transcript_id "AJ224867:uc002xzv.3"; -chr20 hg19_knownGene exon 57431202 57431268 0.000000 + . gene_id "GNAS"; transcript_id "AJ224867:uc002xzv.3"; -chr20 hg19_knownGene exon 57470667 57470739 0.000000 + . gene_id "GNAS"; transcript_id "AJ224867:uc002xzv.3"; -chr20 hg19_knownGene exon 57473996 57474040 0.000000 + . gene_id "GNAS"; transcript_id "AJ224867:uc002xzv.3"; -chr20 hg19_knownGene exon 57475004 57475177 0.000000 + . gene_id "GNAS"; transcript_id "AJ224867:uc002xzv.3"; -chr20 hg19_knownGene CDS 57415162 57415896 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57414795 57415941 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57470667 57470739 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57473996 57474040 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57478583 57478640 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "NM_016592:uc021wfl.1"; -chr20 hg19_knownGene CDS 57415899 57415941 0.000000 + 0 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57414795 57415941 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57470667 57470739 0.000000 + 2 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57470667 57470739 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57473996 57474040 0.000000 + 1 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57473996 57474040 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57478586 57478640 0.000000 + 1 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57478586 57478640 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57478727 57478846 0.000000 + 0 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57480438 57480535 0.000000 + 0 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57484217 57484271 0.000000 + 1 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57484405 57484478 0.000000 + 0 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57484576 57484634 0.000000 + 1 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57484739 57484859 0.000000 + 2 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57485006 57485136 0.000000 + 1 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57485389 57485456 0.000000 + 2 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene CDS 57485738 57485881 0.000000 + 0 gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "BC036081:uc002xzt.3"; -chr20 hg19_knownGene exon 57416689 57416930 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57470705 57470739 0.000000 + 0 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57470667 57470739 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57473996 57474040 0.000000 + 1 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57473996 57474040 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57478586 57478640 0.000000 + 1 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57478586 57478640 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57478727 57478846 0.000000 + 0 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57480438 57480535 0.000000 + 0 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57484217 57484271 0.000000 + 1 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57484405 57484478 0.000000 + 0 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57484576 57484634 0.000000 + 1 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57484739 57484859 0.000000 + 2 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57485006 57485136 0.000000 + 1 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57485389 57485456 0.000000 + 2 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57485738 57485881 0.000000 + 0 gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "AK315874:uc010gjq.3"; -chr20 hg19_knownGene CDS 57428321 57430388 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57428036 57430388 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57470667 57470739 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57470667 57470739 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57473996 57474040 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57473996 57474040 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57478586 57478640 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57478586 57478640 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57478727 57478846 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57480438 57480535 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57484217 57484271 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57484405 57484478 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57484576 57484634 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57484739 57484859 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57485006 57485136 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57485389 57485456 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene CDS 57485738 57485881 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "NM_080425:uc002xzw.3"; -chr20 hg19_knownGene exon 57464180 57464408 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57470705 57470739 0.000000 + 0 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57470667 57470739 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57473996 57474040 0.000000 + 1 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57473996 57474040 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57478586 57478640 0.000000 + 1 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57478586 57478640 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57478727 57478846 0.000000 + 0 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57480438 57480535 0.000000 + 0 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57484217 57484271 0.000000 + 1 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57484405 57484478 0.000000 + 0 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57484576 57484634 0.000000 + 1 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57484739 57484859 0.000000 + 2 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57485006 57485136 0.000000 + 1 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57485389 57485456 0.000000 + 2 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57485738 57485881 0.000000 + 0 gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "NR_003259:uc002xzx.3"; -chr20 hg19_knownGene CDS 57466782 57466920 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57466426 57466920 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57470667 57470739 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57470667 57470739 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57473996 57474040 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57473996 57474040 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57478586 57478640 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57478586 57478640 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57478727 57478846 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57480438 57480535 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57484217 57484271 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57484405 57484478 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57484576 57484634 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57484739 57484859 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57485006 57485136 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57485389 57485456 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57485738 57485881 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "NM_000516:uc021wfn.1"; -chr20 hg19_knownGene CDS 57466782 57466920 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57466426 57466920 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57470667 57470739 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57470667 57470739 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57473996 57474040 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57473996 57474040 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57478583 57478640 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57478583 57478640 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57478727 57478846 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57480438 57480535 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57484217 57484271 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57484405 57484478 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57484576 57484634 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57484739 57484859 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57485006 57485136 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57485389 57485456 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57485738 57485881 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077488:uc021wfo.1"; -chr20 hg19_knownGene CDS 57466782 57466920 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57466426 57466920 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57470667 57470739 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57470667 57470739 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57478586 57478640 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57478586 57478640 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57478727 57478846 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57480438 57480535 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57484217 57484271 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57484405 57484478 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57484576 57484634 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57484739 57484859 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57485006 57485136 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57485389 57485456 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57485738 57485881 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "NM_001077489:uc002yaa.3"; -chr20 hg19_knownGene CDS 57466782 57466920 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57466426 57466920 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57470667 57470739 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57470667 57470739 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57478583 57478640 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57478583 57478640 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57478727 57478846 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57480438 57480535 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57484217 57484271 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57484405 57484478 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57484576 57484634 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57484739 57484859 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57485006 57485136 0.000000 + 1 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57485389 57485456 0.000000 + 2 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene CDS 57485738 57485881 0.000000 + 0 gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "NM_080426:uc021wfp.1"; -chr20 hg19_knownGene exon 57472495 57474040 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene exon 57478586 57478640 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene CDS 57478742 57478846 0.000000 + 0 gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene CDS 57480438 57480535 0.000000 + 0 gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene CDS 57484217 57484271 0.000000 + 1 gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene CDS 57484405 57484478 0.000000 + 0 gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene CDS 57484576 57484634 0.000000 + 1 gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene CDS 57484739 57484859 0.000000 + 2 gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene CDS 57485006 57485136 0.000000 + 1 gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene CDS 57485389 57485456 0.000000 + 2 gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene CDS 57485738 57485881 0.000000 + 0 gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "AK054862:uc002yad.3"; -chr20 hg19_knownGene CDS 57478554 57478640 0.000000 + 0 gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene exon 57478036 57478640 0.000000 + . gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene CDS 57478727 57478846 0.000000 + 0 gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene exon 57478727 57478846 0.000000 + . gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene CDS 57480438 57480535 0.000000 + 0 gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene exon 57480438 57480535 0.000000 + . gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene CDS 57484217 57484271 0.000000 + 1 gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene exon 57484217 57484271 0.000000 + . gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene CDS 57484405 57484478 0.000000 + 0 gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene exon 57484405 57484478 0.000000 + . gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene CDS 57484576 57484634 0.000000 + 1 gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene exon 57484576 57484634 0.000000 + . gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene CDS 57484739 57484859 0.000000 + 2 gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene exon 57484739 57484859 0.000000 + . gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene CDS 57485006 57485136 0.000000 + 1 gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene exon 57485006 57485136 0.000000 + . gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene CDS 57485389 57485456 0.000000 + 2 gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene exon 57485389 57485456 0.000000 + . gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene CDS 57485738 57485881 0.000000 + 0 gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene exon 57485738 57486250 0.000000 + . gene_id "GNAS"; transcript_id "AK122771:uc002yae.3"; -chr20 hg19_knownGene CDS 57556338 57556424 0.000000 + 0 gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene exon 57556311 57556424 0.000000 + . gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene CDS 57561148 57561263 0.000000 + 0 gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene exon 57561148 57561263 0.000000 + . gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene CDS 57561809 57561918 0.000000 + 1 gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene exon 57561809 57561918 0.000000 + . gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene CDS 57562763 57562872 0.000000 + 2 gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene exon 57562763 57562872 0.000000 + . gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene CDS 57563969 57564076 0.000000 + 0 gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene exon 57563969 57564076 0.000000 + . gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene CDS 57564543 57564794 0.000000 + 0 gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene exon 57564543 57564945 0.000000 + . gene_id "TH1L"; transcript_id "AK304310:uc010zzu.1"; -chr20 hg19_knownGene exon 57556311 57556424 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57561148 57561263 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57561809 57561918 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57562763 57562872 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57563969 57564076 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57564543 57564695 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57564913 57565043 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57565965 57566130 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57566367 57566501 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57566936 57567075 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57568053 57568167 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57568504 57568599 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57568679 57568819 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57569165 57569294 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57569697 57569879 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene exon 57569981 57570151 0.000000 + . gene_id "TH1L"; transcript_id "AF161479:uc002yaf.1"; -chr20 hg19_knownGene CDS 57556338 57556424 0.000000 + 0 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57556311 57556424 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57561148 57561263 0.000000 + 0 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57561148 57561263 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57561809 57561918 0.000000 + 1 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57561809 57561918 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57562763 57562872 0.000000 + 2 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57562763 57562872 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57563969 57564076 0.000000 + 0 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57563969 57564076 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57564543 57564695 0.000000 + 0 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57564543 57564695 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57564913 57565043 0.000000 + 0 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57564913 57565043 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57565965 57566130 0.000000 + 1 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57565965 57566130 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57566367 57566501 0.000000 + 0 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57566367 57566501 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57566936 57567075 0.000000 + 0 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57566936 57567075 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57568053 57568167 0.000000 + 1 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57568053 57568167 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57568504 57568599 0.000000 + 0 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57568504 57568599 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57568679 57568819 0.000000 + 0 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57568679 57568819 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57569165 57569294 0.000000 + 0 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57569165 57569294 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene CDS 57569697 57569728 0.000000 + 2 gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57569697 57570188 0.000000 + . gene_id "TH1L"; transcript_id "NM_198976:uc002yag.3"; -chr20 hg19_knownGene exon 57572658 57573051 0.000000 - . gene_id "AK310046"; transcript_id "AK310046:uc010gjt.1"; -chr20 hg19_knownGene CDS 57570707 57570814 0.000000 - 0 gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene exon 57570242 57570814 0.000000 - . gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene CDS 57571694 57571856 0.000000 - 1 gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene exon 57571694 57571856 0.000000 - . gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene CDS 57572658 57572808 0.000000 - 2 gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene exon 57572658 57572808 0.000000 - . gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene CDS 57576520 57576699 0.000000 - 2 gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene exon 57576520 57576699 0.000000 - . gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene CDS 57581377 57581540 0.000000 - 1 gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene exon 57581377 57581540 0.000000 - . gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene CDS 57582041 57582183 0.000000 - 0 gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene exon 57582041 57582309 0.000000 - . gene_id "CTSZ"; transcript_id "NM_001336:uc002yai.2"; -chr20 hg19_knownGene CDS 57571646 57571856 0.000000 - 1 gene_id "CTSZ"; transcript_id "BC025419:uc002yaj.4"; -chr20 hg19_knownGene exon 57571642 57571856 0.000000 - . gene_id "CTSZ"; transcript_id "BC025419:uc002yaj.4"; -chr20 hg19_knownGene CDS 57572658 57572808 0.000000 - 2 gene_id "CTSZ"; transcript_id "BC025419:uc002yaj.4"; -chr20 hg19_knownGene exon 57572658 57572808 0.000000 - . gene_id "CTSZ"; transcript_id "BC025419:uc002yaj.4"; -chr20 hg19_knownGene CDS 57576520 57576699 0.000000 - 2 gene_id "CTSZ"; transcript_id "BC025419:uc002yaj.4"; -chr20 hg19_knownGene exon 57576520 57576699 0.000000 - . gene_id "CTSZ"; transcript_id "BC025419:uc002yaj.4"; -chr20 hg19_knownGene CDS 57581377 57581540 0.000000 - 1 gene_id "CTSZ"; transcript_id "BC025419:uc002yaj.4"; -chr20 hg19_knownGene exon 57581377 57581540 0.000000 - . gene_id "CTSZ"; transcript_id "BC025419:uc002yaj.4"; -chr20 hg19_knownGene CDS 57582041 57582183 0.000000 - 0 gene_id "CTSZ"; transcript_id "BC025419:uc002yaj.4"; -chr20 hg19_knownGene exon 57582041 57582309 0.000000 - . gene_id "CTSZ"; transcript_id "BC025419:uc002yaj.4"; -chr20 hg19_knownGene CDS 57594578 57594634 0.000000 + 0 gene_id "TUBB1"; transcript_id "NM_030773:uc002yak.3"; -chr20 hg19_knownGene exon 57594309 57594634 0.000000 + . gene_id "TUBB1"; transcript_id "NM_030773:uc002yak.3"; -chr20 hg19_knownGene CDS 57597900 57598008 0.000000 + 0 gene_id "TUBB1"; transcript_id "NM_030773:uc002yak.3"; -chr20 hg19_knownGene exon 57597900 57598008 0.000000 + . gene_id "TUBB1"; transcript_id "NM_030773:uc002yak.3"; -chr20 hg19_knownGene CDS 57598545 57598655 0.000000 + 2 gene_id "TUBB1"; transcript_id "NM_030773:uc002yak.3"; -chr20 hg19_knownGene exon 57598545 57598655 0.000000 + . gene_id "TUBB1"; transcript_id "NM_030773:uc002yak.3"; -chr20 hg19_knownGene CDS 57598760 57599835 0.000000 + 2 gene_id "TUBB1"; transcript_id "NM_030773:uc002yak.3"; -chr20 hg19_knownGene exon 57598760 57601709 0.000000 + . gene_id "TUBB1"; transcript_id "NM_030773:uc002yak.3"; -chr20 hg19_knownGene exon 57603733 57603896 0.000000 - . gene_id "ATP5E"; transcript_id "NM_006886:uc002yal.3"; -chr20 hg19_knownGene CDS 57605364 57605484 0.000000 - 1 gene_id "ATP5E"; transcript_id "NM_006886:uc002yal.3"; -chr20 hg19_knownGene exon 57605358 57605484 0.000000 - . gene_id "ATP5E"; transcript_id "NM_006886:uc002yal.3"; -chr20 hg19_knownGene CDS 57607275 57607306 0.000000 - 0 gene_id "ATP5E"; transcript_id "NM_006886:uc002yal.3"; -chr20 hg19_knownGene exon 57607275 57607422 0.000000 - . gene_id "ATP5E"; transcript_id "NM_006886:uc002yal.3"; -chr20 hg19_knownGene exon 57603733 57603896 0.000000 - . gene_id "SLMO2"; transcript_id "NR_037929:uc021wfq.1"; -chr20 hg19_knownGene exon 57605358 57605484 0.000000 - . gene_id "SLMO2"; transcript_id "NR_037929:uc021wfq.1"; -chr20 hg19_knownGene exon 57610027 57610181 0.000000 - . gene_id "SLMO2"; transcript_id "NR_037929:uc021wfq.1"; -chr20 hg19_knownGene exon 57611526 57611628 0.000000 - . gene_id "SLMO2"; transcript_id "NR_037929:uc021wfq.1"; -chr20 hg19_knownGene exon 57611745 57611815 0.000000 - . gene_id "SLMO2"; transcript_id "NR_037929:uc021wfq.1"; -chr20 hg19_knownGene exon 57612246 57612335 0.000000 - . gene_id "SLMO2"; transcript_id "NR_037929:uc021wfq.1"; -chr20 hg19_knownGene exon 57613521 57613689 0.000000 - . gene_id "SLMO2"; transcript_id "NR_037929:uc021wfq.1"; -chr20 hg19_knownGene exon 57617754 57617901 0.000000 - . gene_id "SLMO2"; transcript_id "NR_037929:uc021wfq.1"; -chr20 hg19_knownGene exon 57603733 57603896 0.000000 - . gene_id "SLMO2-ATP5E"; transcript_id "NR_037930:uc021wfr.1"; -chr20 hg19_knownGene exon 57605358 57605484 0.000000 - . gene_id "SLMO2-ATP5E"; transcript_id "NR_037930:uc021wfr.1"; -chr20 hg19_knownGene exon 57610027 57610181 0.000000 - . gene_id "SLMO2-ATP5E"; transcript_id "NR_037930:uc021wfr.1"; -chr20 hg19_knownGene exon 57611526 57611628 0.000000 - . gene_id "SLMO2-ATP5E"; transcript_id "NR_037930:uc021wfr.1"; -chr20 hg19_knownGene exon 57611745 57611815 0.000000 - . gene_id "SLMO2-ATP5E"; transcript_id "NR_037930:uc021wfr.1"; -chr20 hg19_knownGene exon 57617754 57617901 0.000000 - . gene_id "SLMO2-ATP5E"; transcript_id "NR_037930:uc021wfr.1"; -chr20 hg19_knownGene CDS 57610065 57610181 0.000000 - 0 gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene exon 57608200 57610181 0.000000 - . gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene CDS 57611526 57611628 0.000000 - 1 gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene exon 57611526 57611628 0.000000 - . gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene CDS 57611745 57611815 0.000000 - 0 gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene exon 57611745 57611815 0.000000 - . gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene CDS 57612246 57612335 0.000000 - 0 gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene exon 57612246 57612335 0.000000 - . gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene CDS 57613521 57613689 0.000000 - 1 gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene exon 57613521 57613689 0.000000 - . gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene CDS 57617754 57617785 0.000000 - 0 gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene exon 57617754 57617901 0.000000 - . gene_id "SLMO2"; transcript_id "NM_016045:uc002yam.3"; -chr20 hg19_knownGene CDS 57610065 57610181 0.000000 - 0 gene_id "SLMO2"; transcript_id "AK298135:uc010zzv.2"; -chr20 hg19_knownGene exon 57608200 57610181 0.000000 - . gene_id "SLMO2"; transcript_id "AK298135:uc010zzv.2"; -chr20 hg19_knownGene CDS 57611526 57611628 0.000000 - 1 gene_id "SLMO2"; transcript_id "AK298135:uc010zzv.2"; -chr20 hg19_knownGene exon 57611526 57611628 0.000000 - . gene_id "SLMO2"; transcript_id "AK298135:uc010zzv.2"; -chr20 hg19_knownGene CDS 57611745 57611815 0.000000 - 0 gene_id "SLMO2"; transcript_id "AK298135:uc010zzv.2"; -chr20 hg19_knownGene exon 57611745 57611815 0.000000 - . gene_id "SLMO2"; transcript_id "AK298135:uc010zzv.2"; -chr20 hg19_knownGene CDS 57613521 57613689 0.000000 - 1 gene_id "SLMO2"; transcript_id "AK298135:uc010zzv.2"; -chr20 hg19_knownGene exon 57613521 57613689 0.000000 - . gene_id "SLMO2"; transcript_id "AK298135:uc010zzv.2"; -chr20 hg19_knownGene CDS 57617754 57617785 0.000000 - 0 gene_id "SLMO2"; transcript_id "AK298135:uc010zzv.2"; -chr20 hg19_knownGene exon 57617754 57617901 0.000000 - . gene_id "SLMO2"; transcript_id "AK298135:uc010zzv.2"; -chr20 hg19_knownGene CDS 57766075 57769812 0.000000 + 0 gene_id "ZNF831"; transcript_id "NM_178457:uc002yan.3"; -chr20 hg19_knownGene exon 57766075 57769812 0.000000 + . gene_id "ZNF831"; transcript_id "NM_178457:uc002yan.3"; -chr20 hg19_knownGene CDS 57770924 57771060 0.000000 + 0 gene_id "ZNF831"; transcript_id "NM_178457:uc002yan.3"; -chr20 hg19_knownGene exon 57770924 57771060 0.000000 + . gene_id "ZNF831"; transcript_id "NM_178457:uc002yan.3"; -chr20 hg19_knownGene CDS 57781960 57782111 0.000000 + 1 gene_id "ZNF831"; transcript_id "NM_178457:uc002yan.3"; -chr20 hg19_knownGene exon 57781960 57782111 0.000000 + . gene_id "ZNF831"; transcript_id "NM_178457:uc002yan.3"; -chr20 hg19_knownGene CDS 57828033 57828193 0.000000 + 2 gene_id "ZNF831"; transcript_id "NM_178457:uc002yan.3"; -chr20 hg19_knownGene exon 57828033 57828193 0.000000 + . gene_id "ZNF831"; transcript_id "NM_178457:uc002yan.3"; -chr20 hg19_knownGene CDS 57828953 57829795 0.000000 + 0 gene_id "ZNF831"; transcript_id "NM_178457:uc002yan.3"; -chr20 hg19_knownGene exon 57828953 57834167 0.000000 + . gene_id "ZNF831"; transcript_id "NM_178457:uc002yan.3"; -chr20 hg19_knownGene CDS 57875868 57875919 0.000000 + 0 gene_id "EDN3"; transcript_id "DQ096281:uc002yao.1"; -chr20 hg19_knownGene exon 57875499 57875919 0.000000 + . gene_id "EDN3"; transcript_id "DQ096281:uc002yao.1"; -chr20 hg19_knownGene CDS 57876465 57876777 0.000000 + 2 gene_id "EDN3"; transcript_id "DQ096281:uc002yao.1"; -chr20 hg19_knownGene exon 57876465 57876777 0.000000 + . gene_id "EDN3"; transcript_id "DQ096281:uc002yao.1"; -chr20 hg19_knownGene CDS 57896072 57896248 0.000000 + 1 gene_id "EDN3"; transcript_id "DQ096281:uc002yao.1"; -chr20 hg19_knownGene exon 57896072 57896248 0.000000 + . gene_id "EDN3"; transcript_id "DQ096281:uc002yao.1"; -chr20 hg19_knownGene CDS 57899386 57899419 0.000000 + 1 gene_id "EDN3"; transcript_id "DQ096281:uc002yao.1"; -chr20 hg19_knownGene exon 57899386 57899529 0.000000 + . gene_id "EDN3"; transcript_id "DQ096281:uc002yao.1"; -chr20 hg19_knownGene CDS 57875868 57875919 0.000000 + 0 gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene exon 57875499 57875919 0.000000 + . gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene CDS 57876465 57876777 0.000000 + 2 gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene exon 57876465 57876777 0.000000 + . gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene CDS 57896072 57896248 0.000000 + 1 gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene exon 57896072 57896248 0.000000 + . gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene CDS 57897427 57897472 0.000000 + 1 gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene exon 57897427 57897472 0.000000 + . gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene CDS 57899386 57899511 0.000000 + 0 gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene exon 57899386 57899529 0.000000 + . gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene exon 57899751 57901047 0.000000 + . gene_id "EDN3"; transcript_id "NM_000114:uc002yap.3"; -chr20 hg19_knownGene CDS 57875868 57875919 0.000000 + 0 gene_id "EDN3"; transcript_id "NM_207034:uc002yaq.3"; -chr20 hg19_knownGene exon 57875499 57875919 0.000000 + . gene_id "EDN3"; transcript_id "NM_207034:uc002yaq.3"; -chr20 hg19_knownGene CDS 57876465 57876777 0.000000 + 2 gene_id "EDN3"; transcript_id "NM_207034:uc002yaq.3"; -chr20 hg19_knownGene exon 57876465 57876777 0.000000 + . gene_id "EDN3"; transcript_id "NM_207034:uc002yaq.3"; -chr20 hg19_knownGene CDS 57896072 57896248 0.000000 + 1 gene_id "EDN3"; transcript_id "NM_207034:uc002yaq.3"; -chr20 hg19_knownGene exon 57896072 57896248 0.000000 + . gene_id "EDN3"; transcript_id "NM_207034:uc002yaq.3"; -chr20 hg19_knownGene CDS 57897427 57897472 0.000000 + 1 gene_id "EDN3"; transcript_id "NM_207034:uc002yaq.3"; -chr20 hg19_knownGene exon 57897427 57897472 0.000000 + . gene_id "EDN3"; transcript_id "NM_207034:uc002yaq.3"; -chr20 hg19_knownGene CDS 57899386 57899511 0.000000 + 0 gene_id "EDN3"; transcript_id "NM_207034:uc002yaq.3"; -chr20 hg19_knownGene exon 57899386 57901047 0.000000 + . gene_id "EDN3"; transcript_id "NM_207034:uc002yaq.3"; -chr20 hg19_knownGene CDS 57875868 57875919 0.000000 + 0 gene_id "EDN3"; transcript_id "NM_207032:uc002yar.3"; -chr20 hg19_knownGene exon 57875499 57875919 0.000000 + . gene_id "EDN3"; transcript_id "NM_207032:uc002yar.3"; -chr20 hg19_knownGene CDS 57876465 57876777 0.000000 + 2 gene_id "EDN3"; transcript_id "NM_207032:uc002yar.3"; -chr20 hg19_knownGene exon 57876465 57876777 0.000000 + . gene_id "EDN3"; transcript_id "NM_207032:uc002yar.3"; -chr20 hg19_knownGene CDS 57896072 57896248 0.000000 + 1 gene_id "EDN3"; transcript_id "NM_207032:uc002yar.3"; -chr20 hg19_knownGene exon 57896072 57896248 0.000000 + . gene_id "EDN3"; transcript_id "NM_207032:uc002yar.3"; -chr20 hg19_knownGene CDS 57897427 57897507 0.000000 + 1 gene_id "EDN3"; transcript_id "NM_207032:uc002yar.3"; -chr20 hg19_knownGene exon 57897427 57897507 0.000000 + . gene_id "EDN3"; transcript_id "NM_207032:uc002yar.3"; -chr20 hg19_knownGene CDS 57899386 57899419 0.000000 + 1 gene_id "EDN3"; transcript_id "NM_207032:uc002yar.3"; -chr20 hg19_knownGene exon 57899386 57901047 0.000000 + . gene_id "EDN3"; transcript_id "NM_207032:uc002yar.3"; -chr20 hg19_knownGene CDS 57875868 57875919 0.000000 + 0 gene_id "EDN3"; transcript_id "NM_207033:uc002yas.3"; -chr20 hg19_knownGene exon 57875499 57875919 0.000000 + . gene_id "EDN3"; transcript_id "NM_207033:uc002yas.3"; -chr20 hg19_knownGene CDS 57876465 57876777 0.000000 + 2 gene_id "EDN3"; transcript_id "NM_207033:uc002yas.3"; -chr20 hg19_knownGene exon 57876465 57876777 0.000000 + . gene_id "EDN3"; transcript_id "NM_207033:uc002yas.3"; -chr20 hg19_knownGene CDS 57896072 57896248 0.000000 + 1 gene_id "EDN3"; transcript_id "NM_207033:uc002yas.3"; -chr20 hg19_knownGene exon 57896072 57896248 0.000000 + . gene_id "EDN3"; transcript_id "NM_207033:uc002yas.3"; -chr20 hg19_knownGene CDS 57899382 57899511 0.000000 + 1 gene_id "EDN3"; transcript_id "NM_207033:uc002yas.3"; -chr20 hg19_knownGene exon 57899382 57901047 0.000000 + . gene_id "EDN3"; transcript_id "NM_207033:uc002yas.3"; -chr20 hg19_knownGene exon 58201519 58202004 0.000000 - . gene_id "LOC100506384"; transcript_id "NR_040513:uc021wfs.1"; -chr20 hg19_knownGene exon 58203153 58203344 0.000000 - . gene_id "LOC100506384"; transcript_id "NR_040513:uc021wfs.1"; -chr20 hg19_knownGene CDS 58152564 58152672 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58152564 58152672 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58318162 58318323 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58318162 58318323 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58322813 58322890 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58322813 58322890 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58330237 58330419 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58330237 58330419 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58342241 58342450 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58342241 58342450 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58348334 58348508 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58348334 58348508 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58349298 58349545 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58349298 58349545 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58381096 58381249 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58381096 58381249 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58411560 58411615 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58411560 58411615 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58415424 58415485 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58415424 58415485 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58416450 58416590 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58416450 58416590 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58420244 58420320 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58420244 58420320 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58422170 58422182 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene exon 58422170 58422766 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199505:uc002yat.3"; -chr20 hg19_knownGene CDS 58180070 58180187 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58179603 58180187 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58318162 58318323 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58318162 58318323 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58322813 58322890 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58322813 58322890 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58330237 58330419 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58330237 58330419 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58342241 58342450 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58342241 58342450 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58348334 58348508 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58348334 58348508 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58349298 58349545 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58349298 58349545 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58381096 58381249 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58381096 58381249 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58411560 58411615 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58411560 58411615 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58415424 58415485 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58415424 58415485 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58416450 58416590 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58416450 58416590 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58420244 58420320 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58420244 58420320 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene CDS 58422170 58422182 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58422170 58422766 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_080672:uc002yau.3"; -chr20 hg19_knownGene exon 58203664 58203871 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58318167 58318323 0.000000 + 0 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58318162 58318323 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58322813 58322890 0.000000 + 2 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58322813 58322890 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58330237 58330419 0.000000 + 2 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58330237 58330419 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58342241 58342450 0.000000 + 2 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58342241 58342450 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58348334 58348508 0.000000 + 2 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58348334 58348508 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58349298 58349545 0.000000 + 1 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58349298 58349545 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58381096 58381249 0.000000 + 2 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58381096 58381249 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58411560 58411615 0.000000 + 1 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58411560 58411615 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58415424 58415485 0.000000 + 2 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58415424 58415485 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58416450 58416590 0.000000 + 0 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58416450 58416590 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58420244 58420320 0.000000 + 0 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58420244 58420320 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene CDS 58422170 58422182 0.000000 + 1 gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58422170 58422766 0.000000 + . gene_id "PHACTR3"; transcript_id "AK295459:uc010zzw.2"; -chr20 hg19_knownGene exon 58251716 58251819 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58318167 58318323 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58318162 58318323 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58322813 58322890 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58322813 58322890 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58330237 58330419 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58330237 58330419 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58342241 58342450 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58342241 58342450 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58348334 58348508 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58348334 58348508 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58349298 58349545 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58349298 58349545 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58381096 58381249 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58381096 58381249 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58411560 58411615 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58411560 58411615 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58415424 58415485 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58415424 58415485 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58416450 58416590 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58416450 58416590 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58420244 58420320 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58420244 58420320 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene CDS 58422170 58422182 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58422170 58422766 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_001199506:uc002yav.3"; -chr20 hg19_knownGene exon 58296265 58296493 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58318167 58318323 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58318162 58318323 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58322813 58322890 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58322813 58322890 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58330237 58330419 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58330237 58330419 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58342241 58342450 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58342241 58342450 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58348334 58348508 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58348334 58348508 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58349298 58349545 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58349298 58349545 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58381096 58381249 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58381096 58381249 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58411560 58411615 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58411560 58411615 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58415424 58415485 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58415424 58415485 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58416450 58416590 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58416450 58416590 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58420244 58420320 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58420244 58420320 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene CDS 58422170 58422182 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58422170 58422766 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183244:uc002yaw.3"; -chr20 hg19_knownGene exon 58296265 58296493 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58318167 58318323 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58318162 58318323 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58322813 58322890 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58322813 58322890 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58330237 58330419 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58330237 58330419 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58348334 58348508 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58348334 58348508 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58349298 58349545 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58349298 58349545 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58381096 58381249 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58381096 58381249 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58411560 58411615 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58411560 58411615 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58415424 58415485 0.000000 + 2 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58415424 58415485 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58416450 58416590 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58416450 58416590 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58420244 58420320 0.000000 + 0 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58420244 58420320 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58422170 58422182 0.000000 + 1 gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene exon 58422170 58422766 0.000000 + . gene_id "PHACTR3"; transcript_id "NM_183246:uc002yax.3"; -chr20 hg19_knownGene CDS 58411525 58411615 0.000000 + 0 gene_id "PHACTR3"; transcript_id "BC036834:uc002yay.3"; -chr20 hg19_knownGene exon 58411067 58411615 0.000000 + . gene_id "PHACTR3"; transcript_id "BC036834:uc002yay.3"; -chr20 hg19_knownGene CDS 58415424 58415485 0.000000 + 2 gene_id "PHACTR3"; transcript_id "BC036834:uc002yay.3"; -chr20 hg19_knownGene exon 58415424 58415485 0.000000 + . gene_id "PHACTR3"; transcript_id "BC036834:uc002yay.3"; -chr20 hg19_knownGene CDS 58416450 58416590 0.000000 + 0 gene_id "PHACTR3"; transcript_id "BC036834:uc002yay.3"; -chr20 hg19_knownGene exon 58416450 58416590 0.000000 + . gene_id "PHACTR3"; transcript_id "BC036834:uc002yay.3"; -chr20 hg19_knownGene CDS 58420244 58420320 0.000000 + 0 gene_id "PHACTR3"; transcript_id "BC036834:uc002yay.3"; -chr20 hg19_knownGene exon 58420244 58420320 0.000000 + . gene_id "PHACTR3"; transcript_id "BC036834:uc002yay.3"; -chr20 hg19_knownGene CDS 58422170 58422182 0.000000 + 1 gene_id "PHACTR3"; transcript_id "BC036834:uc002yay.3"; -chr20 hg19_knownGene exon 58422170 58422766 0.000000 + . gene_id "PHACTR3"; transcript_id "BC036834:uc002yay.3"; -chr20 hg19_knownGene CDS 58475112 58475339 0.000000 - 0 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58474860 58475339 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58475799 58475873 0.000000 - 0 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58475799 58475873 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58476717 58476865 0.000000 - 2 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58476717 58476865 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58482419 58482479 0.000000 - 0 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58482419 58482479 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58486805 58486900 0.000000 - 0 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58486805 58486900 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58487428 58487473 0.000000 - 1 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58487428 58487473 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58489030 58489082 0.000000 - 0 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58489030 58489082 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58489164 58489306 0.000000 - 2 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58489164 58489306 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58490220 58490254 0.000000 - 1 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58490220 58490254 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58490520 58490605 0.000000 - 0 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58490520 58490605 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58491541 58491626 0.000000 - 2 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58491541 58491626 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58494213 58494237 0.000000 - 0 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58494213 58494237 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58494548 58494652 0.000000 - 0 gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene exon 58494548 58494652 0.000000 - . gene_id "SYCP2"; transcript_id "AK308889:uc010gju.1"; -chr20 hg19_knownGene CDS 58439369 58439443 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58438618 58439443 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58440443 58440499 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58440443 58440499 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58440628 58440706 0.000000 - 1 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58440628 58440706 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58440862 58440920 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58440862 58440920 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58441348 58441447 0.000000 - 1 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58441348 58441447 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58441550 58441644 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58441550 58441644 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58442766 58442902 0.000000 - 2 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58442766 58442902 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58443468 58443623 0.000000 - 2 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58443468 58443623 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58443890 58443980 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58443890 58443980 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58444853 58445038 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58444853 58445038 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58448911 58449116 0.000000 - 2 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58448911 58449116 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58450326 58450524 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58450326 58450524 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58452440 58452610 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58452440 58452610 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58453063 58453100 0.000000 - 2 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58453063 58453100 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58455358 58455526 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58455358 58455526 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58456021 58456078 0.000000 - 1 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58456021 58456078 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58456492 58456547 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58456492 58456547 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58457000 58457057 0.000000 - 1 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58457000 58457057 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58457150 58457220 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58457150 58457220 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58460983 58461019 0.000000 - 1 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58460983 58461019 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58461762 58461889 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58461762 58461889 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58467045 58467481 0.000000 - 2 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58467045 58467481 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58467623 58467756 0.000000 - 1 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58467623 58467756 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58468197 58468254 0.000000 - 2 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58468197 58468254 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58468579 58468648 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58468579 58468648 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58470492 58470652 0.000000 - 2 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58470492 58470652 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58471484 58471583 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58471484 58471583 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58475193 58475339 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58475193 58475339 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58475799 58475873 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58475799 58475873 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58476717 58476865 0.000000 - 2 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58476717 58476865 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58482419 58482479 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58482419 58482479 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58486805 58486900 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58486805 58486900 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58487428 58487473 0.000000 - 1 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58487428 58487473 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58489030 58489082 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58489030 58489082 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58489164 58489306 0.000000 - 2 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58489164 58489306 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58490220 58490254 0.000000 - 1 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58490220 58490254 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58490520 58490605 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58490520 58490605 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58491541 58491626 0.000000 - 2 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58491541 58491626 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58494213 58494237 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58494213 58494237 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58494548 58494652 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58494548 58494652 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58495414 58495542 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58495414 58495542 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58496365 58496508 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58496365 58496508 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58497445 58497468 0.000000 - 0 gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58497445 58497514 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene exon 58507117 58507209 0.000000 - . gene_id "SYCP2"; transcript_id "NM_014258:uc002yaz.3"; -chr20 hg19_knownGene CDS 58514090 58514986 0.000000 - 0 gene_id "PPP1R3D"; transcript_id "NM_006242:uc002ybb.3"; -chr20 hg19_knownGene exon 58511887 58515352 0.000000 - . gene_id "PPP1R3D"; transcript_id "NM_006242:uc002ybb.3"; -chr20 hg19_knownGene CDS 58518999 58520147 0.000000 + 0 gene_id "C20orf177"; transcript_id "CCDS13484:uc021wft.1"; -chr20 hg19_knownGene exon 58518999 58520150 0.000000 + . gene_id "C20orf177"; transcript_id "CCDS13484:uc021wft.1"; -chr20 hg19_knownGene exon 58508819 58508908 0.000000 + . gene_id "C20orf177"; transcript_id "NM_001190826:uc002yba.3"; -chr20 hg19_knownGene exon 58513045 58513167 0.000000 + . gene_id "C20orf177"; transcript_id "NM_001190826:uc002yba.3"; -chr20 hg19_knownGene exon 58517253 58517364 0.000000 + . gene_id "C20orf177"; transcript_id "NM_001190826:uc002yba.3"; -chr20 hg19_knownGene exon 58517482 58517567 0.000000 + . gene_id "C20orf177"; transcript_id "NM_001190826:uc002yba.3"; -chr20 hg19_knownGene CDS 58518999 58520147 0.000000 + 0 gene_id "C20orf177"; transcript_id "NM_001190826:uc002yba.3"; -chr20 hg19_knownGene exon 58518995 58523702 0.000000 + . gene_id "C20orf177"; transcript_id "NM_001190826:uc002yba.3"; -chr20 hg19_knownGene exon 58515444 58515590 0.000000 + . gene_id "C20orf177"; transcript_id "NM_022106:uc002ybc.3"; -chr20 hg19_knownGene exon 58517253 58517364 0.000000 + . gene_id "C20orf177"; transcript_id "NM_022106:uc002ybc.3"; -chr20 hg19_knownGene exon 58517482 58517567 0.000000 + . gene_id "C20orf177"; transcript_id "NM_022106:uc002ybc.3"; -chr20 hg19_knownGene CDS 58518999 58520147 0.000000 + 0 gene_id "C20orf177"; transcript_id "NM_022106:uc002ybc.3"; -chr20 hg19_knownGene exon 58518995 58523702 0.000000 + . gene_id "C20orf177"; transcript_id "NM_022106:uc002ybc.3"; -chr20 hg19_knownGene exon 58515444 58515590 0.000000 + . gene_id "C20orf177"; transcript_id "NM_001190827:uc010zzx.2"; -chr20 hg19_knownGene exon 58517253 58517364 0.000000 + . gene_id "C20orf177"; transcript_id "NM_001190827:uc010zzx.2"; -chr20 hg19_knownGene exon 58517482 58517567 0.000000 + . gene_id "C20orf177"; transcript_id "NM_001190827:uc010zzx.2"; -chr20 hg19_knownGene CDS 58519470 58520147 0.000000 + 0 gene_id "C20orf177"; transcript_id "NM_001190827:uc010zzx.2"; -chr20 hg19_knownGene exon 58519451 58523702 0.000000 + . gene_id "C20orf177"; transcript_id "NM_001190827:uc010zzx.2"; -chr20 hg19_knownGene CDS 58533782 58533850 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58533471 58533850 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58544022 58544078 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58544022 58544078 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58545137 58545241 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58545137 58545241 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58547017 58547178 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58547017 58547178 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58557978 58558125 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58557978 58558125 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58559694 58559860 0.000000 + 2 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58559694 58559860 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58560056 58560184 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58560056 58560184 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58562508 58562693 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58562508 58562693 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58563959 58564218 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58563959 58564218 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58567433 58567575 0.000000 + 1 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58567433 58567575 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58569305 58569544 0.000000 + 2 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58569305 58569544 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58570888 58571109 0.000000 + 2 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58570888 58571109 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58571686 58571816 0.000000 + 2 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58571686 58571816 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58574641 58574718 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58574641 58574718 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58576398 58576466 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58576398 58576466 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58577868 58577921 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58577868 58577921 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58581768 58581842 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58581768 58581842 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene CDS 58587582 58587782 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58587582 58588168 0.000000 + . gene_id "CDH26"; transcript_id "NM_177980:uc002ybe.3"; -chr20 hg19_knownGene exon 58533471 58533850 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58544022 58544078 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58545119 58545241 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58547017 58547178 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58557978 58558125 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58559694 58559860 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58560056 58560184 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58562508 58562693 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58563959 58564218 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58567433 58567575 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58569305 58569544 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58570888 58571109 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58571686 58571816 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58574641 58574718 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58576398 58576645 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58577868 58577921 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58581768 58581842 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene exon 58587582 58588168 0.000000 + . gene_id "CDH26"; transcript_id "BC143931:uc010zzy.2"; -chr20 hg19_knownGene CDS 58571626 58571643 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene exon 58571417 58571643 0.000000 + . gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene CDS 58574641 58574718 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene exon 58574641 58574718 0.000000 + . gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene CDS 58576398 58576466 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene exon 58576398 58576466 0.000000 + . gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene CDS 58577868 58577921 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene exon 58577868 58577921 0.000000 + . gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene CDS 58581768 58581842 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene exon 58581768 58581842 0.000000 + . gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene CDS 58587582 58587782 0.000000 + 0 gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene exon 58587582 58588168 0.000000 + . gene_id "CDH26"; transcript_id "NM_021810:uc002ybh.3"; -chr20 hg19_knownGene CDS 58571626 58571643 0.000000 + 0 gene_id "CDH26"; transcript_id "BC062570:uc002ybi.3"; -chr20 hg19_knownGene exon 58571417 58571643 0.000000 + . gene_id "CDH26"; transcript_id "BC062570:uc002ybi.3"; -chr20 hg19_knownGene CDS 58574641 58574718 0.000000 + 0 gene_id "CDH26"; transcript_id "BC062570:uc002ybi.3"; -chr20 hg19_knownGene exon 58574641 58574718 0.000000 + . gene_id "CDH26"; transcript_id "BC062570:uc002ybi.3"; -chr20 hg19_knownGene CDS 58581768 58581842 0.000000 + 0 gene_id "CDH26"; transcript_id "BC062570:uc002ybi.3"; -chr20 hg19_knownGene exon 58581768 58581842 0.000000 + . gene_id "CDH26"; transcript_id "BC062570:uc002ybi.3"; -chr20 hg19_knownGene CDS 58587582 58587782 0.000000 + 0 gene_id "CDH26"; transcript_id "BC062570:uc002ybi.3"; -chr20 hg19_knownGene exon 58587582 58588168 0.000000 + . gene_id "CDH26"; transcript_id "BC062570:uc002ybi.3"; -chr20 hg19_knownGene CDS 58564196 58564218 0.000000 + 0 gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene exon 58563959 58564218 0.000000 + . gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene CDS 58567433 58567575 0.000000 + 1 gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene exon 58567433 58567575 0.000000 + . gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene CDS 58569305 58569544 0.000000 + 2 gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene exon 58569305 58569544 0.000000 + . gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene CDS 58570888 58571109 0.000000 + 2 gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene exon 58570888 58571109 0.000000 + . gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene CDS 58571686 58571816 0.000000 + 2 gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene exon 58571686 58571816 0.000000 + . gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene CDS 58574641 58574718 0.000000 + 0 gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene exon 58574641 58574718 0.000000 + . gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene CDS 58581768 58581842 0.000000 + 0 gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene exon 58581768 58581842 0.000000 + . gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene CDS 58606286 58606481 0.000000 + 0 gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene exon 58606286 58606481 0.000000 + . gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene CDS 58608541 58608728 0.000000 + 2 gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene exon 58608541 58608829 0.000000 + . gene_id "CDH26"; transcript_id "AF169690:uc002ybf.1"; -chr20 hg19_knownGene exon 58630980 58631063 0.000000 + . gene_id "C20orf197"; transcript_id "NM_173644:uc002ybj.1"; -chr20 hg19_knownGene exon 58633962 58634041 0.000000 + . gene_id "C20orf197"; transcript_id "NM_173644:uc002ybj.1"; -chr20 hg19_knownGene CDS 58645030 58645098 0.000000 + 0 gene_id "C20orf197"; transcript_id "NM_173644:uc002ybj.1"; -chr20 hg19_knownGene exon 58644888 58645098 0.000000 + . gene_id "C20orf197"; transcript_id "NM_173644:uc002ybj.1"; -chr20 hg19_knownGene CDS 58645652 58645960 0.000000 + 0 gene_id "C20orf197"; transcript_id "NM_173644:uc002ybj.1"; -chr20 hg19_knownGene exon 58645652 58648008 0.000000 + . gene_id "C20orf197"; transcript_id "NM_173644:uc002ybj.1"; -chr20 hg19_knownGene exon 58713537 58713700 0.000000 + . gene_id "AX747739"; transcript_id "AX747739:uc002ybl.2"; -chr20 hg19_knownGene exon 58729463 58729562 0.000000 + . gene_id "AX747739"; transcript_id "AX747739:uc002ybl.2"; -chr20 hg19_knownGene exon 58755893 58755971 0.000000 + . gene_id "AX747739"; transcript_id "AX747739:uc002ybl.2"; -chr20 hg19_knownGene exon 58893979 58894065 0.000000 + . gene_id "AX747739"; transcript_id "AX747739:uc002ybl.2"; -chr20 hg19_knownGene exon 58895691 58897314 0.000000 + . gene_id "AX747739"; transcript_id "AX747739:uc002ybl.2"; -chr20 hg19_knownGene exon 59053169 59053239 0.000000 + . gene_id "MIR4533"; transcript_id "NR_039758:uc021wfu.1"; -chr20 hg19_knownGene exon 58713537 58713700 0.000000 + . gene_id "AK309218"; transcript_id "AK309218:uc010gjw.2"; -chr20 hg19_knownGene exon 58729463 58729557 0.000000 + . gene_id "AK309218"; transcript_id "AK309218:uc010gjw.2"; -chr20 hg19_knownGene exon 58755893 58755971 0.000000 + . gene_id "AK309218"; transcript_id "AK309218:uc010gjw.2"; -chr20 hg19_knownGene exon 58994078 58994213 0.000000 + . gene_id "AK309218"; transcript_id "AK309218:uc010gjw.2"; -chr20 hg19_knownGene exon 59225767 59228978 0.000000 + . gene_id "AK309218"; transcript_id "AK309218:uc010gjw.2"; -chr20 hg19_knownGene exon 60292562 60294442 0.000000 - . gene_id "AK097866"; transcript_id "AK097866:uc002ybq.1"; -chr20 hg19_knownGene exon 60294686 60294804 0.000000 - . gene_id "AK097866"; transcript_id "AK097866:uc002ybq.1"; -chr20 hg19_knownGene exon 60145191 60145799 0.000000 + . gene_id "CDH4"; transcript_id "AX747020:uc002ybo.1"; -chr20 hg19_knownGene exon 60318619 60318845 0.000000 + . gene_id "CDH4"; transcript_id "AX747020:uc002ybo.1"; -chr20 hg19_knownGene CDS 59827570 59827626 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 59827482 59827626 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 59829882 59829993 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 59829882 59829993 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60318619 60318845 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60318619 60318845 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60348059 60348238 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60348059 60348238 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60419724 60419879 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60419724 60419879 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60427810 60427954 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60427810 60427954 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60448784 60448956 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60448784 60448956 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60469966 60470103 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60469966 60470103 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60485478 60485663 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60485478 60485663 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60498509 60498762 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60498509 60498762 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60499392 60499534 0.000000 + 1 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60499392 60499534 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60503248 60503481 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60503248 60503481 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60504667 60504900 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60504667 60504900 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60508043 60508182 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60508043 60508182 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60509114 60509278 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60509114 60509278 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60511795 60511998 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene exon 60511795 60515673 0.000000 + . gene_id "CDH4"; transcript_id "NM_001794:uc002ybn.2"; -chr20 hg19_knownGene CDS 60074491 60074548 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60074477 60074548 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60318619 60318845 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60318619 60318845 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60348059 60348238 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60348059 60348238 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60419724 60419879 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60419724 60419879 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60427810 60427954 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60427810 60427954 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60448784 60448956 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60448784 60448956 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60469966 60470103 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60469966 60470103 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60485478 60485663 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60485478 60485663 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60498509 60498762 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60498509 60498762 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60499392 60499534 0.000000 + 1 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60499392 60499534 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60503248 60503481 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60503248 60503481 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60504667 60504900 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60504667 60504900 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60508043 60508182 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60508043 60508182 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60509114 60509278 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60509114 60509278 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene CDS 60511795 60511998 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60511795 60515673 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252338:uc002ybr.2"; -chr20 hg19_knownGene exon 60174817 60175045 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60318672 60318845 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60318619 60318845 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60348059 60348238 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60348059 60348238 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60419724 60419879 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60419724 60419879 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60427810 60427954 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60427810 60427954 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60448784 60448956 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60448784 60448956 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60469966 60470103 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60469966 60470103 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60485478 60485663 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60485478 60485663 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60498509 60498762 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60498509 60498762 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60499392 60499534 0.000000 + 1 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60499392 60499534 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60503248 60503481 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60503248 60503481 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60504667 60504900 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60504667 60504900 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60508043 60508182 0.000000 + 2 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60508043 60508182 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60509114 60509278 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60509114 60509278 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene CDS 60511795 60511998 0.000000 + 0 gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60511795 60515673 0.000000 + . gene_id "CDH4"; transcript_id "NM_001252339:uc002ybp.2"; -chr20 hg19_knownGene exon 60528602 60528718 0.000000 - . gene_id "MIR1257"; transcript_id "NR_031658:uc021wfv.1"; -chr20 hg19_knownGene CDS 60551227 60551391 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60549854 60551391 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60572606 60572725 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60572606 60572725 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60573192 60573248 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60573192 60573248 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60574039 60574164 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60574039 60574164 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60575180 60575310 0.000000 - 2 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60575180 60575310 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60575608 60575777 0.000000 - 1 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60575608 60575777 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60578216 60578330 0.000000 - 2 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60578216 60578330 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60578787 60578934 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60578787 60578934 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60581566 60581814 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60581566 60581814 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60582603 60582692 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60582603 60582692 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60584108 60584230 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60584108 60584230 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60585102 60585221 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60585102 60585221 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60587871 60587990 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60587871 60587990 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60589603 60589763 0.000000 - 2 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60589603 60589763 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60639507 60640866 0.000000 - 0 gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene exon 60639507 60640866 0.000000 - . gene_id "TAF4"; transcript_id "NM_003185:uc002ybs.3"; -chr20 hg19_knownGene CDS 60697723 60697849 0.000000 + 0 gene_id "LSM14B"; transcript_id "CU691202:uc002ybt.2"; -chr20 hg19_knownGene exon 60697517 60697849 0.000000 + . gene_id "LSM14B"; transcript_id "CU691202:uc002ybt.2"; -chr20 hg19_knownGene CDS 60699673 60699836 0.000000 + 2 gene_id "LSM14B"; transcript_id "CU691202:uc002ybt.2"; -chr20 hg19_knownGene exon 60699673 60699836 0.000000 + . gene_id "LSM14B"; transcript_id "CU691202:uc002ybt.2"; -chr20 hg19_knownGene CDS 60701360 60701495 0.000000 + 0 gene_id "LSM14B"; transcript_id "CU691202:uc002ybt.2"; -chr20 hg19_knownGene exon 60701360 60701495 0.000000 + . gene_id "LSM14B"; transcript_id "CU691202:uc002ybt.2"; -chr20 hg19_knownGene CDS 60702641 60702876 0.000000 + 2 gene_id "LSM14B"; transcript_id "CU691202:uc002ybt.2"; -chr20 hg19_knownGene exon 60702641 60704636 0.000000 + . gene_id "LSM14B"; transcript_id "CU691202:uc002ybt.2"; -chr20 hg19_knownGene CDS 60697723 60697849 0.000000 + 0 gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene exon 60697517 60697849 0.000000 + . gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene CDS 60699673 60699836 0.000000 + 2 gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene exon 60699673 60699836 0.000000 + . gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene CDS 60701282 60701495 0.000000 + 0 gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene exon 60701282 60701495 0.000000 + . gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene CDS 60704841 60705008 0.000000 + 2 gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene exon 60704841 60705008 0.000000 + . gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene CDS 60705275 60705352 0.000000 + 2 gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene exon 60705275 60705352 0.000000 + . gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene CDS 60705586 60705743 0.000000 + 2 gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene exon 60705586 60705747 0.000000 + . gene_id "LSM14B"; transcript_id "BC035702:uc010gjx.1"; -chr20 hg19_knownGene exon 60698193 60698279 0.000000 + . gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene exon 60699673 60699836 0.000000 + . gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene CDS 60701426 60701495 0.000000 + 0 gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene exon 60701360 60701495 0.000000 + . gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene CDS 60702641 60702757 0.000000 + 2 gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene exon 60702641 60702757 0.000000 + . gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene CDS 60703981 60704088 0.000000 + 2 gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene exon 60703981 60704088 0.000000 + . gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene CDS 60704841 60705008 0.000000 + 2 gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene exon 60704841 60705008 0.000000 + . gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene CDS 60705275 60705352 0.000000 + 2 gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene exon 60705275 60705352 0.000000 + . gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene CDS 60705586 60705743 0.000000 + 2 gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene exon 60705586 60705747 0.000000 + . gene_id "LSM14B"; transcript_id "AK058202:uc010gjz.1"; -chr20 hg19_knownGene CDS 60697723 60697849 0.000000 + 0 gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene exon 60697517 60697849 0.000000 + . gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene CDS 60699673 60699836 0.000000 + 2 gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene exon 60699673 60699836 0.000000 + . gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene CDS 60701360 60701495 0.000000 + 0 gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene exon 60701360 60701495 0.000000 + . gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene CDS 60704841 60705008 0.000000 + 2 gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene exon 60704841 60705008 0.000000 + . gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene CDS 60705275 60705352 0.000000 + 2 gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene exon 60705275 60705352 0.000000 + . gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene CDS 60705586 60705747 0.000000 + 2 gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene exon 60705586 60705747 0.000000 + . gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene CDS 60706412 60706562 0.000000 + 2 gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene exon 60706412 60706562 0.000000 + . gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene CDS 60708346 60708514 0.000000 + 1 gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene exon 60708346 60708531 0.000000 + . gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene exon 60709219 60710434 0.000000 + . gene_id "LSM14B"; transcript_id "NM_144703:uc010gjy.1"; -chr20 hg19_knownGene exon 60699673 60699836 0.000000 + . gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene CDS 60701426 60701495 0.000000 + 0 gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene exon 60701360 60701495 0.000000 + . gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene CDS 60702641 60702757 0.000000 + 2 gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene exon 60702641 60702757 0.000000 + . gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene CDS 60704841 60705008 0.000000 + 2 gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene exon 60704841 60705008 0.000000 + . gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene CDS 60705275 60705352 0.000000 + 2 gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene exon 60705275 60705352 0.000000 + . gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene CDS 60705586 60705747 0.000000 + 2 gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene exon 60705586 60705747 0.000000 + . gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene CDS 60706412 60706562 0.000000 + 2 gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene exon 60706412 60706562 0.000000 + . gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene CDS 60708346 60708514 0.000000 + 1 gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene exon 60708346 60708531 0.000000 + . gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene exon 60709219 60710434 0.000000 + . gene_id "LSM14B"; transcript_id "AK298748:uc010zzz.1"; -chr20 hg19_knownGene CDS 60711916 60712005 0.000000 - 0 gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene exon 60711791 60712005 0.000000 - . gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene CDS 60712420 60712482 0.000000 - 0 gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene exon 60712420 60712482 0.000000 - . gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene CDS 60713227 60713346 0.000000 - 0 gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene exon 60713227 60713346 0.000000 - . gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene CDS 60714131 60714253 0.000000 - 0 gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene exon 60714131 60714253 0.000000 - . gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene CDS 60714837 60714961 0.000000 - 2 gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene exon 60714837 60714961 0.000000 - . gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene CDS 60715874 60716000 0.000000 - 0 gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene exon 60715874 60716000 0.000000 - . gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene CDS 60718264 60718359 0.000000 - 0 gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene exon 60718264 60718474 0.000000 - . gene_id "PSMA7"; transcript_id "NM_002792:uc002ybx.1"; -chr20 hg19_knownGene CDS 60718877 60718945 0.000000 + 0 gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60718822 60718945 0.000000 + . gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene CDS 60733728 60733804 0.000000 + 0 gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60733728 60733804 0.000000 + . gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene CDS 60734933 60735017 0.000000 + 1 gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60734933 60735017 0.000000 + . gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene CDS 60736492 60736636 0.000000 + 0 gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60736492 60736636 0.000000 + . gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene CDS 60737808 60737987 0.000000 + 2 gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60737808 60737987 0.000000 + . gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene CDS 60738514 60738678 0.000000 + 2 gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60738514 60738678 0.000000 + . gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene CDS 60739201 60739302 0.000000 + 2 gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60739201 60739302 0.000000 + . gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene CDS 60740478 60740570 0.000000 + 2 gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60740478 60740570 0.000000 + . gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene CDS 60747738 60747857 0.000000 + 2 gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60747738 60747857 0.000000 + . gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene CDS 60749573 60749784 0.000000 + 2 gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60749573 60749841 0.000000 + . gene_id "SS18L1"; transcript_id "AK299881:uc011aaa.1"; -chr20 hg19_knownGene exon 60718822 60718945 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60729337 60729521 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60733728 60733998 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60734933 60735017 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60736492 60736636 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60737808 60737987 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60738514 60738678 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60739201 60739302 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60740478 60740570 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60747738 60747857 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60749573 60749700 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60754238 60754412 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60755225 60755957 0.000000 + . gene_id "SS18L1"; transcript_id "BC068993:uc002ybz.1"; -chr20 hg19_knownGene exon 60718822 60718945 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60733728 60733804 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60734933 60735017 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60736492 60736636 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60737808 60737987 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60738514 60738678 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60739201 60739302 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60740478 60740570 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60747738 60747857 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60749573 60749700 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60754238 60754412 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60755225 60755957 0.000000 + . gene_id "SS18L1"; transcript_id "BC034494:uc002yca.1"; -chr20 hg19_knownGene exon 60736474 60736636 0.000000 + . gene_id "SS18L1"; transcript_id "AY203931:uc002ycc.1"; -chr20 hg19_knownGene exon 60737808 60737987 0.000000 + . gene_id "SS18L1"; transcript_id "AY203931:uc002ycc.1"; -chr20 hg19_knownGene exon 60738514 60738678 0.000000 + . gene_id "SS18L1"; transcript_id "AY203931:uc002ycc.1"; -chr20 hg19_knownGene exon 60739201 60739302 0.000000 + . gene_id "SS18L1"; transcript_id "AY203931:uc002ycc.1"; -chr20 hg19_knownGene exon 60740478 60740570 0.000000 + . gene_id "SS18L1"; transcript_id "AY203931:uc002ycc.1"; -chr20 hg19_knownGene exon 60747738 60747857 0.000000 + . gene_id "SS18L1"; transcript_id "AY203931:uc002ycc.1"; -chr20 hg19_knownGene exon 60749573 60749700 0.000000 + . gene_id "SS18L1"; transcript_id "AY203931:uc002ycc.1"; -chr20 hg19_knownGene exon 60754238 60754412 0.000000 + . gene_id "SS18L1"; transcript_id "AY203931:uc002ycc.1"; -chr20 hg19_knownGene exon 60755225 60755957 0.000000 + . gene_id "SS18L1"; transcript_id "AY203931:uc002ycc.1"; -chr20 hg19_knownGene CDS 60718877 60718945 0.000000 + 0 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60718822 60718945 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene CDS 60733728 60733804 0.000000 + 0 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60733728 60733804 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene CDS 60734933 60735017 0.000000 + 1 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60734933 60735017 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene CDS 60736492 60736636 0.000000 + 0 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60736492 60736636 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene CDS 60737808 60737987 0.000000 + 2 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60737808 60737987 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene CDS 60738514 60738678 0.000000 + 2 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60738514 60738678 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene CDS 60739201 60739302 0.000000 + 2 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60739201 60739302 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene CDS 60740478 60740570 0.000000 + 2 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60740478 60740570 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene CDS 60747738 60747857 0.000000 + 2 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60747738 60747857 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene CDS 60749573 60749700 0.000000 + 2 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60749573 60749700 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene CDS 60754238 60754261 0.000000 + 0 gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60754238 60757566 0.000000 + . gene_id "SS18L1"; transcript_id "NM_198935:uc002ycb.3"; -chr20 hg19_knownGene exon 60758081 60758113 0.000000 + . gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene CDS 60768477 60768680 0.000000 + 0 gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene exon 60768472 60768680 0.000000 + . gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene CDS 60770858 60771005 0.000000 + 0 gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene exon 60770858 60771005 0.000000 + . gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene CDS 60772908 60773023 0.000000 + 2 gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene exon 60772908 60773023 0.000000 + . gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene CDS 60773690 60773908 0.000000 + 0 gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene exon 60773690 60773908 0.000000 + . gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene CDS 60774175 60774313 0.000000 + 0 gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene exon 60774175 60774313 0.000000 + . gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene CDS 60775739 60776130 0.000000 + 2 gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene exon 60775739 60777810 0.000000 + . gene_id "GTPBP5"; transcript_id "NM_015666:uc002yce.4"; -chr20 hg19_knownGene exon 60758081 60758113 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316325:uc011aab.2"; -chr20 hg19_knownGene exon 60770858 60771005 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316325:uc011aab.2"; -chr20 hg19_knownGene exon 60772509 60772583 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316325:uc011aab.2"; -chr20 hg19_knownGene exon 60772908 60773023 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316325:uc011aab.2"; -chr20 hg19_knownGene CDS 60773906 60773908 0.000000 + 0 gene_id "GTPBP5"; transcript_id "AK316325:uc011aab.2"; -chr20 hg19_knownGene exon 60773690 60773908 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316325:uc011aab.2"; -chr20 hg19_knownGene CDS 60774175 60774313 0.000000 + 0 gene_id "GTPBP5"; transcript_id "AK316325:uc011aab.2"; -chr20 hg19_knownGene exon 60774175 60774313 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316325:uc011aab.2"; -chr20 hg19_knownGene CDS 60775739 60776130 0.000000 + 2 gene_id "GTPBP5"; transcript_id "AK316325:uc011aab.2"; -chr20 hg19_knownGene exon 60775739 60777810 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316325:uc011aab.2"; -chr20 hg19_knownGene exon 60758081 60758113 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316027:uc011aac.2"; -chr20 hg19_knownGene exon 60770858 60771005 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316027:uc011aac.2"; -chr20 hg19_knownGene exon 60772908 60773023 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316027:uc011aac.2"; -chr20 hg19_knownGene CDS 60773906 60773908 0.000000 + 0 gene_id "GTPBP5"; transcript_id "AK316027:uc011aac.2"; -chr20 hg19_knownGene exon 60773690 60773908 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316027:uc011aac.2"; -chr20 hg19_knownGene CDS 60774175 60774313 0.000000 + 0 gene_id "GTPBP5"; transcript_id "AK316027:uc011aac.2"; -chr20 hg19_knownGene exon 60774175 60774313 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316027:uc011aac.2"; -chr20 hg19_knownGene CDS 60775739 60776130 0.000000 + 2 gene_id "GTPBP5"; transcript_id "AK316027:uc011aac.2"; -chr20 hg19_knownGene exon 60775739 60777810 0.000000 + . gene_id "GTPBP5"; transcript_id "AK316027:uc011aac.2"; -chr20 hg19_knownGene exon 60758081 60758113 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299189:uc011aad.2"; -chr20 hg19_knownGene exon 60768472 60768680 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299189:uc011aad.2"; -chr20 hg19_knownGene exon 60770858 60771005 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299189:uc011aad.2"; -chr20 hg19_knownGene CDS 60773906 60773908 0.000000 + 0 gene_id "GTPBP5"; transcript_id "AK299189:uc011aad.2"; -chr20 hg19_knownGene exon 60773690 60773908 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299189:uc011aad.2"; -chr20 hg19_knownGene CDS 60774175 60774313 0.000000 + 0 gene_id "GTPBP5"; transcript_id "AK299189:uc011aad.2"; -chr20 hg19_knownGene exon 60774175 60774313 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299189:uc011aad.2"; -chr20 hg19_knownGene CDS 60775739 60776130 0.000000 + 2 gene_id "GTPBP5"; transcript_id "AK299189:uc011aad.2"; -chr20 hg19_knownGene exon 60775739 60777810 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299189:uc011aad.2"; -chr20 hg19_knownGene exon 60758081 60758113 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299147:uc011aae.2"; -chr20 hg19_knownGene exon 60770858 60771005 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299147:uc011aae.2"; -chr20 hg19_knownGene CDS 60773906 60773908 0.000000 + 0 gene_id "GTPBP5"; transcript_id "AK299147:uc011aae.2"; -chr20 hg19_knownGene exon 60773690 60773908 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299147:uc011aae.2"; -chr20 hg19_knownGene CDS 60774175 60774313 0.000000 + 0 gene_id "GTPBP5"; transcript_id "AK299147:uc011aae.2"; -chr20 hg19_knownGene exon 60774175 60774313 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299147:uc011aae.2"; -chr20 hg19_knownGene CDS 60775739 60776130 0.000000 + 2 gene_id "GTPBP5"; transcript_id "AK299147:uc011aae.2"; -chr20 hg19_knownGene exon 60775739 60777810 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299147:uc011aae.2"; -chr20 hg19_knownGene exon 60758081 60758113 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299726:uc011aaf.2"; -chr20 hg19_knownGene CDS 60768477 60768680 0.000000 + 0 gene_id "GTPBP5"; transcript_id "AK299726:uc011aaf.2"; -chr20 hg19_knownGene exon 60768472 60768680 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299726:uc011aaf.2"; -chr20 hg19_knownGene CDS 60770858 60771005 0.000000 + 0 gene_id "GTPBP5"; transcript_id "AK299726:uc011aaf.2"; -chr20 hg19_knownGene exon 60770858 60771005 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299726:uc011aaf.2"; -chr20 hg19_knownGene CDS 60775739 60776130 0.000000 + 2 gene_id "GTPBP5"; transcript_id "AK299726:uc011aaf.2"; -chr20 hg19_knownGene exon 60775739 60777810 0.000000 + . gene_id "GTPBP5"; transcript_id "AK299726:uc011aaf.2"; -chr20 hg19_knownGene CDS 60791065 60791982 0.000000 - 0 gene_id "HRH3"; transcript_id "NM_007232:uc002ycf.2"; -chr20 hg19_knownGene exon 60790017 60791982 0.000000 - . gene_id "HRH3"; transcript_id "NM_007232:uc002ycf.2"; -chr20 hg19_knownGene CDS 60793547 60793713 0.000000 - 2 gene_id "HRH3"; transcript_id "NM_007232:uc002ycf.2"; -chr20 hg19_knownGene exon 60793547 60793713 0.000000 - . gene_id "HRH3"; transcript_id "NM_007232:uc002ycf.2"; -chr20 hg19_knownGene CDS 60794777 60795026 0.000000 - 0 gene_id "HRH3"; transcript_id "NM_007232:uc002ycf.2"; -chr20 hg19_knownGene exon 60794777 60795323 0.000000 - . gene_id "HRH3"; transcript_id "NM_007232:uc002ycf.2"; -chr20 hg19_knownGene CDS 60790438 60790462 0.000000 - 1 gene_id "HRH3"; transcript_id "AF346904:uc002ych.3"; -chr20 hg19_knownGene exon 60790435 60790462 0.000000 - . gene_id "HRH3"; transcript_id "AF346904:uc002ych.3"; -chr20 hg19_knownGene CDS 60791066 60791146 0.000000 - 1 gene_id "HRH3"; transcript_id "AF346904:uc002ych.3"; -chr20 hg19_knownGene exon 60791066 60791146 0.000000 - . gene_id "HRH3"; transcript_id "AF346904:uc002ych.3"; -chr20 hg19_knownGene CDS 60791579 60791982 0.000000 - 0 gene_id "HRH3"; transcript_id "AF346904:uc002ych.3"; -chr20 hg19_knownGene exon 60791579 60791982 0.000000 - . gene_id "HRH3"; transcript_id "AF346904:uc002ych.3"; -chr20 hg19_knownGene CDS 60793547 60793713 0.000000 - 2 gene_id "HRH3"; transcript_id "AF346904:uc002ych.3"; -chr20 hg19_knownGene exon 60793547 60793713 0.000000 - . gene_id "HRH3"; transcript_id "AF346904:uc002ych.3"; -chr20 hg19_knownGene CDS 60794777 60795026 0.000000 - 0 gene_id "HRH3"; transcript_id "AF346904:uc002ych.3"; -chr20 hg19_knownGene exon 60794777 60795323 0.000000 - . gene_id "HRH3"; transcript_id "AF346904:uc002ych.3"; -chr20 hg19_knownGene CDS 60790438 60790462 0.000000 - 1 gene_id "HRH3"; transcript_id "AF321913:uc002ycg.3"; -chr20 hg19_knownGene exon 60790435 60790462 0.000000 - . gene_id "HRH3"; transcript_id "AF321913:uc002ycg.3"; -chr20 hg19_knownGene CDS 60791066 60791338 0.000000 - 1 gene_id "HRH3"; transcript_id "AF321913:uc002ycg.3"; -chr20 hg19_knownGene exon 60791066 60791338 0.000000 - . gene_id "HRH3"; transcript_id "AF321913:uc002ycg.3"; -chr20 hg19_knownGene CDS 60791579 60791982 0.000000 - 0 gene_id "HRH3"; transcript_id "AF321913:uc002ycg.3"; -chr20 hg19_knownGene exon 60791579 60791982 0.000000 - . gene_id "HRH3"; transcript_id "AF321913:uc002ycg.3"; -chr20 hg19_knownGene CDS 60793547 60793713 0.000000 - 2 gene_id "HRH3"; transcript_id "AF321913:uc002ycg.3"; -chr20 hg19_knownGene exon 60793547 60793713 0.000000 - . gene_id "HRH3"; transcript_id "AF321913:uc002ycg.3"; -chr20 hg19_knownGene CDS 60794777 60795026 0.000000 - 0 gene_id "HRH3"; transcript_id "AF321913:uc002ycg.3"; -chr20 hg19_knownGene exon 60794777 60795323 0.000000 - . gene_id "HRH3"; transcript_id "AF321913:uc002ycg.3"; -chr20 hg19_knownGene CDS 60790438 60790462 0.000000 - 1 gene_id "HRH3"; transcript_id "AB019000:uc002yci.3"; -chr20 hg19_knownGene exon 60790435 60790462 0.000000 - . gene_id "HRH3"; transcript_id "AB019000:uc002yci.3"; -chr20 hg19_knownGene CDS 60791066 60791982 0.000000 - 0 gene_id "HRH3"; transcript_id "AB019000:uc002yci.3"; -chr20 hg19_knownGene exon 60791066 60791982 0.000000 - . gene_id "HRH3"; transcript_id "AB019000:uc002yci.3"; -chr20 hg19_knownGene CDS 60793547 60793713 0.000000 - 2 gene_id "HRH3"; transcript_id "AB019000:uc002yci.3"; -chr20 hg19_knownGene exon 60793547 60793713 0.000000 - . gene_id "HRH3"; transcript_id "AB019000:uc002yci.3"; -chr20 hg19_knownGene CDS 60794777 60795026 0.000000 - 0 gene_id "HRH3"; transcript_id "AB019000:uc002yci.3"; -chr20 hg19_knownGene exon 60794777 60795323 0.000000 - . gene_id "HRH3"; transcript_id "AB019000:uc002yci.3"; -chr20 hg19_knownGene exon 60807016 60809039 0.000000 + . gene_id "AK126744"; transcript_id "AK126744:uc002ycj.1"; -chr20 hg19_knownGene exon 60810062 60810419 0.000000 + . gene_id "AK126744"; transcript_id "AK126744:uc002ycj.1"; -chr20 hg19_knownGene exon 60810528 60811355 0.000000 + . gene_id "AK126744"; transcript_id "AK126744:uc002ycj.1"; -chr20 hg19_knownGene CDS 60854296 60854405 0.000000 + 0 gene_id "OSBPL2"; transcript_id "AK124174:uc002ycm.1"; -chr20 hg19_knownGene exon 60854170 60854405 0.000000 + . gene_id "OSBPL2"; transcript_id "AK124174:uc002ycm.1"; -chr20 hg19_knownGene CDS 60856114 60856221 0.000000 + 1 gene_id "OSBPL2"; transcript_id "AK124174:uc002ycm.1"; -chr20 hg19_knownGene exon 60856114 60856221 0.000000 + . gene_id "OSBPL2"; transcript_id "AK124174:uc002ycm.1"; -chr20 hg19_knownGene CDS 60856846 60856935 0.000000 + 1 gene_id "OSBPL2"; transcript_id "AK124174:uc002ycm.1"; -chr20 hg19_knownGene exon 60856846 60856935 0.000000 + . gene_id "OSBPL2"; transcript_id "AK124174:uc002ycm.1"; -chr20 hg19_knownGene CDS 60859102 60859345 0.000000 + 1 gene_id "OSBPL2"; transcript_id "AK124174:uc002ycm.1"; -chr20 hg19_knownGene exon 60859102 60861505 0.000000 + . gene_id "OSBPL2"; transcript_id "AK124174:uc002ycm.1"; -chr20 hg19_knownGene exon 60813580 60813653 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60831241 60831277 0.000000 + 0 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60831113 60831277 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60835073 60835181 0.000000 + 2 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60835073 60835181 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60838672 60838747 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60838672 60838747 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60847181 60847315 0.000000 + 0 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60847181 60847315 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60848365 60848462 0.000000 + 0 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60848365 60848462 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60854213 60854395 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60854213 60854395 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60856114 60856221 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60856114 60856221 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60856846 60856935 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60856846 60856935 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60859102 60859225 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60859102 60859225 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60861639 60861767 0.000000 + 0 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60861639 60861767 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60864263 60864386 0.000000 + 0 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60864263 60864386 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60866759 60866849 0.000000 + 2 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60866759 60866849 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene CDS 60868841 60868940 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60868841 60871269 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_014835:uc002ycl.1"; -chr20 hg19_knownGene exon 60813580 60813653 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60831241 60831277 0.000000 + 0 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60831113 60831277 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60835037 60835181 0.000000 + 2 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60835037 60835181 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60838672 60838747 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60838672 60838747 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60847181 60847315 0.000000 + 0 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60847181 60847315 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60848365 60848462 0.000000 + 0 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60848365 60848462 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60854213 60854395 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60854213 60854395 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60856114 60856221 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60856114 60856221 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60856846 60856935 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60856846 60856935 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60859102 60859225 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60859102 60859225 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60861639 60861767 0.000000 + 0 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60861639 60861767 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60864263 60864386 0.000000 + 0 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60864263 60864386 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60866759 60866849 0.000000 + 2 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60866759 60866849 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene CDS 60868841 60868940 0.000000 + 1 gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60868841 60871269 0.000000 + . gene_id "OSBPL2"; transcript_id "NM_144498:uc002yck.1"; -chr20 hg19_knownGene exon 60813580 60813653 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60831113 60831277 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60838672 60838747 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60839685 60839774 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene CDS 60847199 60847315 0.000000 + 0 gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60847181 60847315 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene CDS 60848365 60848462 0.000000 + 0 gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60848365 60848462 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene CDS 60854213 60854395 0.000000 + 1 gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60854213 60854395 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene CDS 60856114 60856221 0.000000 + 1 gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60856114 60856221 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene CDS 60856846 60856935 0.000000 + 1 gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60856846 60856935 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene CDS 60859102 60859225 0.000000 + 1 gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60859102 60859225 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene CDS 60861639 60861767 0.000000 + 0 gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60861639 60861767 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene CDS 60866759 60866849 0.000000 + 0 gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60866759 60866849 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene CDS 60868841 60869010 0.000000 + 2 gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60868841 60871269 0.000000 + . gene_id "OSBPL2"; transcript_id "AK296595:uc011aah.1"; -chr20 hg19_knownGene exon 60878027 60878105 0.000000 + . gene_id "ADRM1"; transcript_id "AK297567:uc011aai.1"; -chr20 hg19_knownGene CDS 60878625 60878837 0.000000 + 0 gene_id "ADRM1"; transcript_id "AK297567:uc011aai.1"; -chr20 hg19_knownGene exon 60878624 60878837 0.000000 + . gene_id "ADRM1"; transcript_id "AK297567:uc011aai.1"; -chr20 hg19_knownGene CDS 60879517 60879633 0.000000 + 0 gene_id "ADRM1"; transcript_id "AK297567:uc011aai.1"; -chr20 hg19_knownGene exon 60879517 60879633 0.000000 + . gene_id "ADRM1"; transcript_id "AK297567:uc011aai.1"; -chr20 hg19_knownGene CDS 60881253 60881486 0.000000 + 0 gene_id "ADRM1"; transcript_id "AK297567:uc011aai.1"; -chr20 hg19_knownGene exon 60881253 60881632 0.000000 + . gene_id "ADRM1"; transcript_id "AK297567:uc011aai.1"; -chr20 hg19_knownGene exon 60880362 60881376 0.000000 + . gene_id "ADRM1"; transcript_id "AK054985:uc002ycp.1"; -chr20 hg19_knownGene exon 60881704 60881790 0.000000 + . gene_id "ADRM1"; transcript_id "AK054985:uc002ycp.1"; -chr20 hg19_knownGene exon 60878027 60878105 0.000000 + . gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene CDS 60878625 60878837 0.000000 + 0 gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene exon 60878624 60878837 0.000000 + . gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene CDS 60879517 60879633 0.000000 + 0 gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene exon 60879517 60879633 0.000000 + . gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene CDS 60881253 60881376 0.000000 + 0 gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene exon 60881253 60881376 0.000000 + . gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene CDS 60881704 60881790 0.000000 + 2 gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene exon 60881704 60881790 0.000000 + . gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene CDS 60882427 60882508 0.000000 + 2 gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene exon 60882427 60882508 0.000000 + . gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene CDS 60882652 60882884 0.000000 + 1 gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene exon 60882652 60882884 0.000000 + . gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene CDS 60883077 60883234 0.000000 + 2 gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene exon 60883077 60883234 0.000000 + . gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene CDS 60883424 60883526 0.000000 + 0 gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene exon 60883424 60883526 0.000000 + . gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene CDS 60883711 60883814 0.000000 + 2 gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene exon 60883711 60883918 0.000000 + . gene_id "ADRM1"; transcript_id "NM_007002:uc002ycn.3"; -chr20 hg19_knownGene exon 60878027 60878101 0.000000 + . gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene CDS 60878625 60878837 0.000000 + 0 gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene exon 60878624 60878837 0.000000 + . gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene CDS 60879517 60879633 0.000000 + 0 gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene exon 60879517 60879633 0.000000 + . gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene CDS 60881253 60881376 0.000000 + 0 gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene exon 60881253 60881376 0.000000 + . gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene CDS 60881704 60881790 0.000000 + 2 gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene exon 60881704 60881790 0.000000 + . gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene CDS 60882427 60882508 0.000000 + 2 gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene exon 60882427 60882508 0.000000 + . gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene CDS 60882652 60882884 0.000000 + 1 gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene exon 60882652 60882884 0.000000 + . gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene CDS 60883077 60883234 0.000000 + 2 gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene exon 60883077 60883234 0.000000 + . gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene CDS 60883424 60883526 0.000000 + 0 gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene exon 60883424 60883526 0.000000 + . gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene CDS 60883711 60883814 0.000000 + 2 gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene exon 60883711 60883918 0.000000 + . gene_id "ADRM1"; transcript_id "NM_175573:uc002yco.3"; -chr20 hg19_knownGene exon 60907529 60907616 0.000000 - . gene_id "MIR4758"; transcript_id "NR_039915:uc021wfx.1"; -chr20 hg19_knownGene CDS 60884395 60884531 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60884121 60884531 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60884772 60884891 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60884772 60884891 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60885044 60885137 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60885044 60885137 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60885234 60885367 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60885234 60885367 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60885475 60885628 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60885475 60885628 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60885721 60885885 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60885721 60885885 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60885958 60886150 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60885958 60886150 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60886218 60886363 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60886218 60886363 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60886457 60886592 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60886457 60886592 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60886670 60886840 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60886670 60886840 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60886976 60887106 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60886976 60887106 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60887229 60887372 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60887229 60887372 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60887456 60887588 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60887456 60887588 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60887688 60887836 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60887688 60887836 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60887944 60888066 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60887944 60888066 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60888144 60888306 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60888144 60888306 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60888383 60888516 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60888383 60888516 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60888705 60888858 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60888705 60888858 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60889360 60889496 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60889360 60889496 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60889611 60889781 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60889611 60889781 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60889855 60890003 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60889855 60890003 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60890084 60890263 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60890084 60890263 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60891004 60891114 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60891004 60891114 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60891727 60891829 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60891727 60891829 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60891938 60892079 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60891938 60892079 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60892401 60892555 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60892401 60892555 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60892718 60892834 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60892718 60892834 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60893510 60893706 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60893510 60893706 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60893899 60894069 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60893899 60894069 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60894740 60894851 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60894740 60894851 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60895615 60895725 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60895615 60895725 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60895795 60895946 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60895795 60895946 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60897075 60897224 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60897075 60897224 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60897325 60897505 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60897325 60897505 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60897714 60897814 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60897714 60897814 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60898512 60898726 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60898512 60898726 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60898832 60898912 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60898832 60898912 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60899136 60899260 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60899136 60899260 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60899497 60899610 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60899497 60899610 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60900372 60900602 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60900372 60900602 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60901733 60901816 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60901733 60901816 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60901921 60902022 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60901921 60902022 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60902289 60902462 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60902289 60902462 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60902585 60902725 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60902585 60902725 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60902922 60903066 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60902922 60903066 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60903297 60903501 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60903297 60903501 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60903900 60904111 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60903900 60904111 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60904194 60904309 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60904194 60904309 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60904833 60904972 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60904833 60904972 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60905544 60905670 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60905544 60905670 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60905799 60906000 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60905799 60906000 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60906088 60906185 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60906088 60906185 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60907428 60907536 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60907428 60907536 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60907613 60907773 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60907613 60907773 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60908146 60908299 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60908146 60908299 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60908431 60908537 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60908431 60908537 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60908620 60908762 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60908620 60908762 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60908957 60909095 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60908957 60909095 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60909242 60909398 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60909242 60909398 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60909578 60909677 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60909578 60909677 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60910077 60910182 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60910077 60910182 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60910273 60910325 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60910273 60910325 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60911396 60911501 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60911396 60911501 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60911790 60911842 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60911790 60911842 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60912646 60912783 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60912646 60912783 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60912860 60912994 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60912860 60912994 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60913072 60913206 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60913072 60913206 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60913288 60913425 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60913288 60913425 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60913524 60913664 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60913524 60913664 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60920874 60920933 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60920874 60920933 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60921137 60921271 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60921137 60921271 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60921562 60921652 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60921562 60921652 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60921738 60921856 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60921738 60921856 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60921969 60922084 0.000000 - 1 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60921969 60922084 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60926760 60926857 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60926760 60926857 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60926965 60927135 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60926965 60927135 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60927298 60927416 0.000000 - 2 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60927298 60927416 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60928190 60928307 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60928190 60928307 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60937456 60937608 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60937456 60937608 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60942005 60942301 0.000000 - 0 gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene exon 60942005 60942368 0.000000 - . gene_id "LAMA5"; transcript_id "NM_005560:uc002ycq.3"; -chr20 hg19_knownGene CDS 60884395 60884531 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60884121 60884531 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60884772 60884891 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60884772 60884891 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60885044 60885137 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60885044 60885137 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60885249 60885367 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60885249 60885367 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60885475 60885628 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60885475 60885628 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60885721 60885885 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60885721 60885885 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60885958 60886150 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60885958 60886150 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60886218 60886363 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60886218 60886363 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60886457 60886592 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60886457 60886592 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60886670 60886840 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60886670 60886840 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60886976 60887106 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60886976 60887106 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60887229 60887372 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60887229 60887372 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60887456 60887588 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60887456 60887588 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60887688 60887836 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60887688 60887836 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60887944 60888066 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60887944 60888066 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60888144 60888306 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60888144 60888306 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60888383 60888516 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60888383 60888516 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60888705 60888858 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60888705 60888858 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60889360 60889496 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60889360 60889496 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60889611 60889781 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60889611 60889781 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60889855 60890003 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60889855 60890003 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60890084 60890263 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60890084 60890263 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60891004 60891114 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60891004 60891114 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60891727 60891829 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60891727 60891829 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60891938 60892079 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60891938 60892079 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60892401 60892555 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60892401 60892555 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60892718 60892834 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60892718 60892834 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60893510 60893706 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60893510 60893706 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60893899 60894069 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60893899 60894069 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60894740 60894851 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60894740 60894851 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60895615 60895725 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60895615 60895725 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60895795 60895946 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60895795 60895946 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60897075 60897224 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60897075 60897224 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60897325 60897505 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60897325 60897505 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60897714 60897814 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60897714 60897814 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60898512 60898726 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60898512 60898726 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60898832 60898912 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60898832 60898912 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60899136 60899260 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60899136 60899260 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60899497 60899610 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60899497 60899610 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60900372 60900602 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60900372 60900602 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60901733 60901816 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60901733 60901816 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60901921 60902022 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60901921 60902022 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60902289 60902462 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60902289 60902462 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60902585 60902725 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60902585 60902725 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60902922 60903066 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60902922 60903066 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60903297 60903501 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60903297 60903501 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60903900 60904111 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60903900 60904111 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60904194 60904309 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60904194 60904309 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60904833 60904972 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60904833 60904972 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60905544 60905670 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60905544 60905670 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60905799 60906000 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60905799 60906000 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60906088 60906185 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60906088 60906185 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60907428 60907536 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60907428 60907536 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60907613 60907773 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60907613 60907773 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60908146 60908299 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60908146 60908299 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60908431 60908537 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60908431 60908537 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60908620 60908762 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60908620 60908762 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60908957 60909095 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60908957 60909095 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60909242 60909398 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60909242 60909398 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60909578 60909677 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60909578 60909677 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60910077 60910182 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60910077 60910182 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60910273 60910325 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60910273 60910325 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60911396 60911501 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60911396 60911501 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60911790 60911842 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60911790 60911842 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60912646 60912783 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60912646 60912783 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60912860 60912994 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60912860 60912994 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60913072 60913206 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60913072 60913206 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60913288 60913425 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60913288 60913425 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60913524 60913664 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60913524 60913664 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60920874 60920933 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60920874 60920933 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60921137 60921271 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60921137 60921271 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60921562 60921652 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60921562 60921652 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60921738 60921856 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60921738 60921856 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60921969 60922084 0.000000 - 1 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60921969 60922084 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60926760 60926857 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60926760 60926857 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60926965 60927135 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60926965 60927135 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60927298 60927416 0.000000 - 2 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60927298 60927416 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60928190 60928307 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60928190 60928307 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60937456 60937608 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60937456 60937608 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene CDS 60942005 60942301 0.000000 - 0 gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60942005 60942368 0.000000 - . gene_id "LAMA5"; transcript_id "AB587309:uc021wfw.1"; -chr20 hg19_knownGene exon 60962121 60962192 0.000000 + . gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene CDS 60962395 60962444 0.000000 + 0 gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene exon 60962377 60962444 0.000000 + . gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene CDS 60962667 60962730 0.000000 + 1 gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene exon 60962667 60962730 0.000000 + . gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene CDS 60962899 60962970 0.000000 + 0 gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene exon 60962899 60962970 0.000000 + . gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene CDS 60963365 60963420 0.000000 + 0 gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene exon 60963365 60963420 0.000000 + . gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene CDS 60963513 60963519 0.000000 + 1 gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene exon 60963513 60963576 0.000000 + . gene_id "RPS21"; transcript_id "NM_001024:uc002ycr.3"; -chr20 hg19_knownGene exon 60962121 60962192 0.000000 + . gene_id "RPS21"; transcript_id "BC018140:uc002ycs.3"; -chr20 hg19_knownGene CDS 60962395 60962444 0.000000 + 0 gene_id "RPS21"; transcript_id "BC018140:uc002ycs.3"; -chr20 hg19_knownGene exon 60962377 60962444 0.000000 + . gene_id "RPS21"; transcript_id "BC018140:uc002ycs.3"; -chr20 hg19_knownGene CDS 60962667 60962730 0.000000 + 1 gene_id "RPS21"; transcript_id "BC018140:uc002ycs.3"; -chr20 hg19_knownGene exon 60962667 60962730 0.000000 + . gene_id "RPS21"; transcript_id "BC018140:uc002ycs.3"; -chr20 hg19_knownGene CDS 60962899 60962970 0.000000 + 0 gene_id "RPS21"; transcript_id "BC018140:uc002ycs.3"; -chr20 hg19_knownGene exon 60962899 60962970 0.000000 + . gene_id "RPS21"; transcript_id "BC018140:uc002ycs.3"; -chr20 hg19_knownGene CDS 60963365 60963421 0.000000 + 0 gene_id "RPS21"; transcript_id "BC018140:uc002ycs.3"; -chr20 hg19_knownGene exon 60963365 60963576 0.000000 + . gene_id "RPS21"; transcript_id "BC018140:uc002ycs.3"; -chr20 hg19_knownGene exon 60962121 60962192 0.000000 + . gene_id "RPS21"; transcript_id "BC071927:uc002yct.3"; -chr20 hg19_knownGene CDS 60962395 60962444 0.000000 + 0 gene_id "RPS21"; transcript_id "BC071927:uc002yct.3"; -chr20 hg19_knownGene exon 60962377 60962444 0.000000 + . gene_id "RPS21"; transcript_id "BC071927:uc002yct.3"; -chr20 hg19_knownGene CDS 60962667 60962730 0.000000 + 1 gene_id "RPS21"; transcript_id "BC071927:uc002yct.3"; -chr20 hg19_knownGene exon 60962667 60962730 0.000000 + . gene_id "RPS21"; transcript_id "BC071927:uc002yct.3"; -chr20 hg19_knownGene CDS 60962899 60963054 0.000000 + 0 gene_id "RPS21"; transcript_id "BC071927:uc002yct.3"; -chr20 hg19_knownGene exon 60962899 60963576 0.000000 + . gene_id "RPS21"; transcript_id "BC071927:uc002yct.3"; -chr20 hg19_knownGene CDS 60966030 60966167 0.000000 - 0 gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene exon 60963686 60966167 0.000000 - . gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene CDS 60966305 60966509 0.000000 - 1 gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene exon 60966305 60966509 0.000000 - . gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene CDS 60967445 60967551 0.000000 - 0 gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene exon 60967445 60967551 0.000000 - . gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene CDS 60967976 60968079 0.000000 - 2 gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene exon 60967976 60968079 0.000000 - . gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene CDS 60968496 60968661 0.000000 - 0 gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene exon 60968496 60968661 0.000000 - . gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene CDS 60969213 60969321 0.000000 - 1 gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene exon 60969213 60969321 0.000000 - . gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene CDS 60969993 60970070 0.000000 - 1 gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene exon 60969993 60970070 0.000000 - . gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene CDS 60971371 60971463 0.000000 - 1 gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene exon 60971371 60971463 0.000000 - . gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene CDS 60971577 60971648 0.000000 - 1 gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene exon 60971577 60971648 0.000000 - . gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene CDS 60981971 60982332 0.000000 - 0 gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene exon 60981971 60982339 0.000000 - . gene_id "CABLES2"; transcript_id "NM_031215:uc002ycv.2"; -chr20 hg19_knownGene CDS 60985937 60986052 0.000000 - 2 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60985293 60986052 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60987680 60987809 0.000000 - 0 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60987680 60987809 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60987886 60987956 0.000000 - 2 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60987886 60987956 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60988457 60988601 0.000000 - 0 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60988457 60988601 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60988877 60989612 0.000000 - 1 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60988877 60989612 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60990177 60990343 0.000000 - 0 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60990177 60990343 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60990634 60990716 0.000000 - 2 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60990634 60990716 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60990844 60991001 0.000000 - 1 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60990844 60991001 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60991220 60991292 0.000000 - 2 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60991220 60991292 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60991816 60991928 0.000000 - 1 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60991816 60991928 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60992280 60992375 0.000000 - 1 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60992280 60992375 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60993479 60993521 0.000000 - 2 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60993479 60993521 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 60994643 60994703 0.000000 - 0 gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 60994643 60994786 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene exon 61002516 61002629 0.000000 - . gene_id "C20orf151"; transcript_id "NM_080833:uc002ycw.2"; -chr20 hg19_knownGene CDS 61039895 61040047 0.000000 - 0 gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene exon 61038553 61040047 0.000000 - . gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene CDS 61040396 61040520 0.000000 - 2 gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene exon 61040396 61040520 0.000000 - . gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene CDS 61040890 61040977 0.000000 - 0 gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene exon 61040890 61040977 0.000000 - . gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene CDS 61041482 61041607 0.000000 - 0 gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene exon 61041482 61041607 0.000000 - . gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene CDS 61048459 61048634 0.000000 - 2 gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene exon 61048459 61048634 0.000000 - . gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene CDS 61050055 61050577 0.000000 - 0 gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene exon 61050055 61050598 0.000000 - . gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene exon 61050986 61051026 0.000000 - . gene_id "GATA5"; transcript_id "NM_080473:uc002ycx.1"; -chr20 hg19_knownGene exon 61143423 61143882 0.000000 - . gene_id "C20orf200"; transcript_id "BC111938:uc021wfy.1"; -chr20 hg19_knownGene exon 61141438 61141970 0.000000 - . gene_id "C20orf166-AS1"; transcript_id "NR_033263:uc002ycy.3"; -chr20 hg19_knownGene exon 61142427 61142574 0.000000 - . gene_id "C20orf166-AS1"; transcript_id "NR_033263:uc002ycy.3"; -chr20 hg19_knownGene exon 61142913 61144065 0.000000 - . gene_id "C20orf166-AS1"; transcript_id "NR_033263:uc002ycy.3"; -chr20 hg19_knownGene exon 61144755 61144909 0.000000 - . gene_id "C20orf166-AS1"; transcript_id "NR_033263:uc002ycy.3"; -chr20 hg19_knownGene exon 61145034 61145207 0.000000 - . gene_id "C20orf166-AS1"; transcript_id "NR_033263:uc002ycy.3"; -chr20 hg19_knownGene exon 61145519 61145668 0.000000 - . gene_id "C20orf166-AS1"; transcript_id "NR_033263:uc002ycy.3"; -chr20 hg19_knownGene exon 61148633 61148768 0.000000 - . gene_id "C20orf166-AS1"; transcript_id "NR_033263:uc002ycy.3"; -chr20 hg19_knownGene exon 61141754 61144065 0.000000 - . gene_id "C20orf166-AS1"; transcript_id "AK054875:uc002ycz.2"; -chr20 hg19_knownGene exon 61145034 61145207 0.000000 - . gene_id "C20orf166-AS1"; transcript_id "AK054875:uc002ycz.2"; -chr20 hg19_knownGene exon 61148633 61148768 0.000000 - . gene_id "C20orf166-AS1"; transcript_id "AK054875:uc002ycz.2"; -chr20 hg19_knownGene exon 61151513 61151583 0.000000 + . gene_id "MIR1-1"; transcript_id "NR_029780:uc011aak.2"; -chr20 hg19_knownGene exon 61162119 61162220 0.000000 + . gene_id "MIR133A2"; transcript_id "NR_029676:uc011aal.1"; -chr20 hg19_knownGene exon 61147660 61148245 0.000000 + . gene_id "C20orf166"; transcript_id "NM_178463:uc011aaj.2"; -chr20 hg19_knownGene CDS 61150865 61150872 0.000000 + 0 gene_id "C20orf166"; transcript_id "NM_178463:uc011aaj.2"; -chr20 hg19_knownGene exon 61150672 61150872 0.000000 + . gene_id "C20orf166"; transcript_id "NM_178463:uc011aaj.2"; -chr20 hg19_knownGene CDS 61162196 61162307 0.000000 + 1 gene_id "C20orf166"; transcript_id "NM_178463:uc011aaj.2"; -chr20 hg19_knownGene exon 61162196 61162307 0.000000 + . gene_id "C20orf166"; transcript_id "NM_178463:uc011aaj.2"; -chr20 hg19_knownGene CDS 61167651 61167881 0.000000 + 0 gene_id "C20orf166"; transcript_id "NM_178463:uc011aaj.2"; -chr20 hg19_knownGene exon 61167651 61167971 0.000000 + . gene_id "C20orf166"; transcript_id "NM_178463:uc011aaj.2"; -chr20 hg19_knownGene exon 61294379 61294839 0.000000 - . gene_id "LOC100127888"; transcript_id "NR_024470:uc002ydd.3"; -chr20 hg19_knownGene exon 61296276 61296849 0.000000 - . gene_id "LOC100127888"; transcript_id "NR_024470:uc002ydd.3"; -chr20 hg19_knownGene exon 61297212 61297362 0.000000 - . gene_id "LOC100127888"; transcript_id "NR_024470:uc002ydd.3"; -chr20 hg19_knownGene exon 61297737 61297973 0.000000 - . gene_id "LOC100127888"; transcript_id "NR_024470:uc002ydd.3"; -chr20 hg19_knownGene exon 61273797 61273905 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61287807 61288602 0.000000 + 0 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61287711 61288602 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61290029 61290119 0.000000 + 2 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61290029 61290119 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61291764 61291885 0.000000 + 1 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61291764 61291885 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61292416 61292527 0.000000 + 2 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61292416 61292527 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61296286 61296440 0.000000 + 1 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61296286 61296440 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61297732 61297927 0.000000 + 2 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61297732 61297927 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61299097 61299262 0.000000 + 1 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61299097 61299262 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61299364 61299536 0.000000 + 0 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61299364 61299536 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61299829 61299893 0.000000 + 1 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61299829 61299893 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61300282 61300430 0.000000 + 2 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61300282 61300430 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61303102 61303242 0.000000 + 0 gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene exon 61303102 61303647 0.000000 + . gene_id "SLCO4A1"; transcript_id "NM_016354:uc002ydb.1"; -chr20 hg19_knownGene CDS 61299246 61299262 0.000000 + 0 gene_id "SLCO4A1"; transcript_id "AK000551:uc002yde.1"; -chr20 hg19_knownGene exon 61299097 61299262 0.000000 + . gene_id "SLCO4A1"; transcript_id "AK000551:uc002yde.1"; -chr20 hg19_knownGene CDS 61299829 61299893 0.000000 + 1 gene_id "SLCO4A1"; transcript_id "AK000551:uc002yde.1"; -chr20 hg19_knownGene exon 61299829 61299893 0.000000 + . gene_id "SLCO4A1"; transcript_id "AK000551:uc002yde.1"; -chr20 hg19_knownGene CDS 61300282 61300430 0.000000 + 2 gene_id "SLCO4A1"; transcript_id "AK000551:uc002yde.1"; -chr20 hg19_knownGene exon 61300282 61300430 0.000000 + . gene_id "SLCO4A1"; transcript_id "AK000551:uc002yde.1"; -chr20 hg19_knownGene CDS 61303102 61303242 0.000000 + 0 gene_id "SLCO4A1"; transcript_id "AK000551:uc002yde.1"; -chr20 hg19_knownGene exon 61303102 61303647 0.000000 + . gene_id "SLCO4A1"; transcript_id "AK000551:uc002yde.1"; -chr20 hg19_knownGene CDS 61340560 61341273 0.000000 + 0 gene_id "NTSR1"; transcript_id "NM_002531:uc002ydf.3"; -chr20 hg19_knownGene exon 61340189 61341273 0.000000 + . gene_id "NTSR1"; transcript_id "NM_002531:uc002ydf.3"; -chr20 hg19_knownGene CDS 61386037 61386238 0.000000 + 0 gene_id "NTSR1"; transcript_id "NM_002531:uc002ydf.3"; -chr20 hg19_knownGene exon 61386037 61386238 0.000000 + . gene_id "NTSR1"; transcript_id "NM_002531:uc002ydf.3"; -chr20 hg19_knownGene CDS 61389618 61389708 0.000000 + 2 gene_id "NTSR1"; transcript_id "NM_002531:uc002ydf.3"; -chr20 hg19_knownGene exon 61389618 61389708 0.000000 + . gene_id "NTSR1"; transcript_id "NM_002531:uc002ydf.3"; -chr20 hg19_knownGene CDS 61391370 61391616 0.000000 + 1 gene_id "NTSR1"; transcript_id "NM_002531:uc002ydf.3"; -chr20 hg19_knownGene exon 61391370 61394123 0.000000 + . gene_id "NTSR1"; transcript_id "NM_002531:uc002ydf.3"; -chr20 hg19_knownGene exon 61405787 61405921 0.000000 - . gene_id "BC141903"; transcript_id "BC141903:uc002ydh.3"; -chr20 hg19_knownGene exon 61406667 61406753 0.000000 - . gene_id "BC141903"; transcript_id "BC141903:uc002ydh.3"; -chr20 hg19_knownGene exon 61404869 61407369 0.000000 + . gene_id "AX747649"; transcript_id "AX747649:uc002ydg.1"; -chr20 hg19_knownGene CDS 61427876 61428023 0.000000 + 0 gene_id "C20orf20"; transcript_id "NM_018270:uc002ydi.3"; -chr20 hg19_knownGene exon 61427805 61428023 0.000000 + . gene_id "C20orf20"; transcript_id "NM_018270:uc002ydi.3"; -chr20 hg19_knownGene CDS 61428462 61428583 0.000000 + 2 gene_id "C20orf20"; transcript_id "NM_018270:uc002ydi.3"; -chr20 hg19_knownGene exon 61428462 61428583 0.000000 + . gene_id "C20orf20"; transcript_id "NM_018270:uc002ydi.3"; -chr20 hg19_knownGene CDS 61429939 61430020 0.000000 + 0 gene_id "C20orf20"; transcript_id "NM_018270:uc002ydi.3"; -chr20 hg19_knownGene exon 61429939 61430020 0.000000 + . gene_id "C20orf20"; transcript_id "NM_018270:uc002ydi.3"; -chr20 hg19_knownGene CDS 61430327 61430401 0.000000 + 2 gene_id "C20orf20"; transcript_id "NM_018270:uc002ydi.3"; -chr20 hg19_knownGene exon 61430327 61430401 0.000000 + . gene_id "C20orf20"; transcript_id "NM_018270:uc002ydi.3"; -chr20 hg19_knownGene CDS 61430808 61430992 0.000000 + 2 gene_id "C20orf20"; transcript_id "NM_018270:uc002ydi.3"; -chr20 hg19_knownGene exon 61430808 61431945 0.000000 + . gene_id "C20orf20"; transcript_id "NM_018270:uc002ydi.3"; -chr20 hg19_knownGene CDS 61436212 61436382 0.000000 + 0 gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene exon 61436177 61436382 0.000000 + . gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene CDS 61438889 61438957 0.000000 + 0 gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene exon 61438889 61438957 0.000000 + . gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene CDS 61439599 61439677 0.000000 + 0 gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene exon 61439599 61439677 0.000000 + . gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene CDS 61440937 61441015 0.000000 + 2 gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene exon 61440937 61441015 0.000000 + . gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene CDS 61441851 61441917 0.000000 + 1 gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene exon 61441851 61441917 0.000000 + . gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene CDS 61442814 61442962 0.000000 + 0 gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene exon 61442814 61442962 0.000000 + . gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene CDS 61443582 61444998 0.000000 + 1 gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene exon 61443582 61445352 0.000000 + . gene_id "OGFR"; transcript_id "NM_007346:uc002ydj.3"; -chr20 hg19_knownGene CDS 61436258 61436382 0.000000 + 0 gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene exon 61436177 61436382 0.000000 + . gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene CDS 61438894 61438957 0.000000 + 1 gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene exon 61438894 61438957 0.000000 + . gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene CDS 61439599 61439677 0.000000 + 0 gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene exon 61439599 61439677 0.000000 + . gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene CDS 61440937 61441015 0.000000 + 2 gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene exon 61440937 61441015 0.000000 + . gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene CDS 61441851 61441917 0.000000 + 1 gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene exon 61441851 61441917 0.000000 + . gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene CDS 61442814 61442962 0.000000 + 0 gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene exon 61442814 61442962 0.000000 + . gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene CDS 61443582 61444998 0.000000 + 1 gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene exon 61443582 61445352 0.000000 + . gene_id "OGFR"; transcript_id "BC032666:uc002ydk.3"; -chr20 hg19_knownGene CDS 61439515 61439677 0.000000 + 0 gene_id "OGFR"; transcript_id "AK024485:uc002ydl.3"; -chr20 hg19_knownGene exon 61437238 61439677 0.000000 + . gene_id "OGFR"; transcript_id "AK024485:uc002ydl.3"; -chr20 hg19_knownGene CDS 61440937 61441015 0.000000 + 2 gene_id "OGFR"; transcript_id "AK024485:uc002ydl.3"; -chr20 hg19_knownGene exon 61440937 61441015 0.000000 + . gene_id "OGFR"; transcript_id "AK024485:uc002ydl.3"; -chr20 hg19_knownGene CDS 61441851 61441917 0.000000 + 1 gene_id "OGFR"; transcript_id "AK024485:uc002ydl.3"; -chr20 hg19_knownGene exon 61441851 61441917 0.000000 + . gene_id "OGFR"; transcript_id "AK024485:uc002ydl.3"; -chr20 hg19_knownGene CDS 61442814 61442962 0.000000 + 0 gene_id "OGFR"; transcript_id "AK024485:uc002ydl.3"; -chr20 hg19_knownGene exon 61442814 61442962 0.000000 + . gene_id "OGFR"; transcript_id "AK024485:uc002ydl.3"; -chr20 hg19_knownGene CDS 61443582 61444998 0.000000 + 1 gene_id "OGFR"; transcript_id "AK024485:uc002ydl.3"; -chr20 hg19_knownGene exon 61443582 61445352 0.000000 + . gene_id "OGFR"; transcript_id "AK024485:uc002ydl.3"; -chr20 hg19_knownGene CDS 61448417 61448494 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61448414 61448494 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61448919 61448987 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61448919 61448987 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61449870 61449905 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61449870 61449905 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61450574 61450645 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61450574 61450645 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61451281 61451334 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61451281 61451334 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61452533 61452568 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61452533 61452568 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61452859 61452882 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61452859 61452882 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61453109 61453162 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61453109 61453162 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61453463 61453516 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61453463 61453516 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61453943 61453984 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61453943 61453984 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61455797 61455853 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61455797 61455853 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61456320 61456373 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61456320 61456373 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61457169 61457222 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61457169 61457222 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61457556 61457609 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61457556 61457609 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61458119 61458172 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61458119 61458172 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61458593 61458646 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61458593 61458646 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61459275 61459328 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61459275 61459328 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61460116 61460169 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61460116 61460169 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61460275 61460328 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61460275 61460328 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61460807 61460851 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61460807 61460851 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61460980 61461033 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61460980 61461033 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61461118 61461171 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61461118 61461171 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61461712 61461765 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61461712 61461765 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61461869 61461940 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61461869 61461940 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61463506 61463541 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61463506 61463541 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61464372 61464416 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61464372 61464416 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61467273 61467305 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61467273 61467305 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61467539 61467685 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61467539 61467685 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61467830 61467884 0.000000 + 0 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61467830 61467884 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61468435 61468617 0.000000 + 2 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61468435 61468617 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61470036 61470113 0.000000 + 2 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61470036 61470113 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61471894 61472081 0.000000 + 2 gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene exon 61471894 61472511 0.000000 + . gene_id "COL9A3"; transcript_id "NM_001853:uc002ydm.3"; -chr20 hg19_knownGene CDS 61467800 61467884 0.000000 + 0 gene_id "COL9A3"; transcript_id "BC004412:uc002ydn.3"; -chr20 hg19_knownGene exon 61467771 61467884 0.000000 + . gene_id "COL9A3"; transcript_id "BC004412:uc002ydn.3"; -chr20 hg19_knownGene CDS 61468435 61468617 0.000000 + 2 gene_id "COL9A3"; transcript_id "BC004412:uc002ydn.3"; -chr20 hg19_knownGene exon 61468435 61468617 0.000000 + . gene_id "COL9A3"; transcript_id "BC004412:uc002ydn.3"; -chr20 hg19_knownGene CDS 61470036 61470113 0.000000 + 2 gene_id "COL9A3"; transcript_id "BC004412:uc002ydn.3"; -chr20 hg19_knownGene exon 61470036 61470113 0.000000 + . gene_id "COL9A3"; transcript_id "BC004412:uc002ydn.3"; -chr20 hg19_knownGene CDS 61471894 61472081 0.000000 + 2 gene_id "COL9A3"; transcript_id "BC004412:uc002ydn.3"; -chr20 hg19_knownGene exon 61471894 61472511 0.000000 + . gene_id "COL9A3"; transcript_id "BC004412:uc002ydn.3"; -chr20 hg19_knownGene CDS 61477016 61477249 0.000000 + 0 gene_id "DPH3P1"; transcript_id "NM_080750:uc011aan.1"; -chr20 hg19_knownGene exon 61476476 61477543 0.000000 + . gene_id "DPH3P1"; transcript_id "NM_080750:uc011aan.1"; -chr20 hg19_knownGene CDS 61473330 61473449 0.000000 - 0 gene_id "TCFL5"; transcript_id "AJ271337:uc002ydo.3"; -chr20 hg19_knownGene exon 61472467 61473449 0.000000 - . gene_id "TCFL5"; transcript_id "AJ271337:uc002ydo.3"; -chr20 hg19_knownGene CDS 61485368 61485509 0.000000 - 1 gene_id "TCFL5"; transcript_id "AJ271337:uc002ydo.3"; -chr20 hg19_knownGene exon 61485368 61485509 0.000000 - . gene_id "TCFL5"; transcript_id "AJ271337:uc002ydo.3"; -chr20 hg19_knownGene CDS 61488747 61488990 0.000000 - 2 gene_id "TCFL5"; transcript_id "AJ271337:uc002ydo.3"; -chr20 hg19_knownGene exon 61488747 61488990 0.000000 - . gene_id "TCFL5"; transcript_id "AJ271337:uc002ydo.3"; -chr20 hg19_knownGene CDS 61490716 61490878 0.000000 - 0 gene_id "TCFL5"; transcript_id "AJ271337:uc002ydo.3"; -chr20 hg19_knownGene exon 61490716 61490878 0.000000 - . gene_id "TCFL5"; transcript_id "AJ271337:uc002ydo.3"; -chr20 hg19_knownGene CDS 61491477 61491626 0.000000 - 0 gene_id "TCFL5"; transcript_id "AJ271337:uc002ydo.3"; -chr20 hg19_knownGene exon 61491477 61492109 0.000000 - . gene_id "TCFL5"; transcript_id "AJ271337:uc002ydo.3"; -chr20 hg19_knownGene CDS 61473330 61473449 0.000000 - 0 gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene exon 61472467 61473449 0.000000 - . gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene CDS 61485368 61485509 0.000000 - 1 gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene exon 61485368 61485509 0.000000 - . gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene CDS 61488747 61488990 0.000000 - 2 gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene exon 61488747 61488990 0.000000 - . gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene CDS 61490716 61490878 0.000000 - 0 gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene exon 61490716 61490878 0.000000 - . gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene CDS 61491477 61491660 0.000000 - 1 gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene exon 61491477 61491660 0.000000 - . gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene CDS 61492376 61493022 0.000000 - 0 gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene exon 61492376 61493115 0.000000 - . gene_id "TCFL5"; transcript_id "NM_006602:uc002ydp.3"; -chr20 hg19_knownGene CDS 61484235 61484240 0.000000 - 0 gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene exon 61482846 61484240 0.000000 - . gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene CDS 61485368 61485509 0.000000 - 1 gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene exon 61485368 61485509 0.000000 - . gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene CDS 61488747 61488987 0.000000 - 2 gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene exon 61488747 61488987 0.000000 - . gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene CDS 61490716 61490878 0.000000 - 0 gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene exon 61490716 61490878 0.000000 - . gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene CDS 61491477 61491660 0.000000 - 1 gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene exon 61491477 61491660 0.000000 - . gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene CDS 61492376 61493022 0.000000 - 0 gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene exon 61492376 61493115 0.000000 - . gene_id "TCFL5"; transcript_id "BC065520:uc002ydq.3"; -chr20 hg19_knownGene CDS 61536910 61536953 0.000000 - 2 gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene exon 61536358 61536953 0.000000 - . gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene CDS 61537239 61537452 0.000000 - 0 gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene exon 61537239 61537452 0.000000 - . gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene CDS 61538499 61538711 0.000000 - 0 gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene exon 61538499 61538711 0.000000 - . gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene CDS 61541051 61541372 0.000000 - 1 gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene exon 61541051 61541372 0.000000 - . gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene CDS 61542126 61542964 0.000000 - 0 gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene exon 61542126 61542966 0.000000 - . gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene exon 61545562 61545758 0.000000 - . gene_id "DIDO1"; transcript_id "BC000770:uc011aao.1"; -chr20 hg19_knownGene CDS 61510588 61513766 0.000000 - 2 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61509090 61513766 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61522312 61522507 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61522312 61522507 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61523339 61523428 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61523339 61523428 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61524161 61524314 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61524161 61524314 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61525018 61525546 0.000000 - 2 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61525018 61525546 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61525765 61525900 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61525765 61525900 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61526162 61526266 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61526162 61526266 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61526401 61526517 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61526401 61526517 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61527585 61527744 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61527585 61527744 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61527883 61528348 0.000000 - 2 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61527883 61528348 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61537239 61537452 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61537239 61537452 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61538499 61538711 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61538499 61538711 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61541051 61541372 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61541051 61541372 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61542126 61542964 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61542126 61542966 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61545562 61545758 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene exon 61557791 61557903 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193369:uc002ydr.2"; -chr20 hg19_knownGene CDS 61522286 61522507 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61518567 61522507 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61523339 61523428 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61523339 61523428 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61524161 61524314 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61524161 61524314 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61525018 61525546 0.000000 - 2 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61525018 61525546 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61525765 61525900 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61525765 61525900 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61526162 61526266 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61526162 61526266 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61526401 61526517 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61526401 61526517 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61527585 61527744 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61527585 61527744 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61527883 61528348 0.000000 - 2 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61527883 61528348 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61537239 61537452 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61537239 61537452 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61538499 61538711 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61538499 61538711 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61541051 61541372 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61541051 61541372 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61542126 61542964 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61542126 61542966 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61545562 61545758 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene exon 61557791 61557903 0.000000 - . gene_id "DIDO1"; transcript_id "NM_001193370:uc002ydt.2"; -chr20 hg19_knownGene CDS 61537141 61537452 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080796:uc002ydv.2"; -chr20 hg19_knownGene exon 61536350 61537452 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080796:uc002ydv.2"; -chr20 hg19_knownGene CDS 61538499 61538711 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080796:uc002ydv.2"; -chr20 hg19_knownGene exon 61538499 61538711 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080796:uc002ydv.2"; -chr20 hg19_knownGene CDS 61541051 61541372 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_080796:uc002ydv.2"; -chr20 hg19_knownGene exon 61541051 61541372 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080796:uc002ydv.2"; -chr20 hg19_knownGene CDS 61542126 61542964 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080796:uc002ydv.2"; -chr20 hg19_knownGene exon 61542126 61542966 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080796:uc002ydv.2"; -chr20 hg19_knownGene exon 61545562 61545758 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080796:uc002ydv.2"; -chr20 hg19_knownGene exon 61557784 61557903 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080796:uc002ydv.2"; -chr20 hg19_knownGene CDS 61537141 61537452 0.000000 - 0 gene_id "DIDO1"; transcript_id "BC014615:uc002ydw.2"; -chr20 hg19_knownGene exon 61536350 61537452 0.000000 - . gene_id "DIDO1"; transcript_id "BC014615:uc002ydw.2"; -chr20 hg19_knownGene CDS 61538499 61538711 0.000000 - 0 gene_id "DIDO1"; transcript_id "BC014615:uc002ydw.2"; -chr20 hg19_knownGene exon 61538499 61538711 0.000000 - . gene_id "DIDO1"; transcript_id "BC014615:uc002ydw.2"; -chr20 hg19_knownGene CDS 61541051 61541372 0.000000 - 1 gene_id "DIDO1"; transcript_id "BC014615:uc002ydw.2"; -chr20 hg19_knownGene exon 61541051 61541372 0.000000 - . gene_id "DIDO1"; transcript_id "BC014615:uc002ydw.2"; -chr20 hg19_knownGene CDS 61542126 61542964 0.000000 - 0 gene_id "DIDO1"; transcript_id "BC014615:uc002ydw.2"; -chr20 hg19_knownGene exon 61542126 61542966 0.000000 - . gene_id "DIDO1"; transcript_id "BC014615:uc002ydw.2"; -chr20 hg19_knownGene exon 61545562 61545758 0.000000 - . gene_id "DIDO1"; transcript_id "BC014615:uc002ydw.2"; -chr20 hg19_knownGene exon 61557791 61557903 0.000000 - . gene_id "DIDO1"; transcript_id "BC014615:uc002ydw.2"; -chr20 hg19_knownGene CDS 61510588 61513766 0.000000 - 2 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61509090 61513766 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61522312 61522507 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61522312 61522507 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61523339 61523428 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61523339 61523428 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61524161 61524314 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61524161 61524314 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61525018 61525546 0.000000 - 2 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61525018 61525546 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61525765 61525900 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61525765 61525900 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61526162 61526266 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61526162 61526266 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61526401 61526517 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61526401 61526517 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61527585 61527744 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61527585 61527744 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61527883 61528348 0.000000 - 2 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61527883 61528348 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61537239 61537452 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61537239 61537452 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61538499 61538711 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61538499 61538711 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61541051 61541372 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61541051 61541372 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61542126 61542964 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61542126 61542966 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61545562 61545758 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene exon 61569148 61569304 0.000000 - . gene_id "DIDO1"; transcript_id "NM_033081:uc002yds.2"; -chr20 hg19_knownGene CDS 61522286 61522507 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61518567 61522507 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61523339 61523428 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61523339 61523428 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61524161 61524314 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61524161 61524314 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61525018 61525546 0.000000 - 2 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61525018 61525546 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61525765 61525900 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61525765 61525900 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61526162 61526266 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61526162 61526266 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61526401 61526517 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61526401 61526517 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61527585 61527744 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61527585 61527744 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61527883 61528348 0.000000 - 2 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61527883 61528348 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61537239 61537452 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61537239 61537452 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61538499 61538711 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61538499 61538711 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61541051 61541372 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61541051 61541372 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61542126 61542964 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61542126 61542966 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61545562 61545758 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene exon 61569148 61569304 0.000000 - . gene_id "DIDO1"; transcript_id "NM_080797:uc002ydu.2"; -chr20 hg19_knownGene CDS 61537141 61537452 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_022105:uc002ydx.2"; -chr20 hg19_knownGene exon 61536350 61537452 0.000000 - . gene_id "DIDO1"; transcript_id "NM_022105:uc002ydx.2"; -chr20 hg19_knownGene CDS 61538499 61538711 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_022105:uc002ydx.2"; -chr20 hg19_knownGene exon 61538499 61538711 0.000000 - . gene_id "DIDO1"; transcript_id "NM_022105:uc002ydx.2"; -chr20 hg19_knownGene CDS 61541051 61541372 0.000000 - 1 gene_id "DIDO1"; transcript_id "NM_022105:uc002ydx.2"; -chr20 hg19_knownGene exon 61541051 61541372 0.000000 - . gene_id "DIDO1"; transcript_id "NM_022105:uc002ydx.2"; -chr20 hg19_knownGene CDS 61542126 61542964 0.000000 - 0 gene_id "DIDO1"; transcript_id "NM_022105:uc002ydx.2"; -chr20 hg19_knownGene exon 61542126 61542966 0.000000 - . gene_id "DIDO1"; transcript_id "NM_022105:uc002ydx.2"; -chr20 hg19_knownGene exon 61545562 61545758 0.000000 - . gene_id "DIDO1"; transcript_id "NM_022105:uc002ydx.2"; -chr20 hg19_knownGene exon 61569148 61569304 0.000000 - . gene_id "DIDO1"; transcript_id "NM_022105:uc002ydx.2"; -chr20 hg19_knownGene exon 61569441 61569605 0.000000 + . gene_id "C20orf11"; transcript_id "NM_017896:uc002ydy.3"; -chr20 hg19_knownGene CDS 61572855 61572972 0.000000 + 0 gene_id "C20orf11"; transcript_id "NM_017896:uc002ydy.3"; -chr20 hg19_knownGene exon 61572843 61572972 0.000000 + . gene_id "C20orf11"; transcript_id "NM_017896:uc002ydy.3"; -chr20 hg19_knownGene CDS 61574339 61574535 0.000000 + 2 gene_id "C20orf11"; transcript_id "NM_017896:uc002ydy.3"; -chr20 hg19_knownGene exon 61574339 61574535 0.000000 + . gene_id "C20orf11"; transcript_id "NM_017896:uc002ydy.3"; -chr20 hg19_knownGene CDS 61574847 61575044 0.000000 + 0 gene_id "C20orf11"; transcript_id "NM_017896:uc002ydy.3"; -chr20 hg19_knownGene exon 61574847 61575044 0.000000 + . gene_id "C20orf11"; transcript_id "NM_017896:uc002ydy.3"; -chr20 hg19_knownGene CDS 61576091 61576261 0.000000 + 0 gene_id "C20orf11"; transcript_id "NM_017896:uc002ydy.3"; -chr20 hg19_knownGene exon 61576091 61579827 0.000000 + . gene_id "C20orf11"; transcript_id "NM_017896:uc002ydy.3"; -chr20 hg19_knownGene CDS 61584506 61584624 0.000000 + 0 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61584476 61584624 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61588117 61588314 0.000000 + 1 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61588117 61588314 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61588793 61588932 0.000000 + 1 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61588793 61588932 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61591856 61591955 0.000000 + 2 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61591856 61591955 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61593976 61594106 0.000000 + 1 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61593976 61594106 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61594625 61594721 0.000000 + 2 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61594625 61594721 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61594936 61595032 0.000000 + 1 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61594936 61595032 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61595580 61595667 0.000000 + 0 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61595580 61595667 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61596484 61596518 0.000000 + 2 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61596484 61596518 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61596962 61597077 0.000000 + 0 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61596962 61597077 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61597877 61597932 0.000000 + 1 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61597877 61597932 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61598055 61598131 0.000000 + 2 gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene exon 61598055 61599947 0.000000 + . gene_id "SLC17A9"; transcript_id "AK298503:uc011aap.1"; -chr20 hg19_knownGene CDS 61584183 61584241 0.000000 + 0 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61583999 61584241 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61588117 61588314 0.000000 + 1 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61588117 61588314 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61588793 61588932 0.000000 + 1 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61588793 61588932 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61591856 61591955 0.000000 + 2 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61591856 61591955 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61593976 61594106 0.000000 + 1 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61593976 61594106 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61594625 61594721 0.000000 + 2 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61594625 61594721 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61594936 61595032 0.000000 + 1 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61594936 61595032 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61595580 61595667 0.000000 + 0 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61595580 61595667 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61596484 61596518 0.000000 + 2 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61596484 61596518 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61596962 61597077 0.000000 + 0 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61596962 61597077 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61597877 61597932 0.000000 + 1 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61597877 61597932 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61598055 61598084 0.000000 + 2 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61598055 61598084 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene CDS 61598689 61598849 0.000000 + 2 gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61598689 61599949 0.000000 + . gene_id "SLC17A9"; transcript_id "NM_022082:uc002yea.4"; -chr20 hg19_knownGene exon 61583999 61584241 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61584584 61584624 0.000000 + 0 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61584563 61584624 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61588117 61588314 0.000000 + 1 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61588117 61588314 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61588793 61588932 0.000000 + 1 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61588793 61588932 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61591856 61591955 0.000000 + 2 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61591856 61591955 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61593976 61594106 0.000000 + 1 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61593976 61594106 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61594625 61594721 0.000000 + 2 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61594625 61594721 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61594936 61595032 0.000000 + 1 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61594936 61595032 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61595580 61595667 0.000000 + 0 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61595580 61595667 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61596484 61596518 0.000000 + 2 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61596484 61596518 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61596962 61597077 0.000000 + 0 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61596962 61597077 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61597877 61597932 0.000000 + 1 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61597877 61597932 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61598055 61598084 0.000000 + 2 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61598055 61598084 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61598689 61598849 0.000000 + 2 gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene exon 61598689 61599949 0.000000 + . gene_id "SLC17A9"; transcript_id "BC025312:uc002ydz.4"; -chr20 hg19_knownGene CDS 61637404 61638078 0.000000 - 0 gene_id "BHLHE23"; transcript_id "NM_080606:uc002yeb.2"; -chr20 hg19_knownGene exon 61637331 61638387 0.000000 - . gene_id "BHLHE23"; transcript_id "NM_080606:uc002yeb.2"; -chr20 hg19_knownGene exon 61665569 61666020 0.000000 - . gene_id "LINC00029"; transcript_id "NR_028295:uc002yed.3"; -chr20 hg19_knownGene exon 61666635 61666793 0.000000 - . gene_id "LINC00029"; transcript_id "NR_028295:uc002yed.3"; -chr20 hg19_knownGene exon 61666917 61667073 0.000000 - . gene_id "LINC00029"; transcript_id "NR_028295:uc002yed.3"; -chr20 hg19_knownGene exon 61667400 61668380 0.000000 - . gene_id "LINC00029"; transcript_id "NR_028295:uc002yed.3"; -chr20 hg19_knownGene exon 61669363 61669537 0.000000 + . gene_id "LOC100144597"; transcript_id "NR_033369:uc021wfz.1"; -chr20 hg19_knownGene exon 61680208 61680277 0.000000 + . gene_id "LOC100144597"; transcript_id "NR_033369:uc021wfz.1"; -chr20 hg19_knownGene exon 61680864 61681008 0.000000 + . gene_id "LOC100144597"; transcript_id "NR_033369:uc021wfz.1"; -chr20 hg19_knownGene exon 61682974 61683103 0.000000 + . gene_id "LOC100144597"; transcript_id "NR_033369:uc021wfz.1"; -chr20 hg19_knownGene exon 61684257 61684618 0.000000 + . gene_id "LOC100144597"; transcript_id "NR_033369:uc021wfz.1"; -chr20 hg19_knownGene exon 61684864 61685215 0.000000 + . gene_id "LOC100144597"; transcript_id "NR_033369:uc021wfz.1"; -chr20 hg19_knownGene exon 61640735 61640825 0.000000 + . gene_id "LOC63930"; transcript_id "NR_033370:uc002yec.1"; -chr20 hg19_knownGene exon 61711344 61712298 0.000000 + . gene_id "LOC63930"; transcript_id "NR_033370:uc002yec.1"; -chr20 hg19_knownGene exon 61713534 61714694 0.000000 + . gene_id "LOC63930"; transcript_id "NR_033370:uc002yec.1"; -chr20 hg19_knownGene exon 61715223 61716243 0.000000 + . gene_id "LOC63930"; transcript_id "NR_033370:uc002yec.1"; -chr20 hg19_knownGene exon 61716286 61716423 0.000000 + . gene_id "LOC63930"; transcript_id "NR_033370:uc002yec.1"; -chr20 hg19_knownGene exon 61726845 61727535 0.000000 - . gene_id "HAR1B"; transcript_id "NR_003245:uc002yee.1"; -chr20 hg19_knownGene exon 61733467 61733671 0.000000 - . gene_id "HAR1B"; transcript_id "NR_003245:uc002yee.1"; -chr20 hg19_knownGene exon 61732644 61734606 0.000000 + . gene_id "HAR1A"; transcript_id "NR_003244:uc002yef.1"; -chr20 hg19_knownGene exon 61734907 61735737 0.000000 + . gene_id "HAR1A"; transcript_id "NR_003244:uc002yef.1"; -chr20 hg19_knownGene exon 61809852 61809938 0.000000 + . gene_id "MIR124-3"; transcript_id "NR_029670:uc002yeg.1"; -chr20 hg19_knownGene CDS 61828063 61828086 0.000000 - 0 gene_id "YTHDF1"; transcript_id "AK300073:uc011aaq.2"; -chr20 hg19_knownGene exon 61826782 61828086 0.000000 - . gene_id "YTHDF1"; transcript_id "AK300073:uc011aaq.2"; -chr20 hg19_knownGene CDS 61833639 61835141 0.000000 - 0 gene_id "YTHDF1"; transcript_id "AK300073:uc011aaq.2"; -chr20 hg19_knownGene exon 61833639 61835159 0.000000 - . gene_id "YTHDF1"; transcript_id "AK300073:uc011aaq.2"; -chr20 hg19_knownGene exon 61839815 61839970 0.000000 - . gene_id "YTHDF1"; transcript_id "AK300073:uc011aaq.2"; -chr20 hg19_knownGene CDS 61828063 61828086 0.000000 - 0 gene_id "YTHDF1"; transcript_id "NM_017798:uc002yeh.3"; -chr20 hg19_knownGene exon 61826782 61828086 0.000000 - . gene_id "YTHDF1"; transcript_id "NM_017798:uc002yeh.3"; -chr20 hg19_knownGene CDS 61833639 61835159 0.000000 - 0 gene_id "YTHDF1"; transcript_id "NM_017798:uc002yeh.3"; -chr20 hg19_knownGene exon 61833639 61835159 0.000000 - . gene_id "YTHDF1"; transcript_id "NM_017798:uc002yeh.3"; -chr20 hg19_knownGene CDS 61845216 61845295 0.000000 - 2 gene_id "YTHDF1"; transcript_id "NM_017798:uc002yeh.3"; -chr20 hg19_knownGene exon 61845216 61845295 0.000000 - . gene_id "YTHDF1"; transcript_id "NM_017798:uc002yeh.3"; -chr20 hg19_knownGene CDS 61846929 61846953 0.000000 - 0 gene_id "YTHDF1"; transcript_id "NM_017798:uc002yeh.3"; -chr20 hg19_knownGene exon 61846929 61846953 0.000000 - . gene_id "YTHDF1"; transcript_id "NM_017798:uc002yeh.3"; -chr20 hg19_knownGene CDS 61847218 61847244 0.000000 - 0 gene_id "YTHDF1"; transcript_id "NM_017798:uc002yeh.3"; -chr20 hg19_knownGene exon 61847218 61847538 0.000000 - . gene_id "YTHDF1"; transcript_id "NM_017798:uc002yeh.3"; -chr20 hg19_knownGene exon 61870131 61870194 0.000000 + . gene_id "MIR3196"; transcript_id "NR_036163:uc021wga.1"; -chr20 hg19_knownGene CDS 61867449 61867797 0.000000 + 0 gene_id "BIRC7"; transcript_id "AY517497:uc010gkc.1"; -chr20 hg19_knownGene exon 61867276 61867797 0.000000 + . gene_id "BIRC7"; transcript_id "AY517497:uc010gkc.1"; -chr20 hg19_knownGene CDS 61869255 61869354 0.000000 + 2 gene_id "BIRC7"; transcript_id "AY517497:uc010gkc.1"; -chr20 hg19_knownGene exon 61869255 61869354 0.000000 + . gene_id "BIRC7"; transcript_id "AY517497:uc010gkc.1"; -chr20 hg19_knownGene CDS 61869748 61869829 0.000000 + 1 gene_id "BIRC7"; transcript_id "AY517497:uc010gkc.1"; -chr20 hg19_knownGene exon 61869748 61869829 0.000000 + . gene_id "BIRC7"; transcript_id "AY517497:uc010gkc.1"; -chr20 hg19_knownGene CDS 61869921 61869966 0.000000 + 0 gene_id "BIRC7"; transcript_id "AY517497:uc010gkc.1"; -chr20 hg19_knownGene exon 61869921 61869966 0.000000 + . gene_id "BIRC7"; transcript_id "AY517497:uc010gkc.1"; -chr20 hg19_knownGene CDS 61870514 61870608 0.000000 + 2 gene_id "BIRC7"; transcript_id "AY517497:uc010gkc.1"; -chr20 hg19_knownGene exon 61870514 61870957 0.000000 + . gene_id "BIRC7"; transcript_id "AY517497:uc010gkc.1"; -chr20 hg19_knownGene CDS 61867449 61867797 0.000000 + 0 gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene exon 61867276 61867797 0.000000 + . gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene CDS 61869255 61869354 0.000000 + 2 gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene exon 61869255 61869354 0.000000 + . gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene CDS 61869748 61869829 0.000000 + 1 gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene exon 61869748 61869829 0.000000 + . gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene CDS 61869921 61869966 0.000000 + 0 gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene exon 61869921 61869966 0.000000 + . gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene CDS 61870514 61870585 0.000000 + 2 gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene exon 61870514 61870585 0.000000 + . gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene CDS 61870710 61870954 0.000000 + 2 gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene exon 61870710 61870962 0.000000 + . gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene exon 61871608 61871854 0.000000 + . gene_id "BIRC7"; transcript_id "NM_139317:uc002yej.3"; -chr20 hg19_knownGene CDS 61867449 61867797 0.000000 + 0 gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene exon 61867276 61867797 0.000000 + . gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene CDS 61869255 61869354 0.000000 + 2 gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene exon 61869255 61869354 0.000000 + . gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene CDS 61869748 61869829 0.000000 + 1 gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene exon 61869748 61869829 0.000000 + . gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene CDS 61869921 61869966 0.000000 + 0 gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene exon 61869921 61869966 0.000000 + . gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene CDS 61870514 61870585 0.000000 + 2 gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene exon 61870514 61870585 0.000000 + . gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene CDS 61870764 61870954 0.000000 + 2 gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene exon 61870764 61870962 0.000000 + . gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene exon 61871608 61871854 0.000000 + . gene_id "BIRC7"; transcript_id "NM_022161:uc002yei.3"; -chr20 hg19_knownGene CDS 61878684 61879127 0.000000 - 0 gene_id "NKAIN4"; transcript_id "AK308958:uc010gkd.1"; -chr20 hg19_knownGene exon 61877990 61879127 0.000000 - . gene_id "NKAIN4"; transcript_id "AK308958:uc010gkd.1"; -chr20 hg19_knownGene CDS 61880167 61880247 0.000000 - 0 gene_id "NKAIN4"; transcript_id "AK308958:uc010gkd.1"; -chr20 hg19_knownGene exon 61880167 61880247 0.000000 - . gene_id "NKAIN4"; transcript_id "AK308958:uc010gkd.1"; -chr20 hg19_knownGene CDS 61881287 61881292 0.000000 - 0 gene_id "NKAIN4"; transcript_id "AK308958:uc010gkd.1"; -chr20 hg19_knownGene exon 61881287 61881424 0.000000 - . gene_id "NKAIN4"; transcript_id "AK308958:uc010gkd.1"; -chr20 hg19_knownGene exon 61884570 61884805 0.000000 - . gene_id "NKAIN4"; transcript_id "AK308958:uc010gkd.1"; -chr20 hg19_knownGene CDS 61872852 61872858 0.000000 - 1 gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene exon 61872136 61872858 0.000000 - . gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene CDS 61873891 61873975 0.000000 - 2 gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene exon 61873891 61873975 0.000000 - . gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene CDS 61875376 61875436 0.000000 - 0 gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene exon 61875376 61875436 0.000000 - . gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene CDS 61878930 61879127 0.000000 - 0 gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene exon 61878930 61879127 0.000000 - . gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene CDS 61880167 61880247 0.000000 - 0 gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene exon 61880167 61880247 0.000000 - . gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene CDS 61881287 61881424 0.000000 - 0 gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene exon 61881287 61881424 0.000000 - . gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene CDS 61885749 61885802 0.000000 - 0 gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene exon 61885749 61885892 0.000000 - . gene_id "NKAIN4"; transcript_id "NM_152864:uc002yek.3"; -chr20 hg19_knownGene CDS 61885426 61885752 0.000000 + 0 gene_id "FLJ16779"; transcript_id "NR_024389:uc011aar.2"; -chr20 hg19_knownGene exon 61885330 61892967 0.000000 + . gene_id "FLJ16779"; transcript_id "NR_024389:uc011aar.2"; -chr20 hg19_knownGene exon 61918160 61918218 0.000000 + . gene_id "MIR4326"; transcript_id "NR_036220:uc021wgb.1"; -chr20 hg19_knownGene exon 61904165 61904272 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61906982 61906992 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61906929 61906992 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61907832 61908003 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61907832 61908003 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61908557 61908657 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61908557 61908657 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61909469 61909555 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61909469 61909555 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61910251 61910347 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61910251 61910347 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61912643 61912699 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61912643 61912699 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61914171 61914203 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61914171 61914203 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61915203 61915232 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61915203 61915232 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61916218 61916274 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61916218 61916274 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61917006 61917065 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61917006 61917065 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61917724 61917794 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61917724 61917794 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene CDS 61918916 61919222 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61918916 61920848 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK296351:uc011aas.1"; -chr20 hg19_knownGene exon 61904165 61904272 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61906929 61906992 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61907443 61907552 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene CDS 61907900 61908003 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61907832 61908003 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene CDS 61909469 61909555 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61909469 61909555 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene CDS 61910251 61910347 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61910251 61910347 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene CDS 61912643 61912699 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61912643 61912699 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene CDS 61914171 61914203 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61914171 61914203 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene CDS 61916218 61916274 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61916218 61916274 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene CDS 61917006 61917065 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61917006 61917065 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene CDS 61917718 61917794 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61917718 61917794 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene CDS 61918916 61919222 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61918916 61920848 0.000000 + . gene_id "ARFGAP1"; transcript_id "AK303454:uc011aat.1"; -chr20 hg19_knownGene exon 61915966 61916274 0.000000 + . gene_id "ARFGAP1"; transcript_id "AL137744:uc002yeo.1"; -chr20 hg19_knownGene exon 61917006 61917065 0.000000 + . gene_id "ARFGAP1"; transcript_id "AL137744:uc002yeo.1"; -chr20 hg19_knownGene exon 61917718 61917794 0.000000 + . gene_id "ARFGAP1"; transcript_id "AL137744:uc002yeo.1"; -chr20 hg19_knownGene exon 61918916 61920848 0.000000 + . gene_id "ARFGAP1"; transcript_id "AL137744:uc002yeo.1"; -chr20 hg19_knownGene exon 61904165 61904272 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61906933 61906992 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61906929 61906992 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61907443 61907552 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61907443 61907552 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61907832 61908003 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61907832 61908003 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61908557 61908657 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61908557 61908657 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61909469 61909555 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61909469 61909555 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61910251 61910347 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61910251 61910347 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61912643 61912699 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61912643 61912699 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61914171 61914203 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61914171 61914203 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61915203 61915232 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61915203 61915232 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61916218 61916274 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61916218 61916274 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61917006 61917065 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61917006 61917065 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61917724 61917794 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61917724 61917794 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene CDS 61918916 61919222 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61918916 61921142 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_175609:uc002yel.3"; -chr20 hg19_knownGene exon 61904165 61904272 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61906933 61906992 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61906929 61906992 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61907443 61907552 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61907443 61907552 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61907832 61908003 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61907832 61908003 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61908557 61908657 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61908557 61908657 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61909469 61909555 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61909469 61909555 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61910251 61910347 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61910251 61910347 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61912643 61912699 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61912643 61912699 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61914171 61914203 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61914171 61914203 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61916218 61916274 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61916218 61916274 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61917006 61917065 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61917006 61917065 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61917718 61917794 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61917718 61917794 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene CDS 61918916 61919222 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61918916 61921142 0.000000 + . gene_id "ARFGAP1"; transcript_id "NM_018209:uc002yem.3"; -chr20 hg19_knownGene exon 61904165 61904272 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61906933 61906992 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61906929 61906992 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61907443 61907552 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61907443 61907552 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61907832 61908003 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61907832 61908003 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61908557 61908657 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61908557 61908657 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61909469 61909555 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61909469 61909555 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61910251 61910347 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61910251 61910347 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61912643 61912699 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61912643 61912699 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61914171 61914203 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61914171 61914203 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61916218 61916274 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61916218 61916274 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61917006 61917065 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61917006 61917065 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61917332 61917570 0.000000 + 0 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61917332 61917570 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61917718 61917794 0.000000 + 1 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61917718 61917794 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene CDS 61918916 61918974 0.000000 + 2 gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61918916 61921142 0.000000 + . gene_id "ARFGAP1"; transcript_id "BC006085:uc002yen.3"; -chr20 hg19_knownGene exon 61924538 61924627 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61926460 61926541 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61926450 61926541 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61929262 61929372 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61929262 61929372 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61936769 61936912 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61936769 61936912 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61937233 61937391 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61937233 61937391 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61938842 61939000 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61938842 61939000 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61939323 61939442 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61939323 61939442 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61939894 61940058 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61939894 61940058 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61940685 61940849 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61940685 61940849 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61941110 61941267 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61941110 61941267 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61941733 61941862 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61941733 61941862 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61942746 61942891 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61942746 61942891 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61942977 61943100 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61942977 61943100 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61943268 61943407 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61943268 61943407 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61943772 61943901 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61943772 61943901 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61944144 61944286 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61944144 61944286 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61944469 61944601 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61944469 61944601 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61945095 61945243 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61945095 61945243 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61945424 61945553 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61945424 61945553 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61946756 61946791 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61946756 61946791 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61947905 61948043 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61947905 61948043 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61950410 61950552 0.000000 + 1 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61950410 61950552 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61950839 61950948 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61950839 61950948 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61951391 61951549 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61951391 61951549 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61951643 61951720 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61951643 61951720 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61952365 61952451 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61952365 61952451 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61953410 61953463 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61953410 61953463 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61956793 61956846 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61956793 61956846 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61957020 61957073 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61957020 61957073 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61957448 61957501 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61957448 61957501 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61958104 61958175 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61958104 61958175 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61959304 61959339 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61959304 61959339 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61959431 61959479 0.000000 + 0 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61959431 61959479 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61959683 61959850 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61959683 61959850 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene CDS 61960937 61961007 0.000000 + 2 gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61960937 61961013 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61962072 61962285 0.000000 + . gene_id "COL20A1"; transcript_id "NM_020882:uc011aau.2"; -chr20 hg19_knownGene exon 61937365 61937412 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61938883 61939000 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61938842 61939000 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61939323 61939442 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61939323 61939442 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61939894 61940058 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61939894 61940058 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61940685 61940849 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61940685 61940849 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61941110 61941267 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61941110 61941267 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61941733 61941862 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61941733 61941862 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61942746 61942891 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61942746 61942891 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61942977 61943100 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61942977 61943100 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61943268 61943407 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61943268 61943407 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61943772 61943901 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61943772 61943901 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61944144 61944286 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61944144 61944286 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61944469 61944601 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61944469 61944601 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61945095 61945243 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61945095 61945243 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61945424 61945553 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61945424 61945553 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61946756 61946791 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61946756 61946791 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61947905 61948043 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61947905 61948043 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61950410 61950552 0.000000 + 1 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61950410 61950552 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61950839 61950948 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61950839 61950948 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61951391 61951549 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61951391 61951549 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61951643 61951720 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61951643 61951720 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61952365 61952451 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61952365 61952451 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61953410 61953463 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61953410 61953463 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61956793 61956846 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61956793 61956846 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61957020 61957073 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61957020 61957073 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61957448 61957501 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61957448 61957501 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61958104 61958175 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61958104 61958175 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61959304 61959339 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61959304 61959339 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61959431 61959497 0.000000 + 0 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61959431 61959497 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61959683 61959850 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61959683 61959850 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61960937 61961007 0.000000 + 2 gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61960937 61961013 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene exon 61962072 61962285 0.000000 + . gene_id "COL20A1"; transcript_id "AB040943:uc011aav.2"; -chr20 hg19_knownGene CDS 61978093 61978215 0.000000 - 0 gene_id "CHRNA4"; transcript_id "BC096291:uc010gke.1"; -chr20 hg19_knownGene exon 61977803 61978215 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096291:uc010gke.1"; -chr20 hg19_knownGene CDS 61981005 61982379 0.000000 - 1 gene_id "CHRNA4"; transcript_id "BC096291:uc010gke.1"; -chr20 hg19_knownGene exon 61981005 61982379 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096291:uc010gke.1"; -chr20 hg19_knownGene CDS 61986848 61986947 0.000000 - 2 gene_id "CHRNA4"; transcript_id "BC096291:uc010gke.1"; -chr20 hg19_knownGene exon 61986848 61986947 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096291:uc010gke.1"; -chr20 hg19_knownGene CDS 61987327 61987396 0.000000 - 0 gene_id "CHRNA4"; transcript_id "BC096291:uc010gke.1"; -chr20 hg19_knownGene exon 61987327 61987436 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096291:uc010gke.1"; -chr20 hg19_knownGene exon 61987723 61987767 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096291:uc010gke.1"; -chr20 hg19_knownGene exon 61990900 61991051 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096291:uc010gke.1"; -chr20 hg19_knownGene CDS 61978093 61978215 0.000000 - 0 gene_id "CHRNA4"; transcript_id "BC096292:uc002yev.1"; -chr20 hg19_knownGene exon 61977803 61978215 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096292:uc002yev.1"; -chr20 hg19_knownGene CDS 61981005 61982234 0.000000 - 0 gene_id "CHRNA4"; transcript_id "BC096292:uc002yev.1"; -chr20 hg19_knownGene exon 61981005 61982379 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096292:uc002yev.1"; -chr20 hg19_knownGene exon 61987309 61987436 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096292:uc002yev.1"; -chr20 hg19_knownGene exon 61987723 61987767 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096292:uc002yev.1"; -chr20 hg19_knownGene exon 61990900 61991051 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096292:uc002yev.1"; -chr20 hg19_knownGene exon 61992529 61992656 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096292:uc002yev.1"; -chr20 hg19_knownGene CDS 61978093 61978215 0.000000 - 0 gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene exon 61974665 61978215 0.000000 - . gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene CDS 61981005 61982379 0.000000 - 1 gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene exon 61981005 61982379 0.000000 - . gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene CDS 61987327 61987436 0.000000 - 0 gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene exon 61987327 61987436 0.000000 - . gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene CDS 61987723 61987767 0.000000 - 0 gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene exon 61987723 61987767 0.000000 - . gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene CDS 61990900 61991051 0.000000 - 2 gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene exon 61990900 61991051 0.000000 - . gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene CDS 61992442 61992517 0.000000 - 0 gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene exon 61992442 61992695 0.000000 - . gene_id "CHRNA4"; transcript_id "NM_000744:uc002yes.2"; -chr20 hg19_knownGene CDS 61978093 61978215 0.000000 - 0 gene_id "CHRNA4"; transcript_id "BC096293:uc010gkf.1"; -chr20 hg19_knownGene exon 61977803 61978215 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096293:uc010gkf.1"; -chr20 hg19_knownGene CDS 61981005 61982234 0.000000 - 0 gene_id "CHRNA4"; transcript_id "BC096293:uc010gkf.1"; -chr20 hg19_knownGene exon 61981005 61982379 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096293:uc010gkf.1"; -chr20 hg19_knownGene exon 61987327 61987461 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096293:uc010gkf.1"; -chr20 hg19_knownGene exon 61987723 61987767 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096293:uc010gkf.1"; -chr20 hg19_knownGene exon 61990900 61991051 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096293:uc010gkf.1"; -chr20 hg19_knownGene exon 61992442 61992695 0.000000 - . gene_id "CHRNA4"; transcript_id "BC096293:uc010gkf.1"; -chr20 hg19_knownGene CDS 61978093 61978215 0.000000 - 0 gene_id "CHRNA4"; transcript_id "AB209359:uc002yet.1"; -chr20 hg19_knownGene exon 61974665 61978215 0.000000 - . gene_id "CHRNA4"; transcript_id "AB209359:uc002yet.1"; -chr20 hg19_knownGene CDS 61981005 61982234 0.000000 - 0 gene_id "CHRNA4"; transcript_id "AB209359:uc002yet.1"; -chr20 hg19_knownGene exon 61981005 61982379 0.000000 - . gene_id "CHRNA4"; transcript_id "AB209359:uc002yet.1"; -chr20 hg19_knownGene exon 62005233 62005884 0.000000 - . gene_id "CHRNA4"; transcript_id "AB209359:uc002yet.1"; -chr20 hg19_knownGene exon 62006605 62006744 0.000000 - . gene_id "CHRNA4"; transcript_id "AB209359:uc002yet.1"; -chr20 hg19_knownGene exon 62009107 62009489 0.000000 - . gene_id "CHRNA4"; transcript_id "AB209359:uc002yet.1"; -chr20 hg19_knownGene exon 62023923 62026961 0.000000 - . gene_id "AK056267"; transcript_id "AK056267:uc002yew.1"; -chr20 hg19_knownGene exon 62031567 62033370 0.000000 - . gene_id "KCNQ2"; transcript_id "BC127262:uc002yex.3"; -chr20 hg19_knownGene CDS 62038000 62038728 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62037542 62038728 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62039766 62039889 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62039766 62039889 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62044803 62044934 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62044803 62044934 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62045441 62045546 0.000000 - 2 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62045441 62045546 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62046256 62046479 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62046256 62046479 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62050972 62051025 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62050972 62051025 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62055530 62055559 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62055530 62055559 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62059720 62059788 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62059720 62059788 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62062693 62062722 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62062693 62062722 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62065162 62065256 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62065162 62065256 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62069978 62070073 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62069978 62070073 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62070951 62071061 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62070951 62071061 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62073759 62073884 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62073759 62073884 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62076012 62076187 0.000000 - 2 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62076012 62076187 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62076591 62076717 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62076591 62076717 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62078100 62078190 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62078100 62078190 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62103521 62103816 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene exon 62103521 62103993 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172107:uc002yey.1"; -chr20 hg19_knownGene CDS 62038000 62038728 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62037542 62038728 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62039766 62039889 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62039766 62039889 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62044803 62044934 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62044803 62044934 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62045441 62045543 0.000000 - 2 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62045441 62045543 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62046256 62046443 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62046256 62046443 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62055530 62055559 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62055530 62055559 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62059720 62059788 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62059720 62059788 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62062693 62062722 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62062693 62062722 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62065162 62065256 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62065162 62065256 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62069978 62070073 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62069978 62070073 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62070951 62071061 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62070951 62071061 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62073759 62073884 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62073759 62073884 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62076012 62076187 0.000000 - 2 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62076012 62076187 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62076591 62076717 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62076591 62076717 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62078100 62078190 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62078100 62078190 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62103521 62103816 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene exon 62103521 62103993 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172108:uc002yez.1"; -chr20 hg19_knownGene CDS 62038000 62038728 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62037542 62038728 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62039766 62039889 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62039766 62039889 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62044803 62044934 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62044803 62044934 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62045441 62045546 0.000000 - 2 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62045441 62045546 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62046256 62046479 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62046256 62046479 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62055530 62055559 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62055530 62055559 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62059720 62059788 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62059720 62059788 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62062693 62062722 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62062693 62062722 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62065162 62065256 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62065162 62065256 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62069978 62070073 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62069978 62070073 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62070951 62071061 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62070951 62071061 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62073759 62073884 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62073759 62073884 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62076012 62076187 0.000000 - 2 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62076012 62076187 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62076591 62076717 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62076591 62076717 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62078100 62078190 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62078100 62078190 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62103521 62103816 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene exon 62103521 62103993 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172106:uc002yfa.1"; -chr20 hg19_knownGene CDS 62038000 62038728 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62037542 62038728 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62039766 62039889 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62039766 62039889 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62044803 62044934 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62044803 62044934 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62045441 62045546 0.000000 - 2 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62045441 62045546 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62046256 62046479 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62046256 62046479 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62055530 62055559 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62055530 62055559 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62059720 62059788 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62059720 62059788 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62065162 62065256 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62065162 62065256 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62069978 62070073 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62069978 62070073 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62070951 62071061 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62070951 62071061 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62073759 62073884 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62073759 62073884 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62076012 62076187 0.000000 - 2 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62076012 62076187 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62076591 62076717 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62076591 62076717 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62078100 62078190 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62078100 62078190 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62103521 62103816 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene exon 62103521 62103993 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_004518:uc002yfb.1"; -chr20 hg19_knownGene CDS 62055439 62055559 0.000000 - 1 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62055287 62055559 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62059720 62059788 0.000000 - 1 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62059720 62059788 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62062693 62062722 0.000000 - 1 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62062693 62062722 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62065162 62065256 0.000000 - 0 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62065162 62065256 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62069978 62070073 0.000000 - 0 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62069978 62070073 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62070951 62071061 0.000000 - 0 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62070951 62071061 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62073759 62073884 0.000000 - 0 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62073759 62073884 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62076012 62076187 0.000000 - 2 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62076012 62076187 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62076591 62076717 0.000000 - 0 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62076591 62076717 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62078100 62078190 0.000000 - 1 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62078100 62078190 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62103521 62103816 0.000000 - 0 gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene exon 62103521 62103993 0.000000 - . gene_id "KCNQ2"; transcript_id "AK293727:uc011aax.1"; -chr20 hg19_knownGene CDS 62065101 62065256 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene exon 62065032 62065256 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene CDS 62069978 62070073 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene exon 62069978 62070073 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene CDS 62070951 62071061 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene exon 62070951 62071061 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene CDS 62073759 62073884 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene exon 62073759 62073884 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene CDS 62076012 62076187 0.000000 - 2 gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene exon 62076012 62076187 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene CDS 62076591 62076717 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene exon 62076591 62076717 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene CDS 62078100 62078190 0.000000 - 1 gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene exon 62078100 62078190 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene CDS 62103521 62103816 0.000000 - 0 gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene exon 62103521 62103993 0.000000 - . gene_id "KCNQ2"; transcript_id "NM_172109:uc002yfc.1"; -chr20 hg19_knownGene CDS 62119654 62119778 0.000000 - 2 gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene exon 62119366 62119778 0.000000 - . gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene CDS 62120271 62120505 0.000000 - 0 gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene exon 62120271 62120505 0.000000 - . gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene CDS 62121832 62122088 0.000000 - 2 gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene exon 62121832 62122088 0.000000 - . gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene CDS 62124490 62124640 0.000000 - 0 gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene exon 62124490 62124640 0.000000 - . gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene CDS 62126158 62126454 0.000000 - 0 gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene exon 62126158 62126454 0.000000 - . gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene CDS 62127209 62127388 0.000000 - 0 gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene exon 62127209 62127388 0.000000 - . gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene CDS 62128973 62129116 0.000000 - 0 gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene exon 62128973 62129187 0.000000 - . gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene exon 62130411 62130505 0.000000 - . gene_id "EEF1A2"; transcript_id "NM_001958:uc002yfe.1"; -chr20 hg19_knownGene exon 62152133 62152247 0.000000 + . gene_id "PPDPF"; transcript_id "NM_024299:uc002yff.3"; -chr20 hg19_knownGene CDS 62152662 62152716 0.000000 + 0 gene_id "PPDPF"; transcript_id "NM_024299:uc002yff.3"; -chr20 hg19_knownGene exon 62152637 62152716 0.000000 + . gene_id "PPDPF"; transcript_id "NM_024299:uc002yff.3"; -chr20 hg19_knownGene CDS 62152865 62152942 0.000000 + 2 gene_id "PPDPF"; transcript_id "NM_024299:uc002yff.3"; -chr20 hg19_knownGene exon 62152865 62152942 0.000000 + . gene_id "PPDPF"; transcript_id "NM_024299:uc002yff.3"; -chr20 hg19_knownGene CDS 62153021 62153229 0.000000 + 2 gene_id "PPDPF"; transcript_id "NM_024299:uc002yff.3"; -chr20 hg19_knownGene exon 62153021 62153524 0.000000 + . gene_id "PPDPF"; transcript_id "NM_024299:uc002yff.3"; -chr20 hg19_knownGene CDS 62161402 62161584 0.000000 - 0 gene_id "PTK6"; transcript_id "AK124082:uc011aaz.1"; -chr20 hg19_knownGene exon 62160109 62161584 0.000000 - . gene_id "PTK6"; transcript_id "AK124082:uc011aaz.1"; -chr20 hg19_knownGene CDS 62162099 62162280 0.000000 - 2 gene_id "PTK6"; transcript_id "AK124082:uc011aaz.1"; -chr20 hg19_knownGene exon 62162099 62162280 0.000000 - . gene_id "PTK6"; transcript_id "AK124082:uc011aaz.1"; -chr20 hg19_knownGene CDS 62163879 62163996 0.000000 - 0 gene_id "PTK6"; transcript_id "AK124082:uc011aaz.1"; -chr20 hg19_knownGene exon 62163879 62164726 0.000000 - . gene_id "PTK6"; transcript_id "AK124082:uc011aaz.1"; -chr20 hg19_knownGene CDS 62160892 62161076 0.000000 - 2 gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene exon 62159776 62161076 0.000000 - . gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene CDS 62161431 62161584 0.000000 - 0 gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene exon 62161431 62161584 0.000000 - . gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene CDS 62162099 62162280 0.000000 - 2 gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene exon 62162099 62162280 0.000000 - . gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene CDS 62163879 62164040 0.000000 - 2 gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene exon 62163879 62164040 0.000000 - . gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene CDS 62164904 62165057 0.000000 - 0 gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene exon 62164904 62165057 0.000000 - . gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene CDS 62165505 62165668 0.000000 - 2 gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene exon 62165505 62165668 0.000000 - . gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene CDS 62166291 62166412 0.000000 - 1 gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene exon 62166291 62166412 0.000000 - . gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene CDS 62168438 62168667 0.000000 - 0 gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene exon 62168438 62168707 0.000000 - . gene_id "PTK6"; transcript_id "NM_005975:uc002yfg.3"; -chr20 hg19_knownGene CDS 62160892 62161076 0.000000 - 2 gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene exon 62159776 62161076 0.000000 - . gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene CDS 62161431 62161584 0.000000 - 0 gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene exon 62161431 62161584 0.000000 - . gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene CDS 62162099 62162280 0.000000 - 2 gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene exon 62162099 62162280 0.000000 - . gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene CDS 62163879 62164040 0.000000 - 2 gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene exon 62163879 62164040 0.000000 - . gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene CDS 62164904 62165057 0.000000 - 0 gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene exon 62164904 62165057 0.000000 - . gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene CDS 62165505 62165668 0.000000 - 2 gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene exon 62165505 62165668 0.000000 - . gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene CDS 62168438 62168486 0.000000 - 0 gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene exon 62168438 62168707 0.000000 - . gene_id "PTK6"; transcript_id "AK301364:uc011aay.2"; -chr20 hg19_knownGene CDS 62166241 62166412 0.000000 - 1 gene_id "PTK6"; transcript_id "AK301691:uc011aba.2"; -chr20 hg19_knownGene exon 62165599 62166412 0.000000 - . gene_id "PTK6"; transcript_id "AK301691:uc011aba.2"; -chr20 hg19_knownGene CDS 62168438 62168667 0.000000 - 0 gene_id "PTK6"; transcript_id "AK301691:uc011aba.2"; -chr20 hg19_knownGene exon 62168438 62168707 0.000000 - . gene_id "PTK6"; transcript_id "AK301691:uc011aba.2"; -chr20 hg19_knownGene CDS 62172174 62172352 0.000000 - 2 gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene exon 62172163 62172352 0.000000 - . gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene CDS 62172544 62172700 0.000000 - 0 gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene exon 62172544 62172700 0.000000 - . gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene CDS 62172792 62172973 0.000000 - 2 gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene exon 62172792 62172973 0.000000 - . gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene CDS 62173516 62173674 0.000000 - 2 gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene exon 62173516 62173674 0.000000 - . gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene CDS 62173793 62173934 0.000000 - 0 gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene exon 62173793 62173934 0.000000 - . gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene CDS 62174667 62174833 0.000000 - 2 gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene exon 62174667 62174833 0.000000 - . gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene CDS 62175580 62175701 0.000000 - 1 gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene exon 62175580 62175701 0.000000 - . gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene CDS 62178461 62178816 0.000000 - 0 gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene exon 62178461 62178857 0.000000 - . gene_id "SRMS"; transcript_id "NM_080823:uc002yfi.1"; -chr20 hg19_knownGene CDS 62187017 62187970 0.000000 + 0 gene_id "C20orf195"; transcript_id "CCDS13526:uc021wgc.1"; -chr20 hg19_knownGene exon 62187017 62187973 0.000000 + . gene_id "C20orf195"; transcript_id "CCDS13526:uc021wgc.1"; -chr20 hg19_knownGene exon 62184373 62184454 0.000000 + . gene_id "C20orf195"; transcript_id "NM_024059:uc002yfj.3"; -chr20 hg19_knownGene CDS 62187017 62187970 0.000000 + 0 gene_id "C20orf195"; transcript_id "NM_024059:uc002yfj.3"; -chr20 hg19_knownGene exon 62187007 62188035 0.000000 + . gene_id "C20orf195"; transcript_id "NM_024059:uc002yfj.3"; -chr20 hg19_knownGene CDS 62190602 62190723 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62189439 62190723 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62191281 62191448 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62191281 62191448 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62191524 62191680 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62191524 62191680 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62191832 62192050 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62191832 62192050 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62192148 62192282 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62192148 62192282 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62192435 62192627 0.000000 - 1 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62192435 62192627 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62192703 62192819 0.000000 - 1 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62192703 62192819 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62192954 62193098 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62192954 62193098 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62193176 62193337 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62193176 62193337 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62193425 62193556 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62193425 62193556 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62193641 62193735 0.000000 - 1 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62193641 62193735 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62193873 62197584 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62193873 62197584 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62197731 62197806 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62197731 62197806 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62198197 62199003 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene exon 62198197 62199107 0.000000 - . gene_id "PRIC285"; transcript_id "NM_033405:uc002yfl.1"; -chr20 hg19_knownGene CDS 62190602 62190723 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62189439 62190723 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62191281 62191448 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62191281 62191448 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62191524 62191680 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62191524 62191680 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62191832 62192050 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62191832 62192050 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62192148 62192282 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62192148 62192282 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62192435 62192627 0.000000 - 1 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62192435 62192627 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62192703 62192819 0.000000 - 1 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62192703 62192819 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62192954 62193098 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62192954 62193098 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62193176 62193337 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62193176 62193337 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62193425 62193556 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62193425 62193556 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62193641 62193735 0.000000 - 1 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62193641 62193735 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62193873 62197584 0.000000 - 2 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62193873 62197584 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62197731 62197806 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62197731 62197806 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62198197 62198980 0.000000 - 1 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62198197 62198980 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62199711 62200352 0.000000 - 1 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62199711 62200352 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62200501 62201018 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62200501 62201018 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62201857 62201964 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62201857 62201964 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62202038 62202221 0.000000 - 1 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62202038 62202221 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62203461 62203738 0.000000 - 0 gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62203461 62204574 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene exon 62205537 62205592 0.000000 - . gene_id "PRIC285"; transcript_id "NM_001037335:uc002yfm.2"; -chr20 hg19_knownGene CDS 62201548 62201964 0.000000 - 0 gene_id "PRIC285"; transcript_id "AK023724:uc002yfn.2"; -chr20 hg19_knownGene exon 62201494 62201964 0.000000 - . gene_id "PRIC285"; transcript_id "AK023724:uc002yfn.2"; -chr20 hg19_knownGene CDS 62202038 62202221 0.000000 - 1 gene_id "PRIC285"; transcript_id "AK023724:uc002yfn.2"; -chr20 hg19_knownGene exon 62202038 62202221 0.000000 - . gene_id "PRIC285"; transcript_id "AK023724:uc002yfn.2"; -chr20 hg19_knownGene CDS 62203461 62203738 0.000000 - 0 gene_id "PRIC285"; transcript_id "AK023724:uc002yfn.2"; -chr20 hg19_knownGene exon 62203461 62204574 0.000000 - . gene_id "PRIC285"; transcript_id "AK023724:uc002yfn.2"; -chr20 hg19_knownGene exon 62205537 62205592 0.000000 - . gene_id "PRIC285"; transcript_id "AK023724:uc002yfn.2"; -chr20 hg19_knownGene CDS 62221445 62222082 0.000000 - 2 gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene exon 62218955 62222082 0.000000 - . gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene CDS 62223375 62223497 0.000000 - 2 gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene exon 62223375 62223497 0.000000 - . gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene CDS 62223886 62224023 0.000000 - 2 gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene exon 62223886 62224023 0.000000 - . gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene CDS 62224364 62224435 0.000000 - 2 gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene exon 62224364 62224435 0.000000 - . gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene CDS 62226963 62227120 0.000000 - 1 gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene exon 62226963 62227120 0.000000 - . gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene CDS 62229110 62229213 0.000000 - 0 gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene exon 62229110 62229213 0.000000 - . gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene CDS 62234318 62234440 0.000000 - 0 gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene exon 62234318 62234440 0.000000 - . gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene exon 62236096 62236256 0.000000 - . gene_id "GMEB2"; transcript_id "AL133646:uc002yfo.1"; -chr20 hg19_knownGene CDS 62221445 62222082 0.000000 - 2 gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene exon 62218955 62222082 0.000000 - . gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene CDS 62223375 62223497 0.000000 - 2 gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene exon 62223375 62223497 0.000000 - . gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene CDS 62223886 62224023 0.000000 - 2 gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene exon 62223886 62224023 0.000000 - . gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene CDS 62224364 62224435 0.000000 - 2 gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene exon 62224364 62224435 0.000000 - . gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene CDS 62226963 62227120 0.000000 - 1 gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene exon 62226963 62227120 0.000000 - . gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene CDS 62229110 62229213 0.000000 - 0 gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene exon 62229110 62229213 0.000000 - . gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene CDS 62234318 62234445 0.000000 - 2 gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene exon 62234318 62234445 0.000000 - . gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene CDS 62236096 62236193 0.000000 - 1 gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene exon 62236096 62236193 0.000000 - . gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene CDS 62250620 62250750 0.000000 - 0 gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene exon 62250620 62251229 0.000000 - . gene_id "GMEB2"; transcript_id "AF173867:uc002yfp.1"; -chr20 hg19_knownGene CDS 62221445 62222082 0.000000 - 2 gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene exon 62218955 62222082 0.000000 - . gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene CDS 62223375 62223497 0.000000 - 2 gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene exon 62223375 62223497 0.000000 - . gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene CDS 62223886 62224023 0.000000 - 2 gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene exon 62223886 62224023 0.000000 - . gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene CDS 62224364 62224435 0.000000 - 2 gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene exon 62224364 62224435 0.000000 - . gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene CDS 62226963 62227120 0.000000 - 1 gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene exon 62226963 62227120 0.000000 - . gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene CDS 62229110 62229213 0.000000 - 0 gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene exon 62229110 62229213 0.000000 - . gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene CDS 62234318 62234445 0.000000 - 2 gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene exon 62234318 62234445 0.000000 - . gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene CDS 62236096 62236193 0.000000 - 1 gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene exon 62236096 62236193 0.000000 - . gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene CDS 62250620 62250750 0.000000 - 0 gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene exon 62250620 62250807 0.000000 - . gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene exon 62258309 62258381 0.000000 - . gene_id "GMEB2"; transcript_id "NM_012384:uc002yfq.1"; -chr20 hg19_knownGene CDS 62272694 62272750 0.000000 - 0 gene_id "STMN3"; transcript_id "NM_015894:uc002yfr.1"; -chr20 hg19_knownGene exon 62271061 62272750 0.000000 - . gene_id "STMN3"; transcript_id "NM_015894:uc002yfr.1"; -chr20 hg19_knownGene CDS 62273461 62273652 0.000000 - 0 gene_id "STMN3"; transcript_id "NM_015894:uc002yfr.1"; -chr20 hg19_knownGene exon 62273461 62273652 0.000000 - . gene_id "STMN3"; transcript_id "NM_015894:uc002yfr.1"; -chr20 hg19_knownGene CDS 62275109 62275284 0.000000 - 2 gene_id "STMN3"; transcript_id "NM_015894:uc002yfr.1"; -chr20 hg19_knownGene exon 62275109 62275284 0.000000 - . gene_id "STMN3"; transcript_id "NM_015894:uc002yfr.1"; -chr20 hg19_knownGene CDS 62275567 62275662 0.000000 - 2 gene_id "STMN3"; transcript_id "NM_015894:uc002yfr.1"; -chr20 hg19_knownGene exon 62275567 62275662 0.000000 - . gene_id "STMN3"; transcript_id "NM_015894:uc002yfr.1"; -chr20 hg19_knownGene CDS 62284680 62284698 0.000000 - 0 gene_id "STMN3"; transcript_id "NM_015894:uc002yfr.1"; -chr20 hg19_knownGene exon 62284680 62284780 0.000000 - . gene_id "STMN3"; transcript_id "NM_015894:uc002yfr.1"; -chr20 hg19_knownGene exon 62271061 62272750 0.000000 - . gene_id "STMN3"; transcript_id "AK310010:uc021wgd.1"; -chr20 hg19_knownGene exon 62273461 62273652 0.000000 - . gene_id "STMN3"; transcript_id "AK310010:uc021wgd.1"; -chr20 hg19_knownGene exon 62275012 62275284 0.000000 - . gene_id "STMN3"; transcript_id "AK310010:uc021wgd.1"; -chr20 hg19_knownGene exon 62275567 62275662 0.000000 - . gene_id "STMN3"; transcript_id "AK310010:uc021wgd.1"; -chr20 hg19_knownGene exon 62284680 62284780 0.000000 - . gene_id "STMN3"; transcript_id "AK310010:uc021wgd.1"; -chr20 hg19_knownGene exon 62289667 62289812 0.000000 + . gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene CDS 62290756 62290857 0.000000 + 0 gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene exon 62290586 62290857 0.000000 + . gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene CDS 62292651 62292849 0.000000 + 0 gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene exon 62292651 62292849 0.000000 + . gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene CDS 62293203 62293296 0.000000 + 2 gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene exon 62293203 62293296 0.000000 + . gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene CDS 62293749 62293980 0.000000 + 1 gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene exon 62293749 62293980 0.000000 + . gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene CDS 62294182 62294242 0.000000 + 0 gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene exon 62294182 62294242 0.000000 + . gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene CDS 62297357 62297432 0.000000 + 2 gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene exon 62297357 62297432 0.000000 + . gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene CDS 62298822 62298906 0.000000 + 1 gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene exon 62298822 62298906 0.000000 + . gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene CDS 62303909 62303974 0.000000 + 0 gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene exon 62303909 62303974 0.000000 + . gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene CDS 62305293 62305442 0.000000 + 0 gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene exon 62305293 62305446 0.000000 + . gene_id "RTEL1"; transcript_id "BC000673:uc002yfv.2"; -chr20 hg19_knownGene exon 62289163 62289819 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62290586 62290857 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62292651 62292849 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62293203 62293296 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62293899 62293980 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62294182 62294242 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62297357 62297432 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62298822 62298906 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62303909 62303974 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62305293 62305446 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62309498 62309536 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62309621 62309699 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62311202 62311299 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62312017 62312072 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62316876 62316950 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62317144 62317225 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62318991 62319123 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62319290 62319403 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62319492 62319532 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62319654 62319739 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62319881 62319958 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62320408 62320485 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62320855 62321001 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62321103 62321218 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62321440 62321563 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62321647 62321794 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62322158 62322300 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62323095 62323190 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62324158 62324356 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62324496 62324636 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62325729 62325841 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62326094 62326327 0.000000 + . gene_id "RTEL1"; transcript_id "AK299332:uc011abc.2"; -chr20 hg19_knownGene exon 62289163 62289819 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62290756 62290857 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62290586 62290857 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62292651 62292849 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62292651 62292849 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62293203 62293296 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62293203 62293296 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62293899 62293980 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62293899 62293980 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62294182 62294242 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62294182 62294242 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62297357 62297432 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62297357 62297432 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62298822 62298906 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62298822 62298906 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62303909 62303974 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62303909 62303974 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62305293 62305446 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62305293 62305446 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62309498 62309536 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62309498 62309536 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62309621 62309699 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62309621 62309699 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62311202 62311299 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62311202 62311299 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62312017 62312072 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62312017 62312072 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62316876 62316950 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62316876 62316950 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62317144 62317225 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62317144 62317225 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62318991 62319123 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62318991 62319123 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62319290 62319403 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62319290 62319403 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62319492 62319532 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62319492 62319532 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62319654 62319739 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62319654 62319739 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62319881 62319958 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62319881 62319958 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62320408 62320485 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62320408 62320485 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62320855 62321001 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62320855 62321001 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62321103 62321218 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62321103 62321218 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62321440 62321563 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62321440 62321563 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62321647 62321794 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62321647 62321794 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62322158 62322300 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62322158 62322300 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62323095 62323190 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62323095 62323190 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62324158 62324356 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62324158 62324356 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62324496 62324636 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62324496 62324636 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62325725 62325841 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62325725 62325841 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62326094 62326327 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62326094 62326327 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62326419 62326574 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62326419 62326574 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62326681 62326833 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62326681 62326833 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene CDS 62327131 62327135 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62327131 62328544 0.000000 + . gene_id "RTEL1"; transcript_id "NM_016434:uc002yfu.2"; -chr20 hg19_knownGene exon 62289163 62289819 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62290756 62290857 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62290586 62290857 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62292651 62292849 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62292651 62292849 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62293203 62293296 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62293203 62293296 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62293827 62293980 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62293827 62293980 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62294182 62294242 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62294182 62294242 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62297357 62297432 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62297357 62297432 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62298822 62298906 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62298822 62298906 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62303909 62303974 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62303909 62303974 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62305293 62305446 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62305293 62305446 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62309498 62309536 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62309498 62309536 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62309621 62309699 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62309621 62309699 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62311202 62311299 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62311202 62311299 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62312017 62312072 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62312017 62312072 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62316876 62316950 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62316876 62316950 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62317144 62317225 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62317144 62317225 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62318991 62319123 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62318991 62319123 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62319290 62319403 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62319290 62319403 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62319492 62319532 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62319492 62319532 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62319654 62319739 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62319654 62319739 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62319881 62319958 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62319881 62319958 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62320408 62320485 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62320408 62320485 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62320855 62321001 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62320855 62321001 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62321103 62321218 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62321103 62321218 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62321440 62321563 0.000000 + 1 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62321440 62321563 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62321647 62321794 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62321647 62321794 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62322158 62322300 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62322158 62322300 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62323095 62323190 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62323095 62323190 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62324158 62324356 0.000000 + 0 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62324158 62324356 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62324496 62324636 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62324496 62324636 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62325725 62325841 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62325725 62325841 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62326094 62326327 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62326094 62326327 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62326419 62326574 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62326419 62326574 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62326681 62326833 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62326681 62326833 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene CDS 62327131 62327135 0.000000 + 2 gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62327131 62328544 0.000000 + . gene_id "RTEL1"; transcript_id "NM_032957:uc011abd.2"; -chr20 hg19_knownGene exon 62289667 62289812 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62292651 62292849 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62293203 62293296 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62293899 62293980 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62294182 62294242 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62297357 62297432 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62298877 62298906 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62298822 62298906 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62303909 62303974 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62303909 62303974 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62305293 62305446 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62305293 62305446 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62309498 62309536 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62309498 62309536 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62309621 62309699 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62309621 62309699 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62311202 62311299 0.000000 + 1 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62311202 62311299 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62312017 62312072 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62312017 62312072 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62316876 62316950 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62316876 62316950 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62317144 62317225 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62317144 62317225 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62318991 62319123 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62318991 62319123 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62319290 62319403 0.000000 + 1 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62319290 62319403 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62319492 62319532 0.000000 + 1 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62319492 62319532 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62319654 62319739 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62319654 62319739 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62319881 62319958 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62319881 62319958 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62320408 62320485 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62320408 62320485 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62320855 62321001 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62320855 62321001 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62321103 62321218 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62321103 62321218 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62321440 62321563 0.000000 + 1 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62321440 62321563 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62321647 62321794 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62321647 62321794 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62322158 62322300 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62322158 62322300 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62323095 62323190 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62323095 62323190 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62324158 62324356 0.000000 + 0 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62324158 62324356 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62324496 62324636 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62324496 62324636 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62325725 62325841 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62325725 62325841 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62326094 62326327 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62326094 62326327 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62326419 62326574 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62326419 62326574 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62326681 62326833 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62326681 62326833 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62327131 62327135 0.000000 + 2 gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene exon 62327131 62328544 0.000000 + . gene_id "RTEL1"; transcript_id "AK304798:uc011abe.1"; -chr20 hg19_knownGene CDS 62290756 62290857 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62290586 62290857 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62292651 62292849 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62292651 62292849 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62293203 62293296 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62293203 62293296 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62293899 62293980 0.000000 + 1 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62293899 62293980 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62294182 62294242 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62294182 62294242 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62297357 62297432 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62297357 62297432 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62298822 62298906 0.000000 + 1 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62298822 62298906 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62303909 62303974 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62303909 62303974 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62305293 62305446 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62305293 62305446 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62309498 62309536 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62309498 62309536 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62309621 62309699 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62309621 62309699 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62311202 62311299 0.000000 + 1 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62311202 62311299 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62312017 62312072 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62312017 62312072 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62316876 62316950 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62316876 62316950 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62317144 62317225 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62317144 62317225 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62318991 62319123 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62318991 62319123 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62319290 62319403 0.000000 + 1 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62319290 62319403 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62319492 62319532 0.000000 + 1 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62319492 62319532 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62319654 62319739 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62319654 62319739 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62319881 62319958 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62319881 62319958 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62320408 62320485 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62320408 62320485 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62320855 62321001 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62320855 62321001 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62321103 62321218 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62321103 62321218 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62321440 62321563 0.000000 + 1 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62321440 62321563 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62321647 62321794 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62321647 62321794 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62322158 62322300 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62322158 62322300 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62323095 62323190 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62323095 62323190 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62324158 62324356 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62324158 62324356 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62324496 62324636 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62324496 62324636 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62325725 62325841 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62325725 62325841 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62326094 62326327 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62326094 62326327 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62326419 62326574 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62326419 62326574 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62326681 62327003 0.000000 + 2 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62326681 62327003 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene CDS 62327131 62327208 0.000000 + 0 gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62327131 62328544 0.000000 + . gene_id "RTEL1"; transcript_id "CCDS13530:uc021wge.1"; -chr20 hg19_knownGene exon 62321103 62321563 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene CDS 62321647 62321794 0.000000 + 0 gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62321647 62321794 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene CDS 62322158 62322300 0.000000 + 2 gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62322158 62322300 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene CDS 62323095 62323190 0.000000 + 0 gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62323095 62323190 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene CDS 62324158 62324356 0.000000 + 0 gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62324158 62324356 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene CDS 62324496 62324636 0.000000 + 2 gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62324496 62324636 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene CDS 62325725 62325841 0.000000 + 2 gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62325725 62325841 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene CDS 62326094 62326327 0.000000 + 2 gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62326094 62326327 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene CDS 62326419 62326574 0.000000 + 2 gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62326419 62326574 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene CDS 62326681 62327003 0.000000 + 2 gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62326681 62327003 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene CDS 62327131 62327208 0.000000 + 0 gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62327131 62328544 0.000000 + . gene_id "RTEL1-TNFRSF6B"; transcript_id "AK000485:uc002yfx.1"; -chr20 hg19_knownGene exon 62289163 62289819 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62290586 62290857 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62292651 62292849 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62293203 62293296 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62293899 62293980 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62294182 62294242 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62297357 62297432 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62298822 62298906 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62303909 62303974 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62305293 62305446 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62309498 62309536 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62309621 62309699 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62311202 62311299 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62312017 62312072 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62316876 62316950 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62317144 62317225 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62318991 62319123 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62319290 62319403 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62319492 62319532 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62319654 62319739 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62319881 62319958 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62320408 62320485 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62320855 62321001 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62321103 62321218 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62321440 62321563 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62321647 62321794 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62322158 62322300 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62323095 62323190 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62324158 62324356 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62324496 62324636 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62325725 62325841 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62326094 62326327 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62326419 62326574 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62326681 62327003 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62327131 62327207 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62328113 62328544 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62328681 62328875 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62329633 62330051 0.000000 + . gene_id "RTEL1"; transcript_id "NR_037882:uc002yfw.3"; -chr20 hg19_knownGene exon 62326094 62326327 0.000000 + . gene_id "TNFRSF6B"; transcript_id "AF217793:uc002yfy.3"; -chr20 hg19_knownGene exon 62326419 62326574 0.000000 + . gene_id "TNFRSF6B"; transcript_id "AF217793:uc002yfy.3"; -chr20 hg19_knownGene exon 62326681 62326833 0.000000 + . gene_id "TNFRSF6B"; transcript_id "AF217793:uc002yfy.3"; -chr20 hg19_knownGene exon 62327131 62327207 0.000000 + . gene_id "TNFRSF6B"; transcript_id "AF217793:uc002yfy.3"; -chr20 hg19_knownGene CDS 62328121 62328544 0.000000 + 0 gene_id "TNFRSF6B"; transcript_id "AF217793:uc002yfy.3"; -chr20 hg19_knownGene exon 62328113 62328544 0.000000 + . gene_id "TNFRSF6B"; transcript_id "AF217793:uc002yfy.3"; -chr20 hg19_knownGene CDS 62328681 62328875 0.000000 + 2 gene_id "TNFRSF6B"; transcript_id "AF217793:uc002yfy.3"; -chr20 hg19_knownGene exon 62328681 62328875 0.000000 + . gene_id "TNFRSF6B"; transcript_id "AF217793:uc002yfy.3"; -chr20 hg19_knownGene CDS 62329633 62329913 0.000000 + 2 gene_id "TNFRSF6B"; transcript_id "AF217793:uc002yfy.3"; -chr20 hg19_knownGene exon 62329633 62330051 0.000000 + . gene_id "TNFRSF6B"; transcript_id "AF217793:uc002yfy.3"; -chr20 hg19_knownGene CDS 62328121 62328544 0.000000 + 0 gene_id "TNFRSF6B"; transcript_id "NM_003823:uc002yfz.3"; -chr20 hg19_knownGene exon 62327131 62328544 0.000000 + . gene_id "TNFRSF6B"; transcript_id "NM_003823:uc002yfz.3"; -chr20 hg19_knownGene CDS 62328681 62328875 0.000000 + 2 gene_id "TNFRSF6B"; transcript_id "NM_003823:uc002yfz.3"; -chr20 hg19_knownGene exon 62328681 62328875 0.000000 + . gene_id "TNFRSF6B"; transcript_id "NM_003823:uc002yfz.3"; -chr20 hg19_knownGene CDS 62329633 62329913 0.000000 + 2 gene_id "TNFRSF6B"; transcript_id "NM_003823:uc002yfz.3"; -chr20 hg19_knownGene exon 62329633 62330051 0.000000 + . gene_id "TNFRSF6B"; transcript_id "NM_003823:uc002yfz.3"; -chr20 hg19_knownGene CDS 62331798 62331882 0.000000 - 1 gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene exon 62329995 62331882 0.000000 - . gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene CDS 62331954 62332054 0.000000 - 0 gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene exon 62331954 62332054 0.000000 - . gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene CDS 62333182 62333252 0.000000 - 2 gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene exon 62333182 62333252 0.000000 - . gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene CDS 62333488 62333569 0.000000 - 0 gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene exon 62333488 62333569 0.000000 - . gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene CDS 62337709 62337791 0.000000 - 2 gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene exon 62337709 62337791 0.000000 - . gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene CDS 62338003 62338090 0.000000 - 0 gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene exon 62338003 62338090 0.000000 - . gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene CDS 62338351 62338443 0.000000 - 0 gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene exon 62338351 62339010 0.000000 - . gene_id "ARFRP1"; transcript_id "AK095962:uc002yga.3"; -chr20 hg19_knownGene CDS 62331798 62331882 0.000000 - 1 gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene exon 62329995 62331882 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene CDS 62331954 62332054 0.000000 - 0 gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene exon 62331954 62332054 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene CDS 62333182 62333252 0.000000 - 2 gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene exon 62333182 62333252 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene CDS 62333488 62333569 0.000000 - 0 gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene exon 62333488 62333569 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene CDS 62337709 62337791 0.000000 - 2 gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene exon 62337709 62337791 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene CDS 62338003 62338090 0.000000 - 0 gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene exon 62338003 62338090 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene CDS 62338351 62338443 0.000000 - 0 gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene exon 62338351 62338444 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene exon 62339219 62339355 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_003224:uc002ygc.3"; -chr20 hg19_knownGene CDS 62331953 62332054 0.000000 - 0 gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene exon 62329995 62332054 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene CDS 62333182 62333252 0.000000 - 2 gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene exon 62333182 62333252 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene CDS 62333488 62333569 0.000000 - 0 gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene exon 62333488 62333569 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene CDS 62337709 62337791 0.000000 - 2 gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene exon 62337709 62337791 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene CDS 62338003 62338090 0.000000 - 0 gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene exon 62338003 62338090 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene CDS 62338351 62338443 0.000000 - 0 gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene exon 62338351 62338444 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene exon 62339219 62339355 0.000000 - . gene_id "ARFRP1"; transcript_id "NM_001134758:uc011abg.2"; -chr20 hg19_knownGene exon 62329995 62331882 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143472:uc011abh.2"; -chr20 hg19_knownGene exon 62331954 62332054 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143472:uc011abh.2"; -chr20 hg19_knownGene exon 62333182 62333250 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143472:uc011abh.2"; -chr20 hg19_knownGene exon 62333488 62333569 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143472:uc011abh.2"; -chr20 hg19_knownGene exon 62337709 62337791 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143472:uc011abh.2"; -chr20 hg19_knownGene exon 62338003 62338090 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143472:uc011abh.2"; -chr20 hg19_knownGene exon 62338351 62338449 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143472:uc011abh.2"; -chr20 hg19_knownGene exon 62339219 62339355 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143472:uc011abh.2"; -chr20 hg19_knownGene CDS 62331798 62331882 0.000000 - 1 gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene exon 62329995 62331882 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene CDS 62331954 62332054 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene exon 62331954 62332054 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene CDS 62333182 62333252 0.000000 - 2 gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene exon 62333182 62333252 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene CDS 62333488 62333569 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene exon 62333488 62333569 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene CDS 62337709 62337791 0.000000 - 2 gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene exon 62337709 62337791 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene CDS 62338003 62338090 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene exon 62338003 62338090 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene CDS 62338351 62338443 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene exon 62338351 62338449 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene exon 62339219 62339355 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143467:uc002ygf.3"; -chr20 hg19_knownGene CDS 62332038 62332054 0.000000 - 2 gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene exon 62329995 62332054 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene CDS 62333182 62333250 0.000000 - 2 gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene exon 62333182 62333250 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene CDS 62333488 62333569 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene exon 62333488 62333569 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene CDS 62337709 62337791 0.000000 - 2 gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene exon 62337709 62337791 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene CDS 62338003 62338090 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene exon 62338003 62338090 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene CDS 62338351 62338443 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene exon 62338351 62338449 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene exon 62339219 62339355 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143477:uc011abf.2"; -chr20 hg19_knownGene CDS 62331953 62332054 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene exon 62329995 62332054 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene CDS 62333182 62333252 0.000000 - 2 gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene exon 62333182 62333252 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene CDS 62333488 62333569 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene exon 62333488 62333569 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene CDS 62337709 62337791 0.000000 - 2 gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene exon 62337709 62337791 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene CDS 62338003 62338090 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene exon 62338003 62338090 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene CDS 62338351 62338443 0.000000 - 0 gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene exon 62338351 62338449 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene exon 62339219 62339355 0.000000 - . gene_id "ARFRP1"; transcript_id "BC143448:uc002ygh.4"; -chr20 hg19_knownGene exon 62338794 62338911 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene CDS 62339933 62340516 0.000000 + 0 gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene exon 62339905 62340516 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene CDS 62364571 62364704 0.000000 + 1 gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene exon 62364571 62364704 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene CDS 62364939 62365091 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene exon 62364939 62365091 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene CDS 62366057 62366176 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene exon 62366057 62366176 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene CDS 62366511 62366916 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene exon 62366511 62366916 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene CDS 62367133 62367268 0.000000 + 1 gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene exon 62367133 62367538 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001083113:uc002ygi.2"; -chr20 hg19_knownGene exon 62339380 62339470 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene CDS 62339933 62340516 0.000000 + 0 gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene exon 62339905 62340516 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene CDS 62364571 62364704 0.000000 + 1 gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene exon 62364571 62364704 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene CDS 62364939 62365091 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene exon 62364939 62365091 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene CDS 62366057 62366176 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene exon 62366057 62366176 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene CDS 62366511 62366916 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene exon 62366511 62366916 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene CDS 62367133 62367268 0.000000 + 1 gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene exon 62367133 62367538 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_181485:uc002ygj.2"; -chr20 hg19_knownGene exon 62339380 62339540 0.000000 + . gene_id "ZGPAT"; transcript_id "AK307368:uc010gkk.2"; -chr20 hg19_knownGene CDS 62366789 62366916 0.000000 + 0 gene_id "ZGPAT"; transcript_id "AK307368:uc010gkk.2"; -chr20 hg19_knownGene exon 62366588 62366916 0.000000 + . gene_id "ZGPAT"; transcript_id "AK307368:uc010gkk.2"; -chr20 hg19_knownGene CDS 62367133 62367268 0.000000 + 1 gene_id "ZGPAT"; transcript_id "AK307368:uc010gkk.2"; -chr20 hg19_knownGene exon 62367133 62367538 0.000000 + . gene_id "ZGPAT"; transcript_id "AK307368:uc010gkk.2"; -chr20 hg19_knownGene exon 62339380 62339521 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene CDS 62339933 62340516 0.000000 + 0 gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene exon 62339905 62340516 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene CDS 62364571 62364704 0.000000 + 1 gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene exon 62364571 62364704 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene CDS 62364939 62365091 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene exon 62364939 62365091 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene CDS 62366057 62366176 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene exon 62366057 62366176 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene CDS 62366511 62366916 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene exon 62366511 62366916 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene CDS 62367133 62367268 0.000000 + 1 gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene exon 62367133 62367538 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195653:uc010gkl.2"; -chr20 hg19_knownGene exon 62339380 62339540 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene CDS 62339933 62340516 0.000000 + 0 gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene exon 62339905 62340516 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene CDS 62364571 62364704 0.000000 + 1 gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene exon 62364571 62364704 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene CDS 62364939 62365091 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene exon 62364939 62365091 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene CDS 62365997 62366176 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene exon 62365997 62366176 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene CDS 62366511 62366916 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene exon 62366511 62366916 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene CDS 62367133 62367268 0.000000 + 1 gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene exon 62367133 62367538 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_032527:uc002ygk.3"; -chr20 hg19_knownGene exon 62339380 62339540 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene CDS 62339933 62340516 0.000000 + 0 gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene exon 62339905 62340516 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene CDS 62364571 62364704 0.000000 + 1 gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene exon 62364571 62364704 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene CDS 62364939 62365064 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene exon 62364939 62365064 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene CDS 62366057 62366176 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene exon 62366057 62366176 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene CDS 62366511 62366916 0.000000 + 2 gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene exon 62366511 62366916 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene CDS 62367133 62367268 0.000000 + 1 gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene exon 62367133 62367538 0.000000 + . gene_id "ZGPAT"; transcript_id "NM_001195654:uc002ygm.3"; -chr20 hg19_knownGene exon 62339905 62340516 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62364571 62364704 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62364939 62365091 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62366057 62366176 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62366511 62366916 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62367133 62368064 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62368886 62369000 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62369174 62369255 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62369361 62369413 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62369536 62369852 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62369951 62370460 0.000000 + . gene_id "ZGPAT"; transcript_id "AK122912:uc002ygn.4"; -chr20 hg19_knownGene exon 62367053 62367538 0.000000 + . gene_id "LIME1"; transcript_id "AY203957:uc011abi.2"; -chr20 hg19_knownGene CDS 62368903 62369000 0.000000 + 0 gene_id "LIME1"; transcript_id "AY203957:uc011abi.2"; -chr20 hg19_knownGene exon 62368886 62369000 0.000000 + . gene_id "LIME1"; transcript_id "AY203957:uc011abi.2"; -chr20 hg19_knownGene CDS 62369174 62369255 0.000000 + 1 gene_id "LIME1"; transcript_id "AY203957:uc011abi.2"; -chr20 hg19_knownGene exon 62369174 62369255 0.000000 + . gene_id "LIME1"; transcript_id "AY203957:uc011abi.2"; -chr20 hg19_knownGene CDS 62369361 62369413 0.000000 + 0 gene_id "LIME1"; transcript_id "AY203957:uc011abi.2"; -chr20 hg19_knownGene exon 62369361 62369413 0.000000 + . gene_id "LIME1"; transcript_id "AY203957:uc011abi.2"; -chr20 hg19_knownGene CDS 62369536 62369830 0.000000 + 1 gene_id "LIME1"; transcript_id "AY203957:uc011abi.2"; -chr20 hg19_knownGene exon 62369536 62369852 0.000000 + . gene_id "LIME1"; transcript_id "AY203957:uc011abi.2"; -chr20 hg19_knownGene exon 62369951 62370460 0.000000 + . gene_id "LIME1"; transcript_id "AY203957:uc011abi.2"; -chr20 hg19_knownGene exon 62367133 62368064 0.000000 + . gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene CDS 62368903 62369000 0.000000 + 0 gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene exon 62368886 62369000 0.000000 + . gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene CDS 62369174 62369255 0.000000 + 1 gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene exon 62369174 62369255 0.000000 + . gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene CDS 62369326 62369413 0.000000 + 0 gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene exon 62369326 62369413 0.000000 + . gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene CDS 62369536 62369852 0.000000 + 2 gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene exon 62369536 62369852 0.000000 + . gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene CDS 62369951 62370250 0.000000 + 0 gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene exon 62369951 62370460 0.000000 + . gene_id "LIME1"; transcript_id "NM_017806:uc002ygp.4"; -chr20 hg19_knownGene CDS 62371266 62371391 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene exon 62371211 62371391 0.000000 + . gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene CDS 62371730 62371884 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene exon 62371730 62371884 0.000000 + . gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene CDS 62372723 62372832 0.000000 + 1 gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene exon 62372723 62372832 0.000000 + . gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene CDS 62373222 62373409 0.000000 + 2 gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene exon 62373222 62373409 0.000000 + . gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene CDS 62373483 62373583 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene exon 62373483 62373583 0.000000 + . gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene CDS 62373689 62373968 0.000000 + 1 gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene exon 62373689 62373968 0.000000 + . gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene CDS 62374052 62374143 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene exon 62374052 62374143 0.000000 + . gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene CDS 62374232 62374340 0.000000 + 1 gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene exon 62374232 62375403 0.000000 + . gene_id "SLC2A4RG"; transcript_id "NM_020062:uc002ygq.3"; -chr20 hg19_knownGene exon 62371659 62371884 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene CDS 62372757 62372832 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene exon 62372723 62372832 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene CDS 62373222 62373409 0.000000 + 2 gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene exon 62373222 62373409 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene CDS 62373483 62373583 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene exon 62373483 62373583 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene CDS 62373689 62373968 0.000000 + 1 gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene exon 62373689 62373968 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene CDS 62374052 62374143 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene exon 62374052 62374143 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene CDS 62374232 62374340 0.000000 + 1 gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene exon 62374232 62375403 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AB044777:uc002ygr.3"; -chr20 hg19_knownGene CDS 62372757 62372832 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene exon 62372464 62372832 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene CDS 62373222 62373409 0.000000 + 2 gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene exon 62373222 62373409 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene CDS 62373483 62373583 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene exon 62373483 62373583 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene CDS 62373689 62373968 0.000000 + 1 gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene exon 62373689 62373968 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene CDS 62374052 62374143 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene exon 62374052 62374143 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene CDS 62374232 62374340 0.000000 + 1 gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene exon 62374232 62375403 0.000000 + . gene_id "SLC2A4RG"; transcript_id "AK298304:uc011abj.2"; -chr20 hg19_knownGene exon 62372464 62372832 0.000000 + . gene_id "SLC2A4RG"; transcript_id "BC017446:uc002ygs.3"; -chr20 hg19_knownGene CDS 62373498 62373583 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "BC017446:uc002ygs.3"; -chr20 hg19_knownGene exon 62373483 62373583 0.000000 + . gene_id "SLC2A4RG"; transcript_id "BC017446:uc002ygs.3"; -chr20 hg19_knownGene CDS 62373689 62373968 0.000000 + 1 gene_id "SLC2A4RG"; transcript_id "BC017446:uc002ygs.3"; -chr20 hg19_knownGene exon 62373689 62373968 0.000000 + . gene_id "SLC2A4RG"; transcript_id "BC017446:uc002ygs.3"; -chr20 hg19_knownGene CDS 62374052 62374143 0.000000 + 0 gene_id "SLC2A4RG"; transcript_id "BC017446:uc002ygs.3"; -chr20 hg19_knownGene exon 62374052 62374143 0.000000 + . gene_id "SLC2A4RG"; transcript_id "BC017446:uc002ygs.3"; -chr20 hg19_knownGene CDS 62374232 62374340 0.000000 + 1 gene_id "SLC2A4RG"; transcript_id "BC017446:uc002ygs.3"; -chr20 hg19_knownGene exon 62374232 62375403 0.000000 + . gene_id "SLC2A4RG"; transcript_id "BC017446:uc002ygs.3"; -chr20 hg19_knownGene CDS 62378286 62378654 0.000000 - 0 gene_id "ZBTB46"; transcript_id "NM_025224:uc002ygv.2"; -chr20 hg19_knownGene exon 62375021 62378654 0.000000 - . gene_id "ZBTB46"; transcript_id "NM_025224:uc002ygv.2"; -chr20 hg19_knownGene CDS 62384039 62384214 0.000000 - 2 gene_id "ZBTB46"; transcript_id "NM_025224:uc002ygv.2"; -chr20 hg19_knownGene exon 62384039 62384214 0.000000 - . gene_id "ZBTB46"; transcript_id "NM_025224:uc002ygv.2"; -chr20 hg19_knownGene CDS 62407031 62407315 0.000000 - 2 gene_id "ZBTB46"; transcript_id "NM_025224:uc002ygv.2"; -chr20 hg19_knownGene exon 62407031 62407315 0.000000 - . gene_id "ZBTB46"; transcript_id "NM_025224:uc002ygv.2"; -chr20 hg19_knownGene CDS 62421174 62422110 0.000000 - 0 gene_id "ZBTB46"; transcript_id "NM_025224:uc002ygv.2"; -chr20 hg19_knownGene exon 62421174 62422143 0.000000 - . gene_id "ZBTB46"; transcript_id "NM_025224:uc002ygv.2"; -chr20 hg19_knownGene exon 62436689 62436856 0.000000 - . gene_id "ZBTB46"; transcript_id "NM_025224:uc002ygv.2"; -chr20 hg19_knownGene exon 62439442 62439508 0.000000 + . gene_id "BC002534"; transcript_id "BC002534:uc002ygw.3"; -chr20 hg19_knownGene exon 62452103 62452224 0.000000 + . gene_id "BC002534"; transcript_id "BC002534:uc002ygw.3"; -chr20 hg19_knownGene exon 62453475 62454360 0.000000 + . gene_id "BC002534"; transcript_id "BC002534:uc002ygw.3"; -chr20 hg19_knownGene exon 62375875 62376034 0.000000 - . gene_id "ZBTB46"; transcript_id "BC073800:uc002ygu.3"; -chr20 hg19_knownGene exon 62376496 62376664 0.000000 - . gene_id "ZBTB46"; transcript_id "BC073800:uc002ygu.3"; -chr20 hg19_knownGene exon 62378225 62378654 0.000000 - . gene_id "ZBTB46"; transcript_id "BC073800:uc002ygu.3"; -chr20 hg19_knownGene exon 62384039 62384214 0.000000 - . gene_id "ZBTB46"; transcript_id "BC073800:uc002ygu.3"; -chr20 hg19_knownGene exon 62407031 62407315 0.000000 - . gene_id "ZBTB46"; transcript_id "BC073800:uc002ygu.3"; -chr20 hg19_knownGene exon 62421174 62422143 0.000000 - . gene_id "ZBTB46"; transcript_id "BC073800:uc002ygu.3"; -chr20 hg19_knownGene exon 62462450 62462597 0.000000 - . gene_id "ZBTB46"; transcript_id "BC073800:uc002ygu.3"; -chr20 hg19_knownGene CDS 62492894 62494300 0.000000 + 0 gene_id "ABHD16B"; transcript_id "NM_080622:uc002ygx.1"; -chr20 hg19_knownGene exon 62492566 62494341 0.000000 + . gene_id "ABHD16B"; transcript_id "NM_080622:uc002ygx.1"; -chr20 hg19_knownGene CDS 62507995 62508558 0.000000 + 0 gene_id "LOC100505815"; transcript_id "NR_045370:uc021wgj.1"; -chr20 hg19_knownGene exon 62507484 62512243 0.000000 + . gene_id "LOC100505815"; transcript_id "NR_045370:uc021wgj.1"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene CDS 62500649 62500794 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene exon 62500649 62500794 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene CDS 62507169 62507228 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene exon 62507169 62507228 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene CDS 62514072 62514173 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene exon 62514072 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene CDS 62517369 62517395 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene exon 62517369 62517395 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene CDS 62518917 62518958 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene exon 62518917 62518958 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene CDS 62520543 62520591 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene CDS 62521203 62521295 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199360:uc002ygy.3"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243894:uc021wgf.1"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243894:uc021wgf.1"; -chr20 hg19_knownGene CDS 62500649 62500794 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NM_001243894:uc021wgf.1"; -chr20 hg19_knownGene exon 62500649 62500794 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243894:uc021wgf.1"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243894:uc021wgf.1"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243894:uc021wgf.1"; -chr20 hg19_knownGene CDS 62520543 62520591 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_001243894:uc021wgf.1"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243894:uc021wgf.1"; -chr20 hg19_knownGene CDS 62521203 62521295 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243894:uc021wgf.1"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243894:uc021wgf.1"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene CDS 62500649 62500794 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene exon 62500649 62500794 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene CDS 62507169 62507228 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene exon 62507169 62507228 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene CDS 62514072 62514173 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene exon 62514072 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene CDS 62521203 62521392 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243895:uc021wgg.1"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene CDS 62500700 62500717 0.000000 + 0 gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene exon 62500649 62500717 0.000000 + . gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene CDS 62507169 62507228 0.000000 + 1 gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene exon 62507169 62507228 0.000000 + . gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene CDS 62514072 62514173 0.000000 + 1 gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene exon 62514072 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene CDS 62520543 62520591 0.000000 + 1 gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene CDS 62521203 62521295 0.000000 + 0 gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "AK293349:uc011abk.2"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene CDS 62500649 62500794 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene exon 62500649 62500794 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene CDS 62507169 62507228 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene exon 62507169 62507228 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene CDS 62514072 62514173 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene exon 62514072 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene CDS 62518917 62518958 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene exon 62518917 62518958 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene CDS 62520543 62520591 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene CDS 62521203 62521295 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199362:uc002ygz.3"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene CDS 62500649 62500794 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene exon 62500649 62500794 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene CDS 62514072 62514173 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene exon 62514072 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene CDS 62517369 62517395 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene exon 62517369 62517395 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene CDS 62518917 62518958 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene exon 62518917 62518958 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene CDS 62520543 62520591 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene CDS 62521203 62521295 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199361:uc002yha.3"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene CDS 62500649 62500794 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene exon 62500649 62500794 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene CDS 62514072 62514173 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene exon 62514072 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene CDS 62518917 62518958 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene exon 62518917 62518958 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene CDS 62520543 62520591 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene CDS 62521203 62521295 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199363:uc002yhb.3"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene CDS 62500718 62500794 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene exon 62500718 62500794 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene CDS 62514072 62514173 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene exon 62514072 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene CDS 62520543 62520591 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene CDS 62521203 62521295 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243892:uc011abl.2"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene CDS 62500649 62500794 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene exon 62500649 62500794 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene CDS 62507169 62507228 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene exon 62507169 62507228 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene CDS 62514072 62514173 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene exon 62514072 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene CDS 62520543 62520591 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene CDS 62521203 62521295 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_003288:uc002yhc.3"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene CDS 62500649 62500794 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene exon 62500649 62500794 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene CDS 62514072 62514173 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene exon 62514072 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene CDS 62520543 62520591 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene CDS 62521203 62521295 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_199359:uc002yhd.3"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene CDS 62500649 62500794 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene exon 62500649 62500794 0.000000 + . gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene CDS 62507169 62507228 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene exon 62507169 62507228 0.000000 + . gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene CDS 62514103 62514169 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene exon 62514103 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NR_045090:uc021wgh.1"; -chr20 hg19_knownGene CDS 62496719 62496737 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene exon 62496581 62496737 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene CDS 62500649 62500719 0.000000 + 2 gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene exon 62500649 62500719 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene CDS 62505021 62505169 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene exon 62505021 62505169 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene CDS 62507169 62507228 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene exon 62507169 62507228 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene CDS 62514072 62514173 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene exon 62514072 62514173 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene CDS 62520543 62520591 0.000000 + 1 gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene exon 62520543 62520591 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene CDS 62521203 62521295 0.000000 + 0 gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene exon 62521203 62522898 0.000000 + . gene_id "TPD52L2"; transcript_id "NM_001243891:uc021wgi.1"; -chr20 hg19_knownGene exon 62550778 62551006 0.000000 + . gene_id "MIR941-1"; transcript_id "NR_040032:uc021wgk.1"; -chr20 hg19_knownGene exon 62551085 62551313 0.000000 + . gene_id "MIR941-3"; transcript_id "NR_030638:uc021wgl.1"; -chr20 hg19_knownGene exon 62526455 62526676 0.000000 + . gene_id "DNAJC5"; transcript_id "NM_025219:uc002yhf.3"; -chr20 hg19_knownGene CDS 62559699 62559805 0.000000 + 0 gene_id "DNAJC5"; transcript_id "NM_025219:uc002yhf.3"; -chr20 hg19_knownGene exon 62559688 62559805 0.000000 + . gene_id "DNAJC5"; transcript_id "NM_025219:uc002yhf.3"; -chr20 hg19_knownGene CDS 62560665 62560878 0.000000 + 1 gene_id "DNAJC5"; transcript_id "NM_025219:uc002yhf.3"; -chr20 hg19_knownGene exon 62560665 62560878 0.000000 + . gene_id "DNAJC5"; transcript_id "NM_025219:uc002yhf.3"; -chr20 hg19_knownGene CDS 62562204 62562375 0.000000 + 0 gene_id "DNAJC5"; transcript_id "NM_025219:uc002yhf.3"; -chr20 hg19_knownGene exon 62562204 62562375 0.000000 + . gene_id "DNAJC5"; transcript_id "NM_025219:uc002yhf.3"; -chr20 hg19_knownGene CDS 62562818 62562918 0.000000 + 2 gene_id "DNAJC5"; transcript_id "NM_025219:uc002yhf.3"; -chr20 hg19_knownGene exon 62562818 62567384 0.000000 + . gene_id "DNAJC5"; transcript_id "NM_025219:uc002yhf.3"; -chr20 hg19_knownGene exon 62550809 62551687 0.000000 + . gene_id "DNAJC5"; transcript_id "AK128776:uc002yhh.3"; -chr20 hg19_knownGene exon 62559688 62559805 0.000000 + . gene_id "DNAJC5"; transcript_id "AK128776:uc002yhh.3"; -chr20 hg19_knownGene exon 62560665 62560878 0.000000 + . gene_id "DNAJC5"; transcript_id "AK128776:uc002yhh.3"; -chr20 hg19_knownGene exon 62562204 62562375 0.000000 + . gene_id "DNAJC5"; transcript_id "AK128776:uc002yhh.3"; -chr20 hg19_knownGene exon 62562462 62562535 0.000000 + . gene_id "DNAJC5"; transcript_id "AK128776:uc002yhh.3"; -chr20 hg19_knownGene exon 62562818 62567384 0.000000 + . gene_id "DNAJC5"; transcript_id "AK128776:uc002yhh.3"; -chr20 hg19_knownGene exon 62572818 62572897 0.000000 - . gene_id "MIR1914"; transcript_id "NR_031735:uc021wgm.1"; -chr20 hg19_knownGene exon 62573984 62574079 0.000000 - . gene_id "MIR647"; transcript_id "NR_030377:uc021wgn.1"; -chr20 hg19_knownGene CDS 62571332 62571408 0.000000 - 2 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62571182 62571408 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62571503 62571659 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62571503 62571659 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62571731 62571838 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62571731 62571838 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62571947 62572069 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62571947 62572069 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62572147 62572209 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62572147 62572209 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62572303 62572396 0.000000 - 1 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62572303 62572396 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62572463 62572561 0.000000 - 1 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62572463 62572561 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62575006 62575022 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62575006 62575022 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62575750 62575811 0.000000 - 2 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62575750 62575811 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62575898 62576087 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62575898 62576087 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62577004 62577075 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62577004 62577075 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62577158 62577328 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62577158 62577328 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62577514 62577620 0.000000 - 2 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62577514 62577620 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62577806 62577996 0.000000 - 1 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62577806 62577996 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62582112 62582179 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene exon 62582112 62582527 0.000000 - . gene_id "UCKL1"; transcript_id "NM_001193379:uc011abm.2"; -chr20 hg19_knownGene CDS 62571332 62571408 0.000000 - 2 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62571182 62571408 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62571503 62571659 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62571503 62571659 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62571731 62571838 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62571731 62571838 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62571947 62572069 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62571947 62572069 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62572147 62572209 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62572147 62572209 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62572303 62572396 0.000000 - 1 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62572303 62572396 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62572463 62572561 0.000000 - 1 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62572463 62572561 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62575006 62575022 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62575006 62575022 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62575750 62575811 0.000000 - 2 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62575750 62575811 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62575898 62576087 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62575898 62576087 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62577004 62577075 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62577004 62577075 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62577158 62577328 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62577158 62577328 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62577514 62577620 0.000000 - 2 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62577514 62577620 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62577806 62577996 0.000000 - 1 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62577806 62577996 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene CDS 62587613 62587725 0.000000 - 0 gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62587613 62587800 0.000000 - . gene_id "UCKL1"; transcript_id "NM_017859:uc010gkn.3"; -chr20 hg19_knownGene exon 62571182 62571408 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62571503 62571659 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62571731 62571838 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62571947 62572069 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62572170 62572209 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62572303 62572396 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62572463 62572561 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62575006 62575022 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62575750 62575811 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62575898 62576087 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62577004 62577075 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62577158 62577328 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62577514 62577620 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62577806 62577996 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62587613 62587800 0.000000 - . gene_id "UCKL1"; transcript_id "AJ605558:uc011abn.2"; -chr20 hg19_knownGene exon 62572303 62572396 0.000000 - . gene_id "UCKL1"; transcript_id "AK301602:uc011abo.2"; -chr20 hg19_knownGene exon 62572489 62572561 0.000000 - . gene_id "UCKL1"; transcript_id "AK301602:uc011abo.2"; -chr20 hg19_knownGene exon 62575006 62575269 0.000000 - . gene_id "UCKL1"; transcript_id "AK301602:uc011abo.2"; -chr20 hg19_knownGene exon 62575750 62575811 0.000000 - . gene_id "UCKL1"; transcript_id "AK301602:uc011abo.2"; -chr20 hg19_knownGene exon 62575898 62576087 0.000000 - . gene_id "UCKL1"; transcript_id "AK301602:uc011abo.2"; -chr20 hg19_knownGene exon 62577004 62577075 0.000000 - . gene_id "UCKL1"; transcript_id "AK301602:uc011abo.2"; -chr20 hg19_knownGene exon 62577158 62577267 0.000000 - . gene_id "UCKL1"; transcript_id "AK301602:uc011abo.2"; -chr20 hg19_knownGene exon 62577514 62577620 0.000000 - . gene_id "UCKL1"; transcript_id "AK301602:uc011abo.2"; -chr20 hg19_knownGene exon 62577806 62577996 0.000000 - . gene_id "UCKL1"; transcript_id "AK301602:uc011abo.2"; -chr20 hg19_knownGene exon 62587613 62587800 0.000000 - . gene_id "UCKL1"; transcript_id "AK301602:uc011abo.2"; -chr20 hg19_knownGene exon 62584737 62587828 0.000000 + . gene_id "UCKL1-AS1"; transcript_id "NR_027287:uc011abp.1"; -chr20 hg19_knownGene exon 62587860 62588338 0.000000 + . gene_id "UCKL1-AS1"; transcript_id "NR_027287:uc011abp.1"; -chr20 hg19_knownGene CDS 62591244 62591492 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62588055 62591492 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62592662 62592760 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62592662 62592760 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62593295 62593357 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62593295 62593357 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62593626 62593727 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62593626 62593727 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62593940 62594134 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62593940 62594134 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62594448 62594618 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62594448 62594618 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62594695 62594793 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62594695 62594793 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62594971 62595063 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62594971 62595063 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62595142 62595266 0.000000 - 2 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62595142 62595266 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62595424 62595570 0.000000 - 2 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62595424 62595570 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62595673 62595744 0.000000 - 2 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62595673 62595744 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62595843 62596069 0.000000 - 1 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62595843 62596069 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62597494 62598134 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62597494 62598134 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62598229 62598357 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62598229 62598357 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62598734 62598876 0.000000 - 2 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62598734 62598876 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62599183 62599303 0.000000 - 0 gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62599183 62599305 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene exon 62601167 62601218 0.000000 - . gene_id "ZNF512B"; transcript_id "NM_020713:uc002yhl.1"; -chr20 hg19_knownGene CDS 62606866 62606885 0.000000 - 2 gene_id "SAMD10"; transcript_id "NM_080621:uc002yhm.2"; -chr20 hg19_knownGene exon 62605466 62606885 0.000000 - . gene_id "SAMD10"; transcript_id "NM_080621:uc002yhm.2"; -chr20 hg19_knownGene CDS 62607045 62607185 0.000000 - 2 gene_id "SAMD10"; transcript_id "NM_080621:uc002yhm.2"; -chr20 hg19_knownGene exon 62607045 62607185 0.000000 - . gene_id "SAMD10"; transcript_id "NM_080621:uc002yhm.2"; -chr20 hg19_knownGene CDS 62608324 62608495 0.000000 - 0 gene_id "SAMD10"; transcript_id "NM_080621:uc002yhm.2"; -chr20 hg19_knownGene exon 62608324 62608495 0.000000 - . gene_id "SAMD10"; transcript_id "NM_080621:uc002yhm.2"; -chr20 hg19_knownGene CDS 62608578 62608759 0.000000 - 2 gene_id "SAMD10"; transcript_id "NM_080621:uc002yhm.2"; -chr20 hg19_knownGene exon 62608578 62608759 0.000000 - . gene_id "SAMD10"; transcript_id "NM_080621:uc002yhm.2"; -chr20 hg19_knownGene CDS 62610730 62610820 0.000000 - 0 gene_id "SAMD10"; transcript_id "NM_080621:uc002yhm.2"; -chr20 hg19_knownGene exon 62610730 62610995 0.000000 - . gene_id "SAMD10"; transcript_id "NM_080621:uc002yhm.2"; -chr20 hg19_knownGene exon 62605466 62606885 0.000000 - . gene_id "SAMD10"; transcript_id "BC041436:uc002yhn.2"; -chr20 hg19_knownGene exon 62607045 62607185 0.000000 - . gene_id "SAMD10"; transcript_id "BC041436:uc002yhn.2"; -chr20 hg19_knownGene exon 62608324 62608495 0.000000 - . gene_id "SAMD10"; transcript_id "BC041436:uc002yhn.2"; -chr20 hg19_knownGene exon 62608578 62608759 0.000000 - . gene_id "SAMD10"; transcript_id "BC041436:uc002yhn.2"; -chr20 hg19_knownGene exon 62611207 62611362 0.000000 - . gene_id "SAMD10"; transcript_id "BC041436:uc002yhn.2"; -chr20 hg19_knownGene CDS 62612599 62612669 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62612431 62612669 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62614400 62614568 0.000000 + 1 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62614400 62614568 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62616260 62616378 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62616260 62616378 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62624760 62624838 0.000000 + 1 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62624760 62624838 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62626269 62626445 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62626269 62626445 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62626680 62626835 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62626680 62626835 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62630398 62630492 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62630398 62630492 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62630956 62631112 0.000000 + 1 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62630956 62631112 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62632430 62632592 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62632430 62632592 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62641553 62641671 0.000000 + 2 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62641553 62641671 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62642638 62642856 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62642638 62642856 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62648076 62648198 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62648076 62648198 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62654110 62654231 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62654110 62654231 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62655908 62656046 0.000000 + 1 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62655908 62656046 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62657292 62657411 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62657292 62657411 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62658335 62658511 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62658335 62658511 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62658956 62659089 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62658956 62659089 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62659831 62659922 0.000000 + 1 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62659831 62659922 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62660730 62660844 0.000000 + 2 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62660730 62660844 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62663271 62663397 0.000000 + 1 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62663271 62663397 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62664194 62664343 0.000000 + 0 gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene exon 62664194 62664453 0.000000 + . gene_id "PRPF6"; transcript_id "NM_012469:uc002yho.3"; -chr20 hg19_knownGene CDS 62612599 62612669 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62612431 62612669 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62614400 62614568 0.000000 + 1 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62614400 62614568 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62616260 62616378 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62616260 62616378 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62624760 62624838 0.000000 + 1 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62624760 62624838 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62626269 62626445 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62626269 62626445 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62626680 62626835 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62626680 62626835 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62630398 62630492 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62630398 62630492 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62630956 62631112 0.000000 + 1 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62630956 62631112 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62632430 62632592 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62632430 62632592 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62641553 62641671 0.000000 + 2 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62641553 62641671 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62642638 62642856 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62642638 62642856 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62648076 62648198 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62648076 62648198 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62654110 62654231 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62654110 62654231 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62655908 62656046 0.000000 + 1 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62655908 62656046 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62658335 62658511 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62658335 62658511 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62658956 62659089 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62658956 62659089 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62659831 62659922 0.000000 + 1 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62659831 62659922 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62660730 62660844 0.000000 + 2 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62660730 62660844 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62663271 62663397 0.000000 + 1 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62663271 62663397 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene CDS 62664194 62664343 0.000000 + 0 gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62664194 62664453 0.000000 + . gene_id "PRPF6"; transcript_id "AK001554:uc002yhp.3"; -chr20 hg19_knownGene exon 62665697 62667400 0.000000 + . gene_id "LINC00176"; transcript_id "NR_027686:uc002yhq.3"; -chr20 hg19_knownGene exon 62667490 62669555 0.000000 + . gene_id "LINC00176"; transcript_id "NR_027686:uc002yhq.3"; -chr20 hg19_knownGene exon 62669649 62669801 0.000000 + . gene_id "LINC00176"; transcript_id "NR_027686:uc002yhq.3"; -chr20 hg19_knownGene exon 62669975 62671315 0.000000 + . gene_id "LINC00176"; transcript_id "NR_027686:uc002yhq.3"; -chr20 hg19_knownGene exon 62665697 62667400 0.000000 + . gene_id "LINC00176"; transcript_id "NR_027687:uc011abq.2"; -chr20 hg19_knownGene exon 62667490 62669555 0.000000 + . gene_id "LINC00176"; transcript_id "NR_027687:uc011abq.2"; -chr20 hg19_knownGene exon 62669852 62671315 0.000000 + . gene_id "LINC00176"; transcript_id "NR_027687:uc011abq.2"; -chr20 hg19_knownGene exon 62667490 62669555 0.000000 + . gene_id "LINC00176"; transcript_id "AK310631:uc010gko.3"; -chr20 hg19_knownGene exon 62669975 62671315 0.000000 + . gene_id "LINC00176"; transcript_id "AK310631:uc010gko.3"; -chr20 hg19_knownGene CDS 62679522 62680315 0.000000 - 2 gene_id "SOX18"; transcript_id "NM_018419:uc002yhs.3"; -chr20 hg19_knownGene exon 62679079 62680315 0.000000 - . gene_id "SOX18"; transcript_id "NM_018419:uc002yhs.3"; -chr20 hg19_knownGene CDS 62680512 62680869 0.000000 - 0 gene_id "SOX18"; transcript_id "NM_018419:uc002yhs.3"; -chr20 hg19_knownGene exon 62680512 62680979 0.000000 - . gene_id "SOX18"; transcript_id "NM_018419:uc002yhs.3"; -chr20 hg19_knownGene exon 62694544 62695476 0.000000 + . gene_id "BC056407"; transcript_id "BC056407:uc021wgr.1"; -chr20 hg19_knownGene exon 62688175 62688230 0.000000 + . gene_id "TCEA2"; transcript_id "BC098585:uc021wgo.1"; -chr20 hg19_knownGene exon 62688325 62689008 0.000000 + . gene_id "TCEA2"; transcript_id "BC098585:uc021wgo.1"; -chr20 hg19_knownGene exon 62689326 62691066 0.000000 + . gene_id "TCEA2"; transcript_id "BC098585:uc021wgo.1"; -chr20 hg19_knownGene exon 62691270 62691488 0.000000 + . gene_id "TCEA2"; transcript_id "BC098585:uc021wgo.1"; -chr20 hg19_knownGene exon 62693783 62693856 0.000000 + . gene_id "TCEA2"; transcript_id "BC098585:uc021wgo.1"; -chr20 hg19_knownGene exon 62697829 62697891 0.000000 + . gene_id "TCEA2"; transcript_id "BC098585:uc021wgo.1"; -chr20 hg19_knownGene exon 62698268 62698373 0.000000 + . gene_id "TCEA2"; transcript_id "BC098585:uc021wgo.1"; -chr20 hg19_knownGene exon 62699400 62699487 0.000000 + . gene_id "TCEA2"; transcript_id "BC098585:uc021wgo.1"; -chr20 hg19_knownGene exon 62700714 62700844 0.000000 + . gene_id "TCEA2"; transcript_id "BC098585:uc021wgo.1"; -chr20 hg19_knownGene exon 62701118 62701174 0.000000 + . gene_id "TCEA2"; transcript_id "BC098585:uc021wgo.1"; -chr20 hg19_knownGene CDS 62697838 62697891 0.000000 + 0 gene_id "TCEA2"; transcript_id "AJ844626:uc010gku.2"; -chr20 hg19_knownGene exon 62697829 62697891 0.000000 + . gene_id "TCEA2"; transcript_id "AJ844626:uc010gku.2"; -chr20 hg19_knownGene CDS 62698268 62698373 0.000000 + 0 gene_id "TCEA2"; transcript_id "AJ844626:uc010gku.2"; -chr20 hg19_knownGene exon 62698268 62698373 0.000000 + . gene_id "TCEA2"; transcript_id "AJ844626:uc010gku.2"; -chr20 hg19_knownGene CDS 62700714 62700820 0.000000 + 2 gene_id "TCEA2"; transcript_id "AJ844626:uc010gku.2"; -chr20 hg19_knownGene exon 62700714 62700844 0.000000 + . gene_id "TCEA2"; transcript_id "AJ844626:uc010gku.2"; -chr20 hg19_knownGene exon 62701118 62701174 0.000000 + . gene_id "TCEA2"; transcript_id "AJ844626:uc010gku.2"; -chr20 hg19_knownGene exon 62688439 62689004 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene exon 62693783 62693856 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene CDS 62697838 62697891 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene exon 62697829 62697891 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene CDS 62698268 62698373 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene exon 62698268 62698373 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene CDS 62699400 62699487 0.000000 + 2 gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene exon 62699400 62699487 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene CDS 62700714 62700844 0.000000 + 1 gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene exon 62700714 62700844 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene CDS 62701118 62701174 0.000000 + 2 gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene exon 62701118 62701174 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene CDS 62701613 62701767 0.000000 + 2 gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene exon 62701613 62701767 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene CDS 62701842 62701988 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene exon 62701842 62701988 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene CDS 62703223 62703294 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene exon 62703223 62703294 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene CDS 62703525 62703530 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene exon 62703525 62703700 0.000000 + . gene_id "TCEA2"; transcript_id "NM_198723:uc021wgp.1"; -chr20 hg19_knownGene CDS 62694666 62694737 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene exon 62694010 62694737 0.000000 + . gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene CDS 62697829 62697891 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene exon 62697829 62697891 0.000000 + . gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene CDS 62698268 62698373 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene exon 62698268 62698373 0.000000 + . gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene CDS 62699400 62699487 0.000000 + 2 gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene exon 62699400 62699487 0.000000 + . gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene CDS 62700714 62700844 0.000000 + 1 gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene exon 62700714 62700844 0.000000 + . gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene CDS 62701118 62701174 0.000000 + 2 gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene exon 62701118 62701174 0.000000 + . gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene CDS 62701613 62701767 0.000000 + 2 gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene exon 62701613 62701767 0.000000 + . gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene CDS 62701842 62701988 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene exon 62701842 62701988 0.000000 + . gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene CDS 62703223 62703294 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene exon 62703223 62703294 0.000000 + . gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene CDS 62703525 62703530 0.000000 + 0 gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene exon 62703525 62703700 0.000000 + . gene_id "TCEA2"; transcript_id "NM_003195:uc021wgq.1"; -chr20 hg19_knownGene CDS 62705209 62705397 0.000000 - 0 gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene exon 62704535 62705397 0.000000 - . gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene CDS 62705497 62705731 0.000000 - 1 gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene exon 62705497 62705731 0.000000 - . gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene CDS 62705820 62705894 0.000000 - 1 gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene exon 62705820 62705894 0.000000 - . gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene CDS 62707878 62707999 0.000000 - 0 gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene exon 62707878 62707999 0.000000 - . gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene CDS 62708210 62708239 0.000000 - 0 gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene exon 62708210 62708307 0.000000 - . gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene exon 62710647 62710845 0.000000 - . gene_id "RGS19"; transcript_id "NM_005873:uc002yhy.3"; -chr20 hg19_knownGene CDS 62705209 62705397 0.000000 - 0 gene_id "RGS19"; transcript_id "AK298240:uc002yhz.3"; -chr20 hg19_knownGene exon 62704535 62705397 0.000000 - . gene_id "RGS19"; transcript_id "AK298240:uc002yhz.3"; -chr20 hg19_knownGene CDS 62705497 62705731 0.000000 - 1 gene_id "RGS19"; transcript_id "AK298240:uc002yhz.3"; -chr20 hg19_knownGene exon 62705497 62705731 0.000000 - . gene_id "RGS19"; transcript_id "AK298240:uc002yhz.3"; -chr20 hg19_knownGene CDS 62705820 62705894 0.000000 - 1 gene_id "RGS19"; transcript_id "AK298240:uc002yhz.3"; -chr20 hg19_knownGene exon 62705820 62705894 0.000000 - . gene_id "RGS19"; transcript_id "AK298240:uc002yhz.3"; -chr20 hg19_knownGene CDS 62707878 62707963 0.000000 - 0 gene_id "RGS19"; transcript_id "AK298240:uc002yhz.3"; -chr20 hg19_knownGene exon 62707878 62707999 0.000000 - . gene_id "RGS19"; transcript_id "AK298240:uc002yhz.3"; -chr20 hg19_knownGene exon 62710647 62710845 0.000000 - . gene_id "RGS19"; transcript_id "AK298240:uc002yhz.3"; -chr20 hg19_knownGene CDS 62705209 62705397 0.000000 - 0 gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene exon 62704535 62705397 0.000000 - . gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene CDS 62705497 62705731 0.000000 - 1 gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene exon 62705497 62705731 0.000000 - . gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene CDS 62705820 62705894 0.000000 - 1 gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene exon 62705820 62705894 0.000000 - . gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene CDS 62707878 62707999 0.000000 - 0 gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene exon 62707878 62707999 0.000000 - . gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene CDS 62708210 62708239 0.000000 - 0 gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene exon 62708210 62708307 0.000000 - . gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene exon 62711226 62711324 0.000000 - . gene_id "RGS19"; transcript_id "NM_001039467:uc002yib.3"; -chr20 hg19_knownGene CDS 62714741 62715058 0.000000 - 0 gene_id "C20orf201"; transcript_id "NM_001007125:uc002yie.1"; -chr20 hg19_knownGene exon 62714733 62715058 0.000000 - . gene_id "C20orf201"; transcript_id "NM_001007125:uc002yie.1"; -chr20 hg19_knownGene CDS 62715171 62715572 0.000000 - 0 gene_id "C20orf201"; transcript_id "NM_001007125:uc002yie.1"; -chr20 hg19_knownGene exon 62715171 62715712 0.000000 - . gene_id "C20orf201"; transcript_id "NM_001007125:uc002yie.1"; -chr20 hg19_knownGene exon 62711471 62711705 0.000000 + . gene_id "OPRL1"; transcript_id "NM_182647:uc002yic.3"; -chr20 hg19_knownGene exon 62723319 62723469 0.000000 + . gene_id "OPRL1"; transcript_id "NM_182647:uc002yic.3"; -chr20 hg19_knownGene CDS 62724074 62724306 0.000000 + 0 gene_id "OPRL1"; transcript_id "NM_182647:uc002yic.3"; -chr20 hg19_knownGene exon 62724041 62724306 0.000000 + . gene_id "OPRL1"; transcript_id "NM_182647:uc002yic.3"; -chr20 hg19_knownGene CDS 62729155 62729510 0.000000 + 1 gene_id "OPRL1"; transcript_id "NM_182647:uc002yic.3"; -chr20 hg19_knownGene exon 62729155 62729510 0.000000 + . gene_id "OPRL1"; transcript_id "NM_182647:uc002yic.3"; -chr20 hg19_knownGene CDS 62729629 62730149 0.000000 + 2 gene_id "OPRL1"; transcript_id "NM_182647:uc002yic.3"; -chr20 hg19_knownGene exon 62729629 62731996 0.000000 + . gene_id "OPRL1"; transcript_id "NM_182647:uc002yic.3"; -chr20 hg19_knownGene exon 62711471 62711705 0.000000 + . gene_id "OPRL1"; transcript_id "NM_000913:uc002yid.3"; -chr20 hg19_knownGene CDS 62724074 62724306 0.000000 + 0 gene_id "OPRL1"; transcript_id "NM_000913:uc002yid.3"; -chr20 hg19_knownGene exon 62724041 62724306 0.000000 + . gene_id "OPRL1"; transcript_id "NM_000913:uc002yid.3"; -chr20 hg19_knownGene CDS 62729155 62729510 0.000000 + 1 gene_id "OPRL1"; transcript_id "NM_000913:uc002yid.3"; -chr20 hg19_knownGene exon 62729155 62729510 0.000000 + . gene_id "OPRL1"; transcript_id "NM_000913:uc002yid.3"; -chr20 hg19_knownGene CDS 62729629 62730149 0.000000 + 2 gene_id "OPRL1"; transcript_id "NM_000913:uc002yid.3"; -chr20 hg19_knownGene exon 62729629 62731996 0.000000 + . gene_id "OPRL1"; transcript_id "NM_000913:uc002yid.3"; -chr20 hg19_knownGene exon 62716369 62716501 0.000000 + . gene_id "OPRL1"; transcript_id "NM_001200019:uc021wgs.1"; -chr20 hg19_knownGene exon 62717858 62717952 0.000000 + . gene_id "OPRL1"; transcript_id "NM_001200019:uc021wgs.1"; -chr20 hg19_knownGene exon 62723319 62723469 0.000000 + . gene_id "OPRL1"; transcript_id "NM_001200019:uc021wgs.1"; -chr20 hg19_knownGene CDS 62724074 62724306 0.000000 + 0 gene_id "OPRL1"; transcript_id "NM_001200019:uc021wgs.1"; -chr20 hg19_knownGene exon 62724041 62724306 0.000000 + . gene_id "OPRL1"; transcript_id "NM_001200019:uc021wgs.1"; -chr20 hg19_knownGene CDS 62729155 62729510 0.000000 + 1 gene_id "OPRL1"; transcript_id "NM_001200019:uc021wgs.1"; -chr20 hg19_knownGene exon 62729155 62729510 0.000000 + . gene_id "OPRL1"; transcript_id "NM_001200019:uc021wgs.1"; -chr20 hg19_knownGene CDS 62729629 62730149 0.000000 + 2 gene_id "OPRL1"; transcript_id "NM_001200019:uc021wgs.1"; -chr20 hg19_knownGene exon 62729629 62731996 0.000000 + . gene_id "OPRL1"; transcript_id "NM_001200019:uc021wgs.1"; -chr20 hg19_knownGene CDS 62724074 62724291 0.000000 + 0 gene_id "OPRL1"; transcript_id "AF126470:uc002yif.4"; -chr20 hg19_knownGene exon 62724041 62724291 0.000000 + . gene_id "OPRL1"; transcript_id "AF126470:uc002yif.4"; -chr20 hg19_knownGene CDS 62729155 62729510 0.000000 + 1 gene_id "OPRL1"; transcript_id "AF126470:uc002yif.4"; -chr20 hg19_knownGene exon 62729155 62729510 0.000000 + . gene_id "OPRL1"; transcript_id "AF126470:uc002yif.4"; -chr20 hg19_knownGene CDS 62729629 62730149 0.000000 + 2 gene_id "OPRL1"; transcript_id "AF126470:uc002yif.4"; -chr20 hg19_knownGene exon 62729629 62731996 0.000000 + . gene_id "OPRL1"; transcript_id "AF126470:uc002yif.4"; -chr20 hg19_knownGene CDS 62737186 62738184 0.000000 - 0 gene_id "NPBWR2"; transcript_id "NM_005286:uc011abt.2"; -chr20 hg19_knownGene exon 62737183 62738184 0.000000 - . gene_id "NPBWR2"; transcript_id "NM_005286:uc011abt.2"; -chr20 hg19_knownGene exon 62783144 62783263 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62821416 62821513 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62830215 62830269 0.000000 + 0 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62830215 62830269 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62831245 62831275 0.000000 + 2 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62831245 62831275 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62836388 62836450 0.000000 + 1 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62836388 62836450 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62836906 62837153 0.000000 + 1 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62836906 62837153 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62842559 62842693 0.000000 + 2 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62842559 62842693 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62843401 62843491 0.000000 + 2 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62843401 62843491 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62844887 62845000 0.000000 + 1 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62844887 62845000 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62848420 62848634 0.000000 + 1 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62848420 62848634 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62850264 62850388 0.000000 + 2 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62850264 62850388 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62851066 62851335 0.000000 + 0 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62851066 62851335 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62853246 62853400 0.000000 + 0 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62853246 62853400 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62854464 62854526 0.000000 + 1 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62854464 62854526 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62858768 62858830 0.000000 + 1 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62858768 62858830 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene CDS 62859241 62859385 0.000000 + 1 gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62859241 62859455 0.000000 + . gene_id "MYT1"; transcript_id "BC062313:uc002yih.3"; -chr20 hg19_knownGene exon 62795827 62796092 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62821416 62821513 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62830215 62830269 0.000000 + 0 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62830215 62830269 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62831245 62831275 0.000000 + 2 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62831245 62831275 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62836388 62836450 0.000000 + 1 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62836388 62836450 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62836906 62837153 0.000000 + 1 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62836906 62837153 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62838947 62839840 0.000000 + 2 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62838947 62839840 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62842559 62842693 0.000000 + 2 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62842559 62842693 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62843401 62843491 0.000000 + 2 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62843401 62843491 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62844887 62845000 0.000000 + 1 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62844887 62845000 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62848420 62848634 0.000000 + 1 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62848420 62848634 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62850264 62850388 0.000000 + 2 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62850264 62850388 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62851066 62851335 0.000000 + 0 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62851066 62851335 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62853246 62853400 0.000000 + 0 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62853246 62853400 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62854464 62854526 0.000000 + 1 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62854464 62854526 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62854644 62854712 0.000000 + 1 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62854644 62854712 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62858768 62858830 0.000000 + 1 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62858768 62858830 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62859241 62859324 0.000000 + 1 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62859241 62859324 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62863517 62863738 0.000000 + 1 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62863517 62863738 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62867908 62867999 0.000000 + 1 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62867908 62867999 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62868640 62868743 0.000000 + 2 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62868640 62868743 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62871113 62871256 0.000000 + 0 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62871113 62871256 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62871673 62871798 0.000000 + 0 gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene exon 62871673 62873606 0.000000 + . gene_id "MYT1"; transcript_id "NM_004535:uc002yii.3"; -chr20 hg19_knownGene CDS 62839654 62839840 0.000000 + 0 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62838947 62839840 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62842559 62842693 0.000000 + 2 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62842559 62842693 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62843401 62843491 0.000000 + 2 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62843401 62843491 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62844887 62845000 0.000000 + 1 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62844887 62845000 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62848420 62848634 0.000000 + 1 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62848420 62848634 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62850183 62850388 0.000000 + 2 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62850183 62850388 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62851066 62851335 0.000000 + 0 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62851066 62851335 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62853246 62853400 0.000000 + 0 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62853246 62853400 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62854464 62854526 0.000000 + 1 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62854464 62854526 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62854644 62854712 0.000000 + 1 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62854644 62854712 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62858768 62858830 0.000000 + 1 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62858768 62858830 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62859241 62859324 0.000000 + 1 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62859241 62859324 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62863517 62863738 0.000000 + 1 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62863517 62863738 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62867908 62867999 0.000000 + 1 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62867908 62867999 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62868640 62868743 0.000000 + 2 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62868640 62868743 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62871113 62871256 0.000000 + 0 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62871113 62871256 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene CDS 62871673 62871798 0.000000 + 0 gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62871673 62873606 0.000000 + . gene_id "MYT1"; transcript_id "M96980:uc002yij.3"; -chr20 hg19_knownGene exon 62887048 62887223 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene CDS 62891319 62891625 0.000000 + 0 gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene exon 62891295 62891625 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene CDS 62895782 62895884 0.000000 + 2 gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene exon 62895782 62895884 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene CDS 62896611 62896782 0.000000 + 1 gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene exon 62896611 62896782 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene CDS 62899240 62899363 0.000000 + 0 gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene exon 62899240 62899363 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene CDS 62904574 62904950 0.000000 + 2 gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene exon 62904574 62907579 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_018257:uc002yil.4"; -chr20 hg19_knownGene exon 62887048 62887223 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene CDS 62891319 62891625 0.000000 + 0 gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene exon 62891295 62891625 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene CDS 62895782 62895884 0.000000 + 2 gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene exon 62895782 62895884 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene CDS 62896611 62896782 0.000000 + 1 gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene exon 62896611 62896782 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene CDS 62899321 62899363 0.000000 + 0 gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene exon 62899321 62899363 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene CDS 62904574 62904950 0.000000 + 2 gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene exon 62904574 62907579 0.000000 + . gene_id "PCMTD2"; transcript_id "NM_001104925:uc002yim.4"; -chr20 hg19_knownGene exon 62919983 62920072 0.000000 + . gene_id "DQ590432"; transcript_id "DQ590432:uc002yin.3"; -chr20 hg19_knownGene exon 62921738 62922087 0.000000 + . gene_id "LINC00266-1"; transcript_id "NR_040415:uc002yio.1"; -chr20 hg19_knownGene exon 62926244 62926412 0.000000 + . gene_id "LINC00266-1"; transcript_id "NR_040415:uc002yio.1"; -chr20 hg19_knownGene exon 62934504 62934707 0.000000 + . gene_id "LINC00266-1"; transcript_id "NR_040415:uc002yio.1"; diff --git a/clipper/tidx/chr20.txt.tidx b/clipper/tidx/chr20.txt.tidx deleted file mode 100644 index 82b8da1..0000000 Binary files a/clipper/tidx/chr20.txt.tidx and /dev/null differ diff --git a/clipper/tidx/fastq-lib.cpp b/clipper/tidx/fastq-lib.cpp deleted file mode 120000 index 0551761..0000000 --- a/clipper/tidx/fastq-lib.cpp +++ /dev/null @@ -1 +0,0 @@ -../fastq-lib.cpp \ No newline at end of file diff --git a/clipper/tidx/fastq-lib.h b/clipper/tidx/fastq-lib.h deleted file mode 120000 index de4dedc..0000000 --- a/clipper/tidx/fastq-lib.h +++ /dev/null @@ -1 +0,0 @@ -../fastq-lib.h \ No newline at end of file diff --git a/clipper/tidx/foo.txt b/clipper/tidx/foo.txt deleted file mode 100644 index d3704d4..0000000 --- a/clipper/tidx/foo.txt +++ /dev/null @@ -1,3 +0,0 @@ -chr20 251858 foo 1 -chr20 251908 foo 2 -chr20 12 notthere diff --git a/clipper/tidx/perl/Changes b/clipper/tidx/perl/Changes deleted file mode 100644 index 97abf97..0000000 --- a/clipper/tidx/perl/Changes +++ /dev/null @@ -1,6 +0,0 @@ -Revision history for Perl extension Text::Tidx. - -0.01 Mon Sep 10 15:24:21 2012 - - original version; created by h2xs 1.23 with options - -A -n Text::Tidx - diff --git a/clipper/tidx/perl/MANIFEST b/clipper/tidx/perl/MANIFEST deleted file mode 100644 index e95eea1..0000000 --- a/clipper/tidx/perl/MANIFEST +++ /dev/null @@ -1,32 +0,0 @@ -Changes -fastq-lib.cpp -fastq-lib.h -lib/Text/Tidx.pm -Makefile.PL -MANIFEST This list of files -perlobject.map -ppport.h -README -t/annot.txt -t/res1.txt -t/res2.txt -t/Text-Tidx.t -tidx.cpp -tidx-lib.cpp -tidx.h -Tidx.xs -typemap -utils.cpp -utils.h -sparsehash/template_util.h -sparsehash/sparse_hash_map -sparsehash/sparsetable -sparsehash/sparse_hash_set -sparsehash/internal/densehashtable.h -sparsehash/internal/sparseconfig.h -sparsehash/internal/hashtable-common.h -sparsehash/internal/sparsehashtable.h -sparsehash/internal/libc_allocator_with_realloc.h -sparsehash/type_traits.h -sparsehash/dense_hash_set -sparsehash/dense_hash_map diff --git a/clipper/tidx/perl/Makefile.PL b/clipper/tidx/perl/Makefile.PL deleted file mode 100644 index 0858de7..0000000 --- a/clipper/tidx/perl/Makefile.PL +++ /dev/null @@ -1,39 +0,0 @@ -use 5.010001; -use ExtUtils::MakeMaker; -# See lib/ExtUtils/MakeMaker.pm for details of how to influence -# the contents of the Makefile that is written. -$CC = "g++"; -$EXE_EXT = $^O =~ /win32/i ? ".exe" : ""; - -WriteMakefile( - NAME => 'Text::Tidx', - VERSION_FROM => 'lib/Text/Tidx.pm', # finds $VERSION - H => ['sparsehash'], - OPTIMIZE => '-O3', - PREREQ_PM => {}, # e.g., Module::Name => 1.1 - ($] >= 5.005 ? ## Add these new keywords supported since 5.005 - (ABSTRACT_FROM => 'lib/Text/Tidx.pm', # retrieve abstract from module - AUTHOR => 'A. U. Thor ') : ()), -# LIBS => ['-ltidx'], # e.g., '-lm' - CC => $CC, - LD => '$(CC)', - XSOPT => '-C++', - TYPEMAPS => ['perlobject.map'], -# 'dist' => { }, - DEFINE => '', # e.g., '-DHAVE_SOMETHING' - INC => '-I.', # e.g., '-I. -I/usr/include/other' - # Un-comment this if you add C files to link with later: - OBJECT => '$(O_FILES)', # link all the C files too - EXE_FILES => ['tidx'.$EXE_EXT], -); - - -sub MY::postamble -{ -# todo... this probably doesn't work on windows/mig -return <100k rows) and many searches ( > 10k), then entering -all of the information into a database and doing range querys, -even faster than SQLITE's rtree extension, or the "tabix" program -both of which are do similar things and do them rather well. - -Although it was designed for chromosome, stop, start indexing, -it is not genome specific, and can index any delimited text file. - -Indexes are loaded into RAM. If you only have a few lookups -to do perl instance, this is expensive, and a database will be faster. - -INSTALLATION - -To install this module type the following: - - perl Makefile.PL - make - make test - make install - -DEPENDENCIES - -This module includes google's sparsehash, some code from ea-utils, as -well as the tidx-lib source because they're small, however, they can -be replaced with newer versions of those libraries if desired. - -COPYRIGHT AND LICENCE - -Copyright (C) 2012 Erik Aronesty - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself, either Perl version 5.10.1 or, -at your option, any later version of Perl 5 you may have available. diff --git a/clipper/tidx/perl/Tidx.xs b/clipper/tidx/perl/Tidx.xs deleted file mode 100644 index 417b1cd..0000000 --- a/clipper/tidx/perl/Tidx.xs +++ /dev/null @@ -1,32 +0,0 @@ -#ifdef __cplusplus -extern "C" { -#endif - -#include "EXTERN.h" -#include "perl.h" -#include "XSUB.h" - -#include "ppport.h" - -#ifdef __cplusplus -} -#endif - -#include "tidx.h" - -MODULE = Text::Tidx PACKAGE = Text::Tidx - -tidx * -tidx::new(char * path) - -void -tidx::DESTROY() - -const char * -tidx::lookup_c(const char *chr, int pos, const char *msep); - -const char * -tidx::lookup_cr(const char *chr, int beg, int end, const char *msep); - -void -tidx_build(const char *file, const char *sep, int chr, int beg, int end, int skip_i, char skip_c, bool sub_e); diff --git a/clipper/tidx/perl/fastq-lib.cpp b/clipper/tidx/perl/fastq-lib.cpp deleted file mode 120000 index 0551761..0000000 --- a/clipper/tidx/perl/fastq-lib.cpp +++ /dev/null @@ -1 +0,0 @@ -../fastq-lib.cpp \ No newline at end of file diff --git a/clipper/tidx/perl/fastq-lib.h b/clipper/tidx/perl/fastq-lib.h deleted file mode 120000 index de4dedc..0000000 --- a/clipper/tidx/perl/fastq-lib.h +++ /dev/null @@ -1 +0,0 @@ -../fastq-lib.h \ No newline at end of file diff --git a/clipper/tidx/perl/lib/Text/Tidx.pm b/clipper/tidx/perl/lib/Text/Tidx.pm deleted file mode 100644 index b31a739..0000000 --- a/clipper/tidx/perl/lib/Text/Tidx.pm +++ /dev/null @@ -1,172 +0,0 @@ -package Text::Tidx; - -use 5.010001; -use strict; -use warnings; -use Carp; - -require Exporter; - -our @ISA = qw(Exporter); - -# Items to export into callers namespace by default. Note: do not export -# names by default without a very good reason. Use EXPORT_OK instead. -# Do not simply export all your public functions/methods/constants. - -# This allows declaration use Text::Tidx ':all'; -# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK -# will save memory. -our %EXPORT_TAGS = ( 'all' => [ qw( - -) ] ); - -our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); - -our @EXPORT = qw( - -); - -our $VERSION = '0.94'; - -require XSLoader; -XSLoader::load('Text::Tidx', $VERSION); - -# Preloaded methods go here. - -sub lookup { - if (@_ == 3) { - return lookup_c(@_, "^"); - } - if (@_ == 4) { - return lookup_cr(@_, "^"); - } -} - -sub query { - my $r; - if (@_ == 3) { - $r = lookup_c(@_, "^"); - } - if (@_ == 4) { - $r = lookup_cr(@_, "^"); - } - return () if (!$r); - $r =~ s/^\^//; - return split /\^/, $r; -} - -sub build { - my ($file, %op) = @_; - croak "usage: build(file, options)\n" unless $file; - $op{skip} = '#' if !defined($op{skip}); - $op{skip_c} = $op{skip} !~ /^\d+$/ ? $op{skip} : ''; - $op{skip_i} = $op{skip} =~ /^\d+$/ ? $op{skip} : 0; - $op{sub_e} = $op{sub} || $op{sub_e} ? 1 : 0; - $op{sep} = "\t" if !$op{sep}; - $op{chr} = 1 if !defined($op{chr}); - $op{beg} = 2 if !$op{beg}; - $op{end} = 3 if !$op{end}; - # one based index, consistent with command-line version - --$op{chr}; - --$op{beg}; - --$op{end}; - # todo... for kicks: allow indexing on text only, no positions - tidx_build($file, $op{sep}, $op{chr}, $op{beg}, $op{end}, $op{skip_i}, $op{skip_c}, $op{sub_e}); -} - -1; -__END__ -# Below is stub documentation for your module. You'd better edit it! - -=head1 NAME - -Text::Tidx - Index a delimited text file containing start-stop positions - -=head1 SYNOPSIS - - use Text::Tidx; - Text::Tidx::build("annot.txt"); - $idx = Text::Tidx->new("annot.txt"); - print $idx->query("chr1",240034); - -=head1 FUNCTION - -=head2 new(FILE) - -Loads an index from a file. - -=head2 query(CHR, POS [, END]) - -Query a loaded index, returning an array of text lines corresponding to the specified -chr string and integer pos. If an end is specified, then all overlapping regions -are returned. - -=head2 build(FILE [, option1=>value1, ...]) - -Builds an index. Default is to index on the first 3 columns. - -The following options may be used: - -=over 4 - -=item sep - -Field separator, default to a tab - -=item chr - -1-based index of the string key field, can be -1 for "Not applicable", default is 1 - -=item beg - -1-based index of the field containing the start of the integer numeric range, default is 2 - -=item end - -1-based index of the field containing the end of the integer numeric range, default is 3 - -=item skip - -If an integer, then it is the number of rows to skip. If it's -a character, then skips all rows beginning with that character. -Default is '#', skipping comment chars (compatible with gffs, vcfs, etc.) - -=item sub_e - -If nonzero, then the "end" of the range is not included in the range, ie: -one is subtracted from the end positions. - -=back - -=head1 DESCRIPTION - -Text:Tidx allows you to index any text file using a key field -and range coordinates, and, later, use that index for O(log(n)) -range-lookups into the file. - -This was written because it was, for me significantly faster, for very large -files (>100k rows) and many searches ( > 10k), then entering -all of the information into a database and doing range querys, -even faster than SQLITE's rtree extension, or the "tabix" program -both of which are do similar things and do them rather well. - -Although it was designed for chromosome, stop, start indexing, -it is not genome specific, and can index any delimited text file. - -Indexes are loaded into RAM. If you only have a few lookups -to do perl instance, this is expensive, and a database will be faster. - -=head1 AUTHOR - -Erik Aronesty, Eearonesty@cpan.orgE - -=head1 COPYRIGHT AND LICENSE - -Copyright (C) 2012 by Erik Aronesty - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself, either Perl version 5.10.1 or, -at your option, any later version of Perl 5 you may have available. - - -=cut diff --git a/clipper/tidx/perl/perlobject.map b/clipper/tidx/perl/perlobject.map deleted file mode 100644 index 644eff4..0000000 --- a/clipper/tidx/perl/perlobject.map +++ /dev/null @@ -1,106 +0,0 @@ -# "perlobject.map" Dean Roehrich, version 19960302 -# -# TYPEMAPs -# -# HV * -> unblessed Perl HV object. -# AV * -> unblessed Perl AV object. -# -# INPUT/OUTPUT maps -# -# O_* -> opaque blessed objects -# T_* -> opaque blessed or unblessed objects -# -# O_OBJECT -> link an opaque C or C++ object to a blessed Perl object. -# T_OBJECT -> link an opaque C or C++ object to an unblessed Perl object. -# O_HvRV -> a blessed Perl HV object. -# T_HvRV -> an unblessed Perl HV object. -# O_AvRV -> a blessed Perl AV object. -# T_AvRV -> an unblessed Perl AV object. - -TYPEMAP - -HV * T_HvRV -AV * T_AvRV - - -###################################################################### -OUTPUT - -# The Perl object is blessed into 'CLASS', which should be a -# char* having the name of the package for the blessing. -O_OBJECT - sv_setref_pv( $arg, CLASS, (void*)$var ); - -T_OBJECT - sv_setref_pv( $arg, Nullch, (void*)$var ); - -# Cannot use sv_setref_pv() because that will destroy -# the HV-ness of the object. Remember that newRV() will increment -# the refcount. -O_HvRV - $arg = sv_bless( newRV((SV*)$var), gv_stashpv(CLASS,1) ); - -T_HvRV - $arg = newRV((SV*)$var); - -# Cannot use sv_setref_pv() because that will destroy -# the AV-ness of the object. Remember that newRV() will increment -# the refcount. -O_AvRV - $arg = sv_bless( newRV((SV*)$var), gv_stashpv(CLASS,1) ); - -T_AvRV - $arg = newRV((SV*)$var); - - -###################################################################### -INPUT - -O_OBJECT - if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) ) - $var = ($type)SvIV((SV*)SvRV( $arg )); - else{ - warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" ); - XSRETURN_UNDEF; - } - -T_OBJECT - if( SvROK($arg) ) - $var = ($type)SvIV((SV*)SvRV( $arg )); - else{ - warn( \"${Package}::$func_name() -- $var is not an SV reference\" ); - XSRETURN_UNDEF; - } - -O_HvRV - if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) ) - $var = (HV*)SvRV( $arg ); - else { - warn( \"${Package}::$func_name() -- $var is not a blessed HV reference\" ); - XSRETURN_UNDEF; - } - -T_HvRV - if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) ) - $var = (HV*)SvRV( $arg ); - else { - warn( \"${Package}::$func_name() -- $var is not an HV reference\" ); - XSRETURN_UNDEF; - } - -O_AvRV - if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) ) - $var = (AV*)SvRV( $arg ); - else { - warn( \"${Package}::$func_name() -- $var is not a blessed AV reference\" ); - XSRETURN_UNDEF; - } - -T_AvRV - if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) ) - $var = (AV*)SvRV( $arg ); - else { - warn( \"${Package}::$func_name() -- $var is not an AV reference\" ); - XSRETURN_UNDEF; - } - diff --git a/clipper/tidx/perl/ppport.h b/clipper/tidx/perl/ppport.h deleted file mode 100644 index 8ec0d5f..0000000 --- a/clipper/tidx/perl/ppport.h +++ /dev/null @@ -1,7063 +0,0 @@ -#if 0 -<<'SKIP'; -#endif -/* ----------------------------------------------------------------------- - - ppport.h -- Perl/Pollution/Portability Version 3.19 - - Automatically created by Devel::PPPort running under perl 5.010001. - - Do NOT edit this file directly! -- Edit PPPort_pm.PL and the - includes in parts/inc/ instead. - - Use 'perldoc ppport.h' to view the documentation below. - ----------------------------------------------------------------------- - -SKIP - -=pod - -=head1 NAME - -ppport.h - Perl/Pollution/Portability version 3.19 - -=head1 SYNOPSIS - - perl ppport.h [options] [source files] - - Searches current directory for files if no [source files] are given - - --help show short help - - --version show version - - --patch=file write one patch file with changes - --copy=suffix write changed copies with suffix - --diff=program use diff program and options - - --compat-version=version provide compatibility with Perl version - --cplusplus accept C++ comments - - --quiet don't output anything except fatal errors - --nodiag don't show diagnostics - --nohints don't show hints - --nochanges don't suggest changes - --nofilter don't filter input files - - --strip strip all script and doc functionality from - ppport.h - - --list-provided list provided API - --list-unsupported list unsupported API - --api-info=name show Perl API portability information - -=head1 COMPATIBILITY - -This version of F is designed to support operation with Perl -installations back to 5.003, and has been tested up to 5.10.0. - -=head1 OPTIONS - -=head2 --help - -Display a brief usage summary. - -=head2 --version - -Display the version of F. - -=head2 --patch=I - -If this option is given, a single patch file will be created if -any changes are suggested. This requires a working diff program -to be installed on your system. - -=head2 --copy=I - -If this option is given, a copy of each file will be saved with -the given suffix that contains the suggested changes. This does -not require any external programs. Note that this does not -automagially add a dot between the original filename and the -suffix. If you want the dot, you have to include it in the option -argument. - -If neither C<--patch> or C<--copy> are given, the default is to -simply print the diffs for each file. This requires either -C or a C program to be installed. - -=head2 --diff=I - -Manually set the diff program and options to use. The default -is to use C, when installed, and output unified -context diffs. - -=head2 --compat-version=I - -Tell F to check for compatibility with the given -Perl version. The default is to check for compatibility with Perl -version 5.003. You can use this option to reduce the output -of F if you intend to be backward compatible only -down to a certain Perl version. - -=head2 --cplusplus - -Usually, F will detect C++ style comments and -replace them with C style comments for portability reasons. -Using this option instructs F to leave C++ -comments untouched. - -=head2 --quiet - -Be quiet. Don't print anything except fatal errors. - -=head2 --nodiag - -Don't output any diagnostic messages. Only portability -alerts will be printed. - -=head2 --nohints - -Don't output any hints. Hints often contain useful portability -notes. Warnings will still be displayed. - -=head2 --nochanges - -Don't suggest any changes. Only give diagnostic output and hints -unless these are also deactivated. - -=head2 --nofilter - -Don't filter the list of input files. By default, files not looking -like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. - -=head2 --strip - -Strip all script and documentation functionality from F. -This reduces the size of F dramatically and may be useful -if you want to include F in smaller modules without -increasing their distribution size too much. - -The stripped F will have a C<--unstrip> option that allows -you to undo the stripping, but only if an appropriate C -module is installed. - -=head2 --list-provided - -Lists the API elements for which compatibility is provided by -F. Also lists if it must be explicitly requested, -if it has dependencies, and if there are hints or warnings for it. - -=head2 --list-unsupported - -Lists the API elements that are known not to be supported by -F and below which version of Perl they probably -won't be available or work. - -=head2 --api-info=I - -Show portability information for API elements matching I. -If I is surrounded by slashes, it is interpreted as a regular -expression. - -=head1 DESCRIPTION - -In order for a Perl extension (XS) module to be as portable as possible -across differing versions of Perl itself, certain steps need to be taken. - -=over 4 - -=item * - -Including this header is the first major one. This alone will give you -access to a large part of the Perl API that hasn't been available in -earlier Perl releases. Use - - perl ppport.h --list-provided - -to see which API elements are provided by ppport.h. - -=item * - -You should avoid using deprecated parts of the API. For example, using -global Perl variables without the C prefix is deprecated. Also, -some API functions used to have a C prefix. Using this form is -also deprecated. You can safely use the supported API, as F -will provide wrappers for older Perl versions. - -=item * - -If you use one of a few functions or variables that were not present in -earlier versions of Perl, and that can't be provided using a macro, you -have to explicitly request support for these functions by adding one or -more C<#define>s in your source code before the inclusion of F. - -These functions or variables will be marked C in the list shown -by C<--list-provided>. - -Depending on whether you module has a single or multiple files that -use such functions or variables, you want either C or global -variants. - -For a C function or variable (used only in a single source -file), use: - - #define NEED_function - #define NEED_variable - -For a global function or variable (used in multiple source files), -use: - - #define NEED_function_GLOBAL - #define NEED_variable_GLOBAL - -Note that you mustn't have more than one global request for the -same function or variable in your project. - - Function / Variable Static Request Global Request - ----------------------------------------------------------------------------------------- - PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL - PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL - eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL - grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL - grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL - grok_number() NEED_grok_number NEED_grok_number_GLOBAL - grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL - grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL - load_module() NEED_load_module NEED_load_module_GLOBAL - my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL - my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL - my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL - my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL - newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL - newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL - newSV_type() NEED_newSV_type NEED_newSV_type_GLOBAL - newSVpvn_flags() NEED_newSVpvn_flags NEED_newSVpvn_flags_GLOBAL - newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL - pv_display() NEED_pv_display NEED_pv_display_GLOBAL - pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL - pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL - sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL - sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL - sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL - sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL - sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL - sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL - sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL - vload_module() NEED_vload_module NEED_vload_module_GLOBAL - vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL - warner() NEED_warner NEED_warner_GLOBAL - -To avoid namespace conflicts, you can change the namespace of the -explicitly exported functions / variables using the C -macro. Just C<#define> the macro before including C: - - #define DPPP_NAMESPACE MyOwnNamespace_ - #include "ppport.h" - -The default namespace is C. - -=back - -The good thing is that most of the above can be checked by running -F on your source code. See the next section for -details. - -=head1 EXAMPLES - -To verify whether F is needed for your module, whether you -should make any changes to your code, and whether any special defines -should be used, F can be run as a Perl script to check your -source code. Simply say: - - perl ppport.h - -The result will usually be a list of patches suggesting changes -that should at least be acceptable, if not necessarily the most -efficient solution, or a fix for all possible problems. - -If you know that your XS module uses features only available in -newer Perl releases, if you're aware that it uses C++ comments, -and if you want all suggestions as a single patch file, you could -use something like this: - - perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff - -If you only want your code to be scanned without any suggestions -for changes, use: - - perl ppport.h --nochanges - -You can specify a different C program or options, using -the C<--diff> option: - - perl ppport.h --diff='diff -C 10' - -This would output context diffs with 10 lines of context. - -If you want to create patched copies of your files instead, use: - - perl ppport.h --copy=.new - -To display portability information for the C function, -use: - - perl ppport.h --api-info=newSVpvn - -Since the argument to C<--api-info> can be a regular expression, -you can use - - perl ppport.h --api-info=/_nomg$/ - -to display portability information for all C<_nomg> functions or - - perl ppport.h --api-info=/./ - -to display information for all known API elements. - -=head1 BUGS - -If this version of F is causing failure during -the compilation of this module, please check if newer versions -of either this module or C are available on CPAN -before sending a bug report. - -If F was generated using the latest version of -C and is causing failure of this module, please -file a bug report using the CPAN Request Tracker at L. - -Please include the following information: - -=over 4 - -=item 1. - -The complete output from running "perl -V" - -=item 2. - -This file. - -=item 3. - -The name and version of the module you were trying to build. - -=item 4. - -A full log of the build that failed. - -=item 5. - -Any other information that you think could be relevant. - -=back - -For the latest version of this code, please get the C -module from CPAN. - -=head1 COPYRIGHT - -Version 3.x, Copyright (c) 2004-2009, Marcus Holland-Moritz. - -Version 2.x, Copyright (C) 2001, Paul Marquess. - -Version 1.x, Copyright (C) 1999, Kenneth Albanowski. - -This program is free software; you can redistribute it and/or -modify it under the same terms as Perl itself. - -=head1 SEE ALSO - -See L. - -=cut - -use strict; - -# Disable broken TRIE-optimization -BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 } - -my $VERSION = 3.19; - -my %opt = ( - quiet => 0, - diag => 1, - hints => 1, - changes => 1, - cplusplus => 0, - filter => 1, - strip => 0, - version => 0, -); - -my($ppport) = $0 =~ /([\w.]+)$/; -my $LF = '(?:\r\n|[\r\n])'; # line feed -my $HS = "[ \t]"; # horizontal whitespace - -# Never use C comments in this file! -my $ccs = '/'.'*'; -my $cce = '*'.'/'; -my $rccs = quotemeta $ccs; -my $rcce = quotemeta $cce; - -eval { - require Getopt::Long; - Getopt::Long::GetOptions(\%opt, qw( - help quiet diag! filter! hints! changes! cplusplus strip version - patch=s copy=s diff=s compat-version=s - list-provided list-unsupported api-info=s - )) or usage(); -}; - -if ($@ and grep /^-/, @ARGV) { - usage() if "@ARGV" =~ /^--?h(?:elp)?$/; - die "Getopt::Long not found. Please don't use any options.\n"; -} - -if ($opt{version}) { - print "This is $0 $VERSION.\n"; - exit 0; -} - -usage() if $opt{help}; -strip() if $opt{strip}; - -if (exists $opt{'compat-version'}) { - my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; - if ($@) { - die "Invalid version number format: '$opt{'compat-version'}'\n"; - } - die "Only Perl 5 is supported\n" if $r != 5; - die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; - $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; -} -else { - $opt{'compat-version'} = 5; -} - -my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ - ? ( $1 => { - ($2 ? ( base => $2 ) : ()), - ($3 ? ( todo => $3 ) : ()), - (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), - (index($4, 'p') >= 0 ? ( provided => 1 ) : ()), - (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), - } ) - : die "invalid spec: $_" } qw( -AvFILLp|5.004050||p -AvFILL||| -CLASS|||n -CPERLscope|5.005000||p -CX_CURPAD_SAVE||| -CX_CURPAD_SV||| -CopFILEAV|5.006000||p -CopFILEGV_set|5.006000||p -CopFILEGV|5.006000||p -CopFILESV|5.006000||p -CopFILE_set|5.006000||p -CopFILE|5.006000||p -CopSTASHPV_set|5.006000||p -CopSTASHPV|5.006000||p -CopSTASH_eq|5.006000||p -CopSTASH_set|5.006000||p -CopSTASH|5.006000||p -CopyD|5.009002||p -Copy||| -CvPADLIST||| -CvSTASH||| -CvWEAKOUTSIDE||| -DEFSV_set|5.011000||p -DEFSV|5.004050||p -END_EXTERN_C|5.005000||p -ENTER||| -ERRSV|5.004050||p -EXTEND||| -EXTERN_C|5.005000||p -F0convert|||n -FREETMPS||| -GIMME_V||5.004000|n -GIMME|||n -GROK_NUMERIC_RADIX|5.007002||p -G_ARRAY||| -G_DISCARD||| -G_EVAL||| -G_METHOD|5.006001||p -G_NOARGS||| -G_SCALAR||| -G_VOID||5.004000| -GetVars||| -GvSVn|5.009003||p -GvSV||| -Gv_AMupdate||| -HEf_SVKEY||5.004000| -HeHASH||5.004000| -HeKEY||5.004000| -HeKLEN||5.004000| -HePV||5.004000| -HeSVKEY_force||5.004000| -HeSVKEY_set||5.004000| -HeSVKEY||5.004000| -HeUTF8||5.011000| -HeVAL||5.004000| -HvNAMELEN_get|5.009003||p -HvNAME_get|5.009003||p -HvNAME||| -INT2PTR|5.006000||p -IN_LOCALE_COMPILETIME|5.007002||p -IN_LOCALE_RUNTIME|5.007002||p -IN_LOCALE|5.007002||p -IN_PERL_COMPILETIME|5.008001||p -IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p -IS_NUMBER_INFINITY|5.007002||p -IS_NUMBER_IN_UV|5.007002||p -IS_NUMBER_NAN|5.007003||p -IS_NUMBER_NEG|5.007002||p -IS_NUMBER_NOT_INT|5.007002||p -IVSIZE|5.006000||p -IVTYPE|5.006000||p -IVdf|5.006000||p -LEAVE||| -LVRET||| -MARK||| -MULTICALL||5.011000| -MY_CXT_CLONE|5.009002||p -MY_CXT_INIT|5.007003||p -MY_CXT|5.007003||p -MoveD|5.009002||p -Move||| -NOOP|5.005000||p -NUM2PTR|5.006000||p -NVTYPE|5.006000||p -NVef|5.006001||p -NVff|5.006001||p -NVgf|5.006001||p -Newxc|5.009003||p -Newxz|5.009003||p -Newx|5.009003||p -Nullav||| -Nullch||| -Nullcv||| -Nullhv||| -Nullsv||| -ORIGMARK||| -PAD_BASE_SV||| -PAD_CLONE_VARS||| -PAD_COMPNAME_FLAGS||| -PAD_COMPNAME_GEN_set||| -PAD_COMPNAME_GEN||| -PAD_COMPNAME_OURSTASH||| -PAD_COMPNAME_PV||| -PAD_COMPNAME_TYPE||| -PAD_DUP||| -PAD_RESTORE_LOCAL||| -PAD_SAVE_LOCAL||| -PAD_SAVE_SETNULLPAD||| -PAD_SETSV||| -PAD_SET_CUR_NOSAVE||| -PAD_SET_CUR||| -PAD_SVl||| -PAD_SV||| -PERLIO_FUNCS_CAST|5.009003||p -PERLIO_FUNCS_DECL|5.009003||p -PERL_ABS|5.008001||p -PERL_BCDVERSION|5.011000||p -PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p -PERL_HASH|5.004000||p -PERL_INT_MAX|5.004000||p -PERL_INT_MIN|5.004000||p -PERL_LONG_MAX|5.004000||p -PERL_LONG_MIN|5.004000||p -PERL_MAGIC_arylen|5.007002||p -PERL_MAGIC_backref|5.007002||p -PERL_MAGIC_bm|5.007002||p -PERL_MAGIC_collxfrm|5.007002||p -PERL_MAGIC_dbfile|5.007002||p -PERL_MAGIC_dbline|5.007002||p -PERL_MAGIC_defelem|5.007002||p -PERL_MAGIC_envelem|5.007002||p -PERL_MAGIC_env|5.007002||p -PERL_MAGIC_ext|5.007002||p -PERL_MAGIC_fm|5.007002||p -PERL_MAGIC_glob|5.011000||p -PERL_MAGIC_isaelem|5.007002||p -PERL_MAGIC_isa|5.007002||p -PERL_MAGIC_mutex|5.011000||p -PERL_MAGIC_nkeys|5.007002||p -PERL_MAGIC_overload_elem|5.007002||p -PERL_MAGIC_overload_table|5.007002||p -PERL_MAGIC_overload|5.007002||p -PERL_MAGIC_pos|5.007002||p -PERL_MAGIC_qr|5.007002||p -PERL_MAGIC_regdata|5.007002||p -PERL_MAGIC_regdatum|5.007002||p -PERL_MAGIC_regex_global|5.007002||p -PERL_MAGIC_shared_scalar|5.007003||p -PERL_MAGIC_shared|5.007003||p -PERL_MAGIC_sigelem|5.007002||p -PERL_MAGIC_sig|5.007002||p -PERL_MAGIC_substr|5.007002||p -PERL_MAGIC_sv|5.007002||p -PERL_MAGIC_taint|5.007002||p -PERL_MAGIC_tiedelem|5.007002||p -PERL_MAGIC_tiedscalar|5.007002||p -PERL_MAGIC_tied|5.007002||p -PERL_MAGIC_utf8|5.008001||p -PERL_MAGIC_uvar_elem|5.007003||p -PERL_MAGIC_uvar|5.007002||p -PERL_MAGIC_vec|5.007002||p -PERL_MAGIC_vstring|5.008001||p -PERL_PV_ESCAPE_ALL|5.009004||p -PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p -PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p -PERL_PV_ESCAPE_NOCLEAR|5.009004||p -PERL_PV_ESCAPE_QUOTE|5.009004||p -PERL_PV_ESCAPE_RE|5.009005||p -PERL_PV_ESCAPE_UNI_DETECT|5.009004||p -PERL_PV_ESCAPE_UNI|5.009004||p -PERL_PV_PRETTY_DUMP|5.009004||p -PERL_PV_PRETTY_ELLIPSES|5.010000||p -PERL_PV_PRETTY_LTGT|5.009004||p -PERL_PV_PRETTY_NOCLEAR|5.010000||p -PERL_PV_PRETTY_QUOTE|5.009004||p -PERL_PV_PRETTY_REGPROP|5.009004||p -PERL_QUAD_MAX|5.004000||p -PERL_QUAD_MIN|5.004000||p -PERL_REVISION|5.006000||p -PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p -PERL_SCAN_DISALLOW_PREFIX|5.007003||p -PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p -PERL_SCAN_SILENT_ILLDIGIT|5.008001||p -PERL_SHORT_MAX|5.004000||p -PERL_SHORT_MIN|5.004000||p -PERL_SIGNALS_UNSAFE_FLAG|5.008001||p -PERL_SUBVERSION|5.006000||p -PERL_SYS_INIT3||5.006000| -PERL_SYS_INIT||| -PERL_SYS_TERM||5.011000| -PERL_UCHAR_MAX|5.004000||p -PERL_UCHAR_MIN|5.004000||p -PERL_UINT_MAX|5.004000||p -PERL_UINT_MIN|5.004000||p -PERL_ULONG_MAX|5.004000||p -PERL_ULONG_MIN|5.004000||p -PERL_UNUSED_ARG|5.009003||p -PERL_UNUSED_CONTEXT|5.009004||p -PERL_UNUSED_DECL|5.007002||p -PERL_UNUSED_VAR|5.007002||p -PERL_UQUAD_MAX|5.004000||p -PERL_UQUAD_MIN|5.004000||p -PERL_USE_GCC_BRACE_GROUPS|5.009004||p -PERL_USHORT_MAX|5.004000||p -PERL_USHORT_MIN|5.004000||p -PERL_VERSION|5.006000||p -PL_DBsignal|5.005000||p -PL_DBsingle|||pn -PL_DBsub|||pn -PL_DBtrace|||pn -PL_Sv|5.005000||p -PL_bufend|5.011000||p -PL_bufptr|5.011000||p -PL_compiling|5.004050||p -PL_copline|5.011000||p -PL_curcop|5.004050||p -PL_curstash|5.004050||p -PL_debstash|5.004050||p -PL_defgv|5.004050||p -PL_diehook|5.004050||p -PL_dirty|5.004050||p -PL_dowarn|||pn -PL_errgv|5.004050||p -PL_error_count|5.011000||p -PL_expect|5.011000||p -PL_hexdigit|5.005000||p -PL_hints|5.005000||p -PL_in_my_stash|5.011000||p -PL_in_my|5.011000||p -PL_last_in_gv|||n -PL_laststatval|5.005000||p -PL_lex_state|5.011000||p -PL_lex_stuff|5.011000||p -PL_linestr|5.011000||p -PL_modglobal||5.005000|n -PL_na|5.004050||pn -PL_no_modify|5.006000||p -PL_ofsgv|||n -PL_parser|5.009005||p -PL_perl_destruct_level|5.004050||p -PL_perldb|5.004050||p -PL_ppaddr|5.006000||p -PL_rsfp_filters|5.004050||p -PL_rsfp|5.004050||p -PL_rs|||n -PL_signals|5.008001||p -PL_stack_base|5.004050||p -PL_stack_sp|5.004050||p -PL_statcache|5.005000||p -PL_stdingv|5.004050||p -PL_sv_arenaroot|5.004050||p -PL_sv_no|5.004050||pn -PL_sv_undef|5.004050||pn -PL_sv_yes|5.004050||pn -PL_tainted|5.004050||p -PL_tainting|5.004050||p -PL_tokenbuf|5.011000||p -POP_MULTICALL||5.011000| -POPi|||n -POPl|||n -POPn|||n -POPpbytex||5.007001|n -POPpx||5.005030|n -POPp|||n -POPs|||n -PTR2IV|5.006000||p -PTR2NV|5.006000||p -PTR2UV|5.006000||p -PTR2nat|5.009003||p -PTR2ul|5.007001||p -PTRV|5.006000||p -PUSHMARK||| -PUSH_MULTICALL||5.011000| -PUSHi||| -PUSHmortal|5.009002||p -PUSHn||| -PUSHp||| -PUSHs||| -PUSHu|5.004000||p -PUTBACK||| -PerlIO_clearerr||5.007003| -PerlIO_close||5.007003| -PerlIO_context_layers||5.009004| -PerlIO_eof||5.007003| -PerlIO_error||5.007003| -PerlIO_fileno||5.007003| -PerlIO_fill||5.007003| -PerlIO_flush||5.007003| -PerlIO_get_base||5.007003| -PerlIO_get_bufsiz||5.007003| -PerlIO_get_cnt||5.007003| -PerlIO_get_ptr||5.007003| -PerlIO_read||5.007003| -PerlIO_seek||5.007003| -PerlIO_set_cnt||5.007003| -PerlIO_set_ptrcnt||5.007003| -PerlIO_setlinebuf||5.007003| -PerlIO_stderr||5.007003| -PerlIO_stdin||5.007003| -PerlIO_stdout||5.007003| -PerlIO_tell||5.007003| -PerlIO_unread||5.007003| -PerlIO_write||5.007003| -Perl_signbit||5.009005|n -PoisonFree|5.009004||p -PoisonNew|5.009004||p -PoisonWith|5.009004||p -Poison|5.008000||p -RETVAL|||n -Renewc||| -Renew||| -SAVECLEARSV||| -SAVECOMPPAD||| -SAVEPADSV||| -SAVETMPS||| -SAVE_DEFSV|5.004050||p -SPAGAIN||| -SP||| -START_EXTERN_C|5.005000||p -START_MY_CXT|5.007003||p -STMT_END|||p -STMT_START|||p -STR_WITH_LEN|5.009003||p -ST||| -SV_CONST_RETURN|5.009003||p -SV_COW_DROP_PV|5.008001||p -SV_COW_SHARED_HASH_KEYS|5.009005||p -SV_GMAGIC|5.007002||p -SV_HAS_TRAILING_NUL|5.009004||p -SV_IMMEDIATE_UNREF|5.007001||p -SV_MUTABLE_RETURN|5.009003||p -SV_NOSTEAL|5.009002||p -SV_SMAGIC|5.009003||p -SV_UTF8_NO_ENCODING|5.008001||p -SVfARG|5.009005||p -SVf_UTF8|5.006000||p -SVf|5.006000||p -SVt_IV||| -SVt_NV||| -SVt_PVAV||| -SVt_PVCV||| -SVt_PVHV||| -SVt_PVMG||| -SVt_PV||| -Safefree||| -Slab_Alloc||| -Slab_Free||| -Slab_to_rw||| -StructCopy||| -SvCUR_set||| -SvCUR||| -SvEND||| -SvGAMAGIC||5.006001| -SvGETMAGIC|5.004050||p -SvGROW||| -SvIOK_UV||5.006000| -SvIOK_notUV||5.006000| -SvIOK_off||| -SvIOK_only_UV||5.006000| -SvIOK_only||| -SvIOK_on||| -SvIOKp||| -SvIOK||| -SvIVX||| -SvIV_nomg|5.009001||p -SvIV_set||| -SvIVx||| -SvIV||| -SvIsCOW_shared_hash||5.008003| -SvIsCOW||5.008003| -SvLEN_set||| -SvLEN||| -SvLOCK||5.007003| -SvMAGIC_set|5.009003||p -SvNIOK_off||| -SvNIOKp||| -SvNIOK||| -SvNOK_off||| -SvNOK_only||| -SvNOK_on||| -SvNOKp||| -SvNOK||| -SvNVX||| -SvNV_set||| -SvNVx||| -SvNV||| -SvOK||| -SvOOK_offset||5.011000| -SvOOK||| -SvPOK_off||| -SvPOK_only_UTF8||5.006000| -SvPOK_only||| -SvPOK_on||| -SvPOKp||| -SvPOK||| -SvPVX_const|5.009003||p -SvPVX_mutable|5.009003||p -SvPVX||| -SvPV_const|5.009003||p -SvPV_flags_const_nolen|5.009003||p -SvPV_flags_const|5.009003||p -SvPV_flags_mutable|5.009003||p -SvPV_flags|5.007002||p -SvPV_force_flags_mutable|5.009003||p -SvPV_force_flags_nolen|5.009003||p -SvPV_force_flags|5.007002||p -SvPV_force_mutable|5.009003||p -SvPV_force_nolen|5.009003||p -SvPV_force_nomg_nolen|5.009003||p -SvPV_force_nomg|5.007002||p -SvPV_force|||p -SvPV_mutable|5.009003||p -SvPV_nolen_const|5.009003||p -SvPV_nolen|5.006000||p -SvPV_nomg_const_nolen|5.009003||p -SvPV_nomg_const|5.009003||p -SvPV_nomg|5.007002||p -SvPV_renew|5.009003||p -SvPV_set||| -SvPVbyte_force||5.009002| -SvPVbyte_nolen||5.006000| -SvPVbytex_force||5.006000| -SvPVbytex||5.006000| -SvPVbyte|5.006000||p -SvPVutf8_force||5.006000| -SvPVutf8_nolen||5.006000| -SvPVutf8x_force||5.006000| -SvPVutf8x||5.006000| -SvPVutf8||5.006000| -SvPVx||| -SvPV||| -SvREFCNT_dec||| -SvREFCNT_inc_NN|5.009004||p -SvREFCNT_inc_simple_NN|5.009004||p -SvREFCNT_inc_simple_void_NN|5.009004||p -SvREFCNT_inc_simple_void|5.009004||p -SvREFCNT_inc_simple|5.009004||p -SvREFCNT_inc_void_NN|5.009004||p -SvREFCNT_inc_void|5.009004||p -SvREFCNT_inc|||p -SvREFCNT||| -SvROK_off||| -SvROK_on||| -SvROK||| -SvRV_set|5.009003||p -SvRV||| -SvRXOK||5.009005| -SvRX||5.009005| -SvSETMAGIC||| -SvSHARED_HASH|5.009003||p -SvSHARE||5.007003| -SvSTASH_set|5.009003||p -SvSTASH||| -SvSetMagicSV_nosteal||5.004000| -SvSetMagicSV||5.004000| -SvSetSV_nosteal||5.004000| -SvSetSV||| -SvTAINTED_off||5.004000| -SvTAINTED_on||5.004000| -SvTAINTED||5.004000| -SvTAINT||| -SvTRUE||| -SvTYPE||| -SvUNLOCK||5.007003| -SvUOK|5.007001|5.006000|p -SvUPGRADE||| -SvUTF8_off||5.006000| -SvUTF8_on||5.006000| -SvUTF8||5.006000| -SvUVXx|5.004000||p -SvUVX|5.004000||p -SvUV_nomg|5.009001||p -SvUV_set|5.009003||p -SvUVx|5.004000||p -SvUV|5.004000||p -SvVOK||5.008001| -SvVSTRING_mg|5.009004||p -THIS|||n -UNDERBAR|5.009002||p -UTF8_MAXBYTES|5.009002||p -UVSIZE|5.006000||p -UVTYPE|5.006000||p -UVXf|5.007001||p -UVof|5.006000||p -UVuf|5.006000||p -UVxf|5.006000||p -WARN_ALL|5.006000||p -WARN_AMBIGUOUS|5.006000||p -WARN_ASSERTIONS|5.011000||p -WARN_BAREWORD|5.006000||p -WARN_CLOSED|5.006000||p -WARN_CLOSURE|5.006000||p -WARN_DEBUGGING|5.006000||p -WARN_DEPRECATED|5.006000||p -WARN_DIGIT|5.006000||p -WARN_EXEC|5.006000||p -WARN_EXITING|5.006000||p -WARN_GLOB|5.006000||p -WARN_INPLACE|5.006000||p -WARN_INTERNAL|5.006000||p -WARN_IO|5.006000||p -WARN_LAYER|5.008000||p -WARN_MALLOC|5.006000||p -WARN_MISC|5.006000||p -WARN_NEWLINE|5.006000||p -WARN_NUMERIC|5.006000||p -WARN_ONCE|5.006000||p -WARN_OVERFLOW|5.006000||p -WARN_PACK|5.006000||p -WARN_PARENTHESIS|5.006000||p -WARN_PIPE|5.006000||p -WARN_PORTABLE|5.006000||p -WARN_PRECEDENCE|5.006000||p -WARN_PRINTF|5.006000||p -WARN_PROTOTYPE|5.006000||p -WARN_QW|5.006000||p -WARN_RECURSION|5.006000||p -WARN_REDEFINE|5.006000||p -WARN_REGEXP|5.006000||p -WARN_RESERVED|5.006000||p -WARN_SEMICOLON|5.006000||p -WARN_SEVERE|5.006000||p -WARN_SIGNAL|5.006000||p -WARN_SUBSTR|5.006000||p -WARN_SYNTAX|5.006000||p -WARN_TAINT|5.006000||p -WARN_THREADS|5.008000||p -WARN_UNINITIALIZED|5.006000||p -WARN_UNOPENED|5.006000||p -WARN_UNPACK|5.006000||p -WARN_UNTIE|5.006000||p -WARN_UTF8|5.006000||p -WARN_VOID|5.006000||p -XCPT_CATCH|5.009002||p -XCPT_RETHROW|5.009002||p -XCPT_TRY_END|5.009002||p -XCPT_TRY_START|5.009002||p -XPUSHi||| -XPUSHmortal|5.009002||p -XPUSHn||| -XPUSHp||| -XPUSHs||| -XPUSHu|5.004000||p -XSPROTO|5.010000||p -XSRETURN_EMPTY||| -XSRETURN_IV||| -XSRETURN_NO||| -XSRETURN_NV||| -XSRETURN_PV||| -XSRETURN_UNDEF||| -XSRETURN_UV|5.008001||p -XSRETURN_YES||| -XSRETURN|||p -XST_mIV||| -XST_mNO||| -XST_mNV||| -XST_mPV||| -XST_mUNDEF||| -XST_mUV|5.008001||p -XST_mYES||| -XS_VERSION_BOOTCHECK||| -XS_VERSION||| -XSprePUSH|5.006000||p -XS||| -ZeroD|5.009002||p -Zero||| -_aMY_CXT|5.007003||p -_pMY_CXT|5.007003||p -aMY_CXT_|5.007003||p -aMY_CXT|5.007003||p -aTHXR_|5.011000||p -aTHXR|5.011000||p -aTHX_|5.006000||p -aTHX|5.006000||p -add_data|||n -addmad||| -allocmy||| -amagic_call||| -amagic_cmp_locale||| -amagic_cmp||| -amagic_i_ncmp||| -amagic_ncmp||| -any_dup||| -ao||| -append_elem||| -append_list||| -append_madprops||| -apply_attrs_my||| -apply_attrs_string||5.006001| -apply_attrs||| -apply||| -atfork_lock||5.007003|n -atfork_unlock||5.007003|n -av_arylen_p||5.009003| -av_clear||| -av_create_and_push||5.009005| -av_create_and_unshift_one||5.009005| -av_delete||5.006000| -av_exists||5.006000| -av_extend||| -av_fetch||| -av_fill||| -av_iter_p||5.011000| -av_len||| -av_make||| -av_pop||| -av_push||| -av_reify||| -av_shift||| -av_store||| -av_undef||| -av_unshift||| -ax|||n -bad_type||| -bind_match||| -block_end||| -block_gimme||5.004000| -block_start||| -boolSV|5.004000||p -boot_core_PerlIO||| -boot_core_UNIVERSAL||| -boot_core_mro||| -bytes_from_utf8||5.007001| -bytes_to_uni|||n -bytes_to_utf8||5.006001| -call_argv|5.006000||p -call_atexit||5.006000| -call_list||5.004000| -call_method|5.006000||p -call_pv|5.006000||p -call_sv|5.006000||p -calloc||5.007002|n -cando||| -cast_i32||5.006000| -cast_iv||5.006000| -cast_ulong||5.006000| -cast_uv||5.006000| -check_type_and_open||| -check_uni||| -checkcomma||| -checkposixcc||| -ckWARN|5.006000||p -ck_anoncode||| -ck_bitop||| -ck_concat||| -ck_defined||| -ck_delete||| -ck_die||| -ck_each||| -ck_eof||| -ck_eval||| -ck_exec||| -ck_exists||| -ck_exit||| -ck_ftst||| -ck_fun||| -ck_glob||| -ck_grep||| -ck_index||| -ck_join||| -ck_lfun||| -ck_listiob||| -ck_match||| -ck_method||| -ck_null||| -ck_open||| -ck_readline||| -ck_repeat||| -ck_require||| -ck_return||| -ck_rfun||| -ck_rvconst||| -ck_sassign||| -ck_select||| -ck_shift||| -ck_sort||| -ck_spair||| -ck_split||| -ck_subr||| -ck_substr||| -ck_svconst||| -ck_trunc||| -ck_unpack||| -ckwarn_d||5.009003| -ckwarn||5.009003| -cl_and|||n -cl_anything|||n -cl_init_zero|||n -cl_init|||n -cl_is_anything|||n -cl_or|||n -clear_placeholders||| -closest_cop||| -convert||| -cop_free||| -cr_textfilter||| -create_eval_scope||| -croak_nocontext|||vn -croak_xs_usage||5.011000| -croak|||v -csighandler||5.009003|n -curmad||| -custom_op_desc||5.007003| -custom_op_name||5.007003| -cv_ckproto_len||| -cv_clone||| -cv_const_sv||5.004000| -cv_dump||| -cv_undef||| -cx_dump||5.005000| -cx_dup||| -cxinc||| -dAXMARK|5.009003||p -dAX|5.007002||p -dITEMS|5.007002||p -dMARK||| -dMULTICALL||5.009003| -dMY_CXT_SV|5.007003||p -dMY_CXT|5.007003||p -dNOOP|5.006000||p -dORIGMARK||| -dSP||| -dTHR|5.004050||p -dTHXR|5.011000||p -dTHXa|5.006000||p -dTHXoa|5.006000||p -dTHX|5.006000||p -dUNDERBAR|5.009002||p -dVAR|5.009003||p -dXCPT|5.009002||p -dXSARGS||| -dXSI32||| -dXSTARG|5.006000||p -deb_curcv||| -deb_nocontext|||vn -deb_stack_all||| -deb_stack_n||| -debop||5.005000| -debprofdump||5.005000| -debprof||| -debstackptrs||5.007003| -debstack||5.007003| -debug_start_match||| -deb||5.007003|v -del_sv||| -delete_eval_scope||| -delimcpy||5.004000| -deprecate_old||| -deprecate||| -despatch_signals||5.007001| -destroy_matcher||| -die_nocontext|||vn -die_where||| -die|||v -dirp_dup||| -div128||| -djSP||| -do_aexec5||| -do_aexec||| -do_aspawn||| -do_binmode||5.004050| -do_chomp||| -do_chop||| -do_close||| -do_dump_pad||| -do_eof||| -do_exec3||| -do_execfree||| -do_exec||| -do_gv_dump||5.006000| -do_gvgv_dump||5.006000| -do_hv_dump||5.006000| -do_ipcctl||| -do_ipcget||| -do_join||| -do_kv||| -do_magic_dump||5.006000| -do_msgrcv||| -do_msgsnd||| -do_oddball||| -do_op_dump||5.006000| -do_op_xmldump||| -do_open9||5.006000| -do_openn||5.007001| -do_open||5.004000| -do_pmop_dump||5.006000| -do_pmop_xmldump||| -do_print||| -do_readline||| -do_seek||| -do_semop||| -do_shmio||| -do_smartmatch||| -do_spawn_nowait||| -do_spawn||| -do_sprintf||| -do_sv_dump||5.006000| -do_sysseek||| -do_tell||| -do_trans_complex_utf8||| -do_trans_complex||| -do_trans_count_utf8||| -do_trans_count||| -do_trans_simple_utf8||| -do_trans_simple||| -do_trans||| -do_vecget||| -do_vecset||| -do_vop||| -docatch||| -doeval||| -dofile||| -dofindlabel||| -doform||| -doing_taint||5.008001|n -dooneliner||| -doopen_pm||| -doparseform||| -dopoptoeval||| -dopoptogiven||| -dopoptolabel||| -dopoptoloop||| -dopoptosub_at||| -dopoptowhen||| -doref||5.009003| -dounwind||| -dowantarray||| -dump_all||5.006000| -dump_eval||5.006000| -dump_exec_pos||| -dump_fds||| -dump_form||5.006000| -dump_indent||5.006000|v -dump_mstats||| -dump_packsubs||5.006000| -dump_sub||5.006000| -dump_sv_child||| -dump_trie_interim_list||| -dump_trie_interim_table||| -dump_trie||| -dump_vindent||5.006000| -dumpuntil||| -dup_attrlist||| -emulate_cop_io||| -eval_pv|5.006000||p -eval_sv|5.006000||p -exec_failed||| -expect_number||| -fbm_compile||5.005000| -fbm_instr||5.005000| -feature_is_enabled||| -fetch_cop_label||5.011000| -filter_add||| -filter_del||| -filter_gets||| -filter_read||| -find_and_forget_pmops||| -find_array_subscript||| -find_beginning||| -find_byclass||| -find_hash_subscript||| -find_in_my_stash||| -find_runcv||5.008001| -find_rundefsvoffset||5.009002| -find_script||| -find_uninit_var||| -first_symbol|||n -fold_constants||| -forbid_setid||| -force_ident||| -force_list||| -force_next||| -force_version||| -force_word||| -forget_pmop||| -form_nocontext|||vn -form||5.004000|v -fp_dup||| -fprintf_nocontext|||vn -free_global_struct||| -free_tied_hv_pool||| -free_tmps||| -gen_constant_list||| -get_arena||| -get_aux_mg||| -get_av|5.006000||p -get_context||5.006000|n -get_cvn_flags||5.009005| -get_cv|5.006000||p -get_db_sub||| -get_debug_opts||| -get_hash_seed||| -get_hv|5.006000||p -get_isa_hash||| -get_mstats||| -get_no_modify||| -get_num||| -get_op_descs||5.005000| -get_op_names||5.005000| -get_opargs||| -get_ppaddr||5.006000| -get_re_arg||| -get_sv|5.006000||p -get_vtbl||5.005030| -getcwd_sv||5.007002| -getenv_len||| -glob_2number||| -glob_assign_glob||| -glob_assign_ref||| -gp_dup||| -gp_free||| -gp_ref||| -grok_bin|5.007003||p -grok_hex|5.007003||p -grok_number|5.007002||p -grok_numeric_radix|5.007002||p -grok_oct|5.007003||p -group_end||| -gv_AVadd||| -gv_HVadd||| -gv_IOadd||| -gv_SVadd||| -gv_autoload4||5.004000| -gv_check||| -gv_const_sv||5.009003| -gv_dump||5.006000| -gv_efullname3||5.004000| -gv_efullname4||5.006001| -gv_efullname||| -gv_ename||| -gv_fetchfile_flags||5.009005| -gv_fetchfile||| -gv_fetchmeth_autoload||5.007003| -gv_fetchmethod_autoload||5.004000| -gv_fetchmethod_flags||5.011000| -gv_fetchmethod||| -gv_fetchmeth||| -gv_fetchpvn_flags|5.009002||p -gv_fetchpvs|5.009004||p -gv_fetchpv||| -gv_fetchsv||5.009002| -gv_fullname3||5.004000| -gv_fullname4||5.006001| -gv_fullname||| -gv_get_super_pkg||| -gv_handler||5.007001| -gv_init_sv||| -gv_init||| -gv_name_set||5.009004| -gv_stashpvn|5.004000||p -gv_stashpvs|5.009003||p -gv_stashpv||| -gv_stashsv||| -he_dup||| -hek_dup||| -hfreeentries||| -hsplit||| -hv_assert||5.011000| -hv_auxinit|||n -hv_backreferences_p||| -hv_clear_placeholders||5.009001| -hv_clear||| -hv_common_key_len||5.010000| -hv_common||5.010000| -hv_copy_hints_hv||| -hv_delayfree_ent||5.004000| -hv_delete_common||| -hv_delete_ent||5.004000| -hv_delete||| -hv_eiter_p||5.009003| -hv_eiter_set||5.009003| -hv_exists_ent||5.004000| -hv_exists||| -hv_fetch_ent||5.004000| -hv_fetchs|5.009003||p -hv_fetch||| -hv_free_ent||5.004000| -hv_iterinit||| -hv_iterkeysv||5.004000| -hv_iterkey||| -hv_iternext_flags||5.008000| -hv_iternextsv||| -hv_iternext||| -hv_iterval||| -hv_kill_backrefs||| -hv_ksplit||5.004000| -hv_magic_check|||n -hv_magic||| -hv_name_set||5.009003| -hv_notallowed||| -hv_placeholders_get||5.009003| -hv_placeholders_p||5.009003| -hv_placeholders_set||5.009003| -hv_riter_p||5.009003| -hv_riter_set||5.009003| -hv_scalar||5.009001| -hv_store_ent||5.004000| -hv_store_flags||5.008000| -hv_stores|5.009004||p -hv_store||| -hv_undef||| -ibcmp_locale||5.004000| -ibcmp_utf8||5.007003| -ibcmp||| -incline||| -incpush_if_exists||| -incpush_use_sep||| -incpush||| -ingroup||| -init_argv_symbols||| -init_debugger||| -init_global_struct||| -init_i18nl10n||5.006000| -init_i18nl14n||5.006000| -init_ids||| -init_interp||| -init_main_stash||| -init_perllib||| -init_postdump_symbols||| -init_predump_symbols||| -init_stacks||5.005000| -init_tm||5.007002| -instr||| -intro_my||| -intuit_method||| -intuit_more||| -invert||| -io_close||| -isALNUMC|5.006000||p -isALNUM||| -isALPHA||| -isASCII|5.006000||p -isBLANK|5.006001||p -isCNTRL|5.006000||p -isDIGIT||| -isGRAPH|5.006000||p -isGV_with_GP|5.009004||p -isLOWER||| -isPRINT|5.004000||p -isPSXSPC|5.006001||p -isPUNCT|5.006000||p -isSPACE||| -isUPPER||| -isXDIGIT|5.006000||p -is_an_int||| -is_gv_magical_sv||| -is_handle_constructor|||n -is_list_assignment||| -is_lvalue_sub||5.007001| -is_uni_alnum_lc||5.006000| -is_uni_alnumc_lc||5.006000| -is_uni_alnumc||5.006000| -is_uni_alnum||5.006000| -is_uni_alpha_lc||5.006000| -is_uni_alpha||5.006000| -is_uni_ascii_lc||5.006000| -is_uni_ascii||5.006000| -is_uni_cntrl_lc||5.006000| -is_uni_cntrl||5.006000| -is_uni_digit_lc||5.006000| -is_uni_digit||5.006000| -is_uni_graph_lc||5.006000| -is_uni_graph||5.006000| -is_uni_idfirst_lc||5.006000| -is_uni_idfirst||5.006000| -is_uni_lower_lc||5.006000| -is_uni_lower||5.006000| -is_uni_print_lc||5.006000| -is_uni_print||5.006000| -is_uni_punct_lc||5.006000| -is_uni_punct||5.006000| -is_uni_space_lc||5.006000| -is_uni_space||5.006000| -is_uni_upper_lc||5.006000| -is_uni_upper||5.006000| -is_uni_xdigit_lc||5.006000| -is_uni_xdigit||5.006000| -is_utf8_alnumc||5.006000| -is_utf8_alnum||5.006000| -is_utf8_alpha||5.006000| -is_utf8_ascii||5.006000| -is_utf8_char_slow|||n -is_utf8_char||5.006000| -is_utf8_cntrl||5.006000| -is_utf8_common||| -is_utf8_digit||5.006000| -is_utf8_graph||5.006000| -is_utf8_idcont||5.008000| -is_utf8_idfirst||5.006000| -is_utf8_lower||5.006000| -is_utf8_mark||5.006000| -is_utf8_print||5.006000| -is_utf8_punct||5.006000| -is_utf8_space||5.006000| -is_utf8_string_loclen||5.009003| -is_utf8_string_loc||5.008001| -is_utf8_string||5.006001| -is_utf8_upper||5.006000| -is_utf8_xdigit||5.006000| -isa_lookup||| -items|||n -ix|||n -jmaybe||| -join_exact||| -keyword||| -leave_scope||| -lex_end||| -lex_start||| -linklist||| -listkids||| -list||| -load_module_nocontext|||vn -load_module|5.006000||pv -localize||| -looks_like_bool||| -looks_like_number||| -lop||| -mPUSHi|5.009002||p -mPUSHn|5.009002||p -mPUSHp|5.009002||p -mPUSHs|5.011000||p -mPUSHu|5.009002||p -mXPUSHi|5.009002||p -mXPUSHn|5.009002||p -mXPUSHp|5.009002||p -mXPUSHs|5.011000||p -mXPUSHu|5.009002||p -mad_free||| -madlex||| -madparse||| -magic_clear_all_env||| -magic_clearenv||| -magic_clearhint||| -magic_clearisa||| -magic_clearpack||| -magic_clearsig||| -magic_dump||5.006000| -magic_existspack||| -magic_freearylen_p||| -magic_freeovrld||| -magic_getarylen||| -magic_getdefelem||| -magic_getnkeys||| -magic_getpack||| -magic_getpos||| -magic_getsig||| -magic_getsubstr||| -magic_gettaint||| -magic_getuvar||| -magic_getvec||| -magic_get||| -magic_killbackrefs||| -magic_len||| -magic_methcall||| -magic_methpack||| -magic_nextpack||| -magic_regdata_cnt||| -magic_regdatum_get||| -magic_regdatum_set||| -magic_scalarpack||| -magic_set_all_env||| -magic_setamagic||| -magic_setarylen||| -magic_setcollxfrm||| -magic_setdbline||| -magic_setdefelem||| -magic_setenv||| -magic_sethint||| -magic_setisa||| -magic_setmglob||| -magic_setnkeys||| -magic_setpack||| -magic_setpos||| -magic_setregexp||| -magic_setsig||| -magic_setsubstr||| -magic_settaint||| -magic_setutf8||| -magic_setuvar||| -magic_setvec||| -magic_set||| -magic_sizepack||| -magic_wipepack||| -make_matcher||| -make_trie_failtable||| -make_trie||| -malloc_good_size|||n -malloced_size|||n -malloc||5.007002|n -markstack_grow||| -matcher_matches_sv||| -measure_struct||| -memEQ|5.004000||p -memNE|5.004000||p -mem_collxfrm||| -mem_log_common|||n -mess_alloc||| -mess_nocontext|||vn -mess||5.006000|v -method_common||| -mfree||5.007002|n -mg_clear||| -mg_copy||| -mg_dup||| -mg_find||| -mg_free||| -mg_get||| -mg_length||5.005000| -mg_localize||| -mg_magical||| -mg_set||| -mg_size||5.005000| -mini_mktime||5.007002| -missingterm||| -mode_from_discipline||| -modkids||| -mod||| -more_bodies||| -more_sv||| -moreswitches||| -mro_get_from_name||5.011000| -mro_get_linear_isa_dfs||| -mro_get_linear_isa||5.009005| -mro_get_private_data||5.011000| -mro_isa_changed_in||| -mro_meta_dup||| -mro_meta_init||| -mro_method_changed_in||5.009005| -mro_register||5.011000| -mro_set_mro||5.011000| -mro_set_private_data||5.011000| -mul128||| -mulexp10|||n -my_atof2||5.007002| -my_atof||5.006000| -my_attrs||| -my_bcopy|||n -my_betoh16|||n -my_betoh32|||n -my_betoh64|||n -my_betohi|||n -my_betohl|||n -my_betohs|||n -my_bzero|||n -my_chsize||| -my_clearenv||| -my_cxt_index||| -my_cxt_init||| -my_dirfd||5.009005| -my_exit_jump||| -my_exit||| -my_failure_exit||5.004000| -my_fflush_all||5.006000| -my_fork||5.007003|n -my_htobe16|||n -my_htobe32|||n -my_htobe64|||n -my_htobei|||n -my_htobel|||n -my_htobes|||n -my_htole16|||n -my_htole32|||n -my_htole64|||n -my_htolei|||n -my_htolel|||n -my_htoles|||n -my_htonl||| -my_kid||| -my_letoh16|||n -my_letoh32|||n -my_letoh64|||n -my_letohi|||n -my_letohl|||n -my_letohs|||n -my_lstat||| -my_memcmp||5.004000|n -my_memset|||n -my_ntohl||| -my_pclose||5.004000| -my_popen_list||5.007001| -my_popen||5.004000| -my_setenv||| -my_snprintf|5.009004||pvn -my_socketpair||5.007003|n -my_sprintf|5.009003||pvn -my_stat||| -my_strftime||5.007002| -my_strlcat|5.009004||pn -my_strlcpy|5.009004||pn -my_swabn|||n -my_swap||| -my_unexec||| -my_vsnprintf||5.009004|n -need_utf8|||n -newANONATTRSUB||5.006000| -newANONHASH||| -newANONLIST||| -newANONSUB||| -newASSIGNOP||| -newATTRSUB||5.006000| -newAVREF||| -newAV||| -newBINOP||| -newCONDOP||| -newCONSTSUB|5.004050||p -newCVREF||| -newDEFSVOP||| -newFORM||| -newFOROP||| -newGIVENOP||5.009003| -newGIVWHENOP||| -newGP||| -newGVOP||| -newGVREF||| -newGVgen||| -newHVREF||| -newHVhv||5.005000| -newHV||| -newIO||| -newLISTOP||| -newLOGOP||| -newLOOPEX||| -newLOOPOP||| -newMADPROP||| -newMADsv||| -newMYSUB||| -newNULLLIST||| -newOP||| -newPADOP||| -newPMOP||| -newPROG||| -newPVOP||| -newRANGE||| -newRV_inc|5.004000||p -newRV_noinc|5.004000||p -newRV||| -newSLICEOP||| -newSTATEOP||| -newSUB||| -newSVOP||| -newSVREF||| -newSV_type|5.009005||p -newSVhek||5.009003| -newSViv||| -newSVnv||| -newSVpvf_nocontext|||vn -newSVpvf||5.004000|v -newSVpvn_flags|5.011000||p -newSVpvn_share|5.007001||p -newSVpvn_utf8|5.011000||p -newSVpvn|5.004050||p -newSVpvs_flags|5.011000||p -newSVpvs_share||5.009003| -newSVpvs|5.009003||p -newSVpv||| -newSVrv||| -newSVsv||| -newSVuv|5.006000||p -newSV||| -newTOKEN||| -newUNOP||| -newWHENOP||5.009003| -newWHILEOP||5.009003| -newXS_flags||5.009004| -newXSproto||5.006000| -newXS||5.006000| -new_collate||5.006000| -new_constant||| -new_ctype||5.006000| -new_he||| -new_logop||| -new_numeric||5.006000| -new_stackinfo||5.005000| -new_version||5.009000| -new_warnings_bitfield||| -next_symbol||| -nextargv||| -nextchar||| -ninstr||| -no_bareword_allowed||| -no_fh_allowed||| -no_op||| -not_a_number||| -nothreadhook||5.008000| -nuke_stacks||| -num_overflow|||n -offer_nice_chunk||| -oopsAV||| -oopsHV||| -op_clear||| -op_const_sv||| -op_dump||5.006000| -op_free||| -op_getmad_weak||| -op_getmad||| -op_null||5.007002| -op_refcnt_dec||| -op_refcnt_inc||| -op_refcnt_lock||5.009002| -op_refcnt_unlock||5.009002| -op_xmldump||| -open_script||| -pMY_CXT_|5.007003||p -pMY_CXT|5.007003||p -pTHX_|5.006000||p -pTHX|5.006000||p -packWARN|5.007003||p -pack_cat||5.007003| -pack_rec||| -package||| -packlist||5.008001| -pad_add_anon||| -pad_add_name||| -pad_alloc||| -pad_block_start||| -pad_check_dup||| -pad_compname_type||| -pad_findlex||| -pad_findmy||| -pad_fixup_inner_anons||| -pad_free||| -pad_leavemy||| -pad_new||| -pad_peg|||n -pad_push||| -pad_reset||| -pad_setsv||| -pad_sv||5.011000| -pad_swipe||| -pad_tidy||| -pad_undef||| -parse_body||| -parse_unicode_opts||| -parser_dup||| -parser_free||| -path_is_absolute|||n -peep||| -pending_Slabs_to_ro||| -perl_alloc_using|||n -perl_alloc|||n -perl_clone_using|||n -perl_clone|||n -perl_construct|||n -perl_destruct||5.007003|n -perl_free|||n -perl_parse||5.006000|n -perl_run|||n -pidgone||| -pm_description||| -pmflag||| -pmop_dump||5.006000| -pmop_xmldump||| -pmruntime||| -pmtrans||| -pop_scope||| -pregcomp||5.009005| -pregexec||| -pregfree2||5.011000| -pregfree||| -prepend_elem||| -prepend_madprops||| -printbuf||| -printf_nocontext|||vn -process_special_blocks||| -ptr_table_clear||5.009005| -ptr_table_fetch||5.009005| -ptr_table_find|||n -ptr_table_free||5.009005| -ptr_table_new||5.009005| -ptr_table_split||5.009005| -ptr_table_store||5.009005| -push_scope||| -put_byte||| -pv_display|5.006000||p -pv_escape|5.009004||p -pv_pretty|5.009004||p -pv_uni_display||5.007003| -qerror||| -qsortsvu||| -re_compile||5.009005| -re_croak2||| -re_dup_guts||| -re_intuit_start||5.009005| -re_intuit_string||5.006000| -readpipe_override||| -realloc||5.007002|n -reentrant_free||| -reentrant_init||| -reentrant_retry|||vn -reentrant_size||| -ref_array_or_hash||| -refcounted_he_chain_2hv||| -refcounted_he_fetch||| -refcounted_he_free||| -refcounted_he_new_common||| -refcounted_he_new||| -refcounted_he_value||| -refkids||| -refto||| -ref||5.011000| -reg_check_named_buff_matched||| -reg_named_buff_all||5.009005| -reg_named_buff_exists||5.009005| -reg_named_buff_fetch||5.009005| -reg_named_buff_firstkey||5.009005| -reg_named_buff_iter||| -reg_named_buff_nextkey||5.009005| -reg_named_buff_scalar||5.009005| -reg_named_buff||| -reg_namedseq||| -reg_node||| -reg_numbered_buff_fetch||| -reg_numbered_buff_length||| -reg_numbered_buff_store||| -reg_qr_package||| -reg_recode||| -reg_scan_name||| -reg_skipcomment||| -reg_temp_copy||| -reganode||| -regatom||| -regbranch||| -regclass_swash||5.009004| -regclass||| -regcppop||| -regcppush||| -regcurly|||n -regdump_extflags||| -regdump||5.005000| -regdupe_internal||| -regexec_flags||5.005000| -regfree_internal||5.009005| -reghop3|||n -reghop4|||n -reghopmaybe3|||n -reginclass||| -reginitcolors||5.006000| -reginsert||| -regmatch||| -regnext||5.005000| -regpiece||| -regpposixcc||| -regprop||| -regrepeat||| -regtail_study||| -regtail||| -regtry||| -reguni||| -regwhite|||n -reg||| -repeatcpy||| -report_evil_fh||| -report_uninit||| -require_pv||5.006000| -require_tie_mod||| -restore_magic||| -rninstr||| -rsignal_restore||| -rsignal_save||| -rsignal_state||5.004000| -rsignal||5.004000| -run_body||| -run_user_filter||| -runops_debug||5.005000| -runops_standard||5.005000| -rvpv_dup||| -rxres_free||| -rxres_restore||| -rxres_save||| -safesyscalloc||5.006000|n -safesysfree||5.006000|n -safesysmalloc||5.006000|n -safesysrealloc||5.006000|n -same_dirent||| -save_I16||5.004000| -save_I32||| -save_I8||5.006000| -save_adelete||5.011000| -save_aelem||5.004050| -save_alloc||5.006000| -save_aptr||| -save_ary||| -save_bool||5.008001| -save_clearsv||| -save_delete||| -save_destructor_x||5.006000| -save_destructor||5.006000| -save_freeop||| -save_freepv||| -save_freesv||| -save_generic_pvref||5.006001| -save_generic_svref||5.005030| -save_gp||5.004000| -save_hash||| -save_hek_flags|||n -save_helem_flags||5.011000| -save_helem||5.004050| -save_hints||| -save_hptr||| -save_int||| -save_item||| -save_iv||5.005000| -save_lines||| -save_list||| -save_long||| -save_magic||| -save_mortalizesv||5.007001| -save_nogv||| -save_op||| -save_padsv_and_mortalize||5.011000| -save_pptr||| -save_pushi32ptr||| -save_pushptri32ptr||| -save_pushptrptr||| -save_pushptr||5.011000| -save_re_context||5.006000| -save_scalar_at||| -save_scalar||| -save_set_svflags||5.009000| -save_shared_pvref||5.007003| -save_sptr||| -save_svref||| -save_vptr||5.006000| -savepvn||| -savepvs||5.009003| -savepv||| -savesharedpvn||5.009005| -savesharedpv||5.007003| -savestack_grow_cnt||5.008001| -savestack_grow||| -savesvpv||5.009002| -sawparens||| -scalar_mod_type|||n -scalarboolean||| -scalarkids||| -scalarseq||| -scalarvoid||| -scalar||| -scan_bin||5.006000| -scan_commit||| -scan_const||| -scan_formline||| -scan_heredoc||| -scan_hex||| -scan_ident||| -scan_inputsymbol||| -scan_num||5.007001| -scan_oct||| -scan_pat||| -scan_str||| -scan_subst||| -scan_trans||| -scan_version||5.009001| -scan_vstring||5.009005| -scan_word||| -scope||| -screaminstr||5.005000| -search_const||| -seed||5.008001| -sequence_num||| -sequence_tail||| -sequence||| -set_context||5.006000|n -set_numeric_local||5.006000| -set_numeric_radix||5.006000| -set_numeric_standard||5.006000| -setdefout||| -share_hek_flags||| -share_hek||5.004000| -si_dup||| -sighandler|||n -simplify_sort||| -skipspace0||| -skipspace1||| -skipspace2||| -skipspace||| -softref2xv||| -sortcv_stacked||| -sortcv_xsub||| -sortcv||| -sortsv_flags||5.009003| -sortsv||5.007003| -space_join_names_mortal||| -ss_dup||| -stack_grow||| -start_force||| -start_glob||| -start_subparse||5.004000| -stashpv_hvname_match||5.011000| -stdize_locale||| -store_cop_label||| -strEQ||| -strGE||| -strGT||| -strLE||| -strLT||| -strNE||| -str_to_version||5.006000| -strip_return||| -strnEQ||| -strnNE||| -study_chunk||| -sub_crush_depth||| -sublex_done||| -sublex_push||| -sublex_start||| -sv_2bool||| -sv_2cv||| -sv_2io||| -sv_2iuv_common||| -sv_2iuv_non_preserve||| -sv_2iv_flags||5.009001| -sv_2iv||| -sv_2mortal||| -sv_2num||| -sv_2nv||| -sv_2pv_flags|5.007002||p -sv_2pv_nolen|5.006000||p -sv_2pvbyte_nolen|5.006000||p -sv_2pvbyte|5.006000||p -sv_2pvutf8_nolen||5.006000| -sv_2pvutf8||5.006000| -sv_2pv||| -sv_2uv_flags||5.009001| -sv_2uv|5.004000||p -sv_add_arena||| -sv_add_backref||| -sv_backoff||| -sv_bless||| -sv_cat_decode||5.008001| -sv_catpv_mg|5.004050||p -sv_catpvf_mg_nocontext|||pvn -sv_catpvf_mg|5.006000|5.004000|pv -sv_catpvf_nocontext|||vn -sv_catpvf||5.004000|v -sv_catpvn_flags||5.007002| -sv_catpvn_mg|5.004050||p -sv_catpvn_nomg|5.007002||p -sv_catpvn||| -sv_catpvs|5.009003||p -sv_catpv||| -sv_catsv_flags||5.007002| -sv_catsv_mg|5.004050||p -sv_catsv_nomg|5.007002||p -sv_catsv||| -sv_catxmlpvn||| -sv_catxmlsv||| -sv_chop||| -sv_clean_all||| -sv_clean_objs||| -sv_clear||| -sv_cmp_locale||5.004000| -sv_cmp||| -sv_collxfrm||| -sv_compile_2op||5.008001| -sv_copypv||5.007003| -sv_dec||| -sv_del_backref||| -sv_derived_from||5.004000| -sv_destroyable||5.010000| -sv_does||5.009004| -sv_dump||| -sv_dup_inc_multiple||| -sv_dup||| -sv_eq||| -sv_exp_grow||| -sv_force_normal_flags||5.007001| -sv_force_normal||5.006000| -sv_free2||| -sv_free_arenas||| -sv_free||| -sv_gets||5.004000| -sv_grow||| -sv_i_ncmp||| -sv_inc||| -sv_insert_flags||5.011000| -sv_insert||| -sv_isa||| -sv_isobject||| -sv_iv||5.005000| -sv_kill_backrefs||| -sv_len_utf8||5.006000| -sv_len||| -sv_magic_portable|5.011000|5.004000|p -sv_magicext||5.007003| -sv_magic||| -sv_mortalcopy||| -sv_ncmp||| -sv_newmortal||| -sv_newref||| -sv_nolocking||5.007003| -sv_nosharing||5.007003| -sv_nounlocking||| -sv_nv||5.005000| -sv_peek||5.005000| -sv_pos_b2u_midway||| -sv_pos_b2u||5.006000| -sv_pos_u2b_cached||| -sv_pos_u2b_forwards|||n -sv_pos_u2b_midway|||n -sv_pos_u2b||5.006000| -sv_pvbyten_force||5.006000| -sv_pvbyten||5.006000| -sv_pvbyte||5.006000| -sv_pvn_force_flags|5.007002||p -sv_pvn_force||| -sv_pvn_nomg|5.007003|5.005000|p -sv_pvn||5.005000| -sv_pvutf8n_force||5.006000| -sv_pvutf8n||5.006000| -sv_pvutf8||5.006000| -sv_pv||5.006000| -sv_recode_to_utf8||5.007003| -sv_reftype||| -sv_release_COW||| -sv_replace||| -sv_report_used||| -sv_reset||| -sv_rvweaken||5.006000| -sv_setiv_mg|5.004050||p -sv_setiv||| -sv_setnv_mg|5.006000||p -sv_setnv||| -sv_setpv_mg|5.004050||p -sv_setpvf_mg_nocontext|||pvn -sv_setpvf_mg|5.006000|5.004000|pv -sv_setpvf_nocontext|||vn -sv_setpvf||5.004000|v -sv_setpviv_mg||5.008001| -sv_setpviv||5.008001| -sv_setpvn_mg|5.004050||p -sv_setpvn||| -sv_setpvs|5.009004||p -sv_setpv||| -sv_setref_iv||| -sv_setref_nv||| -sv_setref_pvn||| -sv_setref_pv||| -sv_setref_uv||5.007001| -sv_setsv_cow||| -sv_setsv_flags||5.007002| -sv_setsv_mg|5.004050||p -sv_setsv_nomg|5.007002||p -sv_setsv||| -sv_setuv_mg|5.004050||p -sv_setuv|5.004000||p -sv_tainted||5.004000| -sv_taint||5.004000| -sv_true||5.005000| -sv_unglob||| -sv_uni_display||5.007003| -sv_unmagic||| -sv_unref_flags||5.007001| -sv_unref||| -sv_untaint||5.004000| -sv_upgrade||| -sv_usepvn_flags||5.009004| -sv_usepvn_mg|5.004050||p -sv_usepvn||| -sv_utf8_decode||5.006000| -sv_utf8_downgrade||5.006000| -sv_utf8_encode||5.006000| -sv_utf8_upgrade_flags_grow||5.011000| -sv_utf8_upgrade_flags||5.007002| -sv_utf8_upgrade_nomg||5.007002| -sv_utf8_upgrade||5.007001| -sv_uv|5.005000||p -sv_vcatpvf_mg|5.006000|5.004000|p -sv_vcatpvfn||5.004000| -sv_vcatpvf|5.006000|5.004000|p -sv_vsetpvf_mg|5.006000|5.004000|p -sv_vsetpvfn||5.004000| -sv_vsetpvf|5.006000|5.004000|p -sv_xmlpeek||| -svtype||| -swallow_bom||| -swap_match_buff||| -swash_fetch||5.007002| -swash_get||| -swash_init||5.006000| -sys_init3||5.010000|n -sys_init||5.010000|n -sys_intern_clear||| -sys_intern_dup||| -sys_intern_init||| -sys_term||5.010000|n -taint_env||| -taint_proper||| -tmps_grow||5.006000| -toLOWER||| -toUPPER||| -to_byte_substr||| -to_uni_fold||5.007003| -to_uni_lower_lc||5.006000| -to_uni_lower||5.007003| -to_uni_title_lc||5.006000| -to_uni_title||5.007003| -to_uni_upper_lc||5.006000| -to_uni_upper||5.007003| -to_utf8_case||5.007003| -to_utf8_fold||5.007003| -to_utf8_lower||5.007003| -to_utf8_substr||| -to_utf8_title||5.007003| -to_utf8_upper||5.007003| -token_free||| -token_getmad||| -tokenize_use||| -tokeq||| -tokereport||| -too_few_arguments||| -too_many_arguments||| -uiv_2buf|||n -unlnk||| -unpack_rec||| -unpack_str||5.007003| -unpackstring||5.008001| -unshare_hek_or_pvn||| -unshare_hek||| -unsharepvn||5.004000| -unwind_handler_stack||| -update_debugger_info||| -upg_version||5.009005| -usage||| -utf16_to_utf8_reversed||5.006001| -utf16_to_utf8||5.006001| -utf8_distance||5.006000| -utf8_hop||5.006000| -utf8_length||5.007001| -utf8_mg_pos_cache_update||| -utf8_to_bytes||5.006001| -utf8_to_uvchr||5.007001| -utf8_to_uvuni||5.007001| -utf8n_to_uvchr||| -utf8n_to_uvuni||5.007001| -utilize||| -uvchr_to_utf8_flags||5.007003| -uvchr_to_utf8||| -uvuni_to_utf8_flags||5.007003| -uvuni_to_utf8||5.007001| -validate_suid||| -varname||| -vcmp||5.009000| -vcroak||5.006000| -vdeb||5.007003| -vdie_common||| -vdie_croak_common||| -vdie||| -vform||5.006000| -visit||| -vivify_defelem||| -vivify_ref||| -vload_module|5.006000||p -vmess||5.006000| -vnewSVpvf|5.006000|5.004000|p -vnormal||5.009002| -vnumify||5.009000| -vstringify||5.009000| -vverify||5.009003| -vwarner||5.006000| -vwarn||5.006000| -wait4pid||| -warn_nocontext|||vn -warner_nocontext|||vn -warner|5.006000|5.004000|pv -warn|||v -watch||| -whichsig||| -write_no_mem||| -write_to_stderr||| -xmldump_all||| -xmldump_attr||| -xmldump_eval||| -xmldump_form||| -xmldump_indent|||v -xmldump_packsubs||| -xmldump_sub||| -xmldump_vindent||| -yyerror||| -yylex||| -yyparse||| -yywarn||| -); - -if (exists $opt{'list-unsupported'}) { - my $f; - for $f (sort { lc $a cmp lc $b } keys %API) { - next unless $API{$f}{todo}; - print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n"; - } - exit 0; -} - -# Scan for possible replacement candidates - -my(%replace, %need, %hints, %warnings, %depends); -my $replace = 0; -my($hint, $define, $function); - -sub find_api -{ - my $code = shift; - $code =~ s{ - / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*) - | "[^"\\]*(?:\\.[^"\\]*)*" - | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx; - grep { exists $API{$_} } $code =~ /(\w+)/mg; -} - -while () { - if ($hint) { - my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings; - if (m{^\s*\*\s(.*?)\s*$}) { - for (@{$hint->[1]}) { - $h->{$_} ||= ''; # suppress warning with older perls - $h->{$_} .= "$1\n"; - } - } - else { undef $hint } - } - - $hint = [$1, [split /,?\s+/, $2]] - if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$}; - - if ($define) { - if ($define->[1] =~ /\\$/) { - $define->[1] .= $_; - } - else { - if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) { - my @n = find_api($define->[1]); - push @{$depends{$define->[0]}}, @n if @n - } - undef $define; - } - } - - $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)}; - - if ($function) { - if (/^}/) { - if (exists $API{$function->[0]}) { - my @n = find_api($function->[1]); - push @{$depends{$function->[0]}}, @n if @n - } - undef $function; - } - else { - $function->[1] .= $_; - } - } - - $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)}; - - $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$}; - $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)}; - $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce}; - $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$}; - - if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) { - my @deps = map { s/\s+//g; $_ } split /,/, $3; - my $d; - for $d (map { s/\s+//g; $_ } split /,/, $1) { - push @{$depends{$d}}, @deps; - } - } - - $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; -} - -for (values %depends) { - my %s; - $_ = [sort grep !$s{$_}++, @$_]; -} - -if (exists $opt{'api-info'}) { - my $f; - my $count = 0; - my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; - for $f (sort { lc $a cmp lc $b } keys %API) { - next unless $f =~ /$match/; - print "\n=== $f ===\n\n"; - my $info = 0; - if ($API{$f}{base} || $API{$f}{todo}) { - my $base = format_version($API{$f}{base} || $API{$f}{todo}); - print "Supported at least starting from perl-$base.\n"; - $info++; - } - if ($API{$f}{provided}) { - my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; - print "Support by $ppport provided back to perl-$todo.\n"; - print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; - print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; - print "\n$hints{$f}" if exists $hints{$f}; - print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f}; - $info++; - } - print "No portability information available.\n" unless $info; - $count++; - } - $count or print "Found no API matching '$opt{'api-info'}'."; - print "\n"; - exit 0; -} - -if (exists $opt{'list-provided'}) { - my $f; - for $f (sort { lc $a cmp lc $b } keys %API) { - next unless $API{$f}{provided}; - my @flags; - push @flags, 'explicit' if exists $need{$f}; - push @flags, 'depend' if exists $depends{$f}; - push @flags, 'hint' if exists $hints{$f}; - push @flags, 'warning' if exists $warnings{$f}; - my $flags = @flags ? ' ['.join(', ', @flags).']' : ''; - print "$f$flags\n"; - } - exit 0; -} - -my @files; -my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc ); -my $srcext = join '|', map { quotemeta $_ } @srcext; - -if (@ARGV) { - my %seen; - for (@ARGV) { - if (-e) { - if (-f) { - push @files, $_ unless $seen{$_}++; - } - else { warn "'$_' is not a file.\n" } - } - else { - my @new = grep { -f } glob $_ - or warn "'$_' does not exist.\n"; - push @files, grep { !$seen{$_}++ } @new; - } - } -} -else { - eval { - require File::Find; - File::Find::find(sub { - $File::Find::name =~ /($srcext)$/i - and push @files, $File::Find::name; - }, '.'); - }; - if ($@) { - @files = map { glob "*$_" } @srcext; - } -} - -if (!@ARGV || $opt{filter}) { - my(@in, @out); - my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; - for (@files) { - my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i; - push @{ $out ? \@out : \@in }, $_; - } - if (@ARGV && @out) { - warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); - } - @files = @in; -} - -die "No input files given!\n" unless @files; - -my(%files, %global, %revreplace); -%revreplace = reverse %replace; -my $filename; -my $patch_opened = 0; - -for $filename (@files) { - unless (open IN, "<$filename") { - warn "Unable to read from $filename: $!\n"; - next; - } - - info("Scanning $filename ..."); - - my $c = do { local $/; }; - close IN; - - my %file = (orig => $c, changes => 0); - - # Temporarily remove C/XS comments and strings from the code - my @ccom; - - $c =~ s{ - ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]* - | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* ) - | ( ^$HS*\#[^\r\n]* - | "[^"\\]*(?:\\.[^"\\]*)*" - | '[^'\\]*(?:\\.[^'\\]*)*' - | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) ) - }{ defined $2 and push @ccom, $2; - defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex; - - $file{ccom} = \@ccom; - $file{code} = $c; - $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m; - - my $func; - - for $func (keys %API) { - my $match = $func; - $match .= "|$revreplace{$func}" if exists $revreplace{$func}; - if ($c =~ /\b(?:Perl_)?($match)\b/) { - $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func}; - $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/; - if (exists $API{$func}{provided}) { - $file{uses_provided}{$func}++; - if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) { - $file{uses}{$func}++; - my @deps = rec_depend($func); - if (@deps) { - $file{uses_deps}{$func} = \@deps; - for (@deps) { - $file{uses}{$_} = 0 unless exists $file{uses}{$_}; - } - } - for ($func, @deps) { - $file{needs}{$_} = 'static' if exists $need{$_}; - } - } - } - if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) { - if ($c =~ /\b$func\b/) { - $file{uses_todo}{$func}++; - } - } - } - } - - while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) { - if (exists $need{$2}) { - $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++; - } - else { warning("Possibly wrong #define $1 in $filename") } - } - - for (qw(uses needs uses_todo needed_global needed_static)) { - for $func (keys %{$file{$_}}) { - push @{$global{$_}{$func}}, $filename; - } - } - - $files{$filename} = \%file; -} - -# Globally resolve NEED_'s -my $need; -for $need (keys %{$global{needs}}) { - if (@{$global{needs}{$need}} > 1) { - my @targets = @{$global{needs}{$need}}; - my @t = grep $files{$_}{needed_global}{$need}, @targets; - @targets = @t if @t; - @t = grep /\.xs$/i, @targets; - @targets = @t if @t; - my $target = shift @targets; - $files{$target}{needs}{$need} = 'global'; - for (@{$global{needs}{$need}}) { - $files{$_}{needs}{$need} = 'extern' if $_ ne $target; - } - } -} - -for $filename (@files) { - exists $files{$filename} or next; - - info("=== Analyzing $filename ==="); - - my %file = %{$files{$filename}}; - my $func; - my $c = $file{code}; - my $warnings = 0; - - for $func (sort keys %{$file{uses_Perl}}) { - if ($API{$func}{varargs}) { - unless ($API{$func}{nothxarg}) { - my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))} - { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge); - if ($changes) { - warning("Doesn't pass interpreter argument aTHX to Perl_$func"); - $file{changes} += $changes; - } - } - } - else { - warning("Uses Perl_$func instead of $func"); - $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*} - {$func$1(}g); - } - } - - for $func (sort keys %{$file{uses_replace}}) { - warning("Uses $func instead of $replace{$func}"); - $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g); - } - - for $func (sort keys %{$file{uses_provided}}) { - if ($file{uses}{$func}) { - if (exists $file{uses_deps}{$func}) { - diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}})); - } - else { - diag("Uses $func"); - } - } - $warnings += hint($func); - } - - unless ($opt{quiet}) { - for $func (sort keys %{$file{uses_todo}}) { - print "*** WARNING: Uses $func, which may not be portable below perl ", - format_version($API{$func}{todo}), ", even with '$ppport'\n"; - $warnings++; - } - } - - for $func (sort keys %{$file{needed_static}}) { - my $message = ''; - if (not exists $file{uses}{$func}) { - $message = "No need to define NEED_$func if $func is never used"; - } - elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') { - $message = "No need to define NEED_$func when already needed globally"; - } - if ($message) { - diag($message); - $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg); - } - } - - for $func (sort keys %{$file{needed_global}}) { - my $message = ''; - if (not exists $global{uses}{$func}) { - $message = "No need to define NEED_${func}_GLOBAL if $func is never used"; - } - elsif (exists $file{needs}{$func}) { - if ($file{needs}{$func} eq 'extern') { - $message = "No need to define NEED_${func}_GLOBAL when already needed globally"; - } - elsif ($file{needs}{$func} eq 'static') { - $message = "No need to define NEED_${func}_GLOBAL when only used in this file"; - } - } - if ($message) { - diag($message); - $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg); - } - } - - $file{needs_inc_ppport} = keys %{$file{uses}}; - - if ($file{needs_inc_ppport}) { - my $pp = ''; - - for $func (sort keys %{$file{needs}}) { - my $type = $file{needs}{$func}; - next if $type eq 'extern'; - my $suffix = $type eq 'global' ? '_GLOBAL' : ''; - unless (exists $file{"needed_$type"}{$func}) { - if ($type eq 'global') { - diag("Files [@{$global{needs}{$func}}] need $func, adding global request"); - } - else { - diag("File needs $func, adding static request"); - } - $pp .= "#define NEED_$func$suffix\n"; - } - } - - if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) { - $pp = ''; - $file{changes}++; - } - - unless ($file{has_inc_ppport}) { - diag("Needs to include '$ppport'"); - $pp .= qq(#include "$ppport"\n) - } - - if ($pp) { - $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms) - || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m) - || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m) - || ($c =~ s/^/$pp/); - } - } - else { - if ($file{has_inc_ppport}) { - diag("No need to include '$ppport'"); - $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m); - } - } - - # put back in our C comments - my $ix; - my $cppc = 0; - my @ccom = @{$file{ccom}}; - for $ix (0 .. $#ccom) { - if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) { - $cppc++; - $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/; - } - else { - $c =~ s/$rccs$ix$rcce/$ccom[$ix]/; - } - } - - if ($cppc) { - my $s = $cppc != 1 ? 's' : ''; - warning("Uses $cppc C++ style comment$s, which is not portable"); - } - - my $s = $warnings != 1 ? 's' : ''; - my $warn = $warnings ? " ($warnings warning$s)" : ''; - info("Analysis completed$warn"); - - if ($file{changes}) { - if (exists $opt{copy}) { - my $newfile = "$filename$opt{copy}"; - if (-e $newfile) { - error("'$newfile' already exists, refusing to write copy of '$filename'"); - } - else { - local *F; - if (open F, ">$newfile") { - info("Writing copy of '$filename' with changes to '$newfile'"); - print F $c; - close F; - } - else { - error("Cannot open '$newfile' for writing: $!"); - } - } - } - elsif (exists $opt{patch} || $opt{changes}) { - if (exists $opt{patch}) { - unless ($patch_opened) { - if (open PATCH, ">$opt{patch}") { - $patch_opened = 1; - } - else { - error("Cannot open '$opt{patch}' for writing: $!"); - delete $opt{patch}; - $opt{changes} = 1; - goto fallback; - } - } - mydiff(\*PATCH, $filename, $c); - } - else { -fallback: - info("Suggested changes:"); - mydiff(\*STDOUT, $filename, $c); - } - } - else { - my $s = $file{changes} == 1 ? '' : 's'; - info("$file{changes} potentially required change$s detected"); - } - } - else { - info("Looks good"); - } -} - -close PATCH if $patch_opened; - -exit 0; - - -sub try_use { eval "use @_;"; return $@ eq '' } - -sub mydiff -{ - local *F = shift; - my($file, $str) = @_; - my $diff; - - if (exists $opt{diff}) { - $diff = run_diff($opt{diff}, $file, $str); - } - - if (!defined $diff and try_use('Text::Diff')) { - $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' }); - $diff = <
$tmp") { - print F $str; - close F; - - if (open F, "$prog $file $tmp |") { - while () { - s/\Q$tmp\E/$file.patched/; - $diff .= $_; - } - close F; - unlink $tmp; - return $diff; - } - - unlink $tmp; - } - else { - error("Cannot open '$tmp' for writing: $!"); - } - - return undef; -} - -sub rec_depend -{ - my($func, $seen) = @_; - return () unless exists $depends{$func}; - $seen = {%{$seen||{}}}; - return () if $seen->{$func}++; - my %s; - grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}}; -} - -sub parse_version -{ - my $ver = shift; - - if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) { - return ($1, $2, $3); - } - elsif ($ver !~ /^\d+\.[\d_]+$/) { - die "cannot parse version '$ver'\n"; - } - - $ver =~ s/_//g; - $ver =~ s/$/000000/; - - my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; - - $v = int $v; - $s = int $s; - - if ($r < 5 || ($r == 5 && $v < 6)) { - if ($s % 10) { - die "cannot parse version '$ver'\n"; - } - } - - return ($r, $v, $s); -} - -sub format_version -{ - my $ver = shift; - - $ver =~ s/$/000000/; - my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; - - $v = int $v; - $s = int $s; - - if ($r < 5 || ($r == 5 && $v < 6)) { - if ($s % 10) { - die "invalid version '$ver'\n"; - } - $s /= 10; - - $ver = sprintf "%d.%03d", $r, $v; - $s > 0 and $ver .= sprintf "_%02d", $s; - - return $ver; - } - - return sprintf "%d.%d.%d", $r, $v, $s; -} - -sub info -{ - $opt{quiet} and return; - print @_, "\n"; -} - -sub diag -{ - $opt{quiet} and return; - $opt{diag} and print @_, "\n"; -} - -sub warning -{ - $opt{quiet} and return; - print "*** ", @_, "\n"; -} - -sub error -{ - print "*** ERROR: ", @_, "\n"; -} - -my %given_hints; -my %given_warnings; -sub hint -{ - $opt{quiet} and return; - my $func = shift; - my $rv = 0; - if (exists $warnings{$func} && !$given_warnings{$func}++) { - my $warn = $warnings{$func}; - $warn =~ s!^!*** !mg; - print "*** WARNING: $func\n", $warn; - $rv++; - } - if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) { - my $hint = $hints{$func}; - $hint =~ s/^/ /mg; - print " --- hint for $func ---\n", $hint; - } - $rv; -} - -sub usage -{ - my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms; - my %M = ( 'I' => '*' ); - $usage =~ s/^\s*perl\s+\S+/$^X $0/; - $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g; - - print < }; - my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms; - $copy =~ s/^(?=\S+)/ /gms; - $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms; - $self =~ s/^SKIP.*(?=^__DATA__)/SKIP -if (\@ARGV && \$ARGV[0] eq '--unstrip') { - eval { require Devel::PPPort }; - \$@ and die "Cannot require Devel::PPPort, please install.\\n"; - if (eval \$Devel::PPPort::VERSION < $VERSION) { - die "$0 was originally generated with Devel::PPPort $VERSION.\\n" - . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n" - . "Please install a newer version, or --unstrip will not work.\\n"; - } - Devel::PPPort::WriteFile(\$0); - exit 0; -} -print <$0" or die "cannot strip $0: $!\n"; - print OUT "$pl$c\n"; - - exit 0; -} - -__DATA__ -*/ - -#ifndef _P_P_PORTABILITY_H_ -#define _P_P_PORTABILITY_H_ - -#ifndef DPPP_NAMESPACE -# define DPPP_NAMESPACE DPPP_ -#endif - -#define DPPP_CAT2(x,y) CAT2(x,y) -#define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name) - -#ifndef PERL_REVISION -# if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) -# define PERL_PATCHLEVEL_H_IMPLICIT -# include -# endif -# if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) -# include -# endif -# ifndef PERL_REVISION -# define PERL_REVISION (5) - /* Replace: 1 */ -# define PERL_VERSION PATCHLEVEL -# define PERL_SUBVERSION SUBVERSION - /* Replace PERL_PATCHLEVEL with PERL_VERSION */ - /* Replace: 0 */ -# endif -#endif - -#define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10)) -#define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION)) - -/* It is very unlikely that anyone will try to use this with Perl 6 - (or greater), but who knows. - */ -#if PERL_REVISION != 5 -# error ppport.h only works with Perl version 5 -#endif /* PERL_REVISION != 5 */ -#ifndef dTHR -# define dTHR dNOOP -#endif -#ifndef dTHX -# define dTHX dNOOP -#endif - -#ifndef dTHXa -# define dTHXa(x) dNOOP -#endif -#ifndef pTHX -# define pTHX void -#endif - -#ifndef pTHX_ -# define pTHX_ -#endif - -#ifndef aTHX -# define aTHX -#endif - -#ifndef aTHX_ -# define aTHX_ -#endif - -#if (PERL_BCDVERSION < 0x5006000) -# ifdef USE_THREADS -# define aTHXR thr -# define aTHXR_ thr, -# else -# define aTHXR -# define aTHXR_ -# endif -# define dTHXR dTHR -#else -# define aTHXR aTHX -# define aTHXR_ aTHX_ -# define dTHXR dTHX -#endif -#ifndef dTHXoa -# define dTHXoa(x) dTHXa(x) -#endif - -#ifdef I_LIMITS -# include -#endif - -#ifndef PERL_UCHAR_MIN -# define PERL_UCHAR_MIN ((unsigned char)0) -#endif - -#ifndef PERL_UCHAR_MAX -# ifdef UCHAR_MAX -# define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX) -# else -# ifdef MAXUCHAR -# define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR) -# else -# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) -# endif -# endif -#endif - -#ifndef PERL_USHORT_MIN -# define PERL_USHORT_MIN ((unsigned short)0) -#endif - -#ifndef PERL_USHORT_MAX -# ifdef USHORT_MAX -# define PERL_USHORT_MAX ((unsigned short)USHORT_MAX) -# else -# ifdef MAXUSHORT -# define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) -# else -# ifdef USHRT_MAX -# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) -# else -# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) -# endif -# endif -# endif -#endif - -#ifndef PERL_SHORT_MAX -# ifdef SHORT_MAX -# define PERL_SHORT_MAX ((short)SHORT_MAX) -# else -# ifdef MAXSHORT /* Often used in */ -# define PERL_SHORT_MAX ((short)MAXSHORT) -# else -# ifdef SHRT_MAX -# define PERL_SHORT_MAX ((short)SHRT_MAX) -# else -# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) -# endif -# endif -# endif -#endif - -#ifndef PERL_SHORT_MIN -# ifdef SHORT_MIN -# define PERL_SHORT_MIN ((short)SHORT_MIN) -# else -# ifdef MINSHORT -# define PERL_SHORT_MIN ((short)MINSHORT) -# else -# ifdef SHRT_MIN -# define PERL_SHORT_MIN ((short)SHRT_MIN) -# else -# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) -# endif -# endif -# endif -#endif - -#ifndef PERL_UINT_MAX -# ifdef UINT_MAX -# define PERL_UINT_MAX ((unsigned int)UINT_MAX) -# else -# ifdef MAXUINT -# define PERL_UINT_MAX ((unsigned int)MAXUINT) -# else -# define PERL_UINT_MAX (~(unsigned int)0) -# endif -# endif -#endif - -#ifndef PERL_UINT_MIN -# define PERL_UINT_MIN ((unsigned int)0) -#endif - -#ifndef PERL_INT_MAX -# ifdef INT_MAX -# define PERL_INT_MAX ((int)INT_MAX) -# else -# ifdef MAXINT /* Often used in */ -# define PERL_INT_MAX ((int)MAXINT) -# else -# define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1)) -# endif -# endif -#endif - -#ifndef PERL_INT_MIN -# ifdef INT_MIN -# define PERL_INT_MIN ((int)INT_MIN) -# else -# ifdef MININT -# define PERL_INT_MIN ((int)MININT) -# else -# define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) -# endif -# endif -#endif - -#ifndef PERL_ULONG_MAX -# ifdef ULONG_MAX -# define PERL_ULONG_MAX ((unsigned long)ULONG_MAX) -# else -# ifdef MAXULONG -# define PERL_ULONG_MAX ((unsigned long)MAXULONG) -# else -# define PERL_ULONG_MAX (~(unsigned long)0) -# endif -# endif -#endif - -#ifndef PERL_ULONG_MIN -# define PERL_ULONG_MIN ((unsigned long)0L) -#endif - -#ifndef PERL_LONG_MAX -# ifdef LONG_MAX -# define PERL_LONG_MAX ((long)LONG_MAX) -# else -# ifdef MAXLONG -# define PERL_LONG_MAX ((long)MAXLONG) -# else -# define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1)) -# endif -# endif -#endif - -#ifndef PERL_LONG_MIN -# ifdef LONG_MIN -# define PERL_LONG_MIN ((long)LONG_MIN) -# else -# ifdef MINLONG -# define PERL_LONG_MIN ((long)MINLONG) -# else -# define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) -# endif -# endif -#endif - -#if defined(HAS_QUAD) && (defined(convex) || defined(uts)) -# ifndef PERL_UQUAD_MAX -# ifdef ULONGLONG_MAX -# define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX) -# else -# ifdef MAXULONGLONG -# define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG) -# else -# define PERL_UQUAD_MAX (~(unsigned long long)0) -# endif -# endif -# endif - -# ifndef PERL_UQUAD_MIN -# define PERL_UQUAD_MIN ((unsigned long long)0L) -# endif - -# ifndef PERL_QUAD_MAX -# ifdef LONGLONG_MAX -# define PERL_QUAD_MAX ((long long)LONGLONG_MAX) -# else -# ifdef MAXLONGLONG -# define PERL_QUAD_MAX ((long long)MAXLONGLONG) -# else -# define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1)) -# endif -# endif -# endif - -# ifndef PERL_QUAD_MIN -# ifdef LONGLONG_MIN -# define PERL_QUAD_MIN ((long long)LONGLONG_MIN) -# else -# ifdef MINLONGLONG -# define PERL_QUAD_MIN ((long long)MINLONGLONG) -# else -# define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) -# endif -# endif -# endif -#endif - -/* This is based on code from 5.003 perl.h */ -#ifdef HAS_QUAD -# ifdef cray -#ifndef IVTYPE -# define IVTYPE int -#endif - -#ifndef IV_MIN -# define IV_MIN PERL_INT_MIN -#endif - -#ifndef IV_MAX -# define IV_MAX PERL_INT_MAX -#endif - -#ifndef UV_MIN -# define UV_MIN PERL_UINT_MIN -#endif - -#ifndef UV_MAX -# define UV_MAX PERL_UINT_MAX -#endif - -# ifdef INTSIZE -#ifndef IVSIZE -# define IVSIZE INTSIZE -#endif - -# endif -# else -# if defined(convex) || defined(uts) -#ifndef IVTYPE -# define IVTYPE long long -#endif - -#ifndef IV_MIN -# define IV_MIN PERL_QUAD_MIN -#endif - -#ifndef IV_MAX -# define IV_MAX PERL_QUAD_MAX -#endif - -#ifndef UV_MIN -# define UV_MIN PERL_UQUAD_MIN -#endif - -#ifndef UV_MAX -# define UV_MAX PERL_UQUAD_MAX -#endif - -# ifdef LONGLONGSIZE -#ifndef IVSIZE -# define IVSIZE LONGLONGSIZE -#endif - -# endif -# else -#ifndef IVTYPE -# define IVTYPE long -#endif - -#ifndef IV_MIN -# define IV_MIN PERL_LONG_MIN -#endif - -#ifndef IV_MAX -# define IV_MAX PERL_LONG_MAX -#endif - -#ifndef UV_MIN -# define UV_MIN PERL_ULONG_MIN -#endif - -#ifndef UV_MAX -# define UV_MAX PERL_ULONG_MAX -#endif - -# ifdef LONGSIZE -#ifndef IVSIZE -# define IVSIZE LONGSIZE -#endif - -# endif -# endif -# endif -#ifndef IVSIZE -# define IVSIZE 8 -#endif - -#ifndef PERL_QUAD_MIN -# define PERL_QUAD_MIN IV_MIN -#endif - -#ifndef PERL_QUAD_MAX -# define PERL_QUAD_MAX IV_MAX -#endif - -#ifndef PERL_UQUAD_MIN -# define PERL_UQUAD_MIN UV_MIN -#endif - -#ifndef PERL_UQUAD_MAX -# define PERL_UQUAD_MAX UV_MAX -#endif - -#else -#ifndef IVTYPE -# define IVTYPE long -#endif - -#ifndef IV_MIN -# define IV_MIN PERL_LONG_MIN -#endif - -#ifndef IV_MAX -# define IV_MAX PERL_LONG_MAX -#endif - -#ifndef UV_MIN -# define UV_MIN PERL_ULONG_MIN -#endif - -#ifndef UV_MAX -# define UV_MAX PERL_ULONG_MAX -#endif - -#endif - -#ifndef IVSIZE -# ifdef LONGSIZE -# define IVSIZE LONGSIZE -# else -# define IVSIZE 4 /* A bold guess, but the best we can make. */ -# endif -#endif -#ifndef UVTYPE -# define UVTYPE unsigned IVTYPE -#endif - -#ifndef UVSIZE -# define UVSIZE IVSIZE -#endif -#ifndef sv_setuv -# define sv_setuv(sv, uv) \ - STMT_START { \ - UV TeMpUv = uv; \ - if (TeMpUv <= IV_MAX) \ - sv_setiv(sv, TeMpUv); \ - else \ - sv_setnv(sv, (double)TeMpUv); \ - } STMT_END -#endif -#ifndef newSVuv -# define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) -#endif -#ifndef sv_2uv -# define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) -#endif - -#ifndef SvUVX -# define SvUVX(sv) ((UV)SvIVX(sv)) -#endif - -#ifndef SvUVXx -# define SvUVXx(sv) SvUVX(sv) -#endif - -#ifndef SvUV -# define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv)) -#endif - -#ifndef SvUVx -# define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) -#endif - -/* Hint: sv_uv - * Always use the SvUVx() macro instead of sv_uv(). - */ -#ifndef sv_uv -# define sv_uv(sv) SvUVx(sv) -#endif - -#if !defined(SvUOK) && defined(SvIOK_UV) -# define SvUOK(sv) SvIOK_UV(sv) -#endif -#ifndef XST_mUV -# define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) ) -#endif - -#ifndef XSRETURN_UV -# define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END -#endif -#ifndef PUSHu -# define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END -#endif - -#ifndef XPUSHu -# define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END -#endif - -#ifdef HAS_MEMCMP -#ifndef memNE -# define memNE(s1,s2,l) (memcmp(s1,s2,l)) -#endif - -#ifndef memEQ -# define memEQ(s1,s2,l) (!memcmp(s1,s2,l)) -#endif - -#else -#ifndef memNE -# define memNE(s1,s2,l) (bcmp(s1,s2,l)) -#endif - -#ifndef memEQ -# define memEQ(s1,s2,l) (!bcmp(s1,s2,l)) -#endif - -#endif -#ifndef MoveD -# define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) -#endif - -#ifndef CopyD -# define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) -#endif - -#ifdef HAS_MEMSET -#ifndef ZeroD -# define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) -#endif - -#else -#ifndef ZeroD -# define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d) -#endif - -#endif -#ifndef PoisonWith -# define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)) -#endif - -#ifndef PoisonNew -# define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB) -#endif - -#ifndef PoisonFree -# define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF) -#endif - -#ifndef Poison -# define Poison(d,n,t) PoisonFree(d,n,t) -#endif -#ifndef Newx -# define Newx(v,n,t) New(0,v,n,t) -#endif - -#ifndef Newxc -# define Newxc(v,n,t,c) Newc(0,v,n,t,c) -#endif - -#ifndef Newxz -# define Newxz(v,n,t) Newz(0,v,n,t) -#endif - -#ifndef PERL_UNUSED_DECL -# ifdef HASATTRIBUTE -# if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) -# define PERL_UNUSED_DECL -# else -# define PERL_UNUSED_DECL __attribute__((unused)) -# endif -# else -# define PERL_UNUSED_DECL -# endif -#endif - -#ifndef PERL_UNUSED_ARG -# if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */ -# include -# define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x)) -# else -# define PERL_UNUSED_ARG(x) ((void)x) -# endif -#endif - -#ifndef PERL_UNUSED_VAR -# define PERL_UNUSED_VAR(x) ((void)x) -#endif - -#ifndef PERL_UNUSED_CONTEXT -# ifdef USE_ITHREADS -# define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) -# else -# define PERL_UNUSED_CONTEXT -# endif -#endif -#ifndef NOOP -# define NOOP /*EMPTY*/(void)0 -#endif - -#ifndef dNOOP -# define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL -#endif - -#ifndef NVTYPE -# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) -# define NVTYPE long double -# else -# define NVTYPE double -# endif -typedef NVTYPE NV; -#endif - -#ifndef INT2PTR -# if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) -# define PTRV UV -# define INT2PTR(any,d) (any)(d) -# else -# if PTRSIZE == LONGSIZE -# define PTRV unsigned long -# else -# define PTRV unsigned -# endif -# define INT2PTR(any,d) (any)(PTRV)(d) -# endif -#endif - -#ifndef PTR2ul -# if PTRSIZE == LONGSIZE -# define PTR2ul(p) (unsigned long)(p) -# else -# define PTR2ul(p) INT2PTR(unsigned long,p) -# endif -#endif -#ifndef PTR2nat -# define PTR2nat(p) (PTRV)(p) -#endif - -#ifndef NUM2PTR -# define NUM2PTR(any,d) (any)PTR2nat(d) -#endif - -#ifndef PTR2IV -# define PTR2IV(p) INT2PTR(IV,p) -#endif - -#ifndef PTR2UV -# define PTR2UV(p) INT2PTR(UV,p) -#endif - -#ifndef PTR2NV -# define PTR2NV(p) NUM2PTR(NV,p) -#endif - -#undef START_EXTERN_C -#undef END_EXTERN_C -#undef EXTERN_C -#ifdef __cplusplus -# define START_EXTERN_C extern "C" { -# define END_EXTERN_C } -# define EXTERN_C extern "C" -#else -# define START_EXTERN_C -# define END_EXTERN_C -# define EXTERN_C extern -#endif - -#if defined(PERL_GCC_PEDANTIC) -# ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN -# define PERL_GCC_BRACE_GROUPS_FORBIDDEN -# endif -#endif - -#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) -# ifndef PERL_USE_GCC_BRACE_GROUPS -# define PERL_USE_GCC_BRACE_GROUPS -# endif -#endif - -#undef STMT_START -#undef STMT_END -#ifdef PERL_USE_GCC_BRACE_GROUPS -# define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ -# define STMT_END ) -#else -# if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) -# define STMT_START if (1) -# define STMT_END else (void)0 -# else -# define STMT_START do -# define STMT_END while (0) -# endif -#endif -#ifndef boolSV -# define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) -#endif - -/* DEFSV appears first in 5.004_56 */ -#ifndef DEFSV -# define DEFSV GvSV(PL_defgv) -#endif - -#ifndef SAVE_DEFSV -# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) -#endif - -#ifndef DEFSV_set -# define DEFSV_set(sv) (DEFSV = (sv)) -#endif - -/* Older perls (<=5.003) lack AvFILLp */ -#ifndef AvFILLp -# define AvFILLp AvFILL -#endif -#ifndef ERRSV -# define ERRSV get_sv("@",FALSE) -#endif - -/* Hint: gv_stashpvn - * This function's backport doesn't support the length parameter, but - * rather ignores it. Portability can only be ensured if the length - * parameter is used for speed reasons, but the length can always be - * correctly computed from the string argument. - */ -#ifndef gv_stashpvn -# define gv_stashpvn(str,len,create) gv_stashpv(str,create) -#endif - -/* Replace: 1 */ -#ifndef get_cv -# define get_cv perl_get_cv -#endif - -#ifndef get_sv -# define get_sv perl_get_sv -#endif - -#ifndef get_av -# define get_av perl_get_av -#endif - -#ifndef get_hv -# define get_hv perl_get_hv -#endif - -/* Replace: 0 */ -#ifndef dUNDERBAR -# define dUNDERBAR dNOOP -#endif - -#ifndef UNDERBAR -# define UNDERBAR DEFSV -#endif -#ifndef dAX -# define dAX I32 ax = MARK - PL_stack_base + 1 -#endif - -#ifndef dITEMS -# define dITEMS I32 items = SP - MARK -#endif -#ifndef dXSTARG -# define dXSTARG SV * targ = sv_newmortal() -#endif -#ifndef dAXMARK -# define dAXMARK I32 ax = POPMARK; \ - register SV ** const mark = PL_stack_base + ax++ -#endif -#ifndef XSprePUSH -# define XSprePUSH (sp = PL_stack_base + ax - 1) -#endif - -#if (PERL_BCDVERSION < 0x5005000) -# undef XSRETURN -# define XSRETURN(off) \ - STMT_START { \ - PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ - return; \ - } STMT_END -#endif -#ifndef XSPROTO -# define XSPROTO(name) void name(pTHX_ CV* cv) -#endif - -#ifndef SVfARG -# define SVfARG(p) ((void*)(p)) -#endif -#ifndef PERL_ABS -# define PERL_ABS(x) ((x) < 0 ? -(x) : (x)) -#endif -#ifndef dVAR -# define dVAR dNOOP -#endif -#ifndef SVf -# define SVf "_" -#endif -#ifndef UTF8_MAXBYTES -# define UTF8_MAXBYTES UTF8_MAXLEN -#endif -#ifndef CPERLscope -# define CPERLscope(x) x -#endif -#ifndef PERL_HASH -# define PERL_HASH(hash,str,len) \ - STMT_START { \ - const char *s_PeRlHaSh = str; \ - I32 i_PeRlHaSh = len; \ - U32 hash_PeRlHaSh = 0; \ - while (i_PeRlHaSh--) \ - hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ - (hash) = hash_PeRlHaSh; \ - } STMT_END -#endif - -#ifndef PERLIO_FUNCS_DECL -# ifdef PERLIO_FUNCS_CONST -# define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs -# define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs) -# else -# define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs -# define PERLIO_FUNCS_CAST(funcs) (funcs) -# endif -#endif - -/* provide these typedefs for older perls */ -#if (PERL_BCDVERSION < 0x5009003) - -# ifdef ARGSproto -typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto); -# else -typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX); -# endif - -typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*); - -#endif -#ifndef isPSXSPC -# define isPSXSPC(c) (isSPACE(c) || (c) == '\v') -#endif - -#ifndef isBLANK -# define isBLANK(c) ((c) == ' ' || (c) == '\t') -#endif - -#ifdef EBCDIC -#ifndef isALNUMC -# define isALNUMC(c) isalnum(c) -#endif - -#ifndef isASCII -# define isASCII(c) isascii(c) -#endif - -#ifndef isCNTRL -# define isCNTRL(c) iscntrl(c) -#endif - -#ifndef isGRAPH -# define isGRAPH(c) isgraph(c) -#endif - -#ifndef isPRINT -# define isPRINT(c) isprint(c) -#endif - -#ifndef isPUNCT -# define isPUNCT(c) ispunct(c) -#endif - -#ifndef isXDIGIT -# define isXDIGIT(c) isxdigit(c) -#endif - -#else -# if (PERL_BCDVERSION < 0x5010000) -/* Hint: isPRINT - * The implementation in older perl versions includes all of the - * isSPACE() characters, which is wrong. The version provided by - * Devel::PPPort always overrides a present buggy version. - */ -# undef isPRINT -# endif -#ifndef isALNUMC -# define isALNUMC(c) (isALPHA(c) || isDIGIT(c)) -#endif - -#ifndef isASCII -# define isASCII(c) ((c) <= 127) -#endif - -#ifndef isCNTRL -# define isCNTRL(c) ((c) < ' ' || (c) == 127) -#endif - -#ifndef isGRAPH -# define isGRAPH(c) (isALNUM(c) || isPUNCT(c)) -#endif - -#ifndef isPRINT -# define isPRINT(c) (((c) >= 32 && (c) < 127)) -#endif - -#ifndef isPUNCT -# define isPUNCT(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126)) -#endif - -#ifndef isXDIGIT -# define isXDIGIT(c) (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) -#endif - -#endif - -#ifndef PERL_SIGNALS_UNSAFE_FLAG - -#define PERL_SIGNALS_UNSAFE_FLAG 0x0001 - -#if (PERL_BCDVERSION < 0x5008000) -# define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG -#else -# define D_PPP_PERL_SIGNALS_INIT 0 -#endif - -#if defined(NEED_PL_signals) -static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; -#elif defined(NEED_PL_signals_GLOBAL) -U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; -#else -extern U32 DPPP_(my_PL_signals); -#endif -#define PL_signals DPPP_(my_PL_signals) - -#endif - -/* Hint: PL_ppaddr - * Calling an op via PL_ppaddr requires passing a context argument - * for threaded builds. Since the context argument is different for - * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will - * automatically be defined as the correct argument. - */ - -#if (PERL_BCDVERSION <= 0x5005005) -/* Replace: 1 */ -# define PL_ppaddr ppaddr -# define PL_no_modify no_modify -/* Replace: 0 */ -#endif - -#if (PERL_BCDVERSION <= 0x5004005) -/* Replace: 1 */ -# define PL_DBsignal DBsignal -# define PL_DBsingle DBsingle -# define PL_DBsub DBsub -# define PL_DBtrace DBtrace -# define PL_Sv Sv -# define PL_bufend bufend -# define PL_bufptr bufptr -# define PL_compiling compiling -# define PL_copline copline -# define PL_curcop curcop -# define PL_curstash curstash -# define PL_debstash debstash -# define PL_defgv defgv -# define PL_diehook diehook -# define PL_dirty dirty -# define PL_dowarn dowarn -# define PL_errgv errgv -# define PL_error_count error_count -# define PL_expect expect -# define PL_hexdigit hexdigit -# define PL_hints hints -# define PL_in_my in_my -# define PL_laststatval laststatval -# define PL_lex_state lex_state -# define PL_lex_stuff lex_stuff -# define PL_linestr linestr -# define PL_na na -# define PL_perl_destruct_level perl_destruct_level -# define PL_perldb perldb -# define PL_rsfp_filters rsfp_filters -# define PL_rsfp rsfp -# define PL_stack_base stack_base -# define PL_stack_sp stack_sp -# define PL_statcache statcache -# define PL_stdingv stdingv -# define PL_sv_arenaroot sv_arenaroot -# define PL_sv_no sv_no -# define PL_sv_undef sv_undef -# define PL_sv_yes sv_yes -# define PL_tainted tainted -# define PL_tainting tainting -# define PL_tokenbuf tokenbuf -/* Replace: 0 */ -#endif - -/* Warning: PL_parser - * For perl versions earlier than 5.9.5, this is an always - * non-NULL dummy. Also, it cannot be dereferenced. Don't - * use it if you can avoid is and unless you absolutely know - * what you're doing. - * If you always check that PL_parser is non-NULL, you can - * define DPPP_PL_parser_NO_DUMMY to avoid the creation of - * a dummy parser structure. - */ - -#if (PERL_BCDVERSION >= 0x5009005) -# ifdef DPPP_PL_parser_NO_DUMMY -# define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ - (croak("panic: PL_parser == NULL in %s:%d", \ - __FILE__, __LINE__), (yy_parser *) NULL))->var) -# else -# ifdef DPPP_PL_parser_NO_DUMMY_WARNING -# define D_PPP_parser_dummy_warning(var) -# else -# define D_PPP_parser_dummy_warning(var) \ - warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__), -# endif -# define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ - (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var) -#if defined(NEED_PL_parser) -static yy_parser DPPP_(dummy_PL_parser); -#elif defined(NEED_PL_parser_GLOBAL) -yy_parser DPPP_(dummy_PL_parser); -#else -extern yy_parser DPPP_(dummy_PL_parser); -#endif - -# endif - -/* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */ -/* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf - * Do not use this variable unless you know exactly what you're - * doint. It is internal to the perl parser and may change or even - * be removed in the future. As of perl 5.9.5, you have to check - * for (PL_parser != NULL) for this variable to have any effect. - * An always non-NULL PL_parser dummy is provided for earlier - * perl versions. - * If PL_parser is NULL when you try to access this variable, a - * dummy is being accessed instead and a warning is issued unless - * you define DPPP_PL_parser_NO_DUMMY_WARNING. - * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access - * this variable will croak with a panic message. - */ - -# define PL_expect D_PPP_my_PL_parser_var(expect) -# define PL_copline D_PPP_my_PL_parser_var(copline) -# define PL_rsfp D_PPP_my_PL_parser_var(rsfp) -# define PL_rsfp_filters D_PPP_my_PL_parser_var(rsfp_filters) -# define PL_linestr D_PPP_my_PL_parser_var(linestr) -# define PL_bufptr D_PPP_my_PL_parser_var(bufptr) -# define PL_bufend D_PPP_my_PL_parser_var(bufend) -# define PL_lex_state D_PPP_my_PL_parser_var(lex_state) -# define PL_lex_stuff D_PPP_my_PL_parser_var(lex_stuff) -# define PL_tokenbuf D_PPP_my_PL_parser_var(tokenbuf) -# define PL_in_my D_PPP_my_PL_parser_var(in_my) -# define PL_in_my_stash D_PPP_my_PL_parser_var(in_my_stash) -# define PL_error_count D_PPP_my_PL_parser_var(error_count) - - -#else - -/* ensure that PL_parser != NULL and cannot be dereferenced */ -# define PL_parser ((void *) 1) - -#endif -#ifndef mPUSHs -# define mPUSHs(s) PUSHs(sv_2mortal(s)) -#endif - -#ifndef PUSHmortal -# define PUSHmortal PUSHs(sv_newmortal()) -#endif - -#ifndef mPUSHp -# define mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l)) -#endif - -#ifndef mPUSHn -# define mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n)) -#endif - -#ifndef mPUSHi -# define mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i)) -#endif - -#ifndef mPUSHu -# define mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u)) -#endif -#ifndef mXPUSHs -# define mXPUSHs(s) XPUSHs(sv_2mortal(s)) -#endif - -#ifndef XPUSHmortal -# define XPUSHmortal XPUSHs(sv_newmortal()) -#endif - -#ifndef mXPUSHp -# define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END -#endif - -#ifndef mXPUSHn -# define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END -#endif - -#ifndef mXPUSHi -# define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END -#endif - -#ifndef mXPUSHu -# define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END -#endif - -/* Replace: 1 */ -#ifndef call_sv -# define call_sv perl_call_sv -#endif - -#ifndef call_pv -# define call_pv perl_call_pv -#endif - -#ifndef call_argv -# define call_argv perl_call_argv -#endif - -#ifndef call_method -# define call_method perl_call_method -#endif -#ifndef eval_sv -# define eval_sv perl_eval_sv -#endif - -/* Replace: 0 */ -#ifndef PERL_LOADMOD_DENY -# define PERL_LOADMOD_DENY 0x1 -#endif - -#ifndef PERL_LOADMOD_NOIMPORT -# define PERL_LOADMOD_NOIMPORT 0x2 -#endif - -#ifndef PERL_LOADMOD_IMPORT_OPS -# define PERL_LOADMOD_IMPORT_OPS 0x4 -#endif - -#ifndef G_METHOD -# define G_METHOD 64 -# ifdef call_sv -# undef call_sv -# endif -# if (PERL_BCDVERSION < 0x5006000) -# define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \ - (flags) & ~G_METHOD) : perl_call_sv(sv, flags)) -# else -# define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \ - (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags)) -# endif -#endif - -/* Replace perl_eval_pv with eval_pv */ - -#ifndef eval_pv -#if defined(NEED_eval_pv) -static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); -static -#else -extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); -#endif - -#ifdef eval_pv -# undef eval_pv -#endif -#define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b) -#define Perl_eval_pv DPPP_(my_eval_pv) - -#if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL) - -SV* -DPPP_(my_eval_pv)(char *p, I32 croak_on_error) -{ - dSP; - SV* sv = newSVpv(p, 0); - - PUSHMARK(sp); - eval_sv(sv, G_SCALAR); - SvREFCNT_dec(sv); - - SPAGAIN; - sv = POPs; - PUTBACK; - - if (croak_on_error && SvTRUE(GvSV(errgv))) - croak(SvPVx(GvSV(errgv), na)); - - return sv; -} - -#endif -#endif - -#ifndef vload_module -#if defined(NEED_vload_module) -static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); -static -#else -extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); -#endif - -#ifdef vload_module -# undef vload_module -#endif -#define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d) -#define Perl_vload_module DPPP_(my_vload_module) - -#if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL) - -void -DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args) -{ - dTHR; - dVAR; - OP *veop, *imop; - - OP * const modname = newSVOP(OP_CONST, 0, name); - /* 5.005 has a somewhat hacky force_normal that doesn't croak on - SvREADONLY() if PL_compling is true. Current perls take care in - ck_require() to correctly turn off SvREADONLY before calling - force_normal_flags(). This seems a better fix than fudging PL_compling - */ - SvREADONLY_off(((SVOP*)modname)->op_sv); - modname->op_private |= OPpCONST_BARE; - if (ver) { - veop = newSVOP(OP_CONST, 0, ver); - } - else - veop = NULL; - if (flags & PERL_LOADMOD_NOIMPORT) { - imop = sawparens(newNULLLIST()); - } - else if (flags & PERL_LOADMOD_IMPORT_OPS) { - imop = va_arg(*args, OP*); - } - else { - SV *sv; - imop = NULL; - sv = va_arg(*args, SV*); - while (sv) { - imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); - sv = va_arg(*args, SV*); - } - } - { - const line_t ocopline = PL_copline; - COP * const ocurcop = PL_curcop; - const int oexpect = PL_expect; - -#if (PERL_BCDVERSION >= 0x5004000) - utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), - veop, modname, imop); -#else - utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), - modname, imop); -#endif - PL_expect = oexpect; - PL_copline = ocopline; - PL_curcop = ocurcop; - } -} - -#endif -#endif - -#ifndef load_module -#if defined(NEED_load_module) -static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); -static -#else -extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); -#endif - -#ifdef load_module -# undef load_module -#endif -#define load_module DPPP_(my_load_module) -#define Perl_load_module DPPP_(my_load_module) - -#if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL) - -void -DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...) -{ - va_list args; - va_start(args, ver); - vload_module(flags, name, ver, &args); - va_end(args); -} - -#endif -#endif -#ifndef newRV_inc -# define newRV_inc(sv) newRV(sv) /* Replace */ -#endif - -#ifndef newRV_noinc -#if defined(NEED_newRV_noinc) -static SV * DPPP_(my_newRV_noinc)(SV *sv); -static -#else -extern SV * DPPP_(my_newRV_noinc)(SV *sv); -#endif - -#ifdef newRV_noinc -# undef newRV_noinc -#endif -#define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a) -#define Perl_newRV_noinc DPPP_(my_newRV_noinc) - -#if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL) -SV * -DPPP_(my_newRV_noinc)(SV *sv) -{ - SV *rv = (SV *)newRV(sv); - SvREFCNT_dec(sv); - return rv; -} -#endif -#endif - -/* Hint: newCONSTSUB - * Returns a CV* as of perl-5.7.1. This return value is not supported - * by Devel::PPPort. - */ - -/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ -#if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005) -#if defined(NEED_newCONSTSUB) -static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); -static -#else -extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); -#endif - -#ifdef newCONSTSUB -# undef newCONSTSUB -#endif -#define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c) -#define Perl_newCONSTSUB DPPP_(my_newCONSTSUB) - -#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) - -/* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */ -/* (There's no PL_parser in perl < 5.005, so this is completely safe) */ -#define D_PPP_PL_copline PL_copline - -void -DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) -{ - U32 oldhints = PL_hints; - HV *old_cop_stash = PL_curcop->cop_stash; - HV *old_curstash = PL_curstash; - line_t oldline = PL_curcop->cop_line; - PL_curcop->cop_line = D_PPP_PL_copline; - - PL_hints &= ~HINT_BLOCK_SCOPE; - if (stash) - PL_curstash = PL_curcop->cop_stash = stash; - - newSUB( - -#if (PERL_BCDVERSION < 0x5003022) - start_subparse(), -#elif (PERL_BCDVERSION == 0x5003022) - start_subparse(0), -#else /* 5.003_23 onwards */ - start_subparse(FALSE, 0), -#endif - - newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), - newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ - newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) - ); - - PL_hints = oldhints; - PL_curcop->cop_stash = old_cop_stash; - PL_curstash = old_curstash; - PL_curcop->cop_line = oldline; -} -#endif -#endif - -/* - * Boilerplate macros for initializing and accessing interpreter-local - * data from C. All statics in extensions should be reworked to use - * this, if you want to make the extension thread-safe. See ext/re/re.xs - * for an example of the use of these macros. - * - * Code that uses these macros is responsible for the following: - * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" - * 2. Declare a typedef named my_cxt_t that is a structure that contains - * all the data that needs to be interpreter-local. - * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. - * 4. Use the MY_CXT_INIT macro such that it is called exactly once - * (typically put in the BOOT: section). - * 5. Use the members of the my_cxt_t structure everywhere as - * MY_CXT.member. - * 6. Use the dMY_CXT macro (a declaration) in all the functions that - * access MY_CXT. - */ - -#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ - defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) - -#ifndef START_MY_CXT - -/* This must appear in all extensions that define a my_cxt_t structure, - * right after the definition (i.e. at file scope). The non-threads - * case below uses it to declare the data as static. */ -#define START_MY_CXT - -#if (PERL_BCDVERSION < 0x5004068) -/* Fetches the SV that keeps the per-interpreter data. */ -#define dMY_CXT_SV \ - SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) -#else /* >= perl5.004_68 */ -#define dMY_CXT_SV \ - SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ - sizeof(MY_CXT_KEY)-1, TRUE) -#endif /* < perl5.004_68 */ - -/* This declaration should be used within all functions that use the - * interpreter-local data. */ -#define dMY_CXT \ - dMY_CXT_SV; \ - my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) - -/* Creates and zeroes the per-interpreter data. - * (We allocate my_cxtp in a Perl SV so that it will be released when - * the interpreter goes away.) */ -#define MY_CXT_INIT \ - dMY_CXT_SV; \ - /* newSV() allocates one more than needed */ \ - my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ - Zero(my_cxtp, 1, my_cxt_t); \ - sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) - -/* This macro must be used to access members of the my_cxt_t structure. - * e.g. MYCXT.some_data */ -#define MY_CXT (*my_cxtp) - -/* Judicious use of these macros can reduce the number of times dMY_CXT - * is used. Use is similar to pTHX, aTHX etc. */ -#define pMY_CXT my_cxt_t *my_cxtp -#define pMY_CXT_ pMY_CXT, -#define _pMY_CXT ,pMY_CXT -#define aMY_CXT my_cxtp -#define aMY_CXT_ aMY_CXT, -#define _aMY_CXT ,aMY_CXT - -#endif /* START_MY_CXT */ - -#ifndef MY_CXT_CLONE -/* Clones the per-interpreter data. */ -#define MY_CXT_CLONE \ - dMY_CXT_SV; \ - my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ - Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ - sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) -#endif - -#else /* single interpreter */ - -#ifndef START_MY_CXT - -#define START_MY_CXT static my_cxt_t my_cxt; -#define dMY_CXT_SV dNOOP -#define dMY_CXT dNOOP -#define MY_CXT_INIT NOOP -#define MY_CXT my_cxt - -#define pMY_CXT void -#define pMY_CXT_ -#define _pMY_CXT -#define aMY_CXT -#define aMY_CXT_ -#define _aMY_CXT - -#endif /* START_MY_CXT */ - -#ifndef MY_CXT_CLONE -#define MY_CXT_CLONE NOOP -#endif - -#endif - -#ifndef IVdf -# if IVSIZE == LONGSIZE -# define IVdf "ld" -# define UVuf "lu" -# define UVof "lo" -# define UVxf "lx" -# define UVXf "lX" -# else -# if IVSIZE == INTSIZE -# define IVdf "d" -# define UVuf "u" -# define UVof "o" -# define UVxf "x" -# define UVXf "X" -# endif -# endif -#endif - -#ifndef NVef -# if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ - defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000) - /* Not very likely, but let's try anyway. */ -# define NVef PERL_PRIeldbl -# define NVff PERL_PRIfldbl -# define NVgf PERL_PRIgldbl -# else -# define NVef "e" -# define NVff "f" -# define NVgf "g" -# endif -#endif - -#ifndef SvREFCNT_inc -# ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - if (_sv) \ - (SvREFCNT(_sv))++; \ - _sv; \ - }) -# else -# define SvREFCNT_inc(sv) \ - ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) -# endif -#endif - -#ifndef SvREFCNT_inc_simple -# ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_simple(sv) \ - ({ \ - if (sv) \ - (SvREFCNT(sv))++; \ - (SV *)(sv); \ - }) -# else -# define SvREFCNT_inc_simple(sv) \ - ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL) -# endif -#endif - -#ifndef SvREFCNT_inc_NN -# ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_NN(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - SvREFCNT(_sv)++; \ - _sv; \ - }) -# else -# define SvREFCNT_inc_NN(sv) \ - (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv) -# endif -#endif - -#ifndef SvREFCNT_inc_void -# ifdef PERL_USE_GCC_BRACE_GROUPS -# define SvREFCNT_inc_void(sv) \ - ({ \ - SV * const _sv = (SV*)(sv); \ - if (_sv) \ - (void)(SvREFCNT(_sv)++); \ - }) -# else -# define SvREFCNT_inc_void(sv) \ - (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0) -# endif -#endif -#ifndef SvREFCNT_inc_simple_void -# define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END -#endif - -#ifndef SvREFCNT_inc_simple_NN -# define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv)) -#endif - -#ifndef SvREFCNT_inc_void_NN -# define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) -#endif - -#ifndef SvREFCNT_inc_simple_void_NN -# define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) -#endif - -#ifndef newSV_type - -#if defined(NEED_newSV_type) -static SV* DPPP_(my_newSV_type)(pTHX_ svtype const t); -static -#else -extern SV* DPPP_(my_newSV_type)(pTHX_ svtype const t); -#endif - -#ifdef newSV_type -# undef newSV_type -#endif -#define newSV_type(a) DPPP_(my_newSV_type)(aTHX_ a) -#define Perl_newSV_type DPPP_(my_newSV_type) - -#if defined(NEED_newSV_type) || defined(NEED_newSV_type_GLOBAL) - -SV* -DPPP_(my_newSV_type)(pTHX_ svtype const t) -{ - SV* const sv = newSV(0); - sv_upgrade(sv, t); - return sv; -} - -#endif - -#endif - -#if (PERL_BCDVERSION < 0x5006000) -# define D_PPP_CONSTPV_ARG(x) ((char *) (x)) -#else -# define D_PPP_CONSTPV_ARG(x) (x) -#endif -#ifndef newSVpvn -# define newSVpvn(data,len) ((data) \ - ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \ - : newSV(0)) -#endif -#ifndef newSVpvn_utf8 -# define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0) -#endif -#ifndef SVf_UTF8 -# define SVf_UTF8 0 -#endif - -#ifndef newSVpvn_flags - -#if defined(NEED_newSVpvn_flags) -static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); -static -#else -extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); -#endif - -#ifdef newSVpvn_flags -# undef newSVpvn_flags -#endif -#define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c) -#define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags) - -#if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL) - -SV * -DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags) -{ - SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len); - SvFLAGS(sv) |= (flags & SVf_UTF8); - return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv; -} - -#endif - -#endif - -/* Backwards compatibility stuff... :-( */ -#if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen) -# define NEED_sv_2pv_flags -#endif -#if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL) -# define NEED_sv_2pv_flags_GLOBAL -#endif - -/* Hint: sv_2pv_nolen - * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen(). - */ -#ifndef sv_2pv_nolen -# define sv_2pv_nolen(sv) SvPV_nolen(sv) -#endif - -#ifdef SvPVbyte - -/* Hint: SvPVbyte - * Does not work in perl-5.6.1, ppport.h implements a version - * borrowed from perl-5.7.3. - */ - -#if (PERL_BCDVERSION < 0x5007000) - -#if defined(NEED_sv_2pvbyte) -static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); -static -#else -extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); -#endif - -#ifdef sv_2pvbyte -# undef sv_2pvbyte -#endif -#define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b) -#define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte) - -#if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL) - -char * -DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp) -{ - sv_utf8_downgrade(sv,0); - return SvPV(sv,*lp); -} - -#endif - -/* Hint: sv_2pvbyte - * Use the SvPVbyte() macro instead of sv_2pvbyte(). - */ - -#undef SvPVbyte - -#define SvPVbyte(sv, lp) \ - ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ - ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp)) - -#endif - -#else - -# define SvPVbyte SvPV -# define sv_2pvbyte sv_2pv - -#endif -#ifndef sv_2pvbyte_nolen -# define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv) -#endif - -/* Hint: sv_pvn - * Always use the SvPV() macro instead of sv_pvn(). - */ - -/* Hint: sv_pvn_force - * Always use the SvPV_force() macro instead of sv_pvn_force(). - */ - -/* If these are undefined, they're not handled by the core anyway */ -#ifndef SV_IMMEDIATE_UNREF -# define SV_IMMEDIATE_UNREF 0 -#endif - -#ifndef SV_GMAGIC -# define SV_GMAGIC 0 -#endif - -#ifndef SV_COW_DROP_PV -# define SV_COW_DROP_PV 0 -#endif - -#ifndef SV_UTF8_NO_ENCODING -# define SV_UTF8_NO_ENCODING 0 -#endif - -#ifndef SV_NOSTEAL -# define SV_NOSTEAL 0 -#endif - -#ifndef SV_CONST_RETURN -# define SV_CONST_RETURN 0 -#endif - -#ifndef SV_MUTABLE_RETURN -# define SV_MUTABLE_RETURN 0 -#endif - -#ifndef SV_SMAGIC -# define SV_SMAGIC 0 -#endif - -#ifndef SV_HAS_TRAILING_NUL -# define SV_HAS_TRAILING_NUL 0 -#endif - -#ifndef SV_COW_SHARED_HASH_KEYS -# define SV_COW_SHARED_HASH_KEYS 0 -#endif - -#if (PERL_BCDVERSION < 0x5007002) - -#if defined(NEED_sv_2pv_flags) -static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); -static -#else -extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); -#endif - -#ifdef sv_2pv_flags -# undef sv_2pv_flags -#endif -#define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c) -#define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags) - -#if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL) - -char * -DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) -{ - STRLEN n_a = (STRLEN) flags; - return sv_2pv(sv, lp ? lp : &n_a); -} - -#endif - -#if defined(NEED_sv_pvn_force_flags) -static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); -static -#else -extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); -#endif - -#ifdef sv_pvn_force_flags -# undef sv_pvn_force_flags -#endif -#define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c) -#define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags) - -#if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL) - -char * -DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) -{ - STRLEN n_a = (STRLEN) flags; - return sv_pvn_force(sv, lp ? lp : &n_a); -} - -#endif - -#endif - -#if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) ) -# define DPPP_SVPV_NOLEN_LP_ARG &PL_na -#else -# define DPPP_SVPV_NOLEN_LP_ARG 0 -#endif -#ifndef SvPV_const -# define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC) -#endif - -#ifndef SvPV_mutable -# define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC) -#endif -#ifndef SvPV_flags -# define SvPV_flags(sv, lp, flags) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags)) -#endif -#ifndef SvPV_flags_const -# define SvPV_flags_const(sv, lp, flags) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \ - (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN)) -#endif -#ifndef SvPV_flags_const_nolen -# define SvPV_flags_const_nolen(sv, flags) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? SvPVX_const(sv) : \ - (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN)) -#endif -#ifndef SvPV_flags_mutable -# define SvPV_flags_mutable(sv, lp, flags) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \ - sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) -#endif -#ifndef SvPV_force -# define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC) -#endif - -#ifndef SvPV_force_nolen -# define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC) -#endif - -#ifndef SvPV_force_mutable -# define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC) -#endif - -#ifndef SvPV_force_nomg -# define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0) -#endif - -#ifndef SvPV_force_nomg_nolen -# define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0) -#endif -#ifndef SvPV_force_flags -# define SvPV_force_flags(sv, lp, flags) \ - ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ - ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags)) -#endif -#ifndef SvPV_force_flags_nolen -# define SvPV_force_flags_nolen(sv, flags) \ - ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ - ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags)) -#endif -#ifndef SvPV_force_flags_mutable -# define SvPV_force_flags_mutable(sv, lp, flags) \ - ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ - ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \ - : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) -#endif -#ifndef SvPV_nolen -# define SvPV_nolen(sv) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC)) -#endif -#ifndef SvPV_nolen_const -# define SvPV_nolen_const(sv) \ - ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ - ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN)) -#endif -#ifndef SvPV_nomg -# define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0) -#endif - -#ifndef SvPV_nomg_const -# define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0) -#endif - -#ifndef SvPV_nomg_const_nolen -# define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0) -#endif -#ifndef SvPV_renew -# define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \ - SvPV_set((sv), (char *) saferealloc( \ - (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \ - } STMT_END -#endif -#ifndef SvMAGIC_set -# define SvMAGIC_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ - (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END -#endif - -#if (PERL_BCDVERSION < 0x5009003) -#ifndef SvPVX_const -# define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv))) -#endif - -#ifndef SvPVX_mutable -# define SvPVX_mutable(sv) (0 + SvPVX(sv)) -#endif -#ifndef SvRV_set -# define SvRV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ - (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END -#endif - -#else -#ifndef SvPVX_const -# define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv)) -#endif - -#ifndef SvPVX_mutable -# define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv) -#endif -#ifndef SvRV_set -# define SvRV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ - ((sv)->sv_u.svu_rv = (val)); } STMT_END -#endif - -#endif -#ifndef SvSTASH_set -# define SvSTASH_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ - (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END -#endif - -#if (PERL_BCDVERSION < 0x5004000) -#ifndef SvUV_set -# define SvUV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ - (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END -#endif - -#else -#ifndef SvUV_set -# define SvUV_set(sv, val) \ - STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ - (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END -#endif - -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf) -#if defined(NEED_vnewSVpvf) -static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); -static -#else -extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); -#endif - -#ifdef vnewSVpvf -# undef vnewSVpvf -#endif -#define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b) -#define Perl_vnewSVpvf DPPP_(my_vnewSVpvf) - -#if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL) - -SV * -DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args) -{ - register SV *sv = newSV(0); - sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); - return sv; -} - -#endif -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf) -# define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf) -# define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg) -#if defined(NEED_sv_catpvf_mg) -static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); -static -#else -extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); -#endif - -#define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg) - -#if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL) - -void -DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...) -{ - va_list args; - va_start(args, pat); - sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); - SvSETMAGIC(sv); - va_end(args); -} - -#endif -#endif - -#ifdef PERL_IMPLICIT_CONTEXT -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext) -#if defined(NEED_sv_catpvf_mg_nocontext) -static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); -static -#else -extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); -#endif - -#define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) -#define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) - -#if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL) - -void -DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...) -{ - dTHX; - va_list args; - va_start(args, pat); - sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); - SvSETMAGIC(sv); - va_end(args); -} - -#endif -#endif -#endif - -/* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */ -#ifndef sv_catpvf_mg -# ifdef PERL_IMPLICIT_CONTEXT -# define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext -# else -# define sv_catpvf_mg Perl_sv_catpvf_mg -# endif -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg) -# define sv_vcatpvf_mg(sv, pat, args) \ - STMT_START { \ - sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ - SvSETMAGIC(sv); \ - } STMT_END -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg) -#if defined(NEED_sv_setpvf_mg) -static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); -static -#else -extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); -#endif - -#define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg) - -#if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL) - -void -DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...) -{ - va_list args; - va_start(args, pat); - sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); - SvSETMAGIC(sv); - va_end(args); -} - -#endif -#endif - -#ifdef PERL_IMPLICIT_CONTEXT -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext) -#if defined(NEED_sv_setpvf_mg_nocontext) -static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); -static -#else -extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); -#endif - -#define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) -#define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) - -#if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL) - -void -DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...) -{ - dTHX; - va_list args; - va_start(args, pat); - sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); - SvSETMAGIC(sv); - va_end(args); -} - -#endif -#endif -#endif - -/* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */ -#ifndef sv_setpvf_mg -# ifdef PERL_IMPLICIT_CONTEXT -# define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext -# else -# define sv_setpvf_mg Perl_sv_setpvf_mg -# endif -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg) -# define sv_vsetpvf_mg(sv, pat, args) \ - STMT_START { \ - sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ - SvSETMAGIC(sv); \ - } STMT_END -#endif - -#ifndef newSVpvn_share - -#if defined(NEED_newSVpvn_share) -static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); -static -#else -extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); -#endif - -#ifdef newSVpvn_share -# undef newSVpvn_share -#endif -#define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c) -#define Perl_newSVpvn_share DPPP_(my_newSVpvn_share) - -#if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL) - -SV * -DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash) -{ - SV *sv; - if (len < 0) - len = -len; - if (!hash) - PERL_HASH(hash, (char*) src, len); - sv = newSVpvn((char *) src, len); - sv_upgrade(sv, SVt_PVIV); - SvIVX(sv) = hash; - SvREADONLY_on(sv); - SvPOK_on(sv); - return sv; -} - -#endif - -#endif -#ifndef SvSHARED_HASH -# define SvSHARED_HASH(sv) (0 + SvUVX(sv)) -#endif -#ifndef HvNAME_get -# define HvNAME_get(hv) HvNAME(hv) -#endif -#ifndef HvNAMELEN_get -# define HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0) -#endif -#ifndef GvSVn -# define GvSVn(gv) GvSV(gv) -#endif - -#ifndef isGV_with_GP -# define isGV_with_GP(gv) isGV(gv) -#endif -#ifndef WARN_ALL -# define WARN_ALL 0 -#endif - -#ifndef WARN_CLOSURE -# define WARN_CLOSURE 1 -#endif - -#ifndef WARN_DEPRECATED -# define WARN_DEPRECATED 2 -#endif - -#ifndef WARN_EXITING -# define WARN_EXITING 3 -#endif - -#ifndef WARN_GLOB -# define WARN_GLOB 4 -#endif - -#ifndef WARN_IO -# define WARN_IO 5 -#endif - -#ifndef WARN_CLOSED -# define WARN_CLOSED 6 -#endif - -#ifndef WARN_EXEC -# define WARN_EXEC 7 -#endif - -#ifndef WARN_LAYER -# define WARN_LAYER 8 -#endif - -#ifndef WARN_NEWLINE -# define WARN_NEWLINE 9 -#endif - -#ifndef WARN_PIPE -# define WARN_PIPE 10 -#endif - -#ifndef WARN_UNOPENED -# define WARN_UNOPENED 11 -#endif - -#ifndef WARN_MISC -# define WARN_MISC 12 -#endif - -#ifndef WARN_NUMERIC -# define WARN_NUMERIC 13 -#endif - -#ifndef WARN_ONCE -# define WARN_ONCE 14 -#endif - -#ifndef WARN_OVERFLOW -# define WARN_OVERFLOW 15 -#endif - -#ifndef WARN_PACK -# define WARN_PACK 16 -#endif - -#ifndef WARN_PORTABLE -# define WARN_PORTABLE 17 -#endif - -#ifndef WARN_RECURSION -# define WARN_RECURSION 18 -#endif - -#ifndef WARN_REDEFINE -# define WARN_REDEFINE 19 -#endif - -#ifndef WARN_REGEXP -# define WARN_REGEXP 20 -#endif - -#ifndef WARN_SEVERE -# define WARN_SEVERE 21 -#endif - -#ifndef WARN_DEBUGGING -# define WARN_DEBUGGING 22 -#endif - -#ifndef WARN_INPLACE -# define WARN_INPLACE 23 -#endif - -#ifndef WARN_INTERNAL -# define WARN_INTERNAL 24 -#endif - -#ifndef WARN_MALLOC -# define WARN_MALLOC 25 -#endif - -#ifndef WARN_SIGNAL -# define WARN_SIGNAL 26 -#endif - -#ifndef WARN_SUBSTR -# define WARN_SUBSTR 27 -#endif - -#ifndef WARN_SYNTAX -# define WARN_SYNTAX 28 -#endif - -#ifndef WARN_AMBIGUOUS -# define WARN_AMBIGUOUS 29 -#endif - -#ifndef WARN_BAREWORD -# define WARN_BAREWORD 30 -#endif - -#ifndef WARN_DIGIT -# define WARN_DIGIT 31 -#endif - -#ifndef WARN_PARENTHESIS -# define WARN_PARENTHESIS 32 -#endif - -#ifndef WARN_PRECEDENCE -# define WARN_PRECEDENCE 33 -#endif - -#ifndef WARN_PRINTF -# define WARN_PRINTF 34 -#endif - -#ifndef WARN_PROTOTYPE -# define WARN_PROTOTYPE 35 -#endif - -#ifndef WARN_QW -# define WARN_QW 36 -#endif - -#ifndef WARN_RESERVED -# define WARN_RESERVED 37 -#endif - -#ifndef WARN_SEMICOLON -# define WARN_SEMICOLON 38 -#endif - -#ifndef WARN_TAINT -# define WARN_TAINT 39 -#endif - -#ifndef WARN_THREADS -# define WARN_THREADS 40 -#endif - -#ifndef WARN_UNINITIALIZED -# define WARN_UNINITIALIZED 41 -#endif - -#ifndef WARN_UNPACK -# define WARN_UNPACK 42 -#endif - -#ifndef WARN_UNTIE -# define WARN_UNTIE 43 -#endif - -#ifndef WARN_UTF8 -# define WARN_UTF8 44 -#endif - -#ifndef WARN_VOID -# define WARN_VOID 45 -#endif - -#ifndef WARN_ASSERTIONS -# define WARN_ASSERTIONS 46 -#endif -#ifndef packWARN -# define packWARN(a) (a) -#endif - -#ifndef ckWARN -# ifdef G_WARN_ON -# define ckWARN(a) (PL_dowarn & G_WARN_ON) -# else -# define ckWARN(a) PL_dowarn -# endif -#endif - -#if (PERL_BCDVERSION >= 0x5004000) && !defined(warner) -#if defined(NEED_warner) -static void DPPP_(my_warner)(U32 err, const char *pat, ...); -static -#else -extern void DPPP_(my_warner)(U32 err, const char *pat, ...); -#endif - -#define Perl_warner DPPP_(my_warner) - -#if defined(NEED_warner) || defined(NEED_warner_GLOBAL) - -void -DPPP_(my_warner)(U32 err, const char *pat, ...) -{ - SV *sv; - va_list args; - - PERL_UNUSED_ARG(err); - - va_start(args, pat); - sv = vnewSVpvf(pat, &args); - va_end(args); - sv_2mortal(sv); - warn("%s", SvPV_nolen(sv)); -} - -#define warner Perl_warner - -#define Perl_warner_nocontext Perl_warner - -#endif -#endif - -/* concatenating with "" ensures that only literal strings are accepted as argument - * note that STR_WITH_LEN() can't be used as argument to macros or functions that - * under some configurations might be macros - */ -#ifndef STR_WITH_LEN -# define STR_WITH_LEN(s) (s ""), (sizeof(s)-1) -#endif -#ifndef newSVpvs -# define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1) -#endif - -#ifndef newSVpvs_flags -# define newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags) -#endif - -#ifndef sv_catpvs -# define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) -#endif - -#ifndef sv_setpvs -# define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1) -#endif - -#ifndef hv_fetchs -# define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval) -#endif - -#ifndef hv_stores -# define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0) -#endif -#ifndef gv_fetchpvn_flags -# define gv_fetchpvn_flags(name, len, flags, svt) gv_fetchpv(name, flags, svt) -#endif - -#ifndef gv_fetchpvs -# define gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt) -#endif - -#ifndef gv_stashpvs -# define gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags) -#endif -#ifndef SvGETMAGIC -# define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END -#endif -#ifndef PERL_MAGIC_sv -# define PERL_MAGIC_sv '\0' -#endif - -#ifndef PERL_MAGIC_overload -# define PERL_MAGIC_overload 'A' -#endif - -#ifndef PERL_MAGIC_overload_elem -# define PERL_MAGIC_overload_elem 'a' -#endif - -#ifndef PERL_MAGIC_overload_table -# define PERL_MAGIC_overload_table 'c' -#endif - -#ifndef PERL_MAGIC_bm -# define PERL_MAGIC_bm 'B' -#endif - -#ifndef PERL_MAGIC_regdata -# define PERL_MAGIC_regdata 'D' -#endif - -#ifndef PERL_MAGIC_regdatum -# define PERL_MAGIC_regdatum 'd' -#endif - -#ifndef PERL_MAGIC_env -# define PERL_MAGIC_env 'E' -#endif - -#ifndef PERL_MAGIC_envelem -# define PERL_MAGIC_envelem 'e' -#endif - -#ifndef PERL_MAGIC_fm -# define PERL_MAGIC_fm 'f' -#endif - -#ifndef PERL_MAGIC_regex_global -# define PERL_MAGIC_regex_global 'g' -#endif - -#ifndef PERL_MAGIC_isa -# define PERL_MAGIC_isa 'I' -#endif - -#ifndef PERL_MAGIC_isaelem -# define PERL_MAGIC_isaelem 'i' -#endif - -#ifndef PERL_MAGIC_nkeys -# define PERL_MAGIC_nkeys 'k' -#endif - -#ifndef PERL_MAGIC_dbfile -# define PERL_MAGIC_dbfile 'L' -#endif - -#ifndef PERL_MAGIC_dbline -# define PERL_MAGIC_dbline 'l' -#endif - -#ifndef PERL_MAGIC_mutex -# define PERL_MAGIC_mutex 'm' -#endif - -#ifndef PERL_MAGIC_shared -# define PERL_MAGIC_shared 'N' -#endif - -#ifndef PERL_MAGIC_shared_scalar -# define PERL_MAGIC_shared_scalar 'n' -#endif - -#ifndef PERL_MAGIC_collxfrm -# define PERL_MAGIC_collxfrm 'o' -#endif - -#ifndef PERL_MAGIC_tied -# define PERL_MAGIC_tied 'P' -#endif - -#ifndef PERL_MAGIC_tiedelem -# define PERL_MAGIC_tiedelem 'p' -#endif - -#ifndef PERL_MAGIC_tiedscalar -# define PERL_MAGIC_tiedscalar 'q' -#endif - -#ifndef PERL_MAGIC_qr -# define PERL_MAGIC_qr 'r' -#endif - -#ifndef PERL_MAGIC_sig -# define PERL_MAGIC_sig 'S' -#endif - -#ifndef PERL_MAGIC_sigelem -# define PERL_MAGIC_sigelem 's' -#endif - -#ifndef PERL_MAGIC_taint -# define PERL_MAGIC_taint 't' -#endif - -#ifndef PERL_MAGIC_uvar -# define PERL_MAGIC_uvar 'U' -#endif - -#ifndef PERL_MAGIC_uvar_elem -# define PERL_MAGIC_uvar_elem 'u' -#endif - -#ifndef PERL_MAGIC_vstring -# define PERL_MAGIC_vstring 'V' -#endif - -#ifndef PERL_MAGIC_vec -# define PERL_MAGIC_vec 'v' -#endif - -#ifndef PERL_MAGIC_utf8 -# define PERL_MAGIC_utf8 'w' -#endif - -#ifndef PERL_MAGIC_substr -# define PERL_MAGIC_substr 'x' -#endif - -#ifndef PERL_MAGIC_defelem -# define PERL_MAGIC_defelem 'y' -#endif - -#ifndef PERL_MAGIC_glob -# define PERL_MAGIC_glob '*' -#endif - -#ifndef PERL_MAGIC_arylen -# define PERL_MAGIC_arylen '#' -#endif - -#ifndef PERL_MAGIC_pos -# define PERL_MAGIC_pos '.' -#endif - -#ifndef PERL_MAGIC_backref -# define PERL_MAGIC_backref '<' -#endif - -#ifndef PERL_MAGIC_ext -# define PERL_MAGIC_ext '~' -#endif - -/* That's the best we can do... */ -#ifndef sv_catpvn_nomg -# define sv_catpvn_nomg sv_catpvn -#endif - -#ifndef sv_catsv_nomg -# define sv_catsv_nomg sv_catsv -#endif - -#ifndef sv_setsv_nomg -# define sv_setsv_nomg sv_setsv -#endif - -#ifndef sv_pvn_nomg -# define sv_pvn_nomg sv_pvn -#endif - -#ifndef SvIV_nomg -# define SvIV_nomg SvIV -#endif - -#ifndef SvUV_nomg -# define SvUV_nomg SvUV -#endif - -#ifndef sv_catpv_mg -# define sv_catpv_mg(sv, ptr) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_catpv(TeMpSv,ptr); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_catpvn_mg -# define sv_catpvn_mg(sv, ptr, len) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_catpvn(TeMpSv,ptr,len); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_catsv_mg -# define sv_catsv_mg(dsv, ssv) \ - STMT_START { \ - SV *TeMpSv = dsv; \ - sv_catsv(TeMpSv,ssv); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setiv_mg -# define sv_setiv_mg(sv, i) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_setiv(TeMpSv,i); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setnv_mg -# define sv_setnv_mg(sv, num) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_setnv(TeMpSv,num); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setpv_mg -# define sv_setpv_mg(sv, ptr) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_setpv(TeMpSv,ptr); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setpvn_mg -# define sv_setpvn_mg(sv, ptr, len) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_setpvn(TeMpSv,ptr,len); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setsv_mg -# define sv_setsv_mg(dsv, ssv) \ - STMT_START { \ - SV *TeMpSv = dsv; \ - sv_setsv(TeMpSv,ssv); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_setuv_mg -# define sv_setuv_mg(sv, i) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_setuv(TeMpSv,i); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif - -#ifndef sv_usepvn_mg -# define sv_usepvn_mg(sv, ptr, len) \ - STMT_START { \ - SV *TeMpSv = sv; \ - sv_usepvn(TeMpSv,ptr,len); \ - SvSETMAGIC(TeMpSv); \ - } STMT_END -#endif -#ifndef SvVSTRING_mg -# define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL) -#endif - -/* Hint: sv_magic_portable - * This is a compatibility function that is only available with - * Devel::PPPort. It is NOT in the perl core. - * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when - * it is being passed a name pointer with namlen == 0. In that - * case, perl 5.8.0 and later store the pointer, not a copy of it. - * The compatibility can be provided back to perl 5.004. With - * earlier versions, the code will not compile. - */ - -#if (PERL_BCDVERSION < 0x5004000) - - /* code that uses sv_magic_portable will not compile */ - -#elif (PERL_BCDVERSION < 0x5008000) - -# define sv_magic_portable(sv, obj, how, name, namlen) \ - STMT_START { \ - SV *SvMp_sv = (sv); \ - char *SvMp_name = (char *) (name); \ - I32 SvMp_namlen = (namlen); \ - if (SvMp_name && SvMp_namlen == 0) \ - { \ - MAGIC *mg; \ - sv_magic(SvMp_sv, obj, how, 0, 0); \ - mg = SvMAGIC(SvMp_sv); \ - mg->mg_len = -42; /* XXX: this is the tricky part */ \ - mg->mg_ptr = SvMp_name; \ - } \ - else \ - { \ - sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \ - } \ - } STMT_END - -#else - -# define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e) - -#endif - -#ifdef USE_ITHREADS -#ifndef CopFILE -# define CopFILE(c) ((c)->cop_file) -#endif - -#ifndef CopFILEGV -# define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv) -#endif - -#ifndef CopFILE_set -# define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv)) -#endif - -#ifndef CopFILESV -# define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv) -#endif - -#ifndef CopFILEAV -# define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav) -#endif - -#ifndef CopSTASHPV -# define CopSTASHPV(c) ((c)->cop_stashpv) -#endif - -#ifndef CopSTASHPV_set -# define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch)) -#endif - -#ifndef CopSTASH -# define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv) -#endif - -#ifndef CopSTASH_set -# define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch) -#endif - -#ifndef CopSTASH_eq -# define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ - || (CopSTASHPV(c) && HvNAME(hv) \ - && strEQ(CopSTASHPV(c), HvNAME(hv))))) -#endif - -#else -#ifndef CopFILEGV -# define CopFILEGV(c) ((c)->cop_filegv) -#endif - -#ifndef CopFILEGV_set -# define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv)) -#endif - -#ifndef CopFILE_set -# define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv)) -#endif - -#ifndef CopFILESV -# define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv) -#endif - -#ifndef CopFILEAV -# define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav) -#endif - -#ifndef CopFILE -# define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch) -#endif - -#ifndef CopSTASH -# define CopSTASH(c) ((c)->cop_stash) -#endif - -#ifndef CopSTASH_set -# define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) -#endif - -#ifndef CopSTASHPV -# define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch) -#endif - -#ifndef CopSTASHPV_set -# define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD)) -#endif - -#ifndef CopSTASH_eq -# define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv)) -#endif - -#endif /* USE_ITHREADS */ -#ifndef IN_PERL_COMPILETIME -# define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) -#endif - -#ifndef IN_LOCALE_RUNTIME -# define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) -#endif - -#ifndef IN_LOCALE_COMPILETIME -# define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) -#endif - -#ifndef IN_LOCALE -# define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) -#endif -#ifndef IS_NUMBER_IN_UV -# define IS_NUMBER_IN_UV 0x01 -#endif - -#ifndef IS_NUMBER_GREATER_THAN_UV_MAX -# define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 -#endif - -#ifndef IS_NUMBER_NOT_INT -# define IS_NUMBER_NOT_INT 0x04 -#endif - -#ifndef IS_NUMBER_NEG -# define IS_NUMBER_NEG 0x08 -#endif - -#ifndef IS_NUMBER_INFINITY -# define IS_NUMBER_INFINITY 0x10 -#endif - -#ifndef IS_NUMBER_NAN -# define IS_NUMBER_NAN 0x20 -#endif -#ifndef GROK_NUMERIC_RADIX -# define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) -#endif -#ifndef PERL_SCAN_GREATER_THAN_UV_MAX -# define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 -#endif - -#ifndef PERL_SCAN_SILENT_ILLDIGIT -# define PERL_SCAN_SILENT_ILLDIGIT 0x04 -#endif - -#ifndef PERL_SCAN_ALLOW_UNDERSCORES -# define PERL_SCAN_ALLOW_UNDERSCORES 0x01 -#endif - -#ifndef PERL_SCAN_DISALLOW_PREFIX -# define PERL_SCAN_DISALLOW_PREFIX 0x02 -#endif - -#ifndef grok_numeric_radix -#if defined(NEED_grok_numeric_radix) -static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); -static -#else -extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); -#endif - -#ifdef grok_numeric_radix -# undef grok_numeric_radix -#endif -#define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b) -#define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix) - -#if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL) -bool -DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) -{ -#ifdef USE_LOCALE_NUMERIC -#ifdef PL_numeric_radix_sv - if (PL_numeric_radix_sv && IN_LOCALE) { - STRLEN len; - char* radix = SvPV(PL_numeric_radix_sv, len); - if (*sp + len <= send && memEQ(*sp, radix, len)) { - *sp += len; - return TRUE; - } - } -#else - /* older perls don't have PL_numeric_radix_sv so the radix - * must manually be requested from locale.h - */ -#include - dTHR; /* needed for older threaded perls */ - struct lconv *lc = localeconv(); - char *radix = lc->decimal_point; - if (radix && IN_LOCALE) { - STRLEN len = strlen(radix); - if (*sp + len <= send && memEQ(*sp, radix, len)) { - *sp += len; - return TRUE; - } - } -#endif -#endif /* USE_LOCALE_NUMERIC */ - /* always try "." if numeric radix didn't match because - * we may have data from different locales mixed */ - if (*sp < send && **sp == '.') { - ++*sp; - return TRUE; - } - return FALSE; -} -#endif -#endif - -#ifndef grok_number -#if defined(NEED_grok_number) -static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); -static -#else -extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); -#endif - -#ifdef grok_number -# undef grok_number -#endif -#define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c) -#define Perl_grok_number DPPP_(my_grok_number) - -#if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL) -int -DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) -{ - const char *s = pv; - const char *send = pv + len; - const UV max_div_10 = UV_MAX / 10; - const char max_mod_10 = UV_MAX % 10; - int numtype = 0; - int sawinf = 0; - int sawnan = 0; - - while (s < send && isSPACE(*s)) - s++; - if (s == send) { - return 0; - } else if (*s == '-') { - s++; - numtype = IS_NUMBER_NEG; - } - else if (*s == '+') - s++; - - if (s == send) - return 0; - - /* next must be digit or the radix separator or beginning of infinity */ - if (isDIGIT(*s)) { - /* UVs are at least 32 bits, so the first 9 decimal digits cannot - overflow. */ - UV value = *s - '0'; - /* This construction seems to be more optimiser friendly. - (without it gcc does the isDIGIT test and the *s - '0' separately) - With it gcc on arm is managing 6 instructions (6 cycles) per digit. - In theory the optimiser could deduce how far to unroll the loop - before checking for overflow. */ - if (++s < send) { - int digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - digit = *s - '0'; - if (digit >= 0 && digit <= 9) { - value = value * 10 + digit; - if (++s < send) { - /* Now got 9 digits, so need to check - each time for overflow. */ - digit = *s - '0'; - while (digit >= 0 && digit <= 9 - && (value < max_div_10 - || (value == max_div_10 - && digit <= max_mod_10))) { - value = value * 10 + digit; - if (++s < send) - digit = *s - '0'; - else - break; - } - if (digit >= 0 && digit <= 9 - && (s < send)) { - /* value overflowed. - skip the remaining digits, don't - worry about setting *valuep. */ - do { - s++; - } while (s < send && isDIGIT(*s)); - numtype |= - IS_NUMBER_GREATER_THAN_UV_MAX; - goto skip_value; - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - numtype |= IS_NUMBER_IN_UV; - if (valuep) - *valuep = value; - - skip_value: - if (GROK_NUMERIC_RADIX(&s, send)) { - numtype |= IS_NUMBER_NOT_INT; - while (s < send && isDIGIT(*s)) /* optional digits after the radix */ - s++; - } - } - else if (GROK_NUMERIC_RADIX(&s, send)) { - numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */ - /* no digits before the radix means we need digits after it */ - if (s < send && isDIGIT(*s)) { - do { - s++; - } while (s < send && isDIGIT(*s)); - if (valuep) { - /* integer approximation is valid - it's 0. */ - *valuep = 0; - } - } - else - return 0; - } else if (*s == 'I' || *s == 'i') { - s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; - s++; if (s == send || (*s != 'F' && *s != 'f')) return 0; - s++; if (s < send && (*s == 'I' || *s == 'i')) { - s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; - s++; if (s == send || (*s != 'I' && *s != 'i')) return 0; - s++; if (s == send || (*s != 'T' && *s != 't')) return 0; - s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0; - s++; - } - sawinf = 1; - } else if (*s == 'N' || *s == 'n') { - /* XXX TODO: There are signaling NaNs and quiet NaNs. */ - s++; if (s == send || (*s != 'A' && *s != 'a')) return 0; - s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; - s++; - sawnan = 1; - } else - return 0; - - if (sawinf) { - numtype &= IS_NUMBER_NEG; /* Keep track of sign */ - numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; - } else if (sawnan) { - numtype &= IS_NUMBER_NEG; /* Keep track of sign */ - numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; - } else if (s < send) { - /* we can have an optional exponent part */ - if (*s == 'e' || *s == 'E') { - /* The only flag we keep is sign. Blow away any "it's UV" */ - numtype &= IS_NUMBER_NEG; - numtype |= IS_NUMBER_NOT_INT; - s++; - if (s < send && (*s == '-' || *s == '+')) - s++; - if (s < send && isDIGIT(*s)) { - do { - s++; - } while (s < send && isDIGIT(*s)); - } - else - return 0; - } - } - while (s < send && isSPACE(*s)) - s++; - if (s >= send) - return numtype; - if (len == 10 && memEQ(pv, "0 but true", 10)) { - if (valuep) - *valuep = 0; - return IS_NUMBER_IN_UV; - } - return 0; -} -#endif -#endif - -/* - * The grok_* routines have been modified to use warn() instead of - * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit, - * which is why the stack variable has been renamed to 'xdigit'. - */ - -#ifndef grok_bin -#if defined(NEED_grok_bin) -static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -static -#else -extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -#endif - -#ifdef grok_bin -# undef grok_bin -#endif -#define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d) -#define Perl_grok_bin DPPP_(my_grok_bin) - -#if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL) -UV -DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) -{ - const char *s = start; - STRLEN len = *len_p; - UV value = 0; - NV value_nv = 0; - - const UV max_div_2 = UV_MAX / 2; - bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; - bool overflowed = FALSE; - - if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { - /* strip off leading b or 0b. - for compatibility silently suffer "b" and "0b" as valid binary - numbers. */ - if (len >= 1) { - if (s[0] == 'b') { - s++; - len--; - } - else if (len >= 2 && s[0] == '0' && s[1] == 'b') { - s+=2; - len-=2; - } - } - } - - for (; len-- && *s; s++) { - char bit = *s; - if (bit == '0' || bit == '1') { - /* Write it in this wonky order with a goto to attempt to get the - compiler to make the common case integer-only loop pretty tight. - With gcc seems to be much straighter code than old scan_bin. */ - redo: - if (!overflowed) { - if (value <= max_div_2) { - value = (value << 1) | (bit - '0'); - continue; - } - /* Bah. We're just overflowed. */ - warn("Integer overflow in binary number"); - overflowed = TRUE; - value_nv = (NV) value; - } - value_nv *= 2.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount. */ - value_nv += (NV)(bit - '0'); - continue; - } - if (bit == '_' && len && allow_underscores && (bit = s[1]) - && (bit == '0' || bit == '1')) - { - --len; - ++s; - goto redo; - } - if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) - warn("Illegal binary digit '%c' ignored", *s); - break; - } - - if ( ( overflowed && value_nv > 4294967295.0) -#if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) -#endif - ) { - warn("Binary number > 0b11111111111111111111111111111111 non-portable"); - } - *len_p = s - start; - if (!overflowed) { - *flags = 0; - return value; - } - *flags = PERL_SCAN_GREATER_THAN_UV_MAX; - if (result) - *result = value_nv; - return UV_MAX; -} -#endif -#endif - -#ifndef grok_hex -#if defined(NEED_grok_hex) -static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -static -#else -extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -#endif - -#ifdef grok_hex -# undef grok_hex -#endif -#define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d) -#define Perl_grok_hex DPPP_(my_grok_hex) - -#if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL) -UV -DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) -{ - const char *s = start; - STRLEN len = *len_p; - UV value = 0; - NV value_nv = 0; - - const UV max_div_16 = UV_MAX / 16; - bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; - bool overflowed = FALSE; - const char *xdigit; - - if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { - /* strip off leading x or 0x. - for compatibility silently suffer "x" and "0x" as valid hex numbers. - */ - if (len >= 1) { - if (s[0] == 'x') { - s++; - len--; - } - else if (len >= 2 && s[0] == '0' && s[1] == 'x') { - s+=2; - len-=2; - } - } - } - - for (; len-- && *s; s++) { - xdigit = strchr((char *) PL_hexdigit, *s); - if (xdigit) { - /* Write it in this wonky order with a goto to attempt to get the - compiler to make the common case integer-only loop pretty tight. - With gcc seems to be much straighter code than old scan_hex. */ - redo: - if (!overflowed) { - if (value <= max_div_16) { - value = (value << 4) | ((xdigit - PL_hexdigit) & 15); - continue; - } - warn("Integer overflow in hexadecimal number"); - overflowed = TRUE; - value_nv = (NV) value; - } - value_nv *= 16.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount of 16-tuples. */ - value_nv += (NV)((xdigit - PL_hexdigit) & 15); - continue; - } - if (*s == '_' && len && allow_underscores && s[1] - && (xdigit = strchr((char *) PL_hexdigit, s[1]))) - { - --len; - ++s; - goto redo; - } - if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) - warn("Illegal hexadecimal digit '%c' ignored", *s); - break; - } - - if ( ( overflowed && value_nv > 4294967295.0) -#if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) -#endif - ) { - warn("Hexadecimal number > 0xffffffff non-portable"); - } - *len_p = s - start; - if (!overflowed) { - *flags = 0; - return value; - } - *flags = PERL_SCAN_GREATER_THAN_UV_MAX; - if (result) - *result = value_nv; - return UV_MAX; -} -#endif -#endif - -#ifndef grok_oct -#if defined(NEED_grok_oct) -static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -static -#else -extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); -#endif - -#ifdef grok_oct -# undef grok_oct -#endif -#define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d) -#define Perl_grok_oct DPPP_(my_grok_oct) - -#if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL) -UV -DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) -{ - const char *s = start; - STRLEN len = *len_p; - UV value = 0; - NV value_nv = 0; - - const UV max_div_8 = UV_MAX / 8; - bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; - bool overflowed = FALSE; - - for (; len-- && *s; s++) { - /* gcc 2.95 optimiser not smart enough to figure that this subtraction - out front allows slicker code. */ - int digit = *s - '0'; - if (digit >= 0 && digit <= 7) { - /* Write it in this wonky order with a goto to attempt to get the - compiler to make the common case integer-only loop pretty tight. - */ - redo: - if (!overflowed) { - if (value <= max_div_8) { - value = (value << 3) | digit; - continue; - } - /* Bah. We're just overflowed. */ - warn("Integer overflow in octal number"); - overflowed = TRUE; - value_nv = (NV) value; - } - value_nv *= 8.0; - /* If an NV has not enough bits in its mantissa to - * represent a UV this summing of small low-order numbers - * is a waste of time (because the NV cannot preserve - * the low-order bits anyway): we could just remember when - * did we overflow and in the end just multiply value_nv by the - * right amount of 8-tuples. */ - value_nv += (NV)digit; - continue; - } - if (digit == ('_' - '0') && len && allow_underscores - && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) - { - --len; - ++s; - goto redo; - } - /* Allow \octal to work the DWIM way (that is, stop scanning - * as soon as non-octal characters are seen, complain only iff - * someone seems to want to use the digits eight and nine). */ - if (digit == 8 || digit == 9) { - if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) - warn("Illegal octal digit '%c' ignored", *s); - } - break; - } - - if ( ( overflowed && value_nv > 4294967295.0) -#if UVSIZE > 4 - || (!overflowed && value > 0xffffffff ) -#endif - ) { - warn("Octal number > 037777777777 non-portable"); - } - *len_p = s - start; - if (!overflowed) { - *flags = 0; - return value; - } - *flags = PERL_SCAN_GREATER_THAN_UV_MAX; - if (result) - *result = value_nv; - return UV_MAX; -} -#endif -#endif - -#if !defined(my_snprintf) -#if defined(NEED_my_snprintf) -static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); -static -#else -extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); -#endif - -#define my_snprintf DPPP_(my_my_snprintf) -#define Perl_my_snprintf DPPP_(my_my_snprintf) - -#if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL) - -int -DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...) -{ - dTHX; - int retval; - va_list ap; - va_start(ap, format); -#ifdef HAS_VSNPRINTF - retval = vsnprintf(buffer, len, format, ap); -#else - retval = vsprintf(buffer, format, ap); -#endif - va_end(ap); - if (retval < 0 || (len > 0 && (Size_t)retval >= len)) - Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); - return retval; -} - -#endif -#endif - -#if !defined(my_sprintf) -#if defined(NEED_my_sprintf) -static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); -static -#else -extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); -#endif - -#define my_sprintf DPPP_(my_my_sprintf) -#define Perl_my_sprintf DPPP_(my_my_sprintf) - -#if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL) - -int -DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...) -{ - va_list args; - va_start(args, pat); - vsprintf(buffer, pat, args); - va_end(args); - return strlen(buffer); -} - -#endif -#endif - -#ifdef NO_XSLOCKS -# ifdef dJMPENV -# define dXCPT dJMPENV; int rEtV = 0 -# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) -# define XCPT_TRY_END JMPENV_POP; -# define XCPT_CATCH if (rEtV != 0) -# define XCPT_RETHROW JMPENV_JUMP(rEtV) -# else -# define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 -# define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) -# define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); -# define XCPT_CATCH if (rEtV != 0) -# define XCPT_RETHROW Siglongjmp(top_env, rEtV) -# endif -#endif - -#if !defined(my_strlcat) -#if defined(NEED_my_strlcat) -static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); -static -#else -extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); -#endif - -#define my_strlcat DPPP_(my_my_strlcat) -#define Perl_my_strlcat DPPP_(my_my_strlcat) - -#if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL) - -Size_t -DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size) -{ - Size_t used, length, copy; - - used = strlen(dst); - length = strlen(src); - if (size > 0 && used < size - 1) { - copy = (length >= size - used) ? size - used - 1 : length; - memcpy(dst + used, src, copy); - dst[used + copy] = '\0'; - } - return used + length; -} -#endif -#endif - -#if !defined(my_strlcpy) -#if defined(NEED_my_strlcpy) -static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); -static -#else -extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); -#endif - -#define my_strlcpy DPPP_(my_my_strlcpy) -#define Perl_my_strlcpy DPPP_(my_my_strlcpy) - -#if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL) - -Size_t -DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size) -{ - Size_t length, copy; - - length = strlen(src); - if (size > 0) { - copy = (length >= size) ? size - 1 : length; - memcpy(dst, src, copy); - dst[copy] = '\0'; - } - return length; -} - -#endif -#endif -#ifndef PERL_PV_ESCAPE_QUOTE -# define PERL_PV_ESCAPE_QUOTE 0x0001 -#endif - -#ifndef PERL_PV_PRETTY_QUOTE -# define PERL_PV_PRETTY_QUOTE PERL_PV_ESCAPE_QUOTE -#endif - -#ifndef PERL_PV_PRETTY_ELLIPSES -# define PERL_PV_PRETTY_ELLIPSES 0x0002 -#endif - -#ifndef PERL_PV_PRETTY_LTGT -# define PERL_PV_PRETTY_LTGT 0x0004 -#endif - -#ifndef PERL_PV_ESCAPE_FIRSTCHAR -# define PERL_PV_ESCAPE_FIRSTCHAR 0x0008 -#endif - -#ifndef PERL_PV_ESCAPE_UNI -# define PERL_PV_ESCAPE_UNI 0x0100 -#endif - -#ifndef PERL_PV_ESCAPE_UNI_DETECT -# define PERL_PV_ESCAPE_UNI_DETECT 0x0200 -#endif - -#ifndef PERL_PV_ESCAPE_ALL -# define PERL_PV_ESCAPE_ALL 0x1000 -#endif - -#ifndef PERL_PV_ESCAPE_NOBACKSLASH -# define PERL_PV_ESCAPE_NOBACKSLASH 0x2000 -#endif - -#ifndef PERL_PV_ESCAPE_NOCLEAR -# define PERL_PV_ESCAPE_NOCLEAR 0x4000 -#endif - -#ifndef PERL_PV_ESCAPE_RE -# define PERL_PV_ESCAPE_RE 0x8000 -#endif - -#ifndef PERL_PV_PRETTY_NOCLEAR -# define PERL_PV_PRETTY_NOCLEAR PERL_PV_ESCAPE_NOCLEAR -#endif -#ifndef PERL_PV_PRETTY_DUMP -# define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE -#endif - -#ifndef PERL_PV_PRETTY_REGPROP -# define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE -#endif - -/* Hint: pv_escape - * Note that unicode functionality is only backported to - * those perl versions that support it. For older perl - * versions, the implementation will fall back to bytes. - */ - -#ifndef pv_escape -#if defined(NEED_pv_escape) -static char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); -static -#else -extern char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); -#endif - -#ifdef pv_escape -# undef pv_escape -#endif -#define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f) -#define Perl_pv_escape DPPP_(my_pv_escape) - -#if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL) - -char * -DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str, - const STRLEN count, const STRLEN max, - STRLEN * const escaped, const U32 flags) -{ - const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\'; - const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc; - char octbuf[32] = "%123456789ABCDF"; - STRLEN wrote = 0; - STRLEN chsize = 0; - STRLEN readsize = 1; -#if defined(is_utf8_string) && defined(utf8_to_uvchr) - bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0; -#endif - const char *pv = str; - const char * const end = pv + count; - octbuf[0] = esc; - - if (!(flags & PERL_PV_ESCAPE_NOCLEAR)) - sv_setpvs(dsv, ""); - -#if defined(is_utf8_string) && defined(utf8_to_uvchr) - if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count)) - isuni = 1; -#endif - - for (; pv < end && (!max || wrote < max) ; pv += readsize) { - const UV u = -#if defined(is_utf8_string) && defined(utf8_to_uvchr) - isuni ? utf8_to_uvchr((U8*)pv, &readsize) : -#endif - (U8)*pv; - const U8 c = (U8)u & 0xFF; - - if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) { - if (flags & PERL_PV_ESCAPE_FIRSTCHAR) - chsize = my_snprintf(octbuf, sizeof octbuf, - "%"UVxf, u); - else - chsize = my_snprintf(octbuf, sizeof octbuf, - "%cx{%"UVxf"}", esc, u); - } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) { - chsize = 1; - } else { - if (c == dq || c == esc || !isPRINT(c)) { - chsize = 2; - switch (c) { - case '\\' : /* fallthrough */ - case '%' : if (c == esc) - octbuf[1] = esc; - else - chsize = 1; - break; - case '\v' : octbuf[1] = 'v'; break; - case '\t' : octbuf[1] = 't'; break; - case '\r' : octbuf[1] = 'r'; break; - case '\n' : octbuf[1] = 'n'; break; - case '\f' : octbuf[1] = 'f'; break; - case '"' : if (dq == '"') - octbuf[1] = '"'; - else - chsize = 1; - break; - default: chsize = my_snprintf(octbuf, sizeof octbuf, - pv < end && isDIGIT((U8)*(pv+readsize)) - ? "%c%03o" : "%c%o", esc, c); - } - } else { - chsize = 1; - } - } - if (max && wrote + chsize > max) { - break; - } else if (chsize > 1) { - sv_catpvn(dsv, octbuf, chsize); - wrote += chsize; - } else { - char tmp[2]; - my_snprintf(tmp, sizeof tmp, "%c", c); - sv_catpvn(dsv, tmp, 1); - wrote++; - } - if (flags & PERL_PV_ESCAPE_FIRSTCHAR) - break; - } - if (escaped != NULL) - *escaped= pv - str; - return SvPVX(dsv); -} - -#endif -#endif - -#ifndef pv_pretty -#if defined(NEED_pv_pretty) -static char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); -static -#else -extern char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); -#endif - -#ifdef pv_pretty -# undef pv_pretty -#endif -#define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g) -#define Perl_pv_pretty DPPP_(my_pv_pretty) - -#if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL) - -char * -DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count, - const STRLEN max, char const * const start_color, char const * const end_color, - const U32 flags) -{ - const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%'; - STRLEN escaped; - - if (!(flags & PERL_PV_PRETTY_NOCLEAR)) - sv_setpvs(dsv, ""); - - if (dq == '"') - sv_catpvs(dsv, "\""); - else if (flags & PERL_PV_PRETTY_LTGT) - sv_catpvs(dsv, "<"); - - if (start_color != NULL) - sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color)); - - pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR); - - if (end_color != NULL) - sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color)); - - if (dq == '"') - sv_catpvs(dsv, "\""); - else if (flags & PERL_PV_PRETTY_LTGT) - sv_catpvs(dsv, ">"); - - if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count) - sv_catpvs(dsv, "..."); - - return SvPVX(dsv); -} - -#endif -#endif - -#ifndef pv_display -#if defined(NEED_pv_display) -static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); -static -#else -extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); -#endif - -#ifdef pv_display -# undef pv_display -#endif -#define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e) -#define Perl_pv_display DPPP_(my_pv_display) - -#if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL) - -char * -DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim) -{ - pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP); - if (len > cur && pv[cur] == '\0') - sv_catpvs(dsv, "\\0"); - return SvPVX(dsv); -} - -#endif -#endif - -#endif /* _P_P_PORTABILITY_H_ */ - -/* End of File ppport.h */ diff --git a/clipper/tidx/perl/send2cpan b/clipper/tidx/perl/send2cpan deleted file mode 100755 index 25bf5c4..0000000 --- a/clipper/tidx/perl/send2cpan +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -e - -if [ "" = "$1" ]; then - echo "Specify the file you want to upload" - exit -fi - -if [ -s ~/.cpan-user ]; then - USER=`cat ~/.cpan-user` -else - read -p "Enter username: " USER - echo $USER > ~/.cpan-user -fi - -if [ -s ~/.cpan-pass ]; then - PASS=`cat ~/.cpan-pass` -else - read -p "Enter password: " PASS - echo $PASS > ~/.cpan-pass - chmod 600 ~/.cpan-pass -fi - - -ncftpput pause.perl.org incoming $1 - -sleep 1 - -wget "http://$USER:$PASS@pause.perl.org/pause/authenquery" -O /tmp/cpan-upload.out --post-data="pause99_add_uri_upload=$1&HIDDENNAME=$USER&SUBMIT_pause99_add_uri_upload=+Upload+the+checked+file+" diff --git a/clipper/tidx/perl/t/Text-Tidx.t b/clipper/tidx/perl/t/Text-Tidx.t deleted file mode 100644 index 4340a8c..0000000 --- a/clipper/tidx/perl/t/Text-Tidx.t +++ /dev/null @@ -1,40 +0,0 @@ -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl Text-Tidx.t' - -######################### - -# change 'tests => 1' to 'tests => last_test_to_print'; - -use Test::More tests => 4; -use Cwd; - -BEGIN { use_ok('Text::Tidx') }; - -######################### - -# Insert your test code below, the Test::More module is use()ed here so read -# its man page ( perldoc Test::More ) for help writing this test script. - -my ($subdir) = $0 =~ /(.*)[\/\\]/; - -Text::Tidx::build("$subdir/annot.txt"); - -my $cytoTab=Text::Tidx->new("$subdir/annot.txt"); - -@res = $cytoTab->query("chr1", 2300001); -is($res[0],'chr1 2300000 5400000 p36.32 gpos25', "snp query"); - -@res = $cytoTab->query("chr1", 16100000, 20400001); -is("@res", slurp("$subdir/res1.txt"), "range query 1"); - -@res = $cytoTab->query("chr1", 9200000, 12700000); -is("@res", slurp("$subdir/res2.txt"), "range query 2"); - - -sub slurp { - open IN, $_[0]; - my $r = ; - $r =~ s/\s+$//; - close IN; - return $r; -} diff --git a/clipper/tidx/perl/t/annot.txt b/clipper/tidx/perl/t/annot.txt deleted file mode 100644 index 8dc4782..0000000 --- a/clipper/tidx/perl/t/annot.txt +++ /dev/null @@ -1,862 +0,0 @@ -chr1 0 2300000 p36.33 gneg -chr1 2300000 5400000 p36.32 gpos25 -chr1 5400000 7200000 p36.31 gneg -chr1 7200000 9200000 p36.23 gpos25 -chr1 9200000 12700000 p36.22 gneg -chr1 12700000 16200000 p36.21 gpos50 -chr1 16200000 20400000 p36.13 gneg -chr1 20400000 23900000 p36.12 gpos25 -chr1 23900000 28000000 p36.11 gneg -chr1 28000000 30200000 p35.3 gpos25 -chr1 30200000 32400000 p35.2 gneg -chr1 32400000 34600000 p35.1 gpos25 -chr1 34600000 40100000 p34.3 gneg -chr1 40100000 44100000 p34.2 gpos25 -chr1 44100000 46800000 p34.1 gneg -chr1 46800000 50700000 p33 gpos75 -chr1 50700000 56100000 p32.3 gneg -chr1 56100000 59000000 p32.2 gpos50 -chr1 59000000 61300000 p32.1 gneg -chr1 61300000 68900000 p31.3 gpos50 -chr1 68900000 69700000 p31.2 gneg -chr1 69700000 84900000 p31.1 gpos100 -chr1 84900000 88400000 p22.3 gneg -chr1 88400000 92000000 p22.2 gpos75 -chr1 92000000 94700000 p22.1 gneg -chr1 94700000 99700000 p21.3 gpos75 -chr1 99700000 102200000 p21.2 gneg -chr1 102200000 107200000 p21.1 gpos100 -chr1 107200000 111800000 p13.3 gneg -chr1 111800000 116100000 p13.2 gpos50 -chr1 116100000 117800000 p13.1 gneg -chr1 117800000 120600000 p12 gpos50 -chr1 120600000 121500000 p11.2 gneg -chr1 121500000 125000000 p11.1 acen -chr1 125000000 128900000 q11 acen -chr1 128900000 142600000 q12 gvar -chr1 142600000 147000000 q21.1 gneg -chr1 147000000 150300000 q21.2 gpos50 -chr1 150300000 155000000 q21.3 gneg -chr1 155000000 156500000 q22 gpos50 -chr1 156500000 159100000 q23.1 gneg -chr1 159100000 160500000 q23.2 gpos50 -chr1 160500000 165500000 q23.3 gneg -chr1 165500000 167200000 q24.1 gpos50 -chr1 167200000 170900000 q24.2 gneg -chr1 170900000 172900000 q24.3 gpos75 -chr1 172900000 176000000 q25.1 gneg -chr1 176000000 180300000 q25.2 gpos50 -chr1 180300000 185800000 q25.3 gneg -chr1 185800000 190800000 q31.1 gpos100 -chr1 190800000 193800000 q31.2 gneg -chr1 193800000 198700000 q31.3 gpos100 -chr1 198700000 207200000 q32.1 gneg -chr1 207200000 211500000 q32.2 gpos25 -chr1 211500000 214500000 q32.3 gneg -chr1 214500000 224100000 q41 gpos100 -chr1 224100000 224600000 q42.11 gneg -chr1 224600000 227000000 q42.12 gpos25 -chr1 227000000 230700000 q42.13 gneg -chr1 230700000 234700000 q42.2 gpos50 -chr1 234700000 236600000 q42.3 gneg -chr1 236600000 243700000 q43 gpos75 -chr1 243700000 249250621 q44 gneg -chr10 0 3000000 p15.3 gneg -chr10 3000000 3800000 p15.2 gpos25 -chr10 3800000 6600000 p15.1 gneg -chr10 6600000 12200000 p14 gpos75 -chr10 12200000 17300000 p13 gneg -chr10 17300000 18600000 p12.33 gpos75 -chr10 18600000 18700000 p12.32 gneg -chr10 18700000 22600000 p12.31 gpos75 -chr10 22600000 24600000 p12.2 gneg -chr10 24600000 29600000 p12.1 gpos50 -chr10 29600000 31300000 p11.23 gneg -chr10 31300000 34400000 p11.22 gpos25 -chr10 34400000 38000000 p11.21 gneg -chr10 38000000 40200000 p11.1 acen -chr10 40200000 42300000 q11.1 acen -chr10 42300000 46100000 q11.21 gneg -chr10 46100000 49900000 q11.22 gpos25 -chr10 49900000 52900000 q11.23 gneg -chr10 52900000 61200000 q21.1 gpos100 -chr10 61200000 64500000 q21.2 gneg -chr10 64500000 70600000 q21.3 gpos100 -chr10 70600000 74900000 q22.1 gneg -chr10 74900000 77700000 q22.2 gpos50 -chr10 77700000 82000000 q22.3 gneg -chr10 82000000 87900000 q23.1 gpos100 -chr10 87900000 89500000 q23.2 gneg -chr10 89500000 92900000 q23.31 gpos75 -chr10 92900000 94100000 q23.32 gneg -chr10 94100000 97000000 q23.33 gpos50 -chr10 97000000 99300000 q24.1 gneg -chr10 99300000 101900000 q24.2 gpos50 -chr10 101900000 103000000 q24.31 gneg -chr10 103000000 104900000 q24.32 gpos25 -chr10 104900000 105800000 q24.33 gneg -chr10 105800000 111900000 q25.1 gpos100 -chr10 111900000 114900000 q25.2 gneg -chr10 114900000 119100000 q25.3 gpos75 -chr10 119100000 121700000 q26.11 gneg -chr10 121700000 123100000 q26.12 gpos50 -chr10 123100000 127500000 q26.13 gneg -chr10 127500000 130600000 q26.2 gpos50 -chr10 130600000 135534747 q26.3 gneg -chr11 0 2800000 p15.5 gneg -chr11 2800000 10700000 p15.4 gpos50 -chr11 10700000 12700000 p15.3 gneg -chr11 12700000 16200000 p15.2 gpos50 -chr11 16200000 21700000 p15.1 gneg -chr11 21700000 26100000 p14.3 gpos100 -chr11 26100000 27200000 p14.2 gneg -chr11 27200000 31000000 p14.1 gpos75 -chr11 31000000 36400000 p13 gneg -chr11 36400000 43500000 p12 gpos100 -chr11 43500000 48800000 p11.2 gneg -chr11 48800000 51600000 p11.12 gpos75 -chr11 51600000 53700000 p11.11 acen -chr11 53700000 55700000 q11 acen -chr11 55700000 59900000 q12.1 gpos75 -chr11 59900000 61700000 q12.2 gneg -chr11 61700000 63400000 q12.3 gpos25 -chr11 63400000 65900000 q13.1 gneg -chr11 65900000 68400000 q13.2 gpos25 -chr11 68400000 70400000 q13.3 gneg -chr11 70400000 75200000 q13.4 gpos50 -chr11 75200000 77100000 q13.5 gneg -chr11 77100000 85600000 q14.1 gpos100 -chr11 85600000 88300000 q14.2 gneg -chr11 88300000 92800000 q14.3 gpos100 -chr11 92800000 97200000 q21 gneg -chr11 97200000 102100000 q22.1 gpos100 -chr11 102100000 102900000 q22.2 gneg -chr11 102900000 110400000 q22.3 gpos100 -chr11 110400000 112500000 q23.1 gneg -chr11 112500000 114500000 q23.2 gpos50 -chr11 114500000 121200000 q23.3 gneg -chr11 121200000 123900000 q24.1 gpos50 -chr11 123900000 127800000 q24.2 gneg -chr11 127800000 130800000 q24.3 gpos50 -chr11 130800000 135006516 q25 gneg -chr12 0 3300000 p13.33 gneg -chr12 3300000 5400000 p13.32 gpos25 -chr12 5400000 10100000 p13.31 gneg -chr12 10100000 12800000 p13.2 gpos75 -chr12 12800000 14800000 p13.1 gneg -chr12 14800000 20000000 p12.3 gpos100 -chr12 20000000 21300000 p12.2 gneg -chr12 21300000 26500000 p12.1 gpos100 -chr12 26500000 27800000 p11.23 gneg -chr12 27800000 30700000 p11.22 gpos50 -chr12 30700000 33300000 p11.21 gneg -chr12 33300000 35800000 p11.1 acen -chr12 35800000 38200000 q11 acen -chr12 38200000 46400000 q12 gpos100 -chr12 46400000 49100000 q13.11 gneg -chr12 49100000 51500000 q13.12 gpos25 -chr12 51500000 54900000 q13.13 gneg -chr12 54900000 56600000 q13.2 gpos25 -chr12 56600000 58100000 q13.3 gneg -chr12 58100000 63100000 q14.1 gpos75 -chr12 63100000 65100000 q14.2 gneg -chr12 65100000 67700000 q14.3 gpos50 -chr12 67700000 71500000 q15 gneg -chr12 71500000 75700000 q21.1 gpos75 -chr12 75700000 80300000 q21.2 gneg -chr12 80300000 86700000 q21.31 gpos100 -chr12 86700000 89000000 q21.32 gneg -chr12 89000000 92600000 q21.33 gpos100 -chr12 92600000 96200000 q22 gneg -chr12 96200000 101600000 q23.1 gpos75 -chr12 101600000 103800000 q23.2 gneg -chr12 103800000 109000000 q23.3 gpos50 -chr12 109000000 111700000 q24.11 gneg -chr12 111700000 112300000 q24.12 gpos25 -chr12 112300000 114300000 q24.13 gneg -chr12 114300000 116800000 q24.21 gpos50 -chr12 116800000 118100000 q24.22 gneg -chr12 118100000 120700000 q24.23 gpos50 -chr12 120700000 125900000 q24.31 gneg -chr12 125900000 129300000 q24.32 gpos50 -chr12 129300000 133851895 q24.33 gneg -chr13 0 4500000 p13 gvar -chr13 4500000 10000000 p12 stalk -chr13 10000000 16300000 p11.2 gvar -chr13 16300000 17900000 p11.1 acen -chr13 17900000 19500000 q11 acen -chr13 19500000 23300000 q12.11 gneg -chr13 23300000 25500000 q12.12 gpos25 -chr13 25500000 27800000 q12.13 gneg -chr13 27800000 28900000 q12.2 gpos25 -chr13 28900000 32200000 q12.3 gneg -chr13 32200000 34000000 q13.1 gpos50 -chr13 34000000 35500000 q13.2 gneg -chr13 35500000 40100000 q13.3 gpos75 -chr13 40100000 45200000 q14.11 gneg -chr13 45200000 45800000 q14.12 gpos25 -chr13 45800000 47300000 q14.13 gneg -chr13 47300000 50900000 q14.2 gpos50 -chr13 50900000 55300000 q14.3 gneg -chr13 55300000 59600000 q21.1 gpos100 -chr13 59600000 62300000 q21.2 gneg -chr13 62300000 65700000 q21.31 gpos75 -chr13 65700000 68600000 q21.32 gneg -chr13 68600000 73300000 q21.33 gpos100 -chr13 73300000 75400000 q22.1 gneg -chr13 75400000 77200000 q22.2 gpos50 -chr13 77200000 79000000 q22.3 gneg -chr13 79000000 87700000 q31.1 gpos100 -chr13 87700000 90000000 q31.2 gneg -chr13 90000000 95000000 q31.3 gpos100 -chr13 95000000 98200000 q32.1 gneg -chr13 98200000 99300000 q32.2 gpos25 -chr13 99300000 101700000 q32.3 gneg -chr13 101700000 104800000 q33.1 gpos100 -chr13 104800000 107000000 q33.2 gneg -chr13 107000000 110300000 q33.3 gpos100 -chr13 110300000 115169878 q34 gneg -chr14 0 3700000 p13 gvar -chr14 3700000 8100000 p12 stalk -chr14 8100000 16100000 p11.2 gvar -chr14 16100000 17600000 p11.1 acen -chr14 17600000 19100000 q11.1 acen -chr14 19100000 24600000 q11.2 gneg -chr14 24600000 33300000 q12 gpos100 -chr14 33300000 35300000 q13.1 gneg -chr14 35300000 36600000 q13.2 gpos50 -chr14 36600000 37800000 q13.3 gneg -chr14 37800000 43500000 q21.1 gpos100 -chr14 43500000 47200000 q21.2 gneg -chr14 47200000 50900000 q21.3 gpos100 -chr14 50900000 54100000 q22.1 gneg -chr14 54100000 55500000 q22.2 gpos25 -chr14 55500000 58100000 q22.3 gneg -chr14 58100000 62100000 q23.1 gpos75 -chr14 62100000 64800000 q23.2 gneg -chr14 64800000 67900000 q23.3 gpos50 -chr14 67900000 70200000 q24.1 gneg -chr14 70200000 73800000 q24.2 gpos50 -chr14 73800000 79300000 q24.3 gneg -chr14 79300000 83600000 q31.1 gpos100 -chr14 83600000 84900000 q31.2 gneg -chr14 84900000 89800000 q31.3 gpos100 -chr14 89800000 91900000 q32.11 gneg -chr14 91900000 94700000 q32.12 gpos25 -chr14 94700000 96300000 q32.13 gneg -chr14 96300000 101400000 q32.2 gpos50 -chr14 101400000 103200000 q32.31 gneg -chr14 103200000 104000000 q32.32 gpos50 -chr14 104000000 107349540 q32.33 gneg -chr15 0 3900000 p13 gvar -chr15 3900000 8700000 p12 stalk -chr15 8700000 15800000 p11.2 gvar -chr15 15800000 19000000 p11.1 acen -chr15 19000000 20700000 q11.1 acen -chr15 20700000 25700000 q11.2 gneg -chr15 25700000 28100000 q12 gpos50 -chr15 28100000 30300000 q13.1 gneg -chr15 30300000 31200000 q13.2 gpos50 -chr15 31200000 33600000 q13.3 gneg -chr15 33600000 40100000 q14 gpos75 -chr15 40100000 42800000 q15.1 gneg -chr15 42800000 43600000 q15.2 gpos25 -chr15 43600000 44800000 q15.3 gneg -chr15 44800000 49500000 q21.1 gpos75 -chr15 49500000 52900000 q21.2 gneg -chr15 52900000 59100000 q21.3 gpos75 -chr15 59100000 59300000 q22.1 gneg -chr15 59300000 63700000 q22.2 gpos25 -chr15 63700000 67200000 q22.31 gneg -chr15 67200000 67300000 q22.32 gpos25 -chr15 67300000 67500000 q22.33 gneg -chr15 67500000 72700000 q23 gpos25 -chr15 72700000 75200000 q24.1 gneg -chr15 75200000 76600000 q24.2 gpos25 -chr15 76600000 78300000 q24.3 gneg -chr15 78300000 81700000 q25.1 gpos50 -chr15 81700000 85200000 q25.2 gneg -chr15 85200000 89100000 q25.3 gpos50 -chr15 89100000 94300000 q26.1 gneg -chr15 94300000 98500000 q26.2 gpos50 -chr15 98500000 102531392 q26.3 gneg -chr16 0 7900000 p13.3 gneg -chr16 7900000 10500000 p13.2 gpos50 -chr16 10500000 12600000 p13.13 gneg -chr16 12600000 14800000 p13.12 gpos50 -chr16 14800000 16800000 p13.11 gneg -chr16 16800000 21200000 p12.3 gpos50 -chr16 21200000 24200000 p12.2 gneg -chr16 24200000 28100000 p12.1 gpos50 -chr16 28100000 34600000 p11.2 gneg -chr16 34600000 36600000 p11.1 acen -chr16 36600000 38600000 q11.1 acen -chr16 38600000 47000000 q11.2 gvar -chr16 47000000 52600000 q12.1 gneg -chr16 52600000 56700000 q12.2 gpos50 -chr16 56700000 57400000 q13 gneg -chr16 57400000 66700000 q21 gpos100 -chr16 66700000 70800000 q22.1 gneg -chr16 70800000 72900000 q22.2 gpos50 -chr16 72900000 74100000 q22.3 gneg -chr16 74100000 79200000 q23.1 gpos75 -chr16 79200000 81700000 q23.2 gneg -chr16 81700000 84200000 q23.3 gpos50 -chr16 84200000 87100000 q24.1 gneg -chr16 87100000 88700000 q24.2 gpos25 -chr16 88700000 90354753 q24.3 gneg -chr17 0 3300000 p13.3 gneg -chr17 3300000 6500000 p13.2 gpos50 -chr17 6500000 10700000 p13.1 gneg -chr17 10700000 16000000 p12 gpos75 -chr17 16000000 22200000 p11.2 gneg -chr17 22200000 24000000 p11.1 acen -chr17 24000000 25800000 q11.1 acen -chr17 25800000 31800000 q11.2 gneg -chr17 31800000 38100000 q12 gpos50 -chr17 38100000 38400000 q21.1 gneg -chr17 38400000 40900000 q21.2 gpos25 -chr17 40900000 44900000 q21.31 gneg -chr17 44900000 47400000 q21.32 gpos25 -chr17 47400000 50200000 q21.33 gneg -chr17 50200000 57600000 q22 gpos75 -chr17 57600000 58300000 q23.1 gneg -chr17 58300000 61100000 q23.2 gpos75 -chr17 61100000 62600000 q23.3 gneg -chr17 62600000 64200000 q24.1 gpos50 -chr17 64200000 67100000 q24.2 gneg -chr17 67100000 70900000 q24.3 gpos75 -chr17 70900000 74800000 q25.1 gneg -chr17 74800000 75300000 q25.2 gpos25 -chr17 75300000 81195210 q25.3 gneg -chr18 0 2900000 p11.32 gneg -chr18 2900000 7100000 p11.31 gpos50 -chr18 7100000 8500000 p11.23 gneg -chr18 8500000 10900000 p11.22 gpos25 -chr18 10900000 15400000 p11.21 gneg -chr18 15400000 17200000 p11.1 acen -chr18 17200000 19000000 q11.1 acen -chr18 19000000 25000000 q11.2 gneg -chr18 25000000 32700000 q12.1 gpos100 -chr18 32700000 37200000 q12.2 gneg -chr18 37200000 43500000 q12.3 gpos75 -chr18 43500000 48200000 q21.1 gneg -chr18 48200000 53800000 q21.2 gpos75 -chr18 53800000 56200000 q21.31 gneg -chr18 56200000 59000000 q21.32 gpos50 -chr18 59000000 61600000 q21.33 gneg -chr18 61600000 66800000 q22.1 gpos100 -chr18 66800000 68700000 q22.2 gneg -chr18 68700000 73100000 q22.3 gpos25 -chr18 73100000 78077248 q23 gneg -chr19 0 6900000 p13.3 gneg -chr19 6900000 13900000 p13.2 gpos25 -chr19 13900000 14000000 p13.13 gneg -chr19 14000000 16300000 p13.12 gpos25 -chr19 16300000 20000000 p13.11 gneg -chr19 20000000 24400000 p12 gvar -chr19 24400000 26500000 p11 acen -chr19 26500000 28600000 q11 acen -chr19 28600000 32400000 q12 gvar -chr19 32400000 35500000 q13.11 gneg -chr19 35500000 38300000 q13.12 gpos25 -chr19 38300000 38700000 q13.13 gneg -chr19 38700000 43400000 q13.2 gpos25 -chr19 43400000 45200000 q13.31 gneg -chr19 45200000 48000000 q13.32 gpos25 -chr19 48000000 51400000 q13.33 gneg -chr19 51400000 53600000 q13.41 gpos25 -chr19 53600000 56300000 q13.42 gneg -chr19 56300000 59128983 q13.43 gpos25 -chr2 0 4400000 p25.3 gneg -chr2 4400000 7100000 p25.2 gpos50 -chr2 7100000 12200000 p25.1 gneg -chr2 12200000 16700000 p24.3 gpos75 -chr2 16700000 19200000 p24.2 gneg -chr2 19200000 24000000 p24.1 gpos75 -chr2 24000000 27900000 p23.3 gneg -chr2 27900000 30000000 p23.2 gpos25 -chr2 30000000 32100000 p23.1 gneg -chr2 32100000 36600000 p22.3 gpos75 -chr2 36600000 38600000 p22.2 gneg -chr2 38600000 41800000 p22.1 gpos50 -chr2 41800000 47800000 p21 gneg -chr2 47800000 52900000 p16.3 gpos100 -chr2 52900000 55000000 p16.2 gneg -chr2 55000000 61300000 p16.1 gpos100 -chr2 61300000 64100000 p15 gneg -chr2 64100000 68600000 p14 gpos50 -chr2 68600000 71500000 p13.3 gneg -chr2 71500000 73500000 p13.2 gpos50 -chr2 73500000 75000000 p13.1 gneg -chr2 75000000 83300000 p12 gpos100 -chr2 83300000 90500000 p11.2 gneg -chr2 90500000 93300000 p11.1 acen -chr2 93300000 96800000 q11.1 acen -chr2 96800000 102700000 q11.2 gneg -chr2 102700000 106000000 q12.1 gpos50 -chr2 106000000 107500000 q12.2 gneg -chr2 107500000 110200000 q12.3 gpos25 -chr2 110200000 114400000 q13 gneg -chr2 114400000 118800000 q14.1 gpos50 -chr2 118800000 122400000 q14.2 gneg -chr2 122400000 129900000 q14.3 gpos50 -chr2 129900000 132500000 q21.1 gneg -chr2 132500000 135100000 q21.2 gpos25 -chr2 135100000 136800000 q21.3 gneg -chr2 136800000 142200000 q22.1 gpos100 -chr2 142200000 144100000 q22.2 gneg -chr2 144100000 148700000 q22.3 gpos100 -chr2 148700000 149900000 q23.1 gneg -chr2 149900000 150500000 q23.2 gpos25 -chr2 150500000 154900000 q23.3 gneg -chr2 154900000 159800000 q24.1 gpos75 -chr2 159800000 163700000 q24.2 gneg -chr2 163700000 169700000 q24.3 gpos75 -chr2 169700000 178000000 q31.1 gneg -chr2 178000000 180600000 q31.2 gpos50 -chr2 180600000 183000000 q31.3 gneg -chr2 183000000 189400000 q32.1 gpos75 -chr2 189400000 191900000 q32.2 gneg -chr2 191900000 197400000 q32.3 gpos75 -chr2 197400000 203300000 q33.1 gneg -chr2 203300000 204900000 q33.2 gpos50 -chr2 204900000 209000000 q33.3 gneg -chr2 209000000 215300000 q34 gpos100 -chr2 215300000 221500000 q35 gneg -chr2 221500000 225200000 q36.1 gpos75 -chr2 225200000 226100000 q36.2 gneg -chr2 226100000 231000000 q36.3 gpos100 -chr2 231000000 235600000 q37.1 gneg -chr2 235600000 237300000 q37.2 gpos50 -chr2 237300000 243199373 q37.3 gneg -chr20 0 5100000 p13 gneg -chr20 5100000 9200000 p12.3 gpos75 -chr20 9200000 12100000 p12.2 gneg -chr20 12100000 17900000 p12.1 gpos75 -chr20 17900000 21300000 p11.23 gneg -chr20 21300000 22300000 p11.22 gpos25 -chr20 22300000 25600000 p11.21 gneg -chr20 25600000 27500000 p11.1 acen -chr20 27500000 29400000 q11.1 acen -chr20 29400000 32100000 q11.21 gneg -chr20 32100000 34400000 q11.22 gpos25 -chr20 34400000 37600000 q11.23 gneg -chr20 37600000 41700000 q12 gpos75 -chr20 41700000 42100000 q13.11 gneg -chr20 42100000 46400000 q13.12 gpos25 -chr20 46400000 49800000 q13.13 gneg -chr20 49800000 55000000 q13.2 gpos75 -chr20 55000000 56500000 q13.31 gneg -chr20 56500000 58400000 q13.32 gpos50 -chr20 58400000 63025520 q13.33 gneg -chr21 0 2800000 p13 gvar -chr21 2800000 6800000 p12 stalk -chr21 6800000 10900000 p11.2 gvar -chr21 10900000 13200000 p11.1 acen -chr21 13200000 14300000 q11.1 acen -chr21 14300000 16400000 q11.2 gneg -chr21 16400000 24000000 q21.1 gpos100 -chr21 24000000 26800000 q21.2 gneg -chr21 26800000 31500000 q21.3 gpos75 -chr21 31500000 35800000 q22.11 gneg -chr21 35800000 37800000 q22.12 gpos50 -chr21 37800000 39700000 q22.13 gneg -chr21 39700000 42600000 q22.2 gpos50 -chr21 42600000 48129895 q22.3 gneg -chr22 0 3800000 p13 gvar -chr22 3800000 8300000 p12 stalk -chr22 8300000 12200000 p11.2 gvar -chr22 12200000 14700000 p11.1 acen -chr22 14700000 17900000 q11.1 acen -chr22 17900000 22200000 q11.21 gneg -chr22 22200000 23500000 q11.22 gpos25 -chr22 23500000 25900000 q11.23 gneg -chr22 25900000 29600000 q12.1 gpos50 -chr22 29600000 32200000 q12.2 gneg -chr22 32200000 37600000 q12.3 gpos50 -chr22 37600000 41000000 q13.1 gneg -chr22 41000000 44200000 q13.2 gpos50 -chr22 44200000 48400000 q13.31 gneg -chr22 48400000 49400000 q13.32 gpos50 -chr22 49400000 51304566 q13.33 gneg -chr3 0 2800000 p26.3 gpos50 -chr3 2800000 4000000 p26.2 gneg -chr3 4000000 8700000 p26.1 gpos50 -chr3 8700000 11800000 p25.3 gneg -chr3 11800000 13300000 p25.2 gpos25 -chr3 13300000 16400000 p25.1 gneg -chr3 16400000 23900000 p24.3 gpos100 -chr3 23900000 26400000 p24.2 gneg -chr3 26400000 30900000 p24.1 gpos75 -chr3 30900000 32100000 p23 gneg -chr3 32100000 36500000 p22.3 gpos50 -chr3 36500000 39400000 p22.2 gneg -chr3 39400000 43700000 p22.1 gpos75 -chr3 43700000 44100000 p21.33 gneg -chr3 44100000 44200000 p21.32 gpos50 -chr3 44200000 50600000 p21.31 gneg -chr3 50600000 52300000 p21.2 gpos25 -chr3 52300000 54400000 p21.1 gneg -chr3 54400000 58600000 p14.3 gpos50 -chr3 58600000 63700000 p14.2 gneg -chr3 63700000 69800000 p14.1 gpos50 -chr3 69800000 74200000 p13 gneg -chr3 74200000 79800000 p12.3 gpos75 -chr3 79800000 83500000 p12.2 gneg -chr3 83500000 87200000 p12.1 gpos75 -chr3 87200000 87900000 p11.2 gneg -chr3 87900000 91000000 p11.1 acen -chr3 91000000 93900000 q11.1 acen -chr3 93900000 98300000 q11.2 gvar -chr3 98300000 100000000 q12.1 gneg -chr3 100000000 100900000 q12.2 gpos25 -chr3 100900000 102800000 q12.3 gneg -chr3 102800000 106200000 q13.11 gpos75 -chr3 106200000 107900000 q13.12 gneg -chr3 107900000 111300000 q13.13 gpos50 -chr3 111300000 113500000 q13.2 gneg -chr3 113500000 117300000 q13.31 gpos75 -chr3 117300000 119000000 q13.32 gneg -chr3 119000000 121900000 q13.33 gpos75 -chr3 121900000 123800000 q21.1 gneg -chr3 123800000 125800000 q21.2 gpos25 -chr3 125800000 129200000 q21.3 gneg -chr3 129200000 133700000 q22.1 gpos25 -chr3 133700000 135700000 q22.2 gneg -chr3 135700000 138700000 q22.3 gpos25 -chr3 138700000 142800000 q23 gneg -chr3 142800000 148900000 q24 gpos100 -chr3 148900000 152100000 q25.1 gneg -chr3 152100000 155000000 q25.2 gpos50 -chr3 155000000 157000000 q25.31 gneg -chr3 157000000 159000000 q25.32 gpos50 -chr3 159000000 160700000 q25.33 gneg -chr3 160700000 167600000 q26.1 gpos100 -chr3 167600000 170900000 q26.2 gneg -chr3 170900000 175700000 q26.31 gpos75 -chr3 175700000 179000000 q26.32 gneg -chr3 179000000 182700000 q26.33 gpos75 -chr3 182700000 184500000 q27.1 gneg -chr3 184500000 186000000 q27.2 gpos25 -chr3 186000000 187900000 q27.3 gneg -chr3 187900000 192300000 q28 gpos75 -chr3 192300000 198022430 q29 gneg -chr4 0 4500000 p16.3 gneg -chr4 4500000 6000000 p16.2 gpos25 -chr4 6000000 11300000 p16.1 gneg -chr4 11300000 15200000 p15.33 gpos50 -chr4 15200000 17800000 p15.32 gneg -chr4 17800000 21300000 p15.31 gpos75 -chr4 21300000 27700000 p15.2 gneg -chr4 27700000 35800000 p15.1 gpos100 -chr4 35800000 41200000 p14 gneg -chr4 41200000 44600000 p13 gpos50 -chr4 44600000 48200000 p12 gneg -chr4 48200000 50400000 p11 acen -chr4 50400000 52700000 q11 acen -chr4 52700000 59500000 q12 gneg -chr4 59500000 66600000 q13.1 gpos100 -chr4 66600000 70500000 q13.2 gneg -chr4 70500000 76300000 q13.3 gpos75 -chr4 76300000 78900000 q21.1 gneg -chr4 78900000 82400000 q21.21 gpos50 -chr4 82400000 84100000 q21.22 gneg -chr4 84100000 86900000 q21.23 gpos25 -chr4 86900000 88000000 q21.3 gneg -chr4 88000000 93700000 q22.1 gpos75 -chr4 93700000 95100000 q22.2 gneg -chr4 95100000 98800000 q22.3 gpos75 -chr4 98800000 101100000 q23 gneg -chr4 101100000 107700000 q24 gpos50 -chr4 107700000 114100000 q25 gneg -chr4 114100000 120800000 q26 gpos75 -chr4 120800000 123800000 q27 gneg -chr4 123800000 128800000 q28.1 gpos50 -chr4 128800000 131100000 q28.2 gneg -chr4 131100000 139500000 q28.3 gpos100 -chr4 139500000 141500000 q31.1 gneg -chr4 141500000 146800000 q31.21 gpos25 -chr4 146800000 148500000 q31.22 gneg -chr4 148500000 151100000 q31.23 gpos25 -chr4 151100000 155600000 q31.3 gneg -chr4 155600000 161800000 q32.1 gpos100 -chr4 161800000 164500000 q32.2 gneg -chr4 164500000 170100000 q32.3 gpos100 -chr4 170100000 171900000 q33 gneg -chr4 171900000 176300000 q34.1 gpos75 -chr4 176300000 177500000 q34.2 gneg -chr4 177500000 183200000 q34.3 gpos100 -chr4 183200000 187100000 q35.1 gneg -chr4 187100000 191154276 q35.2 gpos25 -chr5 0 4500000 p15.33 gneg -chr5 4500000 6300000 p15.32 gpos25 -chr5 6300000 9800000 p15.31 gneg -chr5 9800000 15000000 p15.2 gpos50 -chr5 15000000 18400000 p15.1 gneg -chr5 18400000 23300000 p14.3 gpos100 -chr5 23300000 24600000 p14.2 gneg -chr5 24600000 28900000 p14.1 gpos100 -chr5 28900000 33800000 p13.3 gneg -chr5 33800000 38400000 p13.2 gpos25 -chr5 38400000 42500000 p13.1 gneg -chr5 42500000 46100000 p12 gpos50 -chr5 46100000 48400000 p11 acen -chr5 48400000 50700000 q11.1 acen -chr5 50700000 58900000 q11.2 gneg -chr5 58900000 62900000 q12.1 gpos75 -chr5 62900000 63200000 q12.2 gneg -chr5 63200000 66700000 q12.3 gpos75 -chr5 66700000 68400000 q13.1 gneg -chr5 68400000 73300000 q13.2 gpos50 -chr5 73300000 76900000 q13.3 gneg -chr5 76900000 81400000 q14.1 gpos50 -chr5 81400000 82800000 q14.2 gneg -chr5 82800000 92300000 q14.3 gpos100 -chr5 92300000 98200000 q15 gneg -chr5 98200000 102800000 q21.1 gpos100 -chr5 102800000 104500000 q21.2 gneg -chr5 104500000 109600000 q21.3 gpos100 -chr5 109600000 111500000 q22.1 gneg -chr5 111500000 113100000 q22.2 gpos50 -chr5 113100000 115200000 q22.3 gneg -chr5 115200000 121400000 q23.1 gpos100 -chr5 121400000 127300000 q23.2 gneg -chr5 127300000 130600000 q23.3 gpos100 -chr5 130600000 136200000 q31.1 gneg -chr5 136200000 139500000 q31.2 gpos25 -chr5 139500000 144500000 q31.3 gneg -chr5 144500000 149800000 q32 gpos75 -chr5 149800000 152700000 q33.1 gneg -chr5 152700000 155700000 q33.2 gpos50 -chr5 155700000 159900000 q33.3 gneg -chr5 159900000 168500000 q34 gpos100 -chr5 168500000 172800000 q35.1 gneg -chr5 172800000 176600000 q35.2 gpos25 -chr5 176600000 180915260 q35.3 gneg -chr6 0 2300000 p25.3 gneg -chr6 2300000 4200000 p25.2 gpos25 -chr6 4200000 7100000 p25.1 gneg -chr6 7100000 10600000 p24.3 gpos50 -chr6 10600000 11600000 p24.2 gneg -chr6 11600000 13400000 p24.1 gpos25 -chr6 13400000 15200000 p23 gneg -chr6 15200000 25200000 p22.3 gpos75 -chr6 25200000 27000000 p22.2 gneg -chr6 27000000 30400000 p22.1 gpos50 -chr6 30400000 32100000 p21.33 gneg -chr6 32100000 33500000 p21.32 gpos25 -chr6 33500000 36600000 p21.31 gneg -chr6 36600000 40500000 p21.2 gpos25 -chr6 40500000 46200000 p21.1 gneg -chr6 46200000 51800000 p12.3 gpos100 -chr6 51800000 52900000 p12.2 gneg -chr6 52900000 57000000 p12.1 gpos100 -chr6 57000000 58700000 p11.2 gneg -chr6 58700000 61000000 p11.1 acen -chr6 61000000 63300000 q11.1 acen -chr6 63300000 63400000 q11.2 gneg -chr6 63400000 70000000 q12 gpos100 -chr6 70000000 75900000 q13 gneg -chr6 75900000 83900000 q14.1 gpos50 -chr6 83900000 84900000 q14.2 gneg -chr6 84900000 88000000 q14.3 gpos50 -chr6 88000000 93100000 q15 gneg -chr6 93100000 99500000 q16.1 gpos100 -chr6 99500000 100600000 q16.2 gneg -chr6 100600000 105500000 q16.3 gpos100 -chr6 105500000 114600000 q21 gneg -chr6 114600000 118300000 q22.1 gpos75 -chr6 118300000 118500000 q22.2 gneg -chr6 118500000 126100000 q22.31 gpos100 -chr6 126100000 127100000 q22.32 gneg -chr6 127100000 130300000 q22.33 gpos75 -chr6 130300000 131200000 q23.1 gneg -chr6 131200000 135200000 q23.2 gpos50 -chr6 135200000 139000000 q23.3 gneg -chr6 139000000 142800000 q24.1 gpos75 -chr6 142800000 145600000 q24.2 gneg -chr6 145600000 149000000 q24.3 gpos75 -chr6 149000000 152500000 q25.1 gneg -chr6 152500000 155500000 q25.2 gpos50 -chr6 155500000 161000000 q25.3 gneg -chr6 161000000 164500000 q26 gpos50 -chr6 164500000 171115067 q27 gneg -chr7 0 2800000 p22.3 gneg -chr7 2800000 4500000 p22.2 gpos25 -chr7 4500000 7300000 p22.1 gneg -chr7 7300000 13800000 p21.3 gpos100 -chr7 13800000 16500000 p21.2 gneg -chr7 16500000 20900000 p21.1 gpos100 -chr7 20900000 25500000 p15.3 gneg -chr7 25500000 28000000 p15.2 gpos50 -chr7 28000000 28800000 p15.1 gneg -chr7 28800000 35000000 p14.3 gpos75 -chr7 35000000 37200000 p14.2 gneg -chr7 37200000 43300000 p14.1 gpos75 -chr7 43300000 45400000 p13 gneg -chr7 45400000 49000000 p12.3 gpos75 -chr7 49000000 50500000 p12.2 gneg -chr7 50500000 54000000 p12.1 gpos75 -chr7 54000000 58000000 p11.2 gneg -chr7 58000000 59900000 p11.1 acen -chr7 59900000 61700000 q11.1 acen -chr7 61700000 67000000 q11.21 gneg -chr7 67000000 72200000 q11.22 gpos50 -chr7 72200000 77500000 q11.23 gneg -chr7 77500000 86400000 q21.11 gpos100 -chr7 86400000 88200000 q21.12 gneg -chr7 88200000 91100000 q21.13 gpos75 -chr7 91100000 92800000 q21.2 gneg -chr7 92800000 98000000 q21.3 gpos75 -chr7 98000000 103800000 q22.1 gneg -chr7 103800000 104500000 q22.2 gpos50 -chr7 104500000 107400000 q22.3 gneg -chr7 107400000 114600000 q31.1 gpos75 -chr7 114600000 117400000 q31.2 gneg -chr7 117400000 121100000 q31.31 gpos75 -chr7 121100000 123800000 q31.32 gneg -chr7 123800000 127100000 q31.33 gpos75 -chr7 127100000 129200000 q32.1 gneg -chr7 129200000 130400000 q32.2 gpos25 -chr7 130400000 132600000 q32.3 gneg -chr7 132600000 138200000 q33 gpos50 -chr7 138200000 143100000 q34 gneg -chr7 143100000 147900000 q35 gpos75 -chr7 147900000 152600000 q36.1 gneg -chr7 152600000 155100000 q36.2 gpos25 -chr7 155100000 159138663 q36.3 gneg -chr8 0 2200000 p23.3 gneg -chr8 2200000 6200000 p23.2 gpos75 -chr8 6200000 12700000 p23.1 gneg -chr8 12700000 19000000 p22 gpos100 -chr8 19000000 23300000 p21.3 gneg -chr8 23300000 27400000 p21.2 gpos50 -chr8 27400000 28800000 p21.1 gneg -chr8 28800000 36500000 p12 gpos75 -chr8 36500000 38300000 p11.23 gneg -chr8 38300000 39700000 p11.22 gpos25 -chr8 39700000 43100000 p11.21 gneg -chr8 43100000 45600000 p11.1 acen -chr8 45600000 48100000 q11.1 acen -chr8 48100000 52200000 q11.21 gneg -chr8 52200000 52600000 q11.22 gpos75 -chr8 52600000 55500000 q11.23 gneg -chr8 55500000 61600000 q12.1 gpos50 -chr8 61600000 62200000 q12.2 gneg -chr8 62200000 66000000 q12.3 gpos50 -chr8 66000000 68000000 q13.1 gneg -chr8 68000000 70500000 q13.2 gpos50 -chr8 70500000 73900000 q13.3 gneg -chr8 73900000 78300000 q21.11 gpos100 -chr8 78300000 80100000 q21.12 gneg -chr8 80100000 84600000 q21.13 gpos75 -chr8 84600000 86900000 q21.2 gneg -chr8 86900000 93300000 q21.3 gpos100 -chr8 93300000 99000000 q22.1 gneg -chr8 99000000 101600000 q22.2 gpos25 -chr8 101600000 106200000 q22.3 gneg -chr8 106200000 110500000 q23.1 gpos75 -chr8 110500000 112100000 q23.2 gneg -chr8 112100000 117700000 q23.3 gpos100 -chr8 117700000 119200000 q24.11 gneg -chr8 119200000 122500000 q24.12 gpos50 -chr8 122500000 127300000 q24.13 gneg -chr8 127300000 131500000 q24.21 gpos50 -chr8 131500000 136400000 q24.22 gneg -chr8 136400000 139900000 q24.23 gpos75 -chr8 139900000 146364022 q24.3 gneg -chr9 0 2200000 p24.3 gneg -chr9 2200000 4600000 p24.2 gpos25 -chr9 4600000 9000000 p24.1 gneg -chr9 9000000 14200000 p23 gpos75 -chr9 14200000 16600000 p22.3 gneg -chr9 16600000 18500000 p22.2 gpos25 -chr9 18500000 19900000 p22.1 gneg -chr9 19900000 25600000 p21.3 gpos100 -chr9 25600000 28000000 p21.2 gneg -chr9 28000000 33200000 p21.1 gpos100 -chr9 33200000 36300000 p13.3 gneg -chr9 36300000 38400000 p13.2 gpos25 -chr9 38400000 41000000 p13.1 gneg -chr9 41000000 43600000 p12 gpos50 -chr9 43600000 47300000 p11.2 gneg -chr9 47300000 49000000 p11.1 acen -chr9 49000000 50700000 q11 acen -chr9 50700000 65900000 q12 gvar -chr9 65900000 68700000 q13 gneg -chr9 68700000 72200000 q21.11 gpos25 -chr9 72200000 74000000 q21.12 gneg -chr9 74000000 79200000 q21.13 gpos50 -chr9 79200000 81100000 q21.2 gneg -chr9 81100000 84100000 q21.31 gpos50 -chr9 84100000 86900000 q21.32 gneg -chr9 86900000 90400000 q21.33 gpos50 -chr9 90400000 91800000 q22.1 gneg -chr9 91800000 93900000 q22.2 gpos25 -chr9 93900000 96600000 q22.31 gneg -chr9 96600000 99300000 q22.32 gpos25 -chr9 99300000 102600000 q22.33 gneg -chr9 102600000 108200000 q31.1 gpos100 -chr9 108200000 111300000 q31.2 gneg -chr9 111300000 114900000 q31.3 gpos25 -chr9 114900000 117700000 q32 gneg -chr9 117700000 122500000 q33.1 gpos75 -chr9 122500000 125800000 q33.2 gneg -chr9 125800000 130300000 q33.3 gpos25 -chr9 130300000 133500000 q34.11 gneg -chr9 133500000 134000000 q34.12 gpos25 -chr9 134000000 135900000 q34.13 gneg -chr9 135900000 137400000 q34.2 gpos25 -chr9 137400000 141213431 q34.3 gneg -chrX 0 4300000 p22.33 gneg -chrX 4300000 6000000 p22.32 gpos50 -chrX 6000000 9500000 p22.31 gneg -chrX 9500000 17100000 p22.2 gpos50 -chrX 17100000 19300000 p22.13 gneg -chrX 19300000 21900000 p22.12 gpos50 -chrX 21900000 24900000 p22.11 gneg -chrX 24900000 29300000 p21.3 gpos100 -chrX 29300000 31500000 p21.2 gneg -chrX 31500000 37600000 p21.1 gpos100 -chrX 37600000 42400000 p11.4 gneg -chrX 42400000 46400000 p11.3 gpos75 -chrX 46400000 49800000 p11.23 gneg -chrX 49800000 54800000 p11.22 gpos25 -chrX 54800000 58100000 p11.21 gneg -chrX 58100000 60600000 p11.1 acen -chrX 60600000 63000000 q11.1 acen -chrX 63000000 64600000 q11.2 gneg -chrX 64600000 67800000 q12 gpos50 -chrX 67800000 71800000 q13.1 gneg -chrX 71800000 73900000 q13.2 gpos50 -chrX 73900000 76000000 q13.3 gneg -chrX 76000000 84600000 q21.1 gpos100 -chrX 84600000 86200000 q21.2 gneg -chrX 86200000 91800000 q21.31 gpos100 -chrX 91800000 93500000 q21.32 gneg -chrX 93500000 98300000 q21.33 gpos75 -chrX 98300000 102600000 q22.1 gneg -chrX 102600000 103700000 q22.2 gpos50 -chrX 103700000 108700000 q22.3 gneg -chrX 108700000 116500000 q23 gpos75 -chrX 116500000 120900000 q24 gneg -chrX 120900000 128700000 q25 gpos100 -chrX 128700000 130400000 q26.1 gneg -chrX 130400000 133600000 q26.2 gpos25 -chrX 133600000 138000000 q26.3 gneg -chrX 138000000 140300000 q27.1 gpos75 -chrX 140300000 142100000 q27.2 gneg -chrX 142100000 147100000 q27.3 gpos100 -chrX 147100000 155270560 q28 gneg -chrY 0 2500000 p11.32 gneg -chrY 2500000 3000000 p11.31 gpos50 -chrY 3000000 11600000 p11.2 gneg -chrY 11600000 12500000 p11.1 acen -chrY 12500000 13400000 q11.1 acen -chrY 13400000 15100000 q11.21 gneg -chrY 15100000 19800000 q11.221 gpos50 -chrY 19800000 22100000 q11.222 gneg -chrY 22100000 26200000 q11.223 gpos50 -chrY 26200000 28800000 q11.23 gneg -chrY 28800000 59373566 q12 gvar diff --git a/clipper/tidx/perl/t/res1.txt b/clipper/tidx/perl/t/res1.txt deleted file mode 100644 index 8ac5711..0000000 --- a/clipper/tidx/perl/t/res1.txt +++ /dev/null @@ -1 +0,0 @@ -chr1 12700000 16200000 p36.21 gpos50 chr1 16200000 20400000 p36.13 gneg chr1 12700000 16200000 p36.21 gpos50 chr1 16200000 20400000 p36.13 gneg chr1 20400000 23900000 p36.12 gpos25 chr1 16200000 20400000 p36.13 gneg chr1 20400000 23900000 p36.12 gpos25 diff --git a/clipper/tidx/perl/t/res2.txt b/clipper/tidx/perl/t/res2.txt deleted file mode 100644 index 5a5fe87..0000000 --- a/clipper/tidx/perl/t/res2.txt +++ /dev/null @@ -1 +0,0 @@ -chr1 9200000 12700000 p36.22 gneg chr1 7200000 9200000 p36.23 gpos25 chr1 9200000 12700000 p36.22 gneg chr1 12700000 16200000 p36.21 gpos50 chr1 9200000 12700000 p36.22 gneg diff --git a/clipper/tidx/perl/tidx-lib.cpp b/clipper/tidx/perl/tidx-lib.cpp deleted file mode 120000 index 26e4667..0000000 --- a/clipper/tidx/perl/tidx-lib.cpp +++ /dev/null @@ -1 +0,0 @@ -../tidx-lib.cpp \ No newline at end of file diff --git a/clipper/tidx/perl/tidx.cpp b/clipper/tidx/perl/tidx.cpp deleted file mode 120000 index e390238..0000000 --- a/clipper/tidx/perl/tidx.cpp +++ /dev/null @@ -1 +0,0 @@ -../tidx.cpp \ No newline at end of file diff --git a/clipper/tidx/perl/tidx.h b/clipper/tidx/perl/tidx.h deleted file mode 120000 index e667f14..0000000 --- a/clipper/tidx/perl/tidx.h +++ /dev/null @@ -1 +0,0 @@ -../tidx.h \ No newline at end of file diff --git a/clipper/tidx/perl/typemap b/clipper/tidx/perl/typemap deleted file mode 100644 index faa074d..0000000 --- a/clipper/tidx/perl/typemap +++ /dev/null @@ -1,2 +0,0 @@ -TYPEMAP -tidx * O_OBJECT diff --git a/clipper/tidx/perl/utils.cpp b/clipper/tidx/perl/utils.cpp deleted file mode 120000 index 451eef0..0000000 --- a/clipper/tidx/perl/utils.cpp +++ /dev/null @@ -1 +0,0 @@ -../utils.cpp \ No newline at end of file diff --git a/clipper/tidx/perl/utils.h b/clipper/tidx/perl/utils.h deleted file mode 120000 index 6cd5d4f..0000000 --- a/clipper/tidx/perl/utils.h +++ /dev/null @@ -1 +0,0 @@ -../utils.h \ No newline at end of file diff --git a/clipper/tidx/tidx-lib.cpp b/clipper/tidx/tidx-lib.cpp deleted file mode 100644 index 3199516..0000000 --- a/clipper/tidx/tidx-lib.cpp +++ /dev/null @@ -1,436 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include "fastq-lib.h" -#include "utils.h" -#include "tidx.h" - -void usage(FILE *f); - -using namespace std; -using namespace google; - -double xtime(); - -bool annot_comp (const annot &a, const annot &b) { return (a.beg < b.beg); } - -template void append(L& lhs, R const& rhs) { lhs.insert(lhs.end(), rhs.begin(), rhs.end()); } -template void prepend(L& lhs, R const& rhs) { lhs.insert(lhs.begin(), rhs.begin(), rhs.end()); } - -struct string_annot_serializer { - bool operator()(FILE* fp, const std::pair >& value) const { - - { - assert(value.first.length() <= UCHAR_MAX); - const unsigned char size = value.first.length(); - if (fwrite(&size, sizeof(size), 1, fp) != 1) - return false; - if (fwrite(value.first.data(), size, 1, fp) != 1) - return false; - } - - { - const vector&van=value.second; - const unsigned long size = van.size(); - if (fwrite(&size, sizeof(size), 1, fp) != 1) - return false; - int i; - for (i=0;i >* value) const { - - { - - string buf; - unsigned char size; // all strings are <= 255 chars long - if (fread(&size, sizeof(size), 1, fp) != 1) - return false; - - if(size>buf.size()) buf.resize(size*2); - - if (fread((void *)buf.data(), size, 1, fp) != 1) { - return false; - } - // necessarry to "new" the value which must be const, except during "unsearialization" - // api shouldn't foist this on the user ... should be behind the scenes - string * ncs = const_cast(&value->first); - new(ncs) string(buf.data(), (size_t)size); - - } - - { - - vector &van=value->second; - unsigned long size; - if (fread(&size, sizeof(size), 1, fp) != 1) - return false; - int i; - van.resize(size); - for (i=0;i empty_vector; -const vector &tidx::lookup(const char *chr, int pos) { - dense_hash_map >::iterator it=map.find(chr); - if (it == map.end()) return empty_vector; - vector &va = it->second; - if (debug) fprintf(stderr,"lookup: %s:%d -> %d\n", chr, pos, (int) va.size()); - int b=0, t=va.size(), c=0; - while (t>b) { - c=(t+b)/2; -// printf("here1: c:%d, t:%d, b:%d, pos:%d, beg:%d, end:%d, res:%d\n", c, t, b, pos, va[c].beg, va[c].end, va[c].pos[0]); - if (pos == va[c].beg) - break; - else if (pos < va[c].beg) - t=c-1; - else if (pos > va[c].beg) { - if (pos <= va[c].end) { - return va[c].pos; - } - b=c+1; - } - } - - if (t == b) - c = t; -// printf("here2: c:%d, t:%d, b:%d, pos:%d, beg:%d, end:%d, res:%d\n", c, t, b, pos, va[c].beg, va[c].end, va[c].pos[0]); - if (pos >= va[c].beg && pos <= va[c].end) { - return va[c].pos; - } - return empty_vector; -} - -vector tidx::lookup_r(const char *chr, int beg, int end) { - dense_hash_map >::iterator it=map.find(chr); - if (it == map.end()) return empty_vector; - vector &va = it->second; - if (debug) fprintf(stderr,"lookup_r: %s:%d.%d -> %d\n", chr, beg, end, (int) va.size()); - int b=0, t=va.size(), c=0; - while (t>b) { - c=(t+b)/2; - if (beg == va[c].beg) - break; - else if (beg < va[c].beg) - t=c-1; - else if (beg > va[c].beg) { - if (beg <= va[c].end) - break; - b=c+1; - } - } - if (t == b) - c = t; - vector res; - while (c= va[c].beg && beg <= va[c].end) { - append(res,va[c].pos); - ++c; - } - return res; -} - -string tidx::lookup(const char *chr, int pos, const char *msep) { -// printf("here2\n"); - const vector &v = lookup(chr, pos); - string res; - if (!fh) { - fh=fopen(path.c_str(),"rb"); - if (!fh) - fail("%s:%s\n",path.c_str(),strerror(errno)); - } - string line; - int i; - struct line l; meminit(l); - for (i=0;i &v = lookup_r(chr, beg, end); - string res; - if (!fh) { - fh=fopen(path.c_str(),"rb"); - if (!fh) - fail("%s:%s\n",path.c_str(),strerror(errno)); - } - string line; - int i; - struct line l; meminit(l); - for (i=0;i >::iterator it = map.begin();; - while (it != map.end()) { - vector &van = it->second; - int i; - for (i=0;ifirst.c_str(), van[i].beg, van[i].end, van[i].pos.size(), van[i].pos[0]); - } - ++it; - } -} - -// fun part -void tidx::build(const char *in, const char *sep, int nchr, int nbeg, int nend, int skip_i, char skip_c, bool sub_e) { - FILE *fin=fopen(in,"r"); - - if (!fin) - fail("%s:%s\n",in,strerror(errno)); - - if (nend == -1) - nend = nbeg; - - string out = string_format("gzip -c > %s.tidx", in); - FILE *fout=popen(out.c_str(),"w"); - if (!fout) - fail("%s:%s\n", out.c_str(),strerror(errno)); - - double xst = xtime(); - - struct line l; meminit(l); - int nlast = max(max(nbeg,nend),nchr); - int nl = 0; - - string p_chr = "%"; - path=in; - vector *pvan; - long tpos = ftell(fin); - // read in the annotation file - if (debug) fprintf(stderr, "reading %s (%d, %d, %d)\n", in, nchr, nbeg, nend); - while (read_line(fin, l)>0) { - ++nl; - if (skip_i > 0 || *l.s==skip_c) { - --skip_i; - } else { - chomp_line(l); - vector v = split(l.s, sep); - if (nlast >= v.size()) { - fail("error, file %s, line %d: missing info\n", in, nl); - } - annot a; - a.beg=atoi(v[nbeg]); - a.end=atoi(v[nend]); - if (sub_e) --a.end; - if (a.beg > a.end) { - fail("error, file %s, line %d: beg > end : %d > %d\n", in, nl, a.beg, a.end); - } - a.pos.push_back(tpos); - if (strcmp(v[nchr], p_chr.c_str())) { // speed up - pvan = &map[v[nchr]]; - p_chr=v[nchr]; - } - pvan->push_back(a); - } - tpos = ftell(fin); - } - dense_hash_map >::iterator it; - - free_line(&l); - - // for each chromosome - it = map.begin(); - while (it != map.end()) { - vector &van = it->second; - // sort the annotation file by beginning of region - sort(van.begin(), van.end(), annot_comp); - int i; - if (debug) fprintf(stderr, "frag %s : %ld ->", it->first.c_str(), van.size()); - for (i=0;i= van[i+1].beg && van[i].end == van[i+1].end) { - // exact match - if (debug) fprintf(stderr, " [dup %d]", van[i].beg); - // merge annotations - prepend(van[i+1].pos,van[i].pos); - // skip next... (empty pos won't be serialized) - assert(van[i].beg == van[i+1].beg); - van[i].pos.clear(); - } else if (van[i].end >= van[i+1].beg) { - if (debug) fprintf(stderr, " [ovr %d-%d:%ld ]", van[i].beg, van[i].end, van[i].pos[0]); - // overlap next - int new_st; - int new_en; - - // forced to initialize here so we can use a reference (for efficiency) - vector new_ro = van[i].pos; - - if (van[i].end < van[i+1].end) { - // contained within next, so new frag starting after i stop - new_st = van[i].end + 1; - new_en = van[i+1].end; - new_ro = van[i+1].pos; // that only contains the other - van[i+1].end=van[i].end; // shorten next to my end - append(van[i+1].pos,van[i].pos); // and now the other contains me - } else { - // passes next, so next contains all of me - new_st = van[i+1].end+1; // new frag is after the end of next - new_en = van[i].end; - append(van[i+1].pos,van[i].pos); - } - - van[i].end=van[i+1].beg-1; // shorten my end to less than the next's start - - if (debug) fprintf(stderr, " [i:%d:%d:%ld]", van[i].beg, van[i].end, van[i].pos[0]); - if (debug) fprintf(stderr, " [i+1:%d:%d:%ld]", van[i+1].beg, van[i+1].end, van[i+1].pos[0]); - - if (new_en >= new_st) { // is this a real one? - if (debug) fprintf(stderr, " [n:%d:%d:%ld]", new_st, new_en, new_ro[0]); - - int j = i+2; // figure out where it goes (shouldn't be far) - while (j < van.size() & new_st > van[j].beg) { - ++j; - } - - annot a; - a.beg=new_st; - a.end=new_en; - a.pos=new_ro; - // (slow... use linked list, turn to array later for storage/bin search?) - van.insert(van.begin()+j, a); // insert into the annot array - } - } - } - long j = 0; - for (i=0;i -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include "fastq-lib.h" -#include "utils.h" -#include "tidx.h" - -void usage(FILE *f); - -using namespace std; -using namespace google; - -int main (int argc, char **argv) { - bool debug = false; - bool echo = false; - bool build = false; - vector vin; - const char *ain= NULL; - const char *sep = "\t"; - const char *msep = "^"; - const char *trim = "chr"; - char *point = NULL; - int nchr = 1, nbeg = 2, nend = 3; - char skip_c = '#'; - char sub_e = 0; - int skip_i = 0; - bool dump = 0; - - char c; - while ( (c = getopt (argc, argv, "Dlhdt:r:c:b:T:e:p:i:s:a:nB")) != -1) { - switch (c) { - case 'd': - debug=true; break; - case 'D': - dump=true; break; - case 'n': - echo=false; break; - case 'l': - sub_e=true; break; - case 'B': - build = true; break; - case 'h': - usage(stdout); exit(0); - case 't': - sep = optarg; break; - case 'p': - point = optarg; break; - case 's': - if (isdigit(*optarg)) - skip_i = atoi(optarg); - else - skip_c = *optarg; - break; - case 'r': - msep = optarg; break; - case 'T': - trim = optarg; break; - case 'c': - nchr = atoi(optarg); break; - case 'i': - vin.push_back(optarg); break; - case 'a': - ain = optarg; break; - case 'b': - nbeg = atoi(optarg); break; - case 'e': - nend = atoi(optarg); break; - case '?': - if (strchr("tncbe", optopt)) - fprintf (stderr, "Option -%c requires an argument.\n", optopt); - else if (isprint(optopt)) - fprintf (stderr, "Unknown option `-%c'.\n", optopt); - else - fprintf (stderr, - "Unknown option character `\\x%x'.\n", - optopt); - usage(stderr); - return 1; - } - } - - if (!vin.size()) { - if (argc>1) warn("Error: at least one -i index file is required\n"); usage(stderr); exit(1); - } - - if (! build && ! ain && !point && !dump) { - fail("Error: one of -D -B, -p or -a is required\n"); - } - - if ((!!build + !!ain + !!point + !!dump) > 1) { - warn("Error: only one of -B, -p or -a is allowed\n"); - } - - --nchr; --nbeg; --nend; - - if ( build ) { - int f_i; - for (f_i=0;f_ivmap; vmap.resize(vin.size()); - for (f_i=0;f_idebug=true; - if (dump) { - vmap[f_i]->dump(stdout); - } - } - if (dump) { - exit(0); - } - - if ( point ) { - char * p = strchr(point, ':'); - if (!p) { - fail("Error: -p requires chr:pos argument\n"); - } - *p++ = '\0'; - long pos = atol(p); - int found = 0; - for (f_i=0;f_ilookup(point, pos, msep); - if (tmp.size()) { - ++found; - fputs(tmp.c_str()+(found==1),stdout); // echo - } - } - if (found) fputc('\n',stdout); - return !found; - } else { - FILE *fin = !strcmp(ain,"-") ? stdin : fopen(ain, "r"); - if (!fin) - fail("error '%s':%s", ain,strerror(errno)); - - while (read_line(fin, l)>0) { - ++nl; - - chomp_line(l); - - fputs(l.s,stdout); // echo - - vector v = split(l.s, sep); // todo, only get the keys desired, don't destroy - - string res; - if (v.size() > nchr && v.size() > nbeg) { - for (f_i=0;f_ilookup(v[nchr], atol(v[nbeg]), msep); - if (tmp.size()) { - res = res + tmp; - } - } - } - fputs(res.c_str(),stdout); // echo - fputc('\n',stdout); - } - free_line(&l); - } - - for (f_i=0;f_i -#include -#include - -class annot { -public: - int beg; - int end; - std::vector pos; -}; - -class tidx { - FILE *fh; - void init(); -public: - bool debug; - tidx() {init();}; - tidx(const char *path) {init(); read(path);}; - - std::string path; - google::dense_hash_map > map; - - void dump(FILE *stream); - bool read(const char *path); - void build(const char *path, const char *sep, int nchr, int nbeg, int nend, int skip_i, char skip_c, bool sub_e); - - const std::vector & lookup(const char *chr, int pos); - std::string lookup(const char *chr, int pos, const char *msep); - -// range lookup - std::vector lookup_r(const char *chr, int beg, int end); - std::string lookup_r(const char *chr, int beg, int end, const char *msep); - -// const char * return value - const char * lookup_c(const char *chr, int pos, const char *msep); - const char * lookup_cr(const char *chr, int beg, int end, const char *msep); -}; - -void chomp_line(struct line &l); - -// build, with no return value, for API use -void tidx_build(const char *path, const char *sep, int nchr, int nbeg, int nend, int skip_i, char skip_c, bool sub_e); - diff --git a/clipper/tidx/utils.cpp b/clipper/tidx/utils.cpp deleted file mode 120000 index 451eef0..0000000 --- a/clipper/tidx/utils.cpp +++ /dev/null @@ -1 +0,0 @@ -../utils.cpp \ No newline at end of file diff --git a/clipper/tidx/utils.h b/clipper/tidx/utils.h deleted file mode 120000 index 6cd5d4f..0000000 --- a/clipper/tidx/utils.h +++ /dev/null @@ -1 +0,0 @@ -../utils.h \ No newline at end of file diff --git a/clipper/utils.cpp b/clipper/utils.cpp deleted file mode 100644 index fb72567..0000000 --- a/clipper/utils.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "utils.h" - -std::string string_format(const std::string &fmt, ...) { - int n, size=100; - std::string str; - va_list ap; - while (1) { - str.resize(size); - va_start(ap, fmt); - int n = vsnprintf((char *)str.c_str(), size, fmt.c_str(), ap); - va_end(ap); - if (n > -1 && n < size) - return str; - if (n > -1) - size=n+1; - else - size*=2; - } -} - -std::vector split(char* str,const char* delim) -{ - char* token = strtok(str,delim); - std::vector result; - while(token != NULL) - { - result.push_back(token); - token = strtok(NULL,delim); - } - return result; -} - diff --git a/clipper/utils.h b/clipper/utils.h deleted file mode 100644 index ceac58e..0000000 --- a/clipper/utils.h +++ /dev/null @@ -1,5 +0,0 @@ -#include -#include - -std::string string_format(const std::string &fmt, ...); -std::vector split(char* str, const char* delim); diff --git a/clipper/varcall-matrix b/clipper/varcall-matrix deleted file mode 100755 index 797d77d..0000000 --- a/clipper/varcall-matrix +++ /dev/null @@ -1,248 +0,0 @@ -#!/usr/bin/perl - -use strict; - -use IO::File; -use Data::Dumper; -use Getopt::Long qw(:config no_ignorecase); - -my $min_seen = 0; -my $distance = 0; -my $strip = -1; -my $usepil; -my $pilsub; -my $faidx; - -GetOptions("minvar=i"=>\$min_seen, "distance"=>\$distance, "strip!"=>\$strip, "pileup"=>\$usepil, "PSUB=s"=>\$pilsub, "faidx=s"=>\$faidx) || die; - -die "use -p for default varcall.txt/pileup.txt conversion\n" if -e $pilsub; -$pilsub = "varcall.txt/pileup.txt" if $usepil && !$pilsub; - -die "Usage: $0 [opts] varcall-files... - -m Minimum number of samples with a variant (1) - -d Output a distance matrix instead (1=het, 2=hom, 3=indel) - -p Use associated pileup info for reference depth, default is varcall.txt -> pileup.txt - -s Strip all path info - -f REF Use reference for sort order (necessary if the original file was not lexically sorted!) - -P SUBST Use associated pileup info for reference depth, and define SUBST -" if !@ARGV; - -my @in; my @pil; my $i = 0; - -my %refsort; -if ($faidx) { - $faidx = "$faidx.fai" if $faidx !~ /\.fai$/; - open(IN, $faidx) || die "can't read $faidx: $!"; - my $i = 0; - while() { - my ($id) = split /\t/; - $refsort{$id}=++$i; - } - die unless %refsort; -} - -for (@ARGV) { - if (defined $pilsub) { - my $pil = $_; - my ($from, $to) = split /[\/=]/, $pilsub; - die "-PSUB must be from/to: $pilsub\n" unless $to; - if ($pil =~ s/$from$/$to/) { - if (-s $pil) { - open($pil[$i], $pil)||die"open $pil:$!\n"; - } elsif (-s "$pil.gz") { - open($pil[$i], "gunzip -c $pil.gz|")||die"open $pil:$!\n"; - } else { - die "file name $pil does not exist"; - } - } else { - die "file name $pil does not match $pilsub"; - } - } - open($in[$i++], $_)||die"open $_:$!\n"; -} - -# print header -print "chr\tpos\tref" if !$distance; -print "chr-pos" if $distance; -# strip common path info -my $pre = common_prefix(@ARGV); $pre =~ s/[^\/]+$//; $pre = quotemeta($pre); -my $suf = common_suffix(@ARGV); $suf =~ s/^[^.]+//; $suf = quotemeta($suf); -for (my $i = 0; $i < @in; ++$i ){ - print "\t"; - my $th = $ARGV[$i]; - if ($strip == -1) { - $th =~ s/^$pre//; - } elsif ($strip) { - $th =~ s/^.*\///; - } - $th =~ s/$suf$//; - print $th; -} -print "\n"; - -my $ok = 1; -my @keep; -my $cnt = 0; -while ($ok) { -$ok = 0; - -my ($l, @d); -my ($min_i, $min_id, $min_pos); -# for each file -for (my $i = 0; $i < @in; ++$i ) { - # read if needed - if (!defined($keep[$i])) { - $l = $in[$i]->getline; chomp $l; - next unless $l; - # id, pos, ref, depth, skipped, pct, call1, call2... - $d[$i] = [split /\t/, $l]; - } else { - # reuse last rounds read - $d[$i] = $keep[$i]; - next unless $d[$i]; - } - # find the min id - $ok = 1; - if ( ( $d[$i][0] && !defined($min_id) ) || - ( chrlt($d[$i][0],$min_id) ) || - ( ($d[$i][0] eq $min_id) && ($d[$i][1] < $min_pos) ) - ) { - # minimum id - $min_i = $i; - $min_id = $d[$i][0]; - $min_pos = $d[$i][1]; - } -} - -last if !$ok; - -die "Error: no id found: ", Dumper \@d if !$min_id; - -my $seen; -for ($i = 0; $i < @in; ++$i ){ - if ($d[$i] && ($d[$i][0] eq $min_id && $d[$i][1] eq $min_pos) ) { - ++$seen; - $keep[$i] = undef; # read next - } else { - $keep[$i] = $d[$i]; # don't read - } -} - -# if you don't see enough in common, skip -if ($seen < $min_seen) { - next; -} - -my @p; -if (@pil) { - # seek all the pileups - for ($i = 0; $i < @pil; ++$i ){ - do { - # note: chr, pos, ref, depth, pil - $p[$i] = [split /\t/, $pil[$i]->getline]; - } while ( ( chrlt($p[$i][0], $min_id) ) || - ( ($p[$i][0] eq $min_id) && ($p[$i][1] < $min_pos) ) - ); - } -} - -# print the variant -my $ref = $d[$min_i][2]; -print "$min_id-$min_pos" if $distance; -print "$min_id\t$min_pos\t", $ref if !$distance; - -for ($i = 0; $i < @in; ++$i ){ - print "\t"; - if ($d[$i] && ($d[$i][0] eq $min_id && $d[$i][1] eq $min_pos) ) { - # output data - # todo support alternate matrix formats - my $count = $#{$d[$i]}; - if ($distance) { - for (@{$d[$i]}[6 .. $count]) { - $distance = 2; - if (uc($ref) eq substr($_,0,1)) { - --$distance; - } - if (substr($_,0,1) eq '*') { - ++$distance; - } - if (substr($_,0,1) eq '+') { - ++$distance; - } - } - print $distance; - } else { - print join ";", sort { substr($b,index($b,':')+1) <=> substr($a,index($a,':')+1) } @{$d[$i]}[6 .. $count]; - } - } else { - # output blank, keep read for later - if ($distance) { - print 0; - } else { - if ($p[$i] && $p[$i][0] eq $min_id && $p[$i][1] eq $min_pos) { - if ($p[$i][2] =~ /^[atgc]$/oi) { - my $depth = $p[$i][4] =~ tr/,.//; - if ($depth < 4) { - print "n/a"; - } else { - my $sq = 0; - for(my $j=0;$j length($comm)); - $comm = substr($comm,-length($_)) if (length($_) < length($comm)); - if (( $_ ^ $comm ) =~ /(\0*)$/) { - $comm = substr($comm, -length($1)); - } else { - return undef; - } - } - return $comm; -} - -sub common_prefix { - my $comm = shift @_; - while ($_ = shift @_) { - $_ = substr($_,0,length($comm)) if (length($_) > length($comm)); - $comm = substr($comm,0,length($_)) if (length($_) < length($comm)); - if (( $_ ^ $comm ) =~ /^(\0*)/) { - $comm = substr($comm, 0, length($1)); - } else { - return undef; - } - } - return $comm; -} - -sub chrlt { - my ($a, $b) = @_; - if ($faidx) { - return 0 if $a eq $b; - return $refsort{$a} < $refsort{$b}; - } else { - $a =~ tr/:/\0/; - $b =~ tr/:/\0/; - return $a lt $b; - } -} - diff --git a/clipper/varcall.cpp b/clipper/varcall.cpp deleted file mode 100644 index a9eebc7..0000000 --- a/clipper/varcall.cpp +++ /dev/null @@ -1,2531 +0,0 @@ -/* -Copyright (c) 2012 Erik Aronesty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include -#include -#include - -#include // or sparse_hash_set, dense_hash_map, ... -#include // or sparse_hash_set, dense_hash_map, ... -#include "tidx/tidx.h" - -#include "fastq-lib.h" - -const char * VERSION = "0.96.819"; - -#define MIN_READ_LEN 20 -#define DEFAULT_LOCII 1000000 - - -using namespace std; -using namespace google; - -void usage(FILE *f); - - -FILE *stat_fout=NULL; - -// #define DEBUG 1 - -#define meminit(l) (memset(&l,0,sizeof(l))) -#ifdef DEBUG - #define debug(s,...) fprintf(stderr,s,##__VA_ARGS__) -#else - #define debug(s,...) -#endif -#undef warn -#define warn(s,...) (++errs, fprintf(stderr,s,##__VA_ARGS__)) -#define die(s,...) (fprintf(stderr,s,##__VA_ARGS__), exit(1)) -#define stat_out(s,...) fprintf(stat_fout,s,##__VA_ARGS__) -#define stdev(cnt, sum, ssq) sqrt((((double)cnt)*ssq-pow((double)sum,2)) / ((double)cnt*((double)cnt-1))) -#define log10(x) (log(x)/log(10)) - -//////////// BASE 2 INTEGER - -#define T_A 0 -#define T_C 1 -#define T_G 2 -#define T_T 3 -#define T_SDEL 4 -#define T_NDEL 5 -#define T_INS 6 -#define T_N 7 -#define T_CNT 8 -#define b2i(c) ((c)=='A'?0:(c)=='a'?0:(c)=='C'?1:(c)=='c'?1:(c)=='G'?2:(c)=='g'?2:(c)=='T'?3:(c)=='t'?3:(c)=='*'?4:(c)=='-'?5:(c)=='+'?6:7) -#define i2b(i) (i==0?'A':i==1?'C':i==2?'G':i==3?'T':i==4?'*':i==5?'-':i==6?'+':'?') -#define toupper(c) ((c)>='a' && (c)<='z' ? ((c)-32) : (c)) - -// die unless it's a number -int ok_atoi(const char *s) { - if (!s || (!isdigit(*s)&& !(*s=='-'))) { - die("%s is not a number\n", s); - } - return atoi(s); -} - -double quantile(const std::vector &vec, double p); -double quantile(const std::vector &vec, double p); -double pnorm(double x); -double qnorm(double x); -int rand_round(double x); - -// basic utils -std::vector split(char* str, char delim); -int split(char **buf, char* str, char delim); -std::string string_format(const std::string &fmt, ...); -void to_upper(const std::string str); -void rename_tmp(std::string f); - -int errs=0; -extern int optind; -int g_lineno=0; -double vse_rate[T_CNT][T_CNT]; - -class Faidx { -public: - typedef struct { - int len; - long long offset; - int line_blen; - int line_len; - } Faient; - - sparse_hash_map faimap; - - string fa_n; - FILE *fa_f; - - Faidx() {fa_f=NULL;}; - void Load(const char *path); // open file, read fai - - // read into buffer - bool Fetch(char *buf, const string &chr, int pos_from, int pos_to) { - Fetch(buf, Chrdex(chr), pos_from, pos_to); - }; - - // read into buffer, with cached Chrdex - bool Fetch(char *buf, const Faient *ent, int pos_from, int pos_to); - const Faient * Chrdex(const string &chr) { - return &(faimap[chr]); - } -}; - -class Noise { -public: - Noise() {noise=0;depth=0;}; - Noise(char r, char v, int d, double n, double q, double mq) {ref=r, var=v, depth=d; noise=n;qnoise=q;mnqual=mq;}; - char ref; - char var; - double noise; - double qnoise; - int depth; - double mnqual; -}; - -double quantile_depth(const vector &vec, double p); - -bool noisebydepth (const Noise &a, const Noise &b) { return (a.depth>b.depth);} - -class PileupEnt { -public: - bool is_rev; - bool is_start; - bool f; - const char *b; - int q; - int m; - int p; -}; - -class vcall { -public: - vcall() {base='\0'; mn_qual=mq0=fwd=rev=qual=is_ref=qual_ssq=mq_sum=mq_ssq=tail_rev=tail_fwd=fwd_q=rev_q=0; agreement=diversity=0.0;} - char base; - bool is_ref; - int qual, fwd, rev, mq0, mn_qual, qual_ssq, mq_sum, mq_ssq, tail_rev, tail_fwd, fwd_q, rev_q; - double diversity, agreement; - vector seqs; - int depth() const {return fwd+rev;} - int mq_rms() const {return sqrt(mq_ssq/depth());} - int qual_rms() const {return sqrt(qual_ssq/depth());} -}; - -class vfinal { -public: - vfinal(vcall &c) {max_idl_cnt=0; padj=1; pcall = &c;}; - vfinal & operator=(vfinal const&x) {max_idl_seq=x.max_idl_seq; max_idl_cnt=x.max_idl_cnt; padj=x.padj; pcall=x.pcall;} - vcall *pcall; - string max_idl_seq; - int max_idl_cnt; - double padj; - bool is_indel() {return max_idl_cnt > 0;}; -}; - -bool hitolocall (const vcall &i,const vcall &j) {return ((i.depth())>(j.depth()));} -bool sortreffirst (const vfinal &i,const vfinal &j) {return (i.pcall->is_ref&&!j.pcall->is_ref)||((i.pcall->is_ref==j.pcall->is_ref) && ((i.pcall->depth())>(j.pcall->depth())));} - -class Read { -public: - int MapQ; - int Pos; - string Seq; - Read() {MapQ=Pos=0;}; -}; - -class PileupReads { -public: - double MeanReadLen() {return ReadBin.size() ? TotReadLen/ReadBin.size() : MIN_READ_LEN;} - int TotReadLen; - deque ReadBin; - list ReadList; - PileupReads() {TotReadLen=0;} -}; - -class PileupSummary { -public: - string Chr; - int Pos; - char Base; - int Depth; - int TotQual; - int NumReads; - vector Calls; - bool InTarget; - int Regions; - - int SkipN; - int SkipAmp; - int SkipDupReads; - int SkipMinMapq; - int SkipMinQual; - - int RepeatCount; - char RepeatBase; - - void Parse(char *line, PileupReads &reads, tidx *annot=NULL, char annot_type='\0'); - PileupSummary() { Base = '\0'; Pos=-1; }; -}; - -class PileupManager; - -class PileupSubscriber { -public: - PileupManager *Manager; - virtual void Visit(PileupSummary &dat) = 0; - virtual void Finish() {}; - PileupSubscriber(PileupManager &man); - PileupSubscriber() {Manager = NULL;} - void SetManager(PileupManager &man); -}; - -class PileupManager { -friend class PileupSubscriber; - -private: - void Visit(PileupSummary &dat); - void VisitX(PileupSummary &dat, int windex); - PileupSummary Pileup; - -protected: - vector Kids; - -public: - - string Reference; - char InputType; - int WinMax; // flanking window size - int WinDex; // current index into the window (ususally midpoint) - - deque Win; - - int UseAnnot; - tidx AnnotDex; // start/stop index file - char AnnotType; // b (bed) or g (gtf - preferred) - - PileupReads Reads; - - PileupManager() {InputType ='\0'; WinMax=0; WinDex=0; UseAnnot=0; AnnotType='\0';} - - void Finish(); - - void Parse(char *dat); - - void LoadAnnot(const char *annot_file); - void FillReference(int refSize); -}; - -class VarStatVisitor : public PileupSubscriber { - public: - VarStatVisitor() : PileupSubscriber() {tot_locii=0; tot_depth=0; num_reads=0; stats.reserve(1000000); ins_stats.reserve(1000000); del_stats.reserve(1000000);}; - VarStatVisitor(PileupManager &man) : PileupSubscriber(man) {tot_locii=0; tot_depth=0; num_reads=0;}; - - void Visit(PileupSummary &dat); - void Finish() {}; - - double tot_depth; - int tot_locii; - int num_reads; - vector stats; - vector ins_stats; - vector del_stats; -}; - - -class VarCallVisitor : public PileupSubscriber { - public: - - VarCallVisitor(PileupManager &man) : PileupSubscriber(man) { - SkippedAnnot=0; - SkippedDepth=0; - Hets=0; - Homs=0; - Locii=0; - }; - - void Visit(PileupSummary &dat); - - int SkippedDepth; - int SkippedAnnot; - int Locii; - int Hets; - int Homs; -}; - -bool hasdata(const string &file) { - struct stat st; - if (stat(file.c_str(), &st)) { - return false; - } - return st.st_size > 0; -} - - -int minsampdepth=20; -double pct_depth=0; -double pct_qdepth=0; -double global_error_rate=0; -double max_phred; -double vse_max_phred[T_CNT][T_CNT]; -int total_locii=-1; -double pct_balance=0.05; // at least 1 reverse read for every 20 -char *debug_xchr=NULL; -int debug_xpos=0; -int debug_level=0; -int min_depth=1; -int min_mapq=0; -double min_diversity=0.15; // only skip huge piles in one spot... even a little diversity is OK -double min_agreement=0.15; // only really relevent when depths are high ... this is a bare minimum score -int min_qual=3; -int repeat_filter=7; -double artifact_filter=1; -int min_adepth=2; -int read_tail_pct=.6; -int read_tail_len=4; -int min_idepth=3; -int no_baq=0; -double zygosity=.5; // set to .1 for 1 10% admixture, or even .05 for het/admix -bool output_ref=0; // set to 1 if you want to output reference-only positions -bool no_indels=0; - -void parse_bams(PileupManager &v, int in_n, char **in, const char *ref); -void check_ref_fai(const char * ref); - -FILE *noise_f=NULL, *var_f = NULL, *varsum_f = NULL, *tgt_var_f = NULL, *tgt_cse_f = NULL, *vcf_f = NULL, *eav_f=NULL, *cse_f=NULL; - -double alpha=.05; -int phred=33; -double phi(double x); - -FILE *openordie(const char *path, const char *mode) { - FILE *f=fopen(path, mode); - if (!f) { - warn("Can't open-%s %s: %s\n", mode, path, strerror(errno)); - exit(1); - } - return f; -} - -int str_in(const char *needle, const char **haystack) { - int i=-1; - while (*haystack) { - ++i; - if (!strcasecmp(needle, *haystack)) { - return i; - } - ++haystack; - } - return -1; -} - -void output_stats(VarStatVisitor &vstat); - -Faidx faidx; -bool pcr_annot = false; - -int main(int argc, char **argv) { - char c; - const char *ref=NULL; - optind = 0; - int umindepth=0; - int uminadepth=-1; - int uminidepth=0; - double upctqdepth=0; - int do_stats=0; - int do_varcall=0; - - char *out_prefix = NULL; - char *target_annot = NULL; - const char *read_stats = NULL; - - -// list of default output formats used when -o is specified -#define MAX_F 20 - const char *format_list[MAX_F]={"var", "eav", "noise", "varsum", NULL}; - -// option characters... use \1, \2... for long-only - - #define OPT_PCR_ANNOT '\1' - #define OPT_DEBUG_LEVEL '\2' - #define OPT_NO_INDELS '\3' - #define OPT_FILTER_ANNOT 'A' - -// long options - static struct option long_options[] = { - {"pcr-annot", 1, 0, OPT_PCR_ANNOT}, - {"filter-annot", 1, 0, OPT_FILTER_ANNOT}, - {"repeat-filter", 1, 0, 'R'}, - {"no-indels", 0, 0, OPT_NO_INDELS}, - {"agreement", 1, 0, 'G'}, - {"diversity", 1, 0, 'd'}, - {"version", 0, 0, 'V'}, - {"debug", 1, 0, OPT_DEBUG_LEVEL}, - {0, 0, 0, 0} - }; - - while ( (c = getopt_long(argc, argv, "?sv0VBhe:m:x:f:p:a:g:q:Q:i:o:D:R:b:L:S:F:A:G:d:",long_options,NULL)) != -1) { - switch (c) { - case OPT_PCR_ANNOT: target_annot=optarg; pcr_annot=true; break; - case OPT_FILTER_ANNOT: target_annot=optarg; pcr_annot=false; break; - case OPT_NO_INDELS: no_indels=true; break; - case 'h': usage(stdout); return 0; - case 'm': umindepth=ok_atoi(optarg); break; - case 'q': min_qual=ok_atoi(optarg); break; - case 'o': out_prefix=optarg; break; - case 'Q': min_mapq=ok_atoi(optarg); break; - case 'V': printf("Version: %s\n", VERSION); exit(0); break; - case 'R': repeat_filter=ok_atoi(optarg); break; - case 'a': uminadepth=ok_atoi(optarg);break; - case 'D': artifact_filter=atof(optarg);break; - case 'i': uminidepth=ok_atoi(optarg);break; - case 'd': min_diversity=atof(optarg); break; - case 'G': min_agreement=atof(optarg); break; - case '0': min_qual=0; umindepth=0; min_mapq=0; repeat_filter=0; uminadepth=0; artifact_filter=0; uminidepth=0; min_diversity=0; alpha=1; pct_balance=0; upctqdepth=0; min_agreement=0; break; - case 'x': { - debug_xchr=optarg; - char *p=strrchr(debug_xchr, ':'); - if (!p) die("Invalid param for -x"); - *p='\0'; - debug_xpos=atoi(++p); - if (!p) die("Invalid param for -x, need pos"); - ++debug_level; - break; - } - case OPT_DEBUG_LEVEL: - debug_level = atoi(optarg); - case 'b': pct_balance=atof(optarg)/100.0; break; - case 'B': no_baq=1; break; - case 'p': upctqdepth=atof(optarg); break; - case 'e': alpha=atof(optarg); break; - case 'g': global_error_rate=atof(optarg); break; - case 'L': total_locii=ok_atoi(optarg); break; - case 'f': ref=optarg; break; - case 's': do_stats=1; break; - case 'S': read_stats=optarg; break; - case 'v': do_varcall=1; break; - case 'F': { - char *tok, *saved; int i=0; - for (tok = strtok_r(optarg, "%", &saved); tok && i < MAX_F; tok = strtok_r(NULL, " ,", &saved)) { - format_list[i++]=tok; - } - format_list[i]=NULL; - break; - } - case '?': - if (!optopt) { - usage(stdout); return 0; - } else if (optopt && strchr("ox", optopt)) - fprintf (stderr, "Option -%c requires an argument.\n", optopt); - else if (isprint(optopt)) - fprintf (stderr, "Unknown option `-%c'.\n", optopt); - else - fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); - usage(stderr); - return 1; - } - } - - - if (!do_stats && !do_varcall) { - warn("Specify -s for stats only, or -v to do variant calling\n\n"); - usage(stderr); - return 1; - } - - if (out_prefix && do_varcall) { - var_f = openordie(string_format("%s.var.tmp", out_prefix).c_str(), "w"); - - fprintf(var_f,"%s\t%s\t%s\t%s\t%s\t%s\t%s%s\n","chr", "pos", "ref", "depth", "skip", "pct", (target_annot&&!pcr_annot) ? "target\t" : pcr_annot ? "regions\t" : "", "..."); - - varsum_f = openordie(string_format("%s.varsum.tmp", out_prefix).c_str(), "w"); - - if (target_annot && !pcr_annot) { - // targted only output - tgt_var_f = openordie(string_format("%s.tgt.var.tmp", out_prefix).c_str(), "w"); - fprintf(tgt_var_f,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n","chr", "pos", "ref", "depth", "skip", "pct", "..."); - } - - if (str_in("vcf", format_list)>=0) { - vcf_f = openordie(string_format("%s.vcf.tmp", out_prefix).c_str(), "w"); - } - if (str_in("eav", format_list)>=0) { - eav_f = openordie(string_format("%s.eav.tmp", out_prefix).c_str(), "w"); - } - - if (str_in("cse", format_list)>=0) { - check_ref_fai(ref); - cse_f = openordie(string_format("%s.cse.tmp", out_prefix).c_str(), "w"); - faidx.Load(ref); - // targted only output - if (target_annot && ! pcr_annot) - tgt_cse_f = openordie(string_format("%s.tgt.cse.tmp", out_prefix).c_str(), "w"); - } - } else { - var_f = stdout; - varsum_f = stderr; - } - - if (umindepth > minsampdepth) { - minsampdepth=umindepth; - } - - // set argv to '-' if stdin - const char *stdv[3] = {argv[0],"-",NULL}; - if (!argv[optind]) { - argc=2; - argv = (char **) stdv; - optind=1; - } - - char **in=&argv[optind]; - int in_n = argc-optind; - - // not really random - srand(1); - - meminit(vse_rate); - - if (do_stats) { - if (out_prefix) { - stat_fout = openordie(string_format("%s.stats", out_prefix).c_str(), "w"); - noise_f = openordie(string_format("%s.noise", out_prefix).c_str(), "w"); - fprintf(noise_f,"%s\t%s\t%s\t%s\t%s\t%s\n", "depth", "ref", "var", "noise", "qnoise", "qmean"); - } - if (!stat_fout) { - if (do_varcall) - stat_fout=stderr; // stats to stderr - else - stat_fout=stdout; // stats to stdout - } - // do stats by myself - PileupManager pman; - VarStatVisitor vstat(pman); - parse_bams(pman, in_n, in, ref); - output_stats(vstat); - if (out_prefix) { - fclose(stat_fout); - fclose(noise_f); - noise_f=NULL; - stat_fout=NULL; - } - } - - if (do_varcall && out_prefix) { - // run stats again... with new levels if any - stat_fout = openordie(string_format("%s.vstats", out_prefix).c_str(), "w"); - } - - if (read_stats){ - FILE * f = fopen(read_stats, "r"); - if (!f) { - warn("File %s does not exist, quitting\n", read_stats); - exit(1); - } - line l; meminit(l); - char *val; - - double noise_mean=0; - double noise_dev=0; - - double qnoise_mean=0; - double qnoise_dev=0; - - double vse_mean[T_CNT][T_CNT]; - double vse_dev[T_CNT][T_CNT]; - - meminit(vse_mean); - meminit(vse_dev); - - while(read_line(f, l)>0) { - if (val=strchr(l.s, '\t')) { - *val='\0'; ++val; - if (!strcasecmp(l.s, "min depth")) { - if (umindepth && umindepth > atoi(val)) { - fprintf(varsum_f,"warning\tsampling depth was less than variation depth\n"); - } - if (!umindepth) umindepth=atoi(val); - } else if (!strcasecmp(l.s, "min pct qual")) { - if (upctqdepth<=0) upctqdepth=atof(val); - } else if (!strcasecmp(l.s, "noise mean")) { - if (global_error_rate<=0) noise_mean=atof(val); - } else if (!strcasecmp(l.s, "noise dev")) { - if (global_error_rate<=0) noise_dev=atof(val); - } else if (!strcasecmp(l.s, "qnoise mean")) { - if (global_error_rate<=0) qnoise_mean=atof(val); - } else if (!strcasecmp(l.s, "qnoise dev")) { - if (global_error_rate<=0) qnoise_dev=atof(val); - } else if (!strcasecmp(l.s, "locii >= min depth")) { - if (total_locii<0) total_locii=atoi(val); - } else if (!strcasecmp(l.s, "alpha")) { - if (alpha<=0) alpha=atof(val); - } else if (!strncasecmp(l.s, "vnoise", 6)) { - char ref, var; char typ[10]; - if ( sscanf(l.s, "vnoise %s %c:%c", typ, &ref, &var) == 3) { - if (*typ == 'm') { - // warn("vse_mean %d, %d : %f\n", b2i(ref),b2i(var), atof(val)); - vse_mean[b2i(ref)][b2i(var)]=atof(val); - } else if (*typ == 'd') { - vse_dev[b2i(ref)][b2i(var)]=atof(val); - } else { - die("Invalid stats format : %s\n", l.s); - } - } - } - } - } - - int i, j; - for (i=0;i0) { - vse_rate[i][j] = vse_mean[i][j] + vse_dev[i][j]; - } else { - vse_rate[i][j] = noise_mean+noise_dev; - } - } - } - - if (noise_mean > 0) { - global_error_rate=noise_mean+noise_dev; - } - } - - // for speed, do this once... - max_phred = -log10(global_error_rate)*10; - meminit(vse_max_phred); - - // init table - int i, j; - for (i=0;i0) { - vse_max_phred[i][j]=-log10(vse_rate[i][j])*10; - } else { - vse_max_phred[i][j]=max_phred; - } - // warn("%d %d %f\n", i, j, vse_max_phred[i][j]); - } - } - - if (total_locii<0) total_locii=DEFAULT_LOCII; - if (total_locii==0) total_locii=1; // no adjustment - - if (eav_f) { - fprintf(eav_f,"chr\tpos\tref\tdepth\tnum_states\ttop_consensus\ttop_freq\tvar_base\tvar_depth\tvar_qual\tvar_strands\tforward_strands\treverse_strands\t%cval\tdiversity\tagreement\t%s\n", (total_locii>1?'e':'p'), (target_annot&&!pcr_annot) ? "in_target\t" : pcr_annot ? "regions\t" : ""); - } - - if (do_varcall) { - if (umindepth) min_depth=umindepth; - if (upctqdepth > 0) pct_qdepth=(double)upctqdepth/100; - if (uminadepth>=0) min_adepth=uminadepth; - if (uminidepth) min_idepth=uminidepth; - - if (!min_depth || (!pct_depth && !pct_qdepth)) { - fprintf(varsum_f,"warning\toutputting all variations, no minimum depths specified\n"); - } - - if (pct_qdepth==0.0 && !min_adepth) { - output_ref=1; - } - - fprintf(varsum_f,"version\tvarcall-%s\n", VERSION); - fprintf(varsum_f,"min depth\t%d\n", min_depth); - fprintf(varsum_f,"min call depth\t%d\n", min_adepth); - fprintf(varsum_f,"alpha\t%f\n", alpha); - fprintf(varsum_f,"min pct qual\t%d\n", (int)(100*pct_qdepth)); - - fprintf(varsum_f,"min balance\t%d\n", (int)(100*pct_balance)); - fprintf(varsum_f,"artifact filter\t%f\n", artifact_filter); - fprintf(varsum_f,"min qual\t%d\n", min_qual); - fprintf(varsum_f,"min map qual\t%d\n", min_mapq); - fprintf(varsum_f,"error rate\t%f\n", global_error_rate); - fprintf(varsum_f,"locii used for adjustment\t%d\n", total_locii); - - PileupManager pman; - - VarCallVisitor vcall(pman); - VarStatVisitor vstat; - - if (stat_fout) { - vstat.SetManager(pman); - } - - if (target_annot) { - pman.LoadAnnot(target_annot); - } - - if (cse_f) { - pman.WinMax=21; - } else if (repeat_filter > 0) { - fprintf(varsum_f,"homopolymer filter\t%d\n", repeat_filter); - pman.WinMax=repeat_filter+repeat_filter+3; - } else { - pman.WinMax=5; - } - - if (vcf_f) { - // print VCF header - fprintf(vcf_f, "%s\n", "##fileformat=VCFv4.1"); - } - if (cse_f) { - fprintf(cse_f, "Chr\tPos\tRef\tA\tC\tG\tT\ta\tc\tg\tt\tAq\tCq\tGq\tTq\taq\tcq\tgq\ttq\tRefAllele\tAd\tCd\tGd\tTd\tAg\tCg\tGg\tTg%s\n", pcr_annot ? "\tRegions" : ""); - } - - parse_bams(pman, in_n, in, ref); - - if (pman.InputType == 'B') { - fprintf(varsum_f,"baq correct\t%s\n", (no_baq?"no":"yes")); - } - fprintf(varsum_f,"locii\t%d\n", vcall.Locii); - fprintf(varsum_f,"hom calls\t%d\n", vcall.Homs); - fprintf(varsum_f,"het calls\t%d\n", vcall.Hets); - fprintf(varsum_f,"locii below depth\t%d\n", vcall.SkippedDepth); - fprintf(varsum_f,"locii outside annot\t%d\n", vcall.SkippedAnnot); - - if (out_prefix) { - // close it all - fclose(var_f); - fclose(varsum_f); - if (vcf_f) fclose(vcf_f); - if (eav_f) fclose(eav_f); - if (noise_f) fclose(noise_f); - if (cse_f) fclose(cse_f); - if (tgt_var_f) fclose(tgt_var_f); - if (tgt_cse_f) fclose(tgt_cse_f); - - rename_tmp(string_format("%s.var.tmp", out_prefix)); - rename_tmp(string_format("%s.varsum.tmp", out_prefix)); - - if (vcf_f) rename_tmp(string_format("%s.vcf.tmp", out_prefix)); - if (eav_f) rename_tmp(string_format("%s.eav.tmp", out_prefix)); - if (cse_f) rename_tmp(string_format("%s.cse.tmp", out_prefix)); - - if (tgt_var_f) rename_tmp(string_format("%s.tgt.var.tmp", out_prefix)); - if (tgt_cse_f) rename_tmp(string_format("%s.tgt.cse.tmp", out_prefix)); - - if (stat_fout) - output_stats(vstat); - } - } -} - -void rename_tmp(std::string f) { - std::string notmp = f; - size_t pos = notmp.find(".tmp"); - if (pos >= 0) { - notmp.replace(notmp.find(".tmp"),4,""); - rename(f.c_str(),notmp.c_str()); - } -} - -// normal distribution -double qnorm(double q) { - if(q == .5) - return 0; - - q = 1.0 - q; - - double p = (q > 0.0 && q < 0.5) ? q : (1.0 - q); - double t = sqrt(log(1.0 / pow(p, 2.0))); - - double c0 = 2.515517; - double c1 = 0.802853; - double c2 = 0.010328; - - double d1 = 1.432788; - double d2 = 0.189269; - double d3 = 0.001308; - - double x = t - (c0 + c1 * t + c2 * pow(t, 2.0)) / - (1.0 + d1 * t + d2 * pow(t, 2.0) + d3 * pow(t, 3.0)); - - if(q > .5) - x *= -1.0; - - return x; -} - -double pnorm(double x) -{ - // constants - double a1 = 0.254829592; - double a2 = -0.284496736; - double a3 = 1.421413741; - double a4 = -1.453152027; - double a5 = 1.061405429; - double p = 0.3275911; - - // Save the sign of x - int sign = 1; - if (x < 0) - sign = -1; - x = fabs(x)/sqrt(2.0); - - // A&S formula 7.1.26 - double t = 1.0/(1.0 + p*x); - double y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x); - - return 0.5*(1.0 + sign*y); -} - -void parse_bams(PileupManager &v, int in_n, char **in, const char *ref) { - - if (!in_n) { - die("No input files, quitting\n"); - } - - int i, bam_n=0; - for (i=0;i 0) { - die("Can't mix bams and other input files\n"); - } else { - if (in_n > 1) { - die("Can't handle multiple pileups... TODO\n"); - } else { - warn("input\t%d pileup\n", in_n); - v.InputType='P'; - } - } - } else { - warn("input\t%d bam\n", bam_n); - v.InputType='B'; - } - - int is_popen = 0; - FILE *fin; - - if (bam_n) { - check_ref_fai(ref); - - const char *nobaq = no_baq ? "-B" : ""; - - string mpil_cmd = string_format("samtools mpileup -Q 0 -d 100000 %s -f '%s'", nobaq, ref); - - int i; - for (i=0;i0) { - ++g_lineno; - // chr 2 G 6 ^9,^+.^*,^2,^&.^&, &.'&*- 9+*2&& 166,552,643,201,299,321 - v.Parse(l.s); - } - v.Finish(); - - if (is_popen) pclose(fin); else fclose(fin); - } - - if (g_lineno == 0) { - warn("No data in pileup, quitting\n"); - exit(1); - } -} - - -bool hitoloint (int i,int j) { return (i>j);} - -class q_calls {public: q_calls() {meminit(call);} int call[8];}; -vector depthbypos; -vector depthbyposbycall; -typedef struct { - string Chr; - int Beg; - int End; -} ChrRange; - - -char *_dat[256]; -inline void PileupSummary::Parse(char *line, PileupReads &rds, tidx *adex, char atype) { - - int dsize=split(_dat, line, '\t'); - - if (dsize < 6) { - warn("Can't read pileup : %d fields, need 6 columns, line %d\n", (int) dsize, g_lineno); - exit(1); - } - - const char * p_qual=_dat[5]; - - Chr=_dat[0]; - Pos=atoi(_dat[1]); - Base=*(_dat[2]); - Depth = atoi(_dat[3]); - SkipDupReads = 0; - SkipN = 0; - SkipAmp = 0; - SkipMinQual = 0; - SkipMinMapq = 0; - RepeatCount = 0; - RepeatBase = '\0'; - NumReads = 0; - InTarget = 0; - Regions = 0; - - int i; - - const char *cur_p = _dat[4]; - - list::iterator read_i = rds.ReadList.begin(); - - memset(depthbypos.data(),0,depthbypos.size()*sizeof(depthbypos[0])); - memset(depthbyposbycall.data(),0,depthbyposbycall.size()*sizeof(depthbyposbycall[0])); - - int eor=0; - - // list of amplicon range objects - vector amps; - - if (pcr_annot && adex) { - string s = adex->lookup(Chr.data(), Pos + (atype=='b' ? -1 : 0), "^"); - if (s.length()) { - vector a=split((char *)s.data(), '^'); - Regions=a.size()-1; - // skip leading entry... - for(i=1;i f=split(a[i], '\t'); - // create new range object - if (f.size() >= 3) { - ChrRange amp; - amp.Chr=f[0]; - amp.Beg=atoi(f[1]); - amp.End=atoi(f[2]); - if (atype=='b') { - ++amp.Beg; - } - if ((amp.End < amp.Beg) || !amp.Beg) { - die("Annotation file must be in bed or gtf format, or at least a 1-based inclusive set of ranges\n"); - } -// warn("AMP: %s:%d-%d\n",amp.Chr.data(),amp.Beg,amp.End); - amps.push_back(amp); - } - } - } - } - - if (debug_xpos) { - if (Pos == debug_xpos && !strcmp(debug_xchr,Chr.data())) { - fprintf(stderr,"depth: %d, meanreadlen: %f\n", Depth, rds.MeanReadLen()); - } - } - - int meanreadlen = rds.MeanReadLen(); - int maxdepthbypos = meanreadlen <= 0 ? 10 : max(10, round(10.0 * artifact_filter * (Depth/(double)meanreadlen))); - - Calls.clear(); - - int j; - int pia_len=0; - for (i=0;iPos >= 0 ? Pos-read_i->Pos : 0; - - pia = pia % (meanreadlen*2); - - if (pia >= depthbypos.size()) { - depthbypos.resize(pia+1); - depthbyposbycall.resize(pia+1); - } - if (pia >= pia_len) - pia_len=pia+1; - - depthbypos[pia]++; - - if (sor) - ++NumReads; - - char q = p_qual[i]-phred; // qual char - char mq = read_i->MapQ; - char o = *cur_p; // orig call - char c = toupper(o); // uppercase/ref - bool is_ref = 0; - - if (o == '.' || o == ',') { - c = Base; // ref instead - is_ref = 1; - } - - if (o == '>' || o == '<') { - /// splice! don't add to SEQ or depth, etc! - c = 'N'; // no call - is_ref = 1; - } - - bool skip = 0; - bool ampok = !pcr_annot || !adex; - - if (!ampok) { - for (j=0;jPos + meanreadlen + 1; - int bpos = read_i->Pos + meanreadlen; - int cpos = read_i->Pos + meanreadlen - 1; - if (apos == amps[j].End || bpos == amps[j].End || cpos == amps[j].End) { - ampok=1; - } - if (read_i->Pos == amps[j].Beg) { - ampok=1; - break; - } - } - } - - - if (debug_xpos) { - if (debug_level >= 3) { - if (Pos == debug_xpos && !strcmp(debug_xchr,Chr.data())) { - fprintf(stderr, "DEBUG: PIA: %d, DBP: %d, rrou: %d, nonRR: %f, maxdbp: %d, filt: %d, f1: %d, f2: %d\n", pia, - depthbypos[pia], max(1,rand_round(0.5 + artifact_filter * (Depth/rds.MeanReadLen()))), artifact_filter * (Depth/rds.MeanReadLen()), - maxdepthbypos, (10*(depthbypos[pia]-1))+(i%10), ((10*(depthbypos[pia]-1))+(i%10)) > maxdepthbypos, depthbypos[pia] > max(1,rand_round(0.5+artifact_filter * (Depth/rds.MeanReadLen()))) ); - } - } - } - - -// before dup filtering - - int call_index = b2i(c); - depthbyposbycall[pia].call[call_index]++; - - if (!ampok) { -// warn("SKIP: %d-%d, %c\n", read_i->Pos, (int)(read_i->Pos+rds.MeanReadLen()), o); - ++SkipAmp; - skip=1; - } else if (c == 'N') { - ++SkipN; - skip=1; - // ok, instead of rolling a random number, even things out - } else if (mq < min_mapq) { - ++SkipMinMapq; - skip=1; - } else if (q < min_qual) { - ++SkipMinQual; - skip=1; - } else if (artifact_filter > 0 && (((10*(depthbypos[pia]-1))+(i%10)) > maxdepthbypos )) { - ++SkipDupReads; - skip=1; - } else { - int j = call_index; - - if (call_index >= Calls.size()) { - int was = Calls.size(); - Calls.resize(j+1); - int t; for (t=was;t<=j;++t) { - Calls[t].base=i2b(t); - } - } - if (is_ref) - Calls[j].is_ref = 1; - - if ( o == ',' || o == 'a' || o == 'c' || o == 't' || o == 'g' ) { - ++Calls[j].rev; - Calls[j].rev_q += q; - } else if ( c != 'N' ) { - ++Calls[j].fwd; - Calls[j].fwd_q += q; - } - - Calls[j].qual+=q; - Calls[j].mn_qual+=min(mq,q); - Calls[j].mq_ssq+=mq*mq; - Calls[j].mq_sum+=mq; - Calls[j].qual_ssq+=q*q; -/* - if (pia <= read_tail_len || (rds.MeanReadLen()-pia) <= read_tail_len) { - if ( o == ',' || o == 'a' || o == 'c' || o == 't' || o == 'g' ) { - ++Calls[j].tail_rev; - } else { - ++Calls[j].tail_fwd; - } - } -*/ - - if (vcf_f) { - if (mq == 0) - Calls[j].mq0++; - } - } - - if (c == '-' || c == '+') { - warn("invalid pileup, at '%s', indel not attached to read?\n", cur_p); - } else { - if (c != '*' && c != 'N') - read_i->Seq += c; - ++cur_p; - } - - if (*cur_p == '+' || *cur_p == '-') { - c = *cur_p; - char *end_p; - int len = strtol(++cur_p, &end_p, 10); - string ins_seq(end_p, len); - to_upper(ins_seq); - read_i->Seq += ins_seq; - if (!skip) { - int j = b2i(c); - if (j >= Calls.size()) { - int was = Calls.size(); - Calls.resize(j+1); - int t; for (t=was;t<=j;++t) { - Calls[t].base=i2b(t); - } - } - if ( o == ',' || o == 'a' || o == 'c' || o == 't' || o == 'g' ) { - ++Calls[j].rev; - Calls[j].rev_q+=q; - } else { - ++Calls[j].fwd; - Calls[j].fwd_q+=q; - } - Calls[j].qual+=q; - Calls[j].mn_qual+=min(q, mq); - Calls[j].qual_ssq+=q*q; - Calls[j].mq_ssq+=mq*mq; - Calls[j].mq_sum+=mq; - Calls[j].seqs.push_back(ins_seq); - } - cur_p=end_p+len; - } - - if (*cur_p == '$') { - if (read_i->MapQ > -1) { - rds.TotReadLen+=read_i->Seq.size(); - rds.ReadBin.push_back(*read_i); - if (rds.ReadBin.size() > min(1000,Depth*2)) { - rds.TotReadLen-=rds.ReadBin.front().Seq.size(); - rds.ReadBin.pop_front(); - } - } -// printf("%d\t%s\n", read_i->MapQ, read_i->Seq.c_str()); - read_i=rds.ReadList.erase(read_i); - meanreadlen = rds.MeanReadLen(); - --read_i; - ++cur_p; - ++eor; - } - } - - if ((Depth-eor) != rds.ReadList.size()) { - warn("warning\tdepth is %d, but read list is: %d\n", Depth, (int) rds.ReadList.size()); - } - - if (*cur_p == '-' || *cur_p == '+') { - char *end_p; - int len = strtol(++cur_p, &end_p, 10); - // keep this - string idl(end_p, len); - cur_p=end_p+len; - } - - if (*cur_p) { - warn("Failed to parse pileup %s\n", _dat[4]); - exit(1); - } - - Depth=0; - for (i=0;i<5 && i < Calls.size();++i) { // total depth (exclude inserts for tot depth, otherwise they are double-counted) - Depth+=Calls[i].depth(); - } - - if (debug_xpos) { - if (Pos == debug_xpos && !strcmp(debug_xchr,Chr.data())) { - fprintf(stderr,"xpos-max-per-pos\t%f\n", maxdepthbypos/10.0); - fprintf(stderr,"xpos-mean-readlen\t%f\n", rds.MeanReadLen()); - fprintf(stderr,"xpos-depth-list\t"); - for (i=0;i= 2) { - for (i=0;i < Calls.size();++i) { // total depth (exclude inserts for tot depth, otherwise they are double-counted) - if (Calls[i].depth()>0) { - fprintf(stderr,"xpos-depth-list-%c\t",Calls[i].base); - for (j=0;j0) { - double expected=Calls[i].depth()/meanreadlen; - double all_pct=Calls[i].depth()/(double)Depth; - double p2=(Calls[i].depth()+2*all_pct*pia_len)/(double)(Depth+2*pia_len); - double total_v=0; - double diff; - double moment_den=0; - double p1; - double pdiff; - double cube_v=0; - int j; - -/* - if(Depth>100 && Calls[i].depth() < 100) { - printf("exp: %g, depth: %d, cdep: %d, p2: %g\nv=c(", expected, Depth, Calls[i].depth(), p2); - for (j=0;j 0) { - ++poscnt; - } - - p1=((depthbyposbycall[j].call[i]+all_pct*2)/((double)depthbypos[j]+2)); - pdiff=fabs(p1-p2); -/* - if (Pos == debug_xpos && !strcmp(debug_xchr,Chr.data())) { - warn("base:%c, depth:%d, dbc:%d, p1: %g, pdiff: %g, maxc: %g, all_pct: %g\n", Calls[i].base, depthbypos[j], depthbyposbycall[j].call[i], p1, pdiff, max(depthbypos[j]*pdiff*pdiff*pdiff-all_pct,0), all_pct); - } -*/ - cube_v += max(depthbypos[j]*pdiff*pdiff*pdiff-all_pct,0); - } - double shift_v = max(0, total_v-2*Calls[i].depth()); - Calls[i].diversity = max(0,1-shift_v/max(1,(pow(Calls[i].depth()-expected,2)-2*Calls[i].depth()))); - if (poscnt==1) Calls[i].diversity = 0; - - double wt4_od=pow(cube_v/((double)(Depth+2*pia_len)),1.0/3.0)/all_pct; - Calls[i].agreement = max(0,1-wt4_od); - - if (debug_xpos) { - if (Pos == debug_xpos && !strcmp(debug_xchr,Chr.data())) { - if (debug_level > 2) warn("base:%c, cube_v:%g, deno:%g\n", Calls[i].base, cube_v, ((double)(Depth+2*pia_len))); - fprintf(stderr,"xpos-agree-%c\t%g\n",Calls[i].base, Calls[i].agreement); - fprintf(stderr,"xpos-diver-%c\t%g\n",Calls[i].base, Calls[i].diversity); - } - } - -/* - if(Depth>100 && Calls[i].depth() < 100) { - printf("num %g, den %g\n", (p2*(1-p2)*(Depth+2*pia_len)), moment_den); - printf(", Agree: %g", Calls[i].agreement); - printf(", Divers: %g\n", Calls[i].diversity); - quit=1; - } -*/ - } - } -// if(quit) die("\nDIED\n"); - - TotQual=0; - for (i=0;i<5 && i < Calls.size();++i) { // total depth (exclude inserts for tot depth, otherwise they are double-counted) - TotQual+=Calls[i].qual; - } -} - -PileupSummary JunkSummary; - -inline void PileupManager::Parse(char *dat) { - Pileup.Parse(dat, Reads, UseAnnot ? &AnnotDex : NULL, AnnotType); - Visit(Pileup); -} - -void PileupManager::Visit(PileupSummary &p) { - - if (WinMax < 3) { - // no real window ... just go straight - VisitX(p, -1); - return; - } - - if (p.Base != '-' && p.Base != '@') { - if (Win.size() && (Win.back().Pos != (p.Pos - 1) )) { - if (Win.back().Pos < p.Pos && ((p.Pos - Win.back().Pos) <= (WinMax/2))) { - while (Win.back().Pos < (p.Pos - 1)) { - // visit/pop, add a placeholder - JunkSummary.Base = '-'; - JunkSummary.Pos = Win.back().Pos + 1; - Visit(JunkSummary); - } - } else { - while (Win.size() && Win[WinMax/2].Base != '@') { - // visit/pop, but don't add anything, until it's empty - JunkSummary.Base = '@'; - JunkSummary.Pos = 0; - Visit(JunkSummary); - } - } - } - } - - // initialize the window with nothing, if it's not full - while (Win.size() < WinMax) { - JunkSummary.Base = '@'; - JunkSummary.Pos = 0; - Win.push_back(JunkSummary); - } - - Win.push_back(p); - - //debug("Visit: %d\n", p.Pos); - - if (Win.size() > WinMax) // queue too big? pop - Win.pop_front(); - - int i; - int lrc=0,rrc=0; // left repeat count, right repeat count - char lrb, rrb; // left repeat base... - int vx; - - if (Win.size() < WinMax) { // small window? look at leading edge only - return; - } else { - vx = WinMax/2; // larger window? look at midpoint - } - - if (Win[vx].Base == '-' || Win[vx].Base == '@') - return; - - if (vx > 1) { // look left - lrb = Win[vx-1].Base; - for (i=vx-2; i >= 0; --i) { // increment repeat count - if (Win[i].Base == lrb) - ++lrc; - else - break; - } - } - if (vx < (Win.size()-2)) { - rrb = Win[vx+1].Base; - for (i=vx+2; i < Win.size(); ++i) { - if (Win[i].Base == rrb) - ++rrc; - else - break; - } - } - - // repeat counts are now 1-based, not 0-based - ++lrc; - ++rrc; - - // maximum repeat count and associated base - if (lrb == rrb ) { - Win[vx].RepeatCount = lrc+rrc; - Win[vx].RepeatBase = lrb; - } else if (lrc > rrc) { - Win[vx].RepeatCount = lrc; - Win[vx].RepeatBase = lrb; - } else { - Win[vx].RepeatCount = rrc; - Win[vx].RepeatBase = rrb; - } - - if (debug_xpos) { - if (Win[vx].Pos == debug_xpos && !strcmp(debug_xchr,Win[vx].Chr.data())) { - fprintf(stderr,"xpos-window\t"); - for (i=0;i dminus && Win[vx].Calls[dminus].depth() > 0) { - if (Win[vx+1].Calls.size() > dstar && Win[vx+1].Calls[dstar].depth() > 0) { - // baq adjustment works at the 'star' not at the 'indel', so adjust qual using the next locus - double adj=Win[vx+1].Calls[dstar].qual_rms()/(double)Win[vx].Calls[dminus].qual_rms(); - if (debug_xpos) { - if (Win[vx].Pos == debug_xpos && !strcmp(debug_xchr,Win[vx].Chr.data())) { - fprintf(stderr,"xpos-adj-qual\t%d to %d (%f)\n", Win[vx].Calls[dminus].qual_rms(),Win[vx+1].Calls[dstar].qual_rms(), adj); - } - } - Win[vx].Calls[dminus].qual *= adj; - Win[vx].Calls[dminus].qual_ssq *= adj; - } else { - vcall none; - if (debug_xpos) { - if (Win[vx].Pos == debug_xpos && !strcmp(debug_xchr,Win[vx].Chr.data())) { - fprintf(stderr,"xpos-skip-del-qual\t%d\n", Win[vx].Calls[dminus].depth()); - } - } - Win[vx].Calls[dminus] = none; - } - } - } - - VisitX(Win[vx], vx); -} - -void PileupManager::Finish() { - // finish out the rest of the pileup, with the existing window - int vx = WinMax/2+1; - while (vx < Win.size()) { - ///debug("Finish: %d\n", Win[vx].Pos); - VisitX(Win[vx++], vx); - } - int i; - for (i=0;iFinish(); - } -} - -void PileupManager::VisitX(PileupSummary &p, int windex) { - - WinDex=windex; - - if (UseAnnot) { - // index lookup only.... not string lookup - const std::vector * v = &(AnnotDex.lookup(p.Chr.data(), p.Pos + (AnnotType=='b' ? -1 : 0))); - if (v && v->size()) { - p.InTarget=1; - } - } - - if (no_indels) { - if (p.Calls.size() > 4) { - p.Calls.resize(4); - } - } - - int i; - for (i=0;iVisit(p); - } -} - -void VarCallVisitor::Visit(PileupSummary &p) { - //debug("VisitX: %d\n", p.Pos); - - if (debug_xpos) { - if (p.Pos != debug_xpos) - return; - if (strcmp(debug_xchr,p.Chr.data())) - return; - } - - if (pcr_annot) { - if (!p.InTarget) { - if (debug_xpos) { - fprintf(stderr,"xpos-skip-annot\t1\n"); - } - ++SkippedAnnot; - return; - } - } - - if (p.Depth < min_depth) { - if (debug_xpos) { - fprintf(stderr,"xpos-skip-depth\t%d < %d\n",p.Depth, min_depth); - fprintf(stderr,"xpos-skip-dup\t%d\n",p.SkipDupReads); - fprintf(stderr,"xpos-skip-n\t%d\n",p.SkipN); - fprintf(stderr,"xpos-skip-amp\t%d\n",p.SkipAmp); - fprintf(stderr,"xpos-skip-mapq\t%d\n",p.SkipMinMapq); - fprintf(stderr,"xpos-skip-qual\t%d\n",p.SkipMinQual); - exit(0); - } - ++SkippedDepth; - return; - } - - int ins_fwd = p.Calls.size() > 6 ? p.Calls[6].fwd : 0; - int ins_rev = p.Calls.size() > 6 ? p.Calls[6].rev : 0; - - int i; - if (p.Calls.size() > 6) - p.Calls.resize(7); // toss N's before sort - - static char regions[64] = ""; - if (pcr_annot) { - sprintf(regions, "\t%d", p.Regions); - } - - // OUTPUT CSE BEFORE REORDRED BASES! - if (cse_f) { - if (p.Calls.size() < 4) - p.Calls.resize(4); // cse needs 4 calls - - Manager->FillReference(21); - - // cse format... no need to sort or call anything - if (p.Calls[T_A].depth()||p.Calls[T_C].depth()|| p.Calls[T_G].depth()|| p.Calls[T_T].depth()) { - // silly 15 decimals to match R's default output ... better off with the C default - static char cse_buf[8192]; - #define MEANQ(base,dir) (p.Calls[base].dir?(p.Calls[base].dir##_q/(double)p.Calls[base].dir):0) - sprintf(cse_buf,"%s\t%d\t%c\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%s\t%g\t%g\t%g\t%g\t%g\t%g\t%g\t%g%s\n",p.Chr.c_str(), p.Pos, toupper(p.Base) - , p.Calls[T_A].fwd, p.Calls[T_C].fwd, p.Calls[T_G].fwd, p.Calls[T_T].fwd - , p.Calls[T_A].rev, p.Calls[T_C].rev, p.Calls[T_G].rev, p.Calls[T_T].rev - , MEANQ(T_A,fwd), MEANQ(T_C,fwd), MEANQ(T_G,fwd), MEANQ(T_T,fwd) - , MEANQ(T_A,rev), MEANQ(T_C,rev), MEANQ(T_G,rev), MEANQ(T_T,rev) - , Manager->Reference.data() - , p.Calls[T_A].diversity - , p.Calls[T_C].diversity - , p.Calls[T_G].diversity - , p.Calls[T_T].diversity - , p.Calls[T_A].agreement - , p.Calls[T_C].agreement - , p.Calls[T_G].agreement - , p.Calls[T_T].agreement - , regions - ); - fputs(cse_buf, cse_f); - // cse requires separate output for on-target (instead of another column) - if (tgt_cse_f && p.InTarget) { - fputs(cse_buf, tgt_cse_f); - } - } - } - - sort(p.Calls.begin(), p.Calls.end(), hitolocall); - - int need_out = -1; - int skipped_balance=0; - int skipped_alpha=0; - int skipped_indel=0; - int skipped_tail_hom=0; - int skipped_depth=0; - int skipped_repeat=0; - int skipped_diversity=0; - int skipped_agreement=0; - - vector final_calls; - for (i=0;i= pct_depth && qpct >= pct_qdepth && (p.Calls[i].depth() >= min_adepth)) { - if (bpct < pct_balance) { - int fwd_adj=0, rev_adj=0; - // f=b*(f+r); r=f/b-f; adj=r-(f/b-f) - if (p.Calls[i].fwd < p.Calls[i].rev) { - rev_adj = (int) p.Calls[i].rev - ( p.Calls[i].fwd/pct_balance - p.Calls[i].fwd ); - } else { - fwd_adj = (int) p.Calls[i].fwd - ( p.Calls[i].rev/pct_balance - p.Calls[i].rev ); - } - if (fwd_adj + rev_adj > 1 && bpct > 0) { - // adjust call down - p.Calls[i].qual -= (rev_adj+fwd_adj)*(p.Calls[i].qual/p.Calls[i].depth()); - p.Calls[i].mq_sum -= (rev_adj+fwd_adj)*(p.Calls[i].mq_sum/p.Calls[i].depth()); - p.Calls[i].qual_ssq -= (rev_adj+fwd_adj)*(p.Calls[i].qual_ssq/p.Calls[i].depth()); - p.Calls[i].mq_ssq -= (rev_adj+fwd_adj)*(p.Calls[i].mq_ssq/p.Calls[i].depth()); - p.Calls[i].rev -= rev_adj; - p.Calls[i].fwd -= fwd_adj; - skipped_balance+=rev_adj+fwd_adj; - - // fixed bpct - bpct = (double) min(p.Calls[i].fwd,p.Calls[i].rev)/p.Calls[i].depth(); - } else { - // it's junk anyway - } - - // fix depths after adjustment! - pct = (double) p.Calls[i].depth()/p.Depth; - qpct = (double) p.Calls[i].qual/p.TotQual; - } - } - - if (pct >= pct_depth && qpct >= pct_qdepth && (p.Calls[i].depth() >= min_adepth)) { - // balance is meaningless at low depths - if ((bpct >= pct_balance) || (p.Calls[i].depth()<4)) { - // reads come from diverse positions - if (p.Calls[i].diversity >= min_diversity) { - if (p.Calls[i].agreement >= min_agreement) { - if (p.Calls[i].base == '+' || p.Calls[i].base == '-') { - // yuk ... time to think about a possible indel call - if (p.Calls[i].depth() >= min_idepth) { - // should really pick more than 1 - // but need to allow "similar" indels to pile up - // should group into distinct bins, using some homology thing - sort(p.Calls[i].seqs.begin(), p.Calls[i].seqs.end()); - string prev, maxs; - int pcnt=0, maxc=0, j; - for (j=0;j maxc) { - maxs=prev; - maxc=pcnt; - } - prev=p.Calls[i].seqs[j]; - pcnt=1; - } - } - if (pcnt > maxc) { - maxs=prev; - maxc=pcnt; - } - if (maxc >= min_idepth && maxc >= min_adepth) { - // only calls 1 indel at a given position - if ((repeat_filter == 0) || (p.RepeatCount < repeat_filter)) { - // maybe use rms here... see if it helps - double mean_qual = p.Calls[i].qual/(double)p.Calls[i].depth(); - double err_rate = mean_qual < max_phred ? pow(10,-mean_qual/10.0) : global_error_rate; - // expected number of non-reference = error_rate*depth - double pval=(p.Depth*err_rate==0)?0:gsl_ran_poisson_pdf(p.Calls[i].depth(), p.Depth*err_rate); - double padj=total_locii ? pval*total_locii : pval; // multiple-testing adjustment - - if (alpha>=1 || padj <= alpha) { - vfinal final(p.Calls[i]); - - double mq_padj=max(total_locii*pow(10,-p.Calls[i].mq_sum/10.0),padj); // never report pval as better than the total mapping quality - if (debug_xpos) fprintf(stderr,"xpos-debug-pval\tbase:%c, err:%g, pval:%g, padj:%g, mq_padj:%g, mq_sum:%d\n", p.Calls[i].base, err_rate, pval, padj, mq_padj, p.Calls[i].mq_sum); - - if (mq_padj > 1) mq_padj=1; - - if (need_out == -1) - need_out = i; - - // printf("FINAL: depth:%d base: %s\n", (int) maxc, maxs.c_str()); - final.padj=mq_padj; - final.max_idl_cnt=maxc; - final.max_idl_seq=maxs; - final_calls.push_back(final); - } else { - skipped_alpha+=p.Calls[i].depth(); - } - // implicitly skip all the ohter indel calls at the same locus - skipped_indel+=p.Calls[i].depth()-maxc; - } else { - skipped_repeat+=p.Calls[i].depth(); - } - } else { - skipped_indel+=p.Calls[i].depth(); - } - } else { - skipped_indel+=p.Calls[i].depth(); - } - } else { - if (p.Calls[i].base == '*' && ( - ((repeat_filter > 0) && (p.RepeatCount >= repeat_filter)) || - (p.Calls[i].depth() < min_idepth) - )) { - skipped_indel+=p.Calls[i].depth(); - } else { - // subtract inserts from reference .. perhaps > 0 is correct here.... - if (p.Calls[i].is_ref && (ins_rev+ins_fwd) > max(min_idepth,min_adepth)) { - p.Calls[i].fwd-=ins_fwd; - p.Calls[i].rev-=ins_rev; - } - - double mean_qual = p.Calls[i].qual/(double)p.Calls[i].depth(); - - /* - if ( (repeat_filter > 0) && (p.RepeatCount >= repeat_filter) ) { - p.Calls[i].fwd-=p.Calls[i].tail_fwd; - p.Calls[i].rev-=p.Calls[i].tail_rev; - skipped_tail_hom+=p.Calls[i].tail_fwd+p.Calls[i].tail_rev; - } - */ - if (p.Calls[i].depth() >= min_adepth && p.Calls[i].depth() > 0) { - double err_rate = mean_qual < vse_max_phred[b2i(p.Base)][b2i(p.Calls[i].base)] ? pow(10,-mean_qual/10.0) : vse_rate[b2i(p.Base)][b2i(p.Calls[i].base)]; - // expected number of non-reference bases at this position is error_rate*depth - double pval=(p.Depth*err_rate==0)?0:gsl_ran_poisson_pdf(p.Calls[i].depth(), p.Depth*err_rate); - double padj=total_locii ? pval*total_locii : pval; // multiple-testing adjustment - - if (alpha>=1 || padj <= alpha) { - double mq_padj=max(total_locii*pow(10,-p.Calls[i].mq_sum/10.0),padj); // never report as better than the mapping quality - - if (mq_padj > 1) mq_padj=1; - - if (debug_xpos) fprintf(stderr,"xpos-debug-pval\tbase:%c, err:%g, pval:%g, padj:%g, mq_padj:%g, mq_sum:%d\n", p.Calls[i].base, err_rate, pval, padj, mq_padj, p.Calls[i].mq_sum); - - if (!p.Calls[i].is_ref || debug_xpos || output_ref) { - if (need_out == -1) - need_out = i; - } - vfinal final(p.Calls[i]); - final.padj=mq_padj; - final_calls.push_back(final); - } else { - skipped_alpha+=p.Calls[i].depth(); - } - } - } - } - } else { - if (debug_xpos) { - warn("xpos-skipped-agree-%c\t%g\n", p.Calls[i].base, p.Calls[i].agreement); - } - skipped_agreement+=p.Calls[i].depth(); - } - } else { - skipped_diversity+=p.Calls[i].depth(); - } - } else { - skipped_balance+=p.Calls[i].depth(); - } - } else { - // depth is too low now.... technically you can just add all the rest of the calls to skipped_depth without checking - skipped_depth+=p.Calls[i].depth(); - } - } - - ++Locii; - - if (need_out>=0||debug_xpos) { - - if (final_calls.size() > 1) { -// printf("HERE1 %c/%c\n", final_calls[0].pcall->base, final_calls[1].pcall->base); - if(final_calls[1].pcall->is_ref) { - vfinal tmp=final_calls[1]; - final_calls[1]=final_calls[0]; - final_calls[0]=tmp; -// printf("HERE2 %c/%c\n", final_calls[0].pcall->base, final_calls[1].pcall->base); - } - } - -// printf("allele_count: %d\n", (int) final_calls.size()); - - - int total_call_depth=0; - int i; - for (i=0;idepth(); - } - double pct_allele = 0; - if (need_out >=0) { - // more than 1 call at this position = Het - if (final_calls.size() > 1) { - if (final_calls[0].pcall->is_ref) { - pct_allele = 100.0 * final_calls[1].pcall->depth() / (double) total_call_depth; - } else { - // no reference seen... but still het? - pct_allele = 100.0 * final_calls[0].pcall->depth() / (double) total_call_depth; - } - ++Hets; - } else { - pct_allele = 100.0 * final_calls[0].pcall->depth() / (double) total_call_depth; - ++Homs; - } - } - - /// INTERNAL VAR FILE - if (var_f) { - int i; - string pil; - for (i=0;ibase,f.max_idl_seq.c_str(),f.max_idl_cnt,f.pcall->qual/f.pcall->depth(),f.padj, f.pcall->diversity, f.pcall->agreement); - } else { - pil += string_format("\t%c:%d,%d,%.1e,%.2g,%.2g",f.pcall->base,f.pcall->depth(),f.pcall->qual/f.pcall->depth(),f.padj, f.pcall->diversity, f.pcall->agreement); - } - } - fprintf(var_f,"%s\t%d\t%c\t%d\t%d\t%2.2f%s%s\n",p.Chr.c_str(), p.Pos, p.Base, p.Depth, skipped_diversity+skipped_agreement+skipped_alpha+skipped_depth+skipped_balance+p.SkipAmp+p.SkipN+p.SkipDupReads+p.SkipMinMapq+p.SkipMinQual, pct_allele, Manager->UseAnnot==1?(p.InTarget ? "\t1" : "\t0"):"", pil.c_str()); - - if (tgt_var_f) { - if (p.InTarget) { - fprintf(tgt_var_f,"%s\t%d\t%c\t%d\t%d\t%2.2f%s\n",p.Chr.c_str(), p.Pos, p.Base, p.Depth, skipped_diversity+skipped_agreement+skipped_alpha+skipped_depth+skipped_balance+p.SkipAmp+p.SkipN+p.SkipDupReads+p.SkipMinMapq+p.SkipMinQual, pct_allele, pil.c_str()); - } - } - } - - if (vcf_f) { - for (i=0;i0?min(40,10*(-log10(f.padj))):40; - - if (f.is_indel()) { - string base; - string alt; - if (f.pcall->base =='-') { - base = p.Base + f.max_idl_seq; - alt = p.Base; - } else { - base = p.Base; - alt = p.Base + f.max_idl_seq; - } - double freq_allele = f.max_idl_cnt / (double) p.Depth; - fprintf(vcf_f,"%s\t%d\t.\t%s\t%s\t%2d\tPASS\tMQ=%d;BQ=%d;DP=%d;AF=%2.2f\n", - p.Chr.c_str(), p.Pos, base.c_str(), alt.c_str(), qual, - (int) f.pcall->mq_rms(), - (int) f.pcall->qual_rms(), - total_call_depth, - freq_allele); - } else { - char alt = f.pcall->base; - if (f.pcall->is_ref) - alt = '.'; - double freq_allele = f.pcall->depth() / (double) p.Depth; - fprintf(vcf_f,"%s\t%d\t.\t%c\t%c\t%d\tPASS\tMQ=%d;BQ=%d;DP=%d;AF=%2.2f\n", - p.Chr.c_str(), p.Pos, p.Base, alt, qual, - (int) f.pcall->mq_rms(), - (int) f.pcall->qual_rms(), - total_call_depth, - freq_allele); - } - } - } - - if (eav_f) { -// printf(eav_f,"chr\tpos\tref\tdepth\tnum_states\ttop_consensus\ttop_freq\tvar_base\tvar_depth\tvar_qual\tvar_strands\tforward_strands\treverse_strands\n"); - string top_cons, var_base, var_depth, var_qual, var_strands, forward, reverse, diversity, agreement; - - float padj=final_calls[0].padj; - if (final_calls[0].pcall->is_ref && final_calls.size() > 1) { - padj=final_calls[1].padj; - } - for (i=0;i 0) top_cons += "/"; - top_cons += f.pcall->base; - } - if (i > 0) var_base += "/"; - var_base += f.pcall->base; - if (f.is_indel()) { - if (i < 2) { - top_cons += f.max_idl_seq; - } - var_base += f.max_idl_seq; - } - if (i > 0) var_depth+= ";"; - var_depth+= string_format("%d",f.pcall->depth()); - if (i > 0) var_qual+= ";"; - var_qual+= string_format("%d",f.pcall->qual_rms()); - if (i > 0) var_strands+= ";"; - var_strands+= string_format("%d",(f.pcall->fwd>0)+(f.pcall->rev>0)); - if (i > 0) forward += ";"; - forward+= string_format("%d",f.pcall->fwd); - if (i > 0) reverse += ";"; - reverse+= string_format("%d",f.pcall->rev); - if (i > 0) agreement += ";"; - agreement+= string_format("%g",f.pcall->agreement); - if (i > 0) diversity += ";"; - diversity+= string_format("%g",f.pcall->diversity); - } - fprintf(eav_f,"%s\t%d\t%c\t%d\t%d\t%s\t%2.2f\t%s\t%s\t%s\t%s\t%s\t%s\t%.1e\t%s\t%s%s\n",p.Chr.c_str(), p.Pos, p.Base, p.Depth, (int) final_calls.size(),top_cons.c_str(), pct_allele, var_base.c_str(), var_depth.c_str(), var_qual.c_str(), var_strands.c_str(), forward.c_str(), reverse.c_str(), padj, diversity.c_str(), agreement.c_str(), Manager->UseAnnot==1?(p.InTarget?"\t1":"\t0"):regions); - } - - if (debug_xpos) { - fprintf(stderr,"xpos-skip-dup\t%d\n",p.SkipDupReads); - fprintf(stderr,"xpos-skip-mapq\t%d\n",p.SkipMinMapq); - fprintf(stderr,"xpos-skip-qual\t%d\n",p.SkipMinQual); - fprintf(stderr,"xpos-skip-bal\t%d\n",skipped_balance); - fprintf(stderr,"xpos-skip-depth\t%d\n",skipped_depth); - fprintf(stderr,"xpos-skip-indel\t%d\n",skipped_indel); - fprintf(stderr,"xpos-skip-repeat\t%d\n",skipped_repeat); - fprintf(stderr,"xpos-skip-diversity\t%d\n",skipped_diversity); - fprintf(stderr,"xpos-skip-agreement\t%d\n",skipped_agreement); - fprintf(stderr,"xpos-skip-alpha\t%d\n",skipped_alpha); - if (repeat_filter > 0) { - fprintf(stderr,"repeat-count\t%d\n",p.RepeatCount); - fprintf(stderr,"repeat-filter\t%d\n",repeat_filter); - fprintf(stderr,"repeat-base\t%c\n",p.RepeatBase); - } - exit(0); - } - } -} - -void PileupManager::FillReference(int refSize) { - int flank=(refSize-1)/2; - Reference.resize(refSize); - - // if you're in the middle of a window - if (WinDex==flank && Win.size()==refSize) { - bool needfai=0; - int i; - for (i=WinDex-flank;i0) { - vector d=split(l.s, '\t'); - if (d.size() >= 7) { - AnnotType = (*d[5]=='+' || *d[5] == '-') ? 'b' : AnnotType; - - if (!AnnotType) - AnnotType = (*d[6]=='+' || *d[6] == '-') ? 'g' : AnnotType; - } - break; - } - warn("detect-annot\t%s\n", AnnotType == 'g' ? "gtf" : AnnotType == 'b' ? "bed" : "unknown"); - } - - fclose(f); - - if (!AnnotDex.read(path)) { - // try building if we know the type - if (AnnotType) { - // void build(const char *path, const char *sep, int nchr, int nbeg, int nend, int skip_i, char skip_c, int sub_e); - AnnotDex.build(path, "\t", 0, 1, 2, 0, '#', AnnotType=='b' ? 1 : 0); - } - die("Either %s.tidx must be a valid tidx indexed file, or %s must be a BED or GTF file\n", path, path); - } - - UseAnnot=1; -} - -void VarStatVisitor::Visit(PileupSummary &p) { - tot_locii += 1; - -// if (tot_locii % 10000 == 0) { -// fprintf(stderr,"\r%.4f ", 100*(float)tot_locii/777385781.0); -// } - - if (p.Depth < minsampdepth) - return; - - // insert and deletions have their own, separate noise levels - - int ins_depth = p.Calls.size() > 6 ? p.Calls[6].depth() : 0; - int ins_qual = p.Calls.size() > 6 ? p.Calls[6].qual : 0; - double ins_noise = 0; - double ins_qnoise = 0; - if (p.Calls.size() > 1 && p.Depth > 0 && ins_depth > 0) { - ins_noise = (double) ins_depth/p.Depth; - ins_qnoise = (double) ins_qual/p.TotQual; - } - - int del_depth = p.Calls.size() > 5 ? p.Calls[5].depth() : 0; - int del_qual = p.Calls.size() > 5 ? p.Calls[5].qual : 0; - double del_noise = 0; - double del_qnoise = 0; - if (p.Calls.size() > 1 && p.Depth > 0 && del_depth > 0) { - del_noise = (double) del_depth/p.Depth; - del_qnoise = (double) del_qual/p.TotQual; - } - - // snp's are "noise" ... since they are supposedly rare. - int i; - if (p.Calls.size() > 5) - p.Calls.resize(5); // toss N's and inserts before sort - - sort(p.Calls.begin(), p.Calls.end(), hitolocall); - - double noise; - double qnoise; - if (p.Calls.size() > 1) { - // assume non-reference is noise - noise = (double) p.Calls[1].depth()/p.Depth; - qnoise = (double) p.Calls[1].qual/p.TotQual; - if (noise > .25) { - // unless maybe that was a het or something.... - if (p.Calls.size() > 2) { - // but 3rd allele is always noise - noise = (double) p.Calls[2].depth()/p.Depth; - qnoise = (double) p.Calls[2].qual/p.TotQual; - } else { - // this is weird... but ok - noise = 0; - qnoise = 0; - } - } - } else { - noise = qnoise = 0.0; - } - - double mnqual = (double)p.TotQual/p.Depth; - - char pbase = p.Calls.size() > 1 ? p.Calls[1].base : '.'; - - if (noise_f) { - fprintf(noise_f,"%d\t%c\t%c\t%f\t%f\t%f\n", p.Depth, p.Base, pbase, noise, qnoise, mnqual); -/* - if (ins_noise > 0) { - fprintf(noise_f,"%d\t%c\t%f\t%f\n", p.Depth, '+', ins_noise, ins_qnoise, mnqual); - } - if (del_noise > 0) { - fprintf(noise_f,"%d\t%c\t%f\t%f\n", p.Depth, '-', del_noise, del_qnoise, mnqual); - } -*/ - } - - tot_depth += p.Depth; - num_reads += p.NumReads; - stats.push_back(Noise(p.Base, p.Calls[1].base, p.Depth, noise, qnoise, mnqual)); - ins_stats.push_back(Noise(p.Base, p.Calls[1].base, p.Depth, ins_noise, ins_qnoise, mnqual)); - del_stats.push_back(Noise(p.Base, p.Calls[1].base, p.Depth, del_noise, del_qnoise, mnqual)); -} - - -void usage(FILE *f) { - fprintf(f, -"Usage: varcall <-s|-v> <-f REF> [options] bam1 [bam2...]\n" -"Version: %s (BETA)\n" -"\n" -"Either outputs summry stats for the list of files, or performs variant calling\n" -"\n" -"Options (later options override earlier):\n" -"\n" -"-s Calculate statistics\n" -"-v|version Calculate variants bases on supplied parameters (see -S)\n" -"-f Reference fasta (required if using bams, ignored otherwise)\n" -"-m Min locii depth (1)\n" -"-a Min allele depth (2)\n" -"-p Min allele pct by quality (0)\n" -"-q Min qual (3)\n" -"-Q Min mapping quality (0)\n" -"-b Min pct balance (strand/total) (0)\n" -"-D FLOAT Max duplicate read fraction (depth/length per position) (1)\n" -"-d FLOAT Minimum diversity (CV from optimal depth) (0.25)\n" -"-G FLOAT Minimum agreement (Weighted CV of positional variation) (0.25)\n" -"-0 Zero out all filters, set e-value filter to 1, report everything\n" -"-B If running from a BAM, turn off BAQ correction (false)\n" -"-R Homopolymer repeat indel filtering (8)\n" -"-e FLOAT Alpha filter to use, requires -l or -S (.05)\n" -"-g FLOAT Global minimum error rate (default: assume phred is ok)\n" -"-l INT Number of locii in total pileup used for bonferroni (1 mil)\n" -"-x CHR:POS Output this pos only, then quit\n" -"-S FILE Read in statistics and params from a previous run with -s (do this!)\n" -"-A ANNOT Calculate in-target stats using the annotation file (requires -o)\n" -"-o PREFIX Output prefix (works with -s or -v)\n" -"-F files List of file types to output (var, varsum, eav, vcf)\n" -"\n" -"Extended Options\n" -"\n" -"--pcr-annot BED Only include reads adhering to the expected amplicons\n" -"--stranded TYPE Can be FR (the default), FF, FR. Used with pcr-annot\n" -"--diversity|d FLOAT Alias for -d\n" -"--agreement|G FLOAT Alias for -G\n" -"--no-indels Ignore all indels\n" -"\n" -"Input files\n" -"\n" -"Files must be sorted bam files with bai index files available. Alternatively,\n" -"a single pileup file can be supplied.\n" -"\n" -"Output files\n" -"\n" -"Varcalls go to stdout. Stats go to stdout, or stderr if varcalling too\n" -"\n" -"If an output prefix is used, files are created as follows:\n" -" PREFIX.var Variant calls in tab delimited 'varcall' format\n" -" PREFIX.eav Variant calls in tab delimited 'ea-var' format\n" -" PREFIX.cse Variant calls in tab delimited 'varprowl' format\n" -" PREFIX.vcf Variant calls, in vcf format\n" -" PREFIX.varsum Summary of variant calls\n" -" PREFIX.tgt.var On-target version of .var\n" -" PREFIX.tgt.cse On-target version of .cse\n" -" PREFIX.tgt.varsum On-target version of .varsum\n" -"\n" -"Stats Output:\n" -"\n" -"Contains mean, median, quartile information for depth, base quality, read len,\n" -"mapping quality, indel levels. Also estimates parameters suitable for\n" -"variant calls, and can be passed directly to this program for variant calls\n" -"\n" -"If an output prefix is used, files are created as follows:\n" -"\n" -" PREFIX.stats Stats output\n" -" PREFIX.noise Non-reference, non-homozygous allele summary\n" -" PREFIX.xnoise Like noise, but with context-specific rates\n" -"\n" -"Filtering Details:\n" -"\n" - ,VERSION); -} - -std::string string_format(const std::string &fmt, ...) { - int n, size=100; - std::string str; - va_list ap; - while (1) { - str.resize(size); - va_start(ap, fmt); - int n = vsnprintf((char *)str.c_str(), size, fmt.c_str(), ap); - va_end(ap); - if (n > -1 && n < size) { - str.resize(n); - return str; - } - if (n > -1) - size=n+1; - else - size*=2; - } -} - -void to_upper(const std::string str) { - static int i; - static char c; - for ( i=0;i= 'a' && c <= 'z') { - ((char *)(void *)str.data())[i]=c-32; - } - } -} - -// returns quantile depth -double quantile_depth(const std::vector &vec, double p) { - int l = vec.size(); - assert(l > 0); - double t = ((double)l-1)*p; - int it = (int) t; - int v=vec[it].depth; - if (t > (double)it) { - return (v + (t-it) * (vec[it+1].depth - v)); - } else { - return v; - } -} - -double quantile(const std::vector &vec, double p) { - int l = vec.size(); - double t = ((double)l-1)*p; - int it = (int) t; - int v=vec[it]; - if (t > (double)it) { - return (v + (t-it) * (vec[it+1] - v)); - } else { - return v; - } -} - -double quantile(const std::vector &vec, double p) { - int l = vec.size(); - double t = ((double)l-1)*p; - int it = (int) t; - double v=vec[it]; - if (t > (double)it) { - return (v + p * (vec[it+1] - v)); - } else { - return v; - } -} - -std::vector split(char* str,const char* delim) -{ - char *sav; - char* token = strtok_r(str,delim, &sav); - std::vector result; - while(token != NULL) - { - result.push_back(token); - token = strtok_r(NULL,delim, &sav); - } - return result; -} - -std::vector split(char* str, char delim) -{ - char*p=strchr(str,delim); - std::vector result; - while(p != NULL) - { - *p='\0'; - result.push_back(str); - str=p+1; - p=strchr(str,delim); - } - if (*str) - result.push_back(str); - return result; -} - -int split(char **buf, char* str, char delim) -{ - char **bb=buf; - char *p=strchr(str,delim); - std::vector result; - while(p != NULL) - { - *p='\0'; - *bb=str; - ++bb; - str=p+1; - p=strchr(str,delim); - } - if (*str) { - *bb=str; - bb++; - } - *bb=NULL; - return bb-buf; -} - -int rand_round(double x) { - return floor(x)+((rand()>(x-int(x))) ? 1 : 0); -//warn("rr:%f=%d\n",x); -} - - -void check_ref_fai(const char * ref) { - if (!ref) { - warn("Need a reference file (-f) parameter, try -h for help\n"); - exit(1); - } - - if (!hasdata(string(ref)+".fai")) { - int ret=system(string_format("samtools faidx '%s'", ref).c_str()); - if (ret) { - warn("Need a %s.fai file, run samtools faidx\n", ref); - exit(1); - } - } -} - -void Faidx::Load(const char *path) { - fa_f = openordie(path, "r"); - FILE *fp = openordie(string_format("%s.fai", path).c_str(), "r"); - - char *buf = (char*)calloc(0x10000, 1); - char *p; - while (!feof(fp) && fgets(buf, 0x10000, fp)) { - for (p = buf; *p && isgraph(*p); ++p); - *p = 0; ++p; - Faient e; - sscanf(p, "%d%lld%d%d", &e.len, &e.offset, &e.line_blen, &e.line_len); - string chr = buf; - faimap[chr]=e; - } - free(buf); -} - -bool Faidx::Fetch(char *buf, const Faient *ent, int pos_from, int pos_to) { - int len = (pos_to-pos_from+1); - - if (fseek(fa_f, ent->offset + pos_from / ent->line_blen * ent->line_len + pos_from % ent->line_blen, SEEK_SET) == -1) { - return false; - } - int l = 0; - char c; - while (((c=fgetc(fa_f))!= EOF) && (l < len)) { - if (isgraph(c)) buf[l++] = c; - } - return l==len; -} - - -PileupSubscriber::PileupSubscriber(PileupManager &man) { - Manager = NULL; - SetManager(man); -}; - -void PileupSubscriber::SetManager(PileupManager &man) { - assert(!Manager); - Manager = &man; - man.Kids.push_back(this); -}; - - - -void output_stats(VarStatVisitor &vstat) { - stat_out("version\tvarcall-%s\n", VERSION); - stat_out("min depth\t%d\n", minsampdepth); - stat_out("alpha\t%f\n", alpha); - - if (vstat.stats.size()) { - // sort by depth descending - sort(vstat.stats.begin(), vstat.stats.end(), noisebydepth); - - // flip 3 and 1 because sorted in descending order for sampling (above) - double depth_q3=quantile_depth(vstat.stats, .25); - double depth_q2=quantile_depth(vstat.stats, .50); - double depth_q1=quantile_depth(vstat.stats, .75); - double depth_qx=quantile_depth(vstat.stats, .95); - - // number of locii to compute error rate - int ncnt=min(100000,vstat.stats.size()); - - int i; - double nsum=0, nssq=0, dsum=0, dmin=vstat.stats[0].depth, qnsum=0, qnssq=0, qualsum=0; - - double ins_nsum=0, ins_nssq=0, del_nsum=0, del_nssq=0; - - double qvsum[T_CNT][T_CNT], qvssq[T_CNT][T_CNT]; int qvcnt[T_CNT][T_CNT]; - meminit(qvsum); - meminit(qvssq); - meminit(qvcnt); - - for (i=0;i= noise_mean ) { - stat_out("error\tpoor quality estimates\n"); - } - - stat_out("noise depth mean\t%.4f\n", dsum/ncnt); - stat_out("noise depth min\t%.4f\n", dmin); - stat_out("noise cnt\t%d\n", ncnt); - - stat_out("depth q1\t%.4f\n", depth_q1); - stat_out("depth median\t%.4f\n", depth_q2); - stat_out("depth q3\t%.4f\n", depth_q3); - - dsum=0; - for (i=0;i= min_depth) { - ++locii_gtmin; - } - } - stat_out("locii >= min depth\t%d\n", locii_gtmin); - stat_out("locii\t%d\n", vstat.tot_locii); - - double stdevfrommean=-qnorm((alpha/locii_gtmin)/2); - stat_out("qnorm adj\t%f\n", stdevfrommean); - - - pct_qdepth=qnoise_mean+qnoise_dev*stdevfrommean; - stat_out("min pct qual\t%.4f\n", 100*pct_qdepth); - - meminit(vse_rate); - - // variation-specific error rates - int j; - for (i=0;i 20)) { - double qn_mean =qvsum[i][j]/qvcnt[i][j]; - double qn_dev = stdev(qvcnt[i][j], qvsum[i][j], qvssq[i][j]); - stat_out("vnoise mean %c:%c\t%.6f\n", i2b(i), i2b(j), qn_mean); - stat_out("vnoise dev %c:%c\t%.6f\n", i2b(i), i2b(j), qn_dev); - vse_rate[i][j]=qn_mean+qn_dev; // vse rate - } else { - vse_rate[i][j]=noise_mean+noise_dev; // global rate - } - } - } - - - // now set params... as if you just read them in - // this should mirror "read stats" - min_depth = minsampdepth; - global_error_rate = noise_mean+noise_dev; - total_locii = locii_gtmin; - } -} - - diff --git a/clipper/xjoin b/clipper/xjoin deleted file mode 100644 index c4117a0..0000000 --- a/clipper/xjoin +++ /dev/null @@ -1,546 +0,0 @@ -#!/usr/bin/perl - -use strict; -use File::Temp; -use Getopt::Long; - -Getopt::Long::Configure qw(pass_through no_ignore_case); - -$SIG{INT} = \&sigint; -$SIG{TERM} = \&sigterm; - -my @argv = @ARGV; -# key1, key2, delimiter, keep -my ($q, $k1, $k2) = ('', 1, 1); -my ($d, $fp, $overwrite, $keep, $presort, $make, $n, $header, $prefix, $multi, $dup, $debug, $uniq); -my ($hf1, $hf2); -my $kalt; - -# these apply to the whole shebang -Getopt::Long::Configure qw(permute); -my @PERMUTE_OPTIONS = ("x"=>\$multi, "debug|D"=>\$debug, "K"=>\$keep, "x"=>\$multi, "m"=>\$make, "o"=>\$overwrite); -GetOptions(@PERMUTE_OPTIONS) || die usage(); - -# these apply to a file -Getopt::Long::Configure qw(require_order); -my @ORDERED_OPTIONS = ("k=i"=>\$kalt, "1=i"=>\$k1, "2=i"=>\$k2, "q=s"=>\$q, "d=s"=>\$d, "f"=>\$fp, "s:i"=>\$presort, "p"=>\$prefix, "n"=>\$n, "h:i"=>\$header, "u:i"=>\$uniq, "r=i"=>\$dup); - -GetOptions(@ORDERED_OPTIONS) || die usage(); -my $op = shift @ARGV; -$op=~s/^://; - -Getopt::Long::Configure qw(no_pass_through); -GetOptions(@ORDERED_OPTIONS) || die usage(); -my $f1 = shift @ARGV; -my $f2 = shift @ARGV; - -# remaining options, arguments are stored! -my @fx = @ARGV; - -$k1=$k2=$kalt if ($kalt); - -# if file number is not set, then operate on both input files -$header = 3 if defined($header) && $header==0; -$uniq = 3 if defined($uniq) && $uniq==0; -$header = 0 if defined($header) && $header==-1; - -# invert the option -# defined? sort the other, defined and zero? sort both (3-0 = 3) -my $dosort = 3-(0+(defined $presort ? ($presort==0?3:0) : 0)); - -my $of1=$f1; -my $of2=$f2; - -die "Option -k doesn't make sense with -s or multifile" if (!$dosort && !@fx && !$multi) && $keep; -die usage() unless $op =~ /^inn?e?r?|exc?l?u?d?e?|xle?f?t?|out?e?r?$|xri?g?h?t?|lef?t?|rig?h?t?/; -die usage() if !$f2; -$op = substr($op, 0, 2); - -my @tmps; -my $tmerg; -if (@fx) { - $tmerg = "$f2.tmerg"; - open(OUT, ">$tmerg") || die "Can't create $f2.tmerg\n"; -} else { - *OUT=*STDOUT; -} - -if ($multi && $f1 =~ /\.tmerg$/) { - push @tmps, $f1; -} - -my $sortop; -$sortop .= "-t '$d'" if $d; -$sortop .= '-n' if $n; - -my ($f1hashead, $f2hashead); - -($f1, $hf1, $f1hashead) = preproc_file($f1, $k1, $header == 3 || $header == 1, $dosort == 3 || $dosort == 1); -($f2, $hf2, $f2hashead) = preproc_file($f2, $k2, $header == 3 || $header == 2, $dosort == 3 || $dosort == 2); - -warn "# f1:$f1, f2: $f2\n" if $debug; - -$d = "\t" if !defined $d; - -open(I1, $f1) || die "$f1: $!\n"; -open(I2, $f2) || die "$f2: $!\n"; - -my (@B1, @B2, $l); - -# buffer in -push @B1, scalar ; -push @B2, scalar ; - -# create "undef" rows for outer/left joins -# left side is an empty array, with room for the key field -my $l=$B1[0]; chomp $l; -my @udt1 = split(/$d/, $l); -grep {$_=""} @udt1; - -# right side is all delimiter -$l=$B2[0]; chomp $l; -my @t = split(/$d/, $l); -splice @t, $k2, 1; # don't replicate key field -my $ud2 = $d x ((scalar @t) - 1); # undef line 2 - -if ($f1hashead) { - # when you sort, the header gets stripped - warn "# discard row 1 file 1\n" if $debug; - $hf1=$B1[0]; chomp $hf1; - @B1=(); -} -if ($f2hashead) { - # when you sort, the header gets stripped - $hf2=$B2[0]; chomp $hf2; - warn "# discard row 1 file 2\n" if $debug; - @B2=(); -} - -if ($debug) { - my $nm = $ud2 =~ s/$d/$d/g; - warn "# UD2: --$nm delims--\n"; -} - -$k1 -= 1; -$k2 -= 1; - -my $outhead = 1; -$outhead=0 if $op eq 'ex'; -$outhead=1 if $tmerg; - -if ($outhead && $header && ($hf1 || $hf2)) { - # header line handline - - # header on one side? mock up the other - if ($header==1) { - $hf2=$ud2; - } elsif ($header == 2) { - my $ud1 = join "\t", @udt1; - $hf1=$ud1; - } - - # pull out key field from header when pasting - if ($op !~ /^xl|xr|ex$/) { - my @t = split(/$d/, $hf2); - splice @t, $k2, 1; - $hf2 = join $d, @t; - } - - if ($prefix) { - # paste only - if ($op =~ /^ex|xr|xl/) { - die "Option -p makes no sense for 'ex', 'xr' or 'xl'" . ($op eq 'ex' ? ", maybe you mean -f" : "") . "\n"; - } - - my $p1 = $f1; - my $p2 = $f2; - - # remove path and file extension - $p1 =~ s/.*\///; - $p2 =~ s/.*\///; - $p1 =~ s/\..*$//; - $p2 =~ s/\..*$//; - - if (!$multi) { - my $cnt=0; - if ($op !~ /^ex|xr|xl/) { - $hf1 = join $d, map {s/^/$p1\// if $cnt++ != $k1; $_;} split(/$d/, $hf1); - } - } - if ($op !~ /^ex|xr|xl/) { - $hf2 = join $d, map {s/^/$p2\//; $_;} split(/$d/, $hf2); - } - } - - # exclusive? no header for other file - $hf2="" if ($op =~ /^xl$/); - $hf1="" if ($op =~ /^xr|ex$/); - - # tab if needed - $hf2="\t" . $hf2 if $hf2&&$hf1; - - my $h = "$hf1$hf2\n"; - if ($fp) { - $h="$d$h"; - } - print OUT $h; -} - -if ($fp && !($op eq 'ex')) { - die "Option -f only makes sense with ex\n"; -} - -my ($l1, $l2, $v1, $v2, @t, $cnt); -my ($pv1, $pv2, $pl1, $pl2); # previous values -my ($fp1); # file prefix 1 - -while(1) { - ++$cnt; - if (! defined $l1) { - $l1 = @B1 ? shift @B1 : ; - - if ($multi && $fp && defined $l1) { - $l1 =~ s/^([^$d]+)$d//; - $fp1=$1; - } else { - $fp1=$f1; - } - - # left join or inner... stop if run out of left file - last if ! defined $l1 && ( $op eq 'in' || $op eq 'xl' || $op eq 'le' ); - - if (defined $l1) { - chomp $l1; - # remove quote chars... this is DUMB... use quoted delim parser Regex::Common - @t = split(/$d/, $l1); - if ($q) { - grep s/^$q(.*)$q$/$1/, @t; - } - # key field for file 1 - $v1 = $t[$k1]; - } else { - $v1 = undef; - } - } - if (! defined $l2) { - # inner join or right join... stop if run out of right file - $l2 = @B2 ? shift @B2 : ; - last if ! defined $l2 && ( $op eq 'in' || $op eq 'xr' || $op eq 'ri' ); - if (defined $l2) { - chomp $l2; - # remove quote chars... this is DUMB... use quoted delim parser Regex::Common - @t = split(/$d/, $l2); - if ($q) { - grep s/^$q(.*)$q$/$1/, @t; - } - # key field for file 2 - $v2 = $t[$k2]; - if ($op !~ /^ex|xr|xl/) { - splice @t, $k2, 1; # don't replicate key field - $l2 = join $d, @t; - } - } else { - $v2 = undef; - } - } - - # both empty? done. - last if ! defined $l2 && ! defined $l1; - - # numeric sort? - my $c = $n ? ($v1 <=> $v2) : ($v1 cmp $v2); - - # undef is always "less than" - $c = 1 if ! defined $l1 && defined $l2; - $c = -1 if ! defined $l2 && defined $l1; - - # debug process - warn "# $v1<=>$v2 : $c\n" if $debug; - - # comparison was equal - if ($c == 0) { - if ($op eq 'in' || $op eq 'ou' || $op eq 'le' || $op eq 'ri') { - # output the rows - print OUT $l1, "\t", $l2, "\n"; - } - $pl1=$l1; - $pv1=$v1; - $pl2=$l2; - $pv2=$v2; - undef $l1 unless $dup == 2; # 1st can contain dups - undef $l2 unless $dup == 1; # 2nd can contain dups - next; - } - - if ($c > 0) { # v1 > v2 - if ($pv1 eq $v2) { - if ($uniq==2||$uniq==3) { - # skip dup row always - undef $l2; - next; - } else { - if ($op eq 'ou' || $op eq 'le' || $op eq 'ri') { - print OUT $pl1, "\t", $l2, "\n"; - undef $l2; - next; - } - } - } - - if (($uniq==2||$uniq==3) && ($pv2 eq $v2)) { - # no dups in file 2 - } else { - if ($op eq 'ou' || $op eq 'ri') { - $udt1[$k1]=$v2; - my $ud1 = join "\t", @udt1; - print OUT $ud1, "\t", $l2, "\n"; - } - if ($op eq 'ex' || $op eq 'xr') { - print OUT ($fp ? "$f2\t" : '') . $l2 . "\n" if defined $l2; - } - } - $pl2=$l2; - $pv2=$v2; - undef $l2; # read f2 next - } - if ($c < 0) { # v1 < v2 - # prev would have matched - if ($pv2 eq $v1) { - if ($uniq==1||$uniq==3) { - # skip dup row always - undef $l1; - next; - } else { - if ($op eq 'ou' || $op eq 'le' || $op eq 'ri') { - # print pasted dup row - print OUT $l1, "\t", $pl2, "\n"; - undef $l1; - next; - } - } - } - - if (($uniq==1||$uniq==1) && ($pv1 eq $v1)) { - # no dups in file 1 - } else { - if ($op eq 'ou' || $op eq 'le') { - print OUT $l1, "\t", $ud2, "\n"; - } - if ($op eq 'ex' || $op eq 'xl') { - print OUT ($fp ? "$fp1\t" : '') . $l1 . "\n" if defined $l1; - } - } - $pl1=$l1; - $pv1=$v1; - undef $l1; # read f2 next - } -} - -if (@fx) { - @argv = grep !/^$of1$/, @argv; - @argv = grep !/^$of2$/, @argv; - - - @ARGV = @argv; - - my $pk1=$k1+1; - - $k1=1; - $presort=undef; - - # simulate the options processing WITHOUT those files - Getopt::Long::Configure qw(pass_through); - GetOptions(@PERMUTE_OPTIONS); - GetOptions(@ORDERED_OPTIONS); - shift @ARGV; # strip op - GetOptions(@ORDERED_OPTIONS); - - my $of3 = shift @ARGV; - - - GetOptions(@ORDERED_OPTIONS); - - my @addop; - if ($k1 == $pk1 & $presort eq undef) { - push @addop, "-s=1"; - } - - if ($of3 =~ /^:(.*)/) { - my $nop=$1; - $of3 = shift @ARGV; - for (my $i=0;$i<@argv;++$i) { - # remove :nop - if ($argv[$i] eq ":$nop") { - splice @argv, $i, 1; - last; - } - } - for (my $i=0;$i<@argv;++$i) { - if ($argv[$i] eq $op) { - splice @argv, $i, 1, $nop; - last; - } - } - } - - unshift @argv, @addop; - - my $nox=0; - for (my $i=0;$i<@argv;++$i) { - if ($argv[$i] eq $of3) { - splice @argv, $i, 1, ($tmerg, $of3); - last; - } - if ($argv[$i] eq "-x") { - $nox=1; - } - } - - unshift @argv, "-x" unless $nox; - - warn "# + $0 @argv\n" if $debug; - cleanup(); - exec($0, @argv); -} - -sub sigint { - $SIG{INT} = undef; - cleanup(); - kill 2, $$; -} - -sub sigterm { - $SIG{TERM} = undef; - cleanup(); - kill 15, $$; -} - -END { - cleanup(); -} - -sub cleanup { - if (!$keep) { - warn "# cleanup @tmps\n" if $debug; - for (@tmps) { - unlink $_; - } - } -} - -sub preproc_file { - my ($file, $key, $dohead, $dosort) = @_; - - die "Won't overwrite $file.sorted\n" if !$make && -e "$file.sorted" && !$overwrite && $dosort; - - my $head; - - my $of="cat '$file'"; - # todo... use tee, fifo to handle stream input - if ($dohead) { - $of.="|tail -n +2"; - if ($dosort) { - $head=`head -n 1 '$file'`; - } - chomp $head; - } - - if (!$make || (stat("$file.sorted"))[9] <= (stat($file))[9]) { - $of.="|sort $sortop -k $key,$key" if ($dosort); - if ($dosort) { - warn("# + $of > '$file.sorted'\n") if $debug; - system("$of > '$file.sorted'\n") && exit (1); - push @tmps, "$file.sorted"; - } - } - - my $has_head=$dohead; - if ($dosort) { - $file="$file.sorted"; - $has_head = 0; - } - - return ($file, $head, $has_head); -} - -sub usage { -< [...*] - -Joins file 1 and file 2 by the first column, suitable -for arbitratily large files (disk-based sort). - -Operator is one of: - -# Pasted ops, combines rows: - - in[ner] return rows in common - le[ft] return rows in common, left joined - ri[ght] return rows in common, right joined - ou[ter] return all rows, outer joined - -# Exclusive (not pasted) ops, only return rows from 1 file: - - ex[clude] return only those rows with nothing in common (see -f) - xl[eft] return left file rows that are not in right file - xr[ight] return right file rows that are not in left file - -Common options: - - -1,-2=N per file, column number to join on (def 1) - -k=N set the key column to N (for both files) - -d STR column delimiter (def tab) - -q STR quote char (def none) - -h [N] files have headers (optionally, N is the file number) - -u [N] files may contain duplicate entries, only output first match - -s [N] files are already sorted, don't sort first - -n numeric sort key columns - -p prefix headers with filename/ - -f prefix rows with the input file name (op:ex only) - -Debugging options: - -D debug mode - -K keep sorted files (named file.sorted) - -o always overwrite temp files if present (see -k) - -m use make-semantics with sorted files (see -k) - -Options -1,-2, -s, -r, -h are optionally file specific. They can be -called with a number. 1 refers to the left file, 2 refers to the right, -3 (or a missing number) refers to both, -1 means "turn this option off". - -Multi file operation: - -More than 2 files will result in multiple pairwise calls to -xjoin. The use of the file-specific options can be confusing. - -The base, common case... where all the option stay the same, will -not change in future versions. - -Multi mode operation: - -It's possible to merge two with an inner join, then merge with a left -join, by sticking a colon-prefixed operator in the file list. You -can also change the options at that time. - -EXAMPLE1 (common operation): - - xjoin in file1 file2 file3 - -EXAMPLE2 (sort is assumed for 3rd file, but not the first 2): - - xjoin in file1 file2 -s file3 - -EXAMPLE3 (inner join with headers on column 1, then inner join the result using column 3) - xjoin in -h test1.txt test2.txt -k 3 test3.txt - -EXAMPLE4 (inner join header on first 2, then outer join, no header on first file) - xjoin in -h test1.txt test2.txt -h 2 :ou test3.txt - -TODO: Restructure the options using a custom parser that allows positional -options.... perl's GetOpt isn't flexible enough to capture overriding on -multiple file merges. - -EOF -} - - diff --git a/clipper/zhead b/clipper/zhead deleted file mode 100755 index 509a139..0000000 --- a/clipper/zhead +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/perl - -use Getopt::Long qw(:config pass_through); - -GetOptions(\%opt,"lines|n=s", "bytes|c=s","verbose","help","quiet|silent|q") - || die("Try zhead --help\n"); - -if ($ARGV[0] =~ /^-(\d+)/ && ! $opt{lines}) { - $opt{lines}=$1; - shift @ARGV; -} - -$opt{lines} = 10 if !$opt{lines} && !$opt{bytes}; - -if ($opt{help}) { - print "zhead is similar to head... see below.\n\n"; - exec("head --help"); -} - -if ($opt{lines} =~ s/([a-z]+)$//) { - $i=lc($1); - $opt{lines} = $opt{lines} * ( - $i eq 'b' ? 512 : - $i eq 'kb' ? 1000 : - $i eq 'k' ? 1000 : - $i eq 'mb' ? 1000*1000 : - $i eq 'm' ? 1024*1024 : - $i eq 'gb' ? 1000*1000*1000 : - $i eq 'g' ? 1024*1024*1024 : - 1 # if your using it for TB ... please don't - ); -} - -$ARGV[0] = '-' if (!@ARGV); - -$first = 1; -for (@ARGV) { - open(IN, $_) || die "zhead: cannot open `$_' for reading: $!\n"; - if (/\.gz$/) { - close IN; - $_=~ s/'/'"'"'/g; - open(IN, "gunzip -c '$_' |") || die "$!\n"; - } - if (@ARGV > 1 && ! $opt{quiet}) { - print "\n" if !$first; - print "==> $_ <==\n"; - $first = 0; - } - $l = 0; - if ($opt{lines}) { - while () { - ++$l; - print; - last if $l >= $opt{lines}; - } - } elsif ($opt{bytes}) { - $r = $opt{bytes}; # bytes remaining - while(($l=read(IN,$b,$r))>0) { - $r-=$l; - print $b; - } - } - close IN; -}