Reference and Resources

Nature Protocols volume 8, pages 1494-1512 (2013)

AWS instance: m4.xlarge

Directory contents

ls -l tuxedo2_HSB_Spombe

-rw-rw-r– 1 ubuntu ubuntu 7830629 Mar 5 02:01 S_pombe_refTrans.fasta

-rw-rw-r– 1 ubuntu ubuntu 175846179 Mar 5 02:00 Sp.ds.1M.left.fq

-rw-rw-r– 1 ubuntu ubuntu 175846179 Mar 5 02:00 Sp.ds.1M.right.fq

-rw-rw-r– 1 ubuntu ubuntu 175736042 Mar 5 02:00 Sp.hs.1M.left.fq

-rw-rw-r– 1 ubuntu ubuntu 175736042 Mar 5 02:00 Sp.hs.1M.right.fq

-rw-rw-r– 1 ubuntu ubuntu 175741215 Mar 5 02:00 Sp.log.1M.left.fq

-rw-rw-r– 1 ubuntu ubuntu 175741215 Mar 5 02:00 Sp.log.1M.right.fq

-rw-rw-r– 1 ubuntu ubuntu 175899533 Mar 5 02:00 Sp.plat.1M.left.fq

-rw-rw-r– 1 ubuntu ubuntu 175899533 Mar 5 02:00 Sp.plat.1M.right.fq

Build an index for S. pombe using HISAT2

tuxedo2_HSB_Spombe$ hisat2-build S_pombe_refTrans.fasta SpIndex

Settings:

Output files: "SpIndex..ht2"

Line rate: 6 (line is 64 bytes) Lines per side: 1 (side is 64 bytes) Offset rate: 4 (one in 16) FTable chars: 10 Strings: unpacked Local offset rate: 3 (one in 8) Local fTable chars: 6 Local sequence length: 57344 Local sequence overlap between two consecutive indexes: 1024 Endianness: little Actual local endianness: little Sanity checking: disabled Assertions: disabled Random seed: 0 Sizeofs: void*:8, int:4, long:8, size_t:8

Input files DNA, FASTA:

S_pombe_refTrans.fasta

Reading reference sizes Time reading reference sizes: 00:00:00 Calculating joined length Writing header Reserving space for joined string Joining reference sequences Time to join reference sequences: 00:00:01 Time to read SNPs and splice sites: 00:00:00 Using parameters –bmax 1352447 –dcv 1024 Doing ahead-of-time memory usage test Passed! Constructing with these parameters: –bmax 1352447 –dcv 1024 Constructing suffix-array element generator Building DifferenceCoverSample Building sPrime Building sPrimeOrder V-Sorting samples V-Sorting samples time: 00:00:00 Allocating rank array Ranking v-sort output Ranking v-sort output time: 00:00:00 Invoking Larsson-Sadakane on ranks Invoking Larsson-Sadakane on ranks time: 00:00:00 Sanity-checking and returning

Building samples

Reserving space for 12 sample suffixes Generating random suffixes QSorting 12 sample offsets, eliminating duplicates QSorting sample offsets, eliminating duplicates time: 00:00:00 Multikey QSorting 12 samples (Using difference cover) Multikey QSorting samples time: 00:00:00 Calculating bucket sizes Splitting and merging Splitting and merging time: 00:00:00 Avg bucket size: 1.03043e+06 (target: 1352446) Converting suffix-array elements to index image Allocating ftab, absorbFtab Entering GFM loop

Getting block 1 of 7

Reserving size (1352447) for bucket 1 Calculating Z arrays for bucket 1 Entering block accumulator loop for bucket 1: bucket 1: 10% bucket 1: 20% bucket 1: 30% bucket 1: 40% bucket 1: 50% bucket 1: 60% bucket 1: 70% bucket 1: 80% bucket 1: 90% bucket 1: 100% Sorting block of length 402623 for bucket 1 (Using difference cover) Sorting block time: 00:00:00 Returning block of 402624 for bucket 1

Getting block 2 of 7

Reserving size (1352447) for bucket 2 Calculating Z arrays for bucket 2 Entering block accumulator loop for bucket 2: bucket 2: 10% bucket 2: 20% bucket 2: 30% bucket 2: 40% bucket 2: 50% bucket 2: 60% bucket 2: 70% bucket 2: 80% bucket 2: 90% bucket 2: 100% Sorting block of length 1252535 for bucket 2 (Using difference cover) Sorting block time: 00:00:00 Returning block of 1252536 for bucket 2

Getting block 3 of 7

Reserving size (1352447) for bucket 3 Calculating Z arrays for bucket 3 Entering block accumulator loop for bucket 3: bucket 3: 10% bucket 3: 20% bucket 3: 30% bucket 3: 40% bucket 3: 50% bucket 3: 60% bucket 3: 70% bucket 3: 80% bucket 3: 90% bucket 3: 100% Sorting block of length 932862 for bucket 3 (Using difference cover) Sorting block time: 00:00:00 Returning block of 932863 for bucket 3

Getting block 4 of 7

Reserving size (1352447) for bucket 4 Calculating Z arrays for bucket 4 Entering block accumulator loop for bucket 4: bucket 4: 10% bucket 4: 20% bucket 4: 30% bucket 4: 40% bucket 4: 50% bucket 4: 60% bucket 4: 70% bucket 4: 80% bucket 4: 90% bucket 4: 100% Sorting block of length 1218128 for bucket 4 (Using difference cover) Sorting block time: 00:00:01 Returning block of 1218129 for bucket 4

Getting block 5 of 7

Reserving size (1352447) for bucket 5 Calculating Z arrays for bucket 5 Entering block accumulator loop for bucket 5: bucket 5: 10% bucket 5: 20% bucket 5: 30% bucket 5: 40% bucket 5: 50% bucket 5: 60% bucket 5: 70% bucket 5: 80% bucket 5: 90% bucket 5: 100% Sorting block of length 1338798 for bucket 5 (Using difference cover) Sorting block time: 00:00:00 Returning block of 1338799 for bucket 5

Getting block 6 of 7

Reserving size (1352447) for bucket 6 Calculating Z arrays for bucket 6 Entering block accumulator loop for bucket 6: bucket 6: 10% bucket 6: 20% bucket 6: 30% bucket 6: 40% bucket 6: 50% bucket 6: 60% bucket 6: 70% bucket 6: 80% bucket 6: 90% bucket 6: 100% Sorting block of length 1040348 for bucket 6 (Using difference cover) Sorting block time: 00:00:00 Returning block of 1040349 for bucket 6

Getting block 7 of 7

Reserving size (1352447) for bucket 7 Calculating Z arrays for bucket 7 Entering block accumulator loop for bucket 7: bucket 7: 10% bucket 7: 20% bucket 7: 30% bucket 7: 40% bucket 7: 50% bucket 7: 60% bucket 7: 70% bucket 7: 80% bucket 7: 90% bucket 7: 100% Sorting block of length 1027750 for bucket 7 (Using difference cover) Sorting block time: 00:00:00 Returning block of 1027751 for bucket 7 Exited GFM loop fchr[A]: 0 fchr[C]: 2160941 fchr[G]: 3570451 fchr[T]: 5019534 fchr[$]: 7213050 Exiting GFM::buildToDisk() Returning from initFromVector

Wrote 7171170 bytes to primary GFM file: SpIndex.1.ht2

Wrote 1803268 bytes to secondary GFM file: SpIndex.2.ht2

Re-opening _in1 and _in2 as input streams Returning from GFM constructor Returning from initFromVector

Wrote 44894645 bytes to primary GFM file: SpIndex.5.ht2

Wrote 1809058 bytes to secondary GFM file: SpIndex.6.ht2

Re-opening _in5 and _in5 as input streams Returning from HierEbwt constructor

Headers: len: 7213050 gbwtLen: 7213051 nodes: 7213051 sz: 1803263 gbwtSz: 1803263 lineRate: 6 offRate: 4 offMask: 0xfffffff0 ftabChars: 10 eftabLen: 0 eftabSz: 0 ftabLen: 1048577 ftabSz: 4194308 offsLen: 450816 offsSz: 1803264 lineSz: 64 sideSz: 64 sideGbwtSz: 48 sideGbwtLen: 192 numSides: 37568 numLines: 37568 gbwtTotLen: 2404352 gbwtTotSz: 2404352 reverse: 0 linearFM: Yes Total time for call to driver() for forward index: 00:00:10

mv SpIndex* hisat_index/

ls -l Sp Hisat_index/

-rw-rw-r– 1 ubuntu ubuntu 7171170 Mar 5 02:38 SpIndex.1.ht2

-rw-rw-r– 1 ubuntu ubuntu 1803268 Mar 5 02:38 SpIndex.2.ht2

-rw-rw-r– 1 ubuntu ubuntu 46475 Mar 5 02:38 SpIndex.3.ht2

-rw-rw-r– 1 ubuntu ubuntu 1803263 Mar 5 02:38 SpIndex.4.ht2

-rw-rw-r– 1 ubuntu ubuntu 44894645 Mar 5 02:39 SpIndex.5.ht2

-rw-rw-r– 1 ubuntu ubuntu 1809058 Mar 5 02:39 SpIndex.6.ht2

-rw-rw-r– 1 ubuntu ubuntu 12 Mar 5 02:38 SpIndex.7.ht2

-rw-rw-r– 1 ubuntu ubuntu 8 Mar 5 02:38 SpIndex.8.ht2

Align fastq files to the hisat2-build index using HISAT2

tuxedo2_HSB_Spombe$ hisat2 -p 8 –rna-strandness RF –dta -x SpHisat_index/SpIndex -p 8 -1 Sp.ds.1M.left.fq -2 Sp.ds.1M.right.fq -S Sp_ds.sam –summary-file Sp_ds_alignStats.txt

1000000 reads; of these:

1000000 (100.00%) were paired; of these:

415768 (41.58%) aligned concordantly 0 times

571209 (57.12%) aligned concordantly exactly 1 time

13023 (1.30%) aligned concordantly >1 times

----

415768 pairs aligned concordantly 0 times; of these:

  1338 (0.32%) aligned discordantly 1 time
  
----

414430 pairs aligned 0 times concordantly or discordantly; of these:

  828860 mates make up the pairs; of these:
  
    590399 (71.23%) aligned 0 times
    
    233679 (28.19%) aligned exactly 1 time
    
    4782 (0.58%) aligned >1 times
    

70.48% overall alignment rate

Repeat the runs using the remainig fastq samples/files

mkdir Aligned_sam

mv *.sam Aligned_sam/

ls -l Aligned_sam/

-rw-rw-r– 1 ubuntu ubuntu 542257875 Mar 5 02:50 Sp_ds.sam

-rw-rw-r– 1 ubuntu ubuntu 543704127 Mar 5 02:49 Sp_hs.sam

-rw-rw-r– 1 ubuntu ubuntu 557552191 Mar 5 02:52 Sp_log.sam

-rw-rw-r– 1 ubuntu ubuntu 530192457 Mar 5 02:53 Sp_plat.sam

mkdir AlignedStats

mv *.txt AlignedStats/

ls -l AlignedStats/

-rw-rw-r– 1 ubuntu ubuntu 619 Mar 5 02:50 Sp_ds_alignStats.txt

-rw-rw-r– 1 ubuntu ubuntu 619 Mar 5 02:49 Sp_hs_alignStats.txt

-rw-rw-r– 1 ubuntu ubuntu 619 Mar 5 02:52 Sp_log_alignStats.txt

-rw-rw-r– 1 ubuntu ubuntu 619 Mar 5 02:53 Sp_plat_alignStats.txt

Sort the SAM files by chromosomal co-ordinates and convert them to BAM format

mkdir Aligned_bam

tuxedo2_HSB_Spombe$

samtools view -Su Aligned_sam/Sp_ds.sam | samtools sort -o Aligned_bam/Sp_ds.sorted.bam

samtools view -Su Aligned_sam/Sp_hs.sam | samtools sort -o Aligned_bam/Sp_hs.sorted.bam

samtools view -Su Aligned_sam/Sp_plat.sam | samtools sort -o Aligned_bam/Sp_plat.sorted.bam

samtools view -Su Aligned_sam/Sp_log.sam | samtools sort -o Aligned_bam/Sp_log.sorted.bam

ls -l Aligned_bam/

-rw-rw-r– 1 ubuntu ubuntu 118530779 Mar 5 02:59 Sp_ds.sorted.bam

-rw-rw-r– 1 ubuntu ubuntu 118401857 Mar 5 03:01 Sp_hs.sorted.bam

-rw-rw-r– 1 ubuntu ubuntu 119007829 Mar 5 03:03 Sp_log.sorted.bam

-rw-rw-r– 1 ubuntu ubuntu 117833483 Mar 5 03:02 Sp_plat.sorted.bam

LS0tDQp0aXRsZTogIlBhcnQgSSAtIEFsaWduIGZhc3RxIGZpbGVzIHVzaW5nIEhJU0FUMiINCmF1dGhvcjogQmhhZ2lyYXRoaSBEYXNoDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIFJlZmVyZW5jZSBhbmQgUmVzb3VyY2VzDQoNCiMjIyBOYXR1cmUgUHJvdG9jb2xzIHZvbHVtZSA4LCBwYWdlcyAxNDk0LTE1MTIgKDIwMTMpDQoNCiMjIyBEYXRhIEAgW2xpbmtdIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdHJpbml0eXJuYXNlcS9maWxlcy9taXNjL1RyaW5pdHlOYXR1cmVQcm90b2NvbFR1dG9yaWFsLnRneg0KDQojIyMgQVdTIGluc3RhbmNlOiBtNC54bGFyZ2UNCg0KDQoNCiMjIERpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjIGxzIC1sIHR1eGVkbzJfSFNCX1Nwb21iZQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgIDc4MzA2MjkgTWFyICA1IDAyOjAxIFNfcG9tYmVfcmVmVHJhbnMuZmFzdGENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTc1ODQ2MTc5IE1hciAgNSAwMjowMCBTcC5kcy4xTS5sZWZ0LmZxDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE3NTg0NjE3OSBNYXIgIDUgMDI6MDAgU3AuZHMuMU0ucmlnaHQuZnENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTc1NzM2MDQyIE1hciAgNSAwMjowMCBTcC5ocy4xTS5sZWZ0LmZxDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE3NTczNjA0MiBNYXIgIDUgMDI6MDAgU3AuaHMuMU0ucmlnaHQuZnENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTc1NzQxMjE1IE1hciAgNSAwMjowMCBTcC5sb2cuMU0ubGVmdC5mcQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxNzU3NDEyMTUgTWFyICA1IDAyOjAwIFNwLmxvZy4xTS5yaWdodC5mcQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxNzU4OTk1MzMgTWFyICA1IDAyOjAwIFNwLnBsYXQuMU0ubGVmdC5mcQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxNzU4OTk1MzMgTWFyICA1IDAyOjAwIFNwLnBsYXQuMU0ucmlnaHQuZnENCg0KDQojIyBCdWlsZCBhbiBpbmRleCBmb3IgUy4gcG9tYmUgdXNpbmcgSElTQVQyDQoNCiMjIyB0dXhlZG8yX0hTQl9TcG9tYmUkIGhpc2F0Mi1idWlsZCBTX3BvbWJlX3JlZlRyYW5zLmZhc3RhIFNwSW5kZXgNCg0KIyMjIyBTZXR0aW5nczoNCg0KICAqKipPdXRwdXQgZmlsZXM6ICJTcEluZGV4LiouaHQyIioqDQogIA0KICBMaW5lIHJhdGU6IDYgKGxpbmUgaXMgNjQgYnl0ZXMpDQogIExpbmVzIHBlciBzaWRlOiAxIChzaWRlIGlzIDY0IGJ5dGVzKQ0KICBPZmZzZXQgcmF0ZTogNCAob25lIGluIDE2KQ0KICBGVGFibGUgY2hhcnM6IDEwDQogIFN0cmluZ3M6IHVucGFja2VkDQogIExvY2FsIG9mZnNldCByYXRlOiAzIChvbmUgaW4gOCkNCiAgTG9jYWwgZlRhYmxlIGNoYXJzOiA2DQogIExvY2FsIHNlcXVlbmNlIGxlbmd0aDogNTczNDQNCiAgTG9jYWwgc2VxdWVuY2Ugb3ZlcmxhcCBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSBpbmRleGVzOiAxMDI0DQogIEVuZGlhbm5lc3M6IGxpdHRsZQ0KICBBY3R1YWwgbG9jYWwgZW5kaWFubmVzczogbGl0dGxlDQogIFNhbml0eSBjaGVja2luZzogZGlzYWJsZWQNCiAgQXNzZXJ0aW9uczogZGlzYWJsZWQNCiAgUmFuZG9tIHNlZWQ6IDANCiAgU2l6ZW9mczogdm9pZCo6OCwgaW50OjQsIGxvbmc6OCwgc2l6ZV90OjgNCg0KIyMjIyBJbnB1dCBmaWxlcyBETkEsIEZBU1RBOg0KDQogICoqU19wb21iZV9yZWZUcmFucy5mYXN0YSoqDQogIA0KUmVhZGluZyByZWZlcmVuY2Ugc2l6ZXMNCiAgVGltZSByZWFkaW5nIHJlZmVyZW5jZSBzaXplczogMDA6MDA6MDANCkNhbGN1bGF0aW5nIGpvaW5lZCBsZW5ndGgNCldyaXRpbmcgaGVhZGVyDQpSZXNlcnZpbmcgc3BhY2UgZm9yIGpvaW5lZCBzdHJpbmcNCkpvaW5pbmcgcmVmZXJlbmNlIHNlcXVlbmNlcw0KICBUaW1lIHRvIGpvaW4gcmVmZXJlbmNlIHNlcXVlbmNlczogMDA6MDA6MDENCiAgVGltZSB0byByZWFkIFNOUHMgYW5kIHNwbGljZSBzaXRlczogMDA6MDA6MDANClVzaW5nIHBhcmFtZXRlcnMgLS1ibWF4IDEzNTI0NDcgLS1kY3YgMTAyNA0KICBEb2luZyBhaGVhZC1vZi10aW1lIG1lbW9yeSB1c2FnZSB0ZXN0DQogIFBhc3NlZCEgIENvbnN0cnVjdGluZyB3aXRoIHRoZXNlIHBhcmFtZXRlcnM6IC0tYm1heCAxMzUyNDQ3IC0tZGN2IDEwMjQNCkNvbnN0cnVjdGluZyBzdWZmaXgtYXJyYXkgZWxlbWVudCBnZW5lcmF0b3INCkJ1aWxkaW5nIERpZmZlcmVuY2VDb3ZlclNhbXBsZQ0KICBCdWlsZGluZyBzUHJpbWUNCiAgQnVpbGRpbmcgc1ByaW1lT3JkZXINCiAgVi1Tb3J0aW5nIHNhbXBsZXMNCiAgVi1Tb3J0aW5nIHNhbXBsZXMgdGltZTogMDA6MDA6MDANCiAgQWxsb2NhdGluZyByYW5rIGFycmF5DQogIFJhbmtpbmcgdi1zb3J0IG91dHB1dA0KICBSYW5raW5nIHYtc29ydCBvdXRwdXQgdGltZTogMDA6MDA6MDANCiAgSW52b2tpbmcgTGFyc3Nvbi1TYWRha2FuZSBvbiByYW5rcw0KICBJbnZva2luZyBMYXJzc29uLVNhZGFrYW5lIG9uIHJhbmtzIHRpbWU6IDAwOjAwOjAwDQogIFNhbml0eS1jaGVja2luZyBhbmQgcmV0dXJuaW5nDQoNCiMjIyMgQnVpbGRpbmcgc2FtcGxlcw0KUmVzZXJ2aW5nIHNwYWNlIGZvciAxMiBzYW1wbGUgc3VmZml4ZXMNCkdlbmVyYXRpbmcgcmFuZG9tIHN1ZmZpeGVzDQpRU29ydGluZyAxMiBzYW1wbGUgb2Zmc2V0cywgZWxpbWluYXRpbmcgZHVwbGljYXRlcw0KUVNvcnRpbmcgc2FtcGxlIG9mZnNldHMsIGVsaW1pbmF0aW5nIGR1cGxpY2F0ZXMgdGltZTogMDA6MDA6MDANCk11bHRpa2V5IFFTb3J0aW5nIDEyIHNhbXBsZXMNCiAgKFVzaW5nIGRpZmZlcmVuY2UgY292ZXIpDQogIE11bHRpa2V5IFFTb3J0aW5nIHNhbXBsZXMgdGltZTogMDA6MDA6MDANCkNhbGN1bGF0aW5nIGJ1Y2tldCBzaXplcw0KU3BsaXR0aW5nIGFuZCBtZXJnaW5nDQogIFNwbGl0dGluZyBhbmQgbWVyZ2luZyB0aW1lOiAwMDowMDowMA0KQXZnIGJ1Y2tldCBzaXplOiAxLjAzMDQzZSswNiAodGFyZ2V0OiAxMzUyNDQ2KQ0KQ29udmVydGluZyBzdWZmaXgtYXJyYXkgZWxlbWVudHMgdG8gaW5kZXggaW1hZ2UNCkFsbG9jYXRpbmcgZnRhYiwgYWJzb3JiRnRhYg0KRW50ZXJpbmcgR0ZNIGxvb3ANCg0KIyMjIyBHZXR0aW5nIGJsb2NrIDEgb2YgNw0KICBSZXNlcnZpbmcgc2l6ZSAoMTM1MjQ0NykgZm9yIGJ1Y2tldCAxDQogIENhbGN1bGF0aW5nIFogYXJyYXlzIGZvciBidWNrZXQgMQ0KICBFbnRlcmluZyBibG9jayBhY2N1bXVsYXRvciBsb29wIGZvciBidWNrZXQgMToNCiAgYnVja2V0IDE6IDEwJQ0KICBidWNrZXQgMTogMjAlDQogIGJ1Y2tldCAxOiAzMCUNCiAgYnVja2V0IDE6IDQwJQ0KICBidWNrZXQgMTogNTAlDQogIGJ1Y2tldCAxOiA2MCUNCiAgYnVja2V0IDE6IDcwJQ0KICBidWNrZXQgMTogODAlDQogIGJ1Y2tldCAxOiA5MCUNCiAgYnVja2V0IDE6IDEwMCUNCiAgU29ydGluZyBibG9jayBvZiBsZW5ndGggNDAyNjIzIGZvciBidWNrZXQgMQ0KICAoVXNpbmcgZGlmZmVyZW5jZSBjb3ZlcikNCiAgU29ydGluZyBibG9jayB0aW1lOiAwMDowMDowMA0KUmV0dXJuaW5nIGJsb2NrIG9mIDQwMjYyNCBmb3IgYnVja2V0IDENCg0KIyMjIyBHZXR0aW5nIGJsb2NrIDIgb2YgNw0KICBSZXNlcnZpbmcgc2l6ZSAoMTM1MjQ0NykgZm9yIGJ1Y2tldCAyDQogIENhbGN1bGF0aW5nIFogYXJyYXlzIGZvciBidWNrZXQgMg0KICBFbnRlcmluZyBibG9jayBhY2N1bXVsYXRvciBsb29wIGZvciBidWNrZXQgMjoNCiAgYnVja2V0IDI6IDEwJQ0KICBidWNrZXQgMjogMjAlDQogIGJ1Y2tldCAyOiAzMCUNCiAgYnVja2V0IDI6IDQwJQ0KICBidWNrZXQgMjogNTAlDQogIGJ1Y2tldCAyOiA2MCUNCiAgYnVja2V0IDI6IDcwJQ0KICBidWNrZXQgMjogODAlDQogIGJ1Y2tldCAyOiA5MCUNCiAgYnVja2V0IDI6IDEwMCUNCiAgU29ydGluZyBibG9jayBvZiBsZW5ndGggMTI1MjUzNSBmb3IgYnVja2V0IDINCiAgKFVzaW5nIGRpZmZlcmVuY2UgY292ZXIpDQogIFNvcnRpbmcgYmxvY2sgdGltZTogMDA6MDA6MDANClJldHVybmluZyBibG9jayBvZiAxMjUyNTM2IGZvciBidWNrZXQgMg0KDQojIyMjIEdldHRpbmcgYmxvY2sgMyBvZiA3DQogIFJlc2VydmluZyBzaXplICgxMzUyNDQ3KSBmb3IgYnVja2V0IDMNCiAgQ2FsY3VsYXRpbmcgWiBhcnJheXMgZm9yIGJ1Y2tldCAzDQogIEVudGVyaW5nIGJsb2NrIGFjY3VtdWxhdG9yIGxvb3AgZm9yIGJ1Y2tldCAzOg0KICBidWNrZXQgMzogMTAlDQogIGJ1Y2tldCAzOiAyMCUNCiAgYnVja2V0IDM6IDMwJQ0KICBidWNrZXQgMzogNDAlDQogIGJ1Y2tldCAzOiA1MCUNCiAgYnVja2V0IDM6IDYwJQ0KICBidWNrZXQgMzogNzAlDQogIGJ1Y2tldCAzOiA4MCUNCiAgYnVja2V0IDM6IDkwJQ0KICBidWNrZXQgMzogMTAwJQ0KICBTb3J0aW5nIGJsb2NrIG9mIGxlbmd0aCA5MzI4NjIgZm9yIGJ1Y2tldCAzDQogIChVc2luZyBkaWZmZXJlbmNlIGNvdmVyKQ0KICBTb3J0aW5nIGJsb2NrIHRpbWU6IDAwOjAwOjAwDQpSZXR1cm5pbmcgYmxvY2sgb2YgOTMyODYzIGZvciBidWNrZXQgMw0KDQojIyMjIEdldHRpbmcgYmxvY2sgNCBvZiA3DQogIFJlc2VydmluZyBzaXplICgxMzUyNDQ3KSBmb3IgYnVja2V0IDQNCiAgQ2FsY3VsYXRpbmcgWiBhcnJheXMgZm9yIGJ1Y2tldCA0DQogIEVudGVyaW5nIGJsb2NrIGFjY3VtdWxhdG9yIGxvb3AgZm9yIGJ1Y2tldCA0Og0KICBidWNrZXQgNDogMTAlDQogIGJ1Y2tldCA0OiAyMCUNCiAgYnVja2V0IDQ6IDMwJQ0KICBidWNrZXQgNDogNDAlDQogIGJ1Y2tldCA0OiA1MCUNCiAgYnVja2V0IDQ6IDYwJQ0KICBidWNrZXQgNDogNzAlDQogIGJ1Y2tldCA0OiA4MCUNCiAgYnVja2V0IDQ6IDkwJQ0KICBidWNrZXQgNDogMTAwJQ0KICBTb3J0aW5nIGJsb2NrIG9mIGxlbmd0aCAxMjE4MTI4IGZvciBidWNrZXQgNA0KICAoVXNpbmcgZGlmZmVyZW5jZSBjb3ZlcikNCiAgU29ydGluZyBibG9jayB0aW1lOiAwMDowMDowMQ0KUmV0dXJuaW5nIGJsb2NrIG9mIDEyMTgxMjkgZm9yIGJ1Y2tldCA0DQoNCiMjIyMgR2V0dGluZyBibG9jayA1IG9mIDcNCiAgUmVzZXJ2aW5nIHNpemUgKDEzNTI0NDcpIGZvciBidWNrZXQgNQ0KICBDYWxjdWxhdGluZyBaIGFycmF5cyBmb3IgYnVja2V0IDUNCiAgRW50ZXJpbmcgYmxvY2sgYWNjdW11bGF0b3IgbG9vcCBmb3IgYnVja2V0IDU6DQogIGJ1Y2tldCA1OiAxMCUNCiAgYnVja2V0IDU6IDIwJQ0KICBidWNrZXQgNTogMzAlDQogIGJ1Y2tldCA1OiA0MCUNCiAgYnVja2V0IDU6IDUwJQ0KICBidWNrZXQgNTogNjAlDQogIGJ1Y2tldCA1OiA3MCUNCiAgYnVja2V0IDU6IDgwJQ0KICBidWNrZXQgNTogOTAlDQogIGJ1Y2tldCA1OiAxMDAlDQogIFNvcnRpbmcgYmxvY2sgb2YgbGVuZ3RoIDEzMzg3OTggZm9yIGJ1Y2tldCA1DQogIChVc2luZyBkaWZmZXJlbmNlIGNvdmVyKQ0KICBTb3J0aW5nIGJsb2NrIHRpbWU6IDAwOjAwOjAwDQpSZXR1cm5pbmcgYmxvY2sgb2YgMTMzODc5OSBmb3IgYnVja2V0IDUNCg0KIyMjIyBHZXR0aW5nIGJsb2NrIDYgb2YgNw0KICBSZXNlcnZpbmcgc2l6ZSAoMTM1MjQ0NykgZm9yIGJ1Y2tldCA2DQogIENhbGN1bGF0aW5nIFogYXJyYXlzIGZvciBidWNrZXQgNg0KICBFbnRlcmluZyBibG9jayBhY2N1bXVsYXRvciBsb29wIGZvciBidWNrZXQgNjoNCiAgYnVja2V0IDY6IDEwJQ0KICBidWNrZXQgNjogMjAlDQogIGJ1Y2tldCA2OiAzMCUNCiAgYnVja2V0IDY6IDQwJQ0KICBidWNrZXQgNjogNTAlDQogIGJ1Y2tldCA2OiA2MCUNCiAgYnVja2V0IDY6IDcwJQ0KICBidWNrZXQgNjogODAlDQogIGJ1Y2tldCA2OiA5MCUNCiAgYnVja2V0IDY6IDEwMCUNCiAgU29ydGluZyBibG9jayBvZiBsZW5ndGggMTA0MDM0OCBmb3IgYnVja2V0IDYNCiAgKFVzaW5nIGRpZmZlcmVuY2UgY292ZXIpDQogIFNvcnRpbmcgYmxvY2sgdGltZTogMDA6MDA6MDANClJldHVybmluZyBibG9jayBvZiAxMDQwMzQ5IGZvciBidWNrZXQgNg0KDQojIyMjIEdldHRpbmcgYmxvY2sgNyBvZiA3DQogIFJlc2VydmluZyBzaXplICgxMzUyNDQ3KSBmb3IgYnVja2V0IDcNCiAgQ2FsY3VsYXRpbmcgWiBhcnJheXMgZm9yIGJ1Y2tldCA3DQogIEVudGVyaW5nIGJsb2NrIGFjY3VtdWxhdG9yIGxvb3AgZm9yIGJ1Y2tldCA3Og0KICBidWNrZXQgNzogMTAlDQogIGJ1Y2tldCA3OiAyMCUNCiAgYnVja2V0IDc6IDMwJQ0KICBidWNrZXQgNzogNDAlDQogIGJ1Y2tldCA3OiA1MCUNCiAgYnVja2V0IDc6IDYwJQ0KICBidWNrZXQgNzogNzAlDQogIGJ1Y2tldCA3OiA4MCUNCiAgYnVja2V0IDc6IDkwJQ0KICBidWNrZXQgNzogMTAwJQ0KICBTb3J0aW5nIGJsb2NrIG9mIGxlbmd0aCAxMDI3NzUwIGZvciBidWNrZXQgNw0KICAoVXNpbmcgZGlmZmVyZW5jZSBjb3ZlcikNCiAgU29ydGluZyBibG9jayB0aW1lOiAwMDowMDowMA0KUmV0dXJuaW5nIGJsb2NrIG9mIDEwMjc3NTEgZm9yIGJ1Y2tldCA3DQpFeGl0ZWQgR0ZNIGxvb3ANCmZjaHJbQV06IDANCmZjaHJbQ106IDIxNjA5NDENCmZjaHJbR106IDM1NzA0NTENCmZjaHJbVF06IDUwMTk1MzQNCmZjaHJbJF06IDcyMTMwNTANCkV4aXRpbmcgR0ZNOjpidWlsZFRvRGlzaygpDQpSZXR1cm5pbmcgZnJvbSBpbml0RnJvbVZlY3Rvcg0KDQoqKldyb3RlIDcxNzExNzAgYnl0ZXMgdG8gcHJpbWFyeSBHRk0gZmlsZTogU3BJbmRleC4xLmh0MioqDQoNCioqV3JvdGUgMTgwMzI2OCBieXRlcyB0byBzZWNvbmRhcnkgR0ZNIGZpbGU6IFNwSW5kZXguMi5odDIqKg0KDQpSZS1vcGVuaW5nIF9pbjEgYW5kIF9pbjIgYXMgaW5wdXQgc3RyZWFtcw0KUmV0dXJuaW5nIGZyb20gR0ZNIGNvbnN0cnVjdG9yDQpSZXR1cm5pbmcgZnJvbSBpbml0RnJvbVZlY3Rvcg0KDQoqKldyb3RlIDQ0ODk0NjQ1IGJ5dGVzIHRvIHByaW1hcnkgR0ZNIGZpbGU6IFNwSW5kZXguNS5odDIqKg0KDQoqKldyb3RlIDE4MDkwNTggYnl0ZXMgdG8gc2Vjb25kYXJ5IEdGTSBmaWxlOiBTcEluZGV4LjYuaHQyKioNCg0KUmUtb3BlbmluZyBfaW41IGFuZCBfaW41IGFzIGlucHV0IHN0cmVhbXMNClJldHVybmluZyBmcm9tIEhpZXJFYnd0IGNvbnN0cnVjdG9yDQoNCkhlYWRlcnM6DQogICAgbGVuOiA3MjEzMDUwDQogICAgZ2J3dExlbjogNzIxMzA1MQ0KICAgIG5vZGVzOiA3MjEzMDUxDQogICAgc3o6IDE4MDMyNjMNCiAgICBnYnd0U3o6IDE4MDMyNjMNCiAgICBsaW5lUmF0ZTogNg0KICAgIG9mZlJhdGU6IDQNCiAgICBvZmZNYXNrOiAweGZmZmZmZmYwDQogICAgZnRhYkNoYXJzOiAxMA0KICAgIGVmdGFiTGVuOiAwDQogICAgZWZ0YWJTejogMA0KICAgIGZ0YWJMZW46IDEwNDg1NzcNCiAgICBmdGFiU3o6IDQxOTQzMDgNCiAgICBvZmZzTGVuOiA0NTA4MTYNCiAgICBvZmZzU3o6IDE4MDMyNjQNCiAgICBsaW5lU3o6IDY0DQogICAgc2lkZVN6OiA2NA0KICAgIHNpZGVHYnd0U3o6IDQ4DQogICAgc2lkZUdid3RMZW46IDE5Mg0KICAgIG51bVNpZGVzOiAzNzU2OA0KICAgIG51bUxpbmVzOiAzNzU2OA0KICAgIGdid3RUb3RMZW46IDI0MDQzNTINCiAgICBnYnd0VG90U3o6IDI0MDQzNTINCiAgICByZXZlcnNlOiAwDQogICAgbGluZWFyRk06IFllcw0KVG90YWwgdGltZSBmb3IgY2FsbCB0byBkcml2ZXIoKSBmb3IgZm9yd2FyZCBpbmRleDogMDA6MDA6MTANCg0KDQoNCiMjIyMgbXYgU3BJbmRleCogaGlzYXRfaW5kZXgvDQoNCiMjIyMgbHMgLWwgU3AgSGlzYXRfaW5kZXgvDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICA3MTcxMTcwIE1hciAgNSAwMjozOCBTcEluZGV4LjEuaHQyDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAxODAzMjY4IE1hciAgNSAwMjozOCBTcEluZGV4LjIuaHQyDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgIDQ2NDc1IE1hciAgNSAwMjozOCBTcEluZGV4LjMuaHQyDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAxODAzMjYzIE1hciAgNSAwMjozOCBTcEluZGV4LjQuaHQyDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDQ0ODk0NjQ1IE1hciAgNSAwMjozOSBTcEluZGV4LjUuaHQyDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAxODA5MDU4IE1hciAgNSAwMjozOSBTcEluZGV4LjYuaHQyDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgIDEyIE1hciAgNSAwMjozOCBTcEluZGV4LjcuaHQyDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgICA4IE1hciAgNSAwMjozOCBTcEluZGV4LjguaHQyDQoNCg0KDQoNCiMjIEFsaWduIGZhc3RxIGZpbGVzIHRvIHRoZSBoaXNhdDItYnVpbGQgaW5kZXggdXNpbmcgSElTQVQyDQoNCiMjIyB0dXhlZG8yX0hTQl9TcG9tYmUkIGhpc2F0MiAtcCA4IC0tcm5hLXN0cmFuZG5lc3MgUkYgLS1kdGEgLXggU3BIaXNhdF9pbmRleC9TcEluZGV4IC1wIDggLTEgU3AuZHMuMU0ubGVmdC5mcSAtMiBTcC5kcy4xTS5yaWdodC5mcSAtUyBTcF9kcy5zYW0gLS1zdW1tYXJ5LWZpbGUgU3BfZHNfYWxpZ25TdGF0cy50eHQNCg0KMTAwMDAwMCByZWFkczsgb2YgdGhlc2U6DQoNCiAgMTAwMDAwMCAoMTAwLjAwJSkgd2VyZSBwYWlyZWQ7IG9mIHRoZXNlOg0KICANCiAgICA0MTU3NjggKDQxLjU4JSkgYWxpZ25lZCBjb25jb3JkYW50bHkgMCB0aW1lcw0KICAgIA0KICAgIDU3MTIwOSAoNTcuMTIlKSBhbGlnbmVkIGNvbmNvcmRhbnRseSBleGFjdGx5IDEgdGltZQ0KICAgIA0KICAgIDEzMDIzICgxLjMwJSkgYWxpZ25lZCBjb25jb3JkYW50bHkgPjEgdGltZXMNCiAgICANCiAgICAtLS0tDQogICAgDQogICAgNDE1NzY4IHBhaXJzIGFsaWduZWQgY29uY29yZGFudGx5IDAgdGltZXM7IG9mIHRoZXNlOg0KICAgIA0KICAgICAgMTMzOCAoMC4zMiUpIGFsaWduZWQgZGlzY29yZGFudGx5IDEgdGltZQ0KICAgICAgDQogICAgLS0tLQ0KICAgIA0KICAgIDQxNDQzMCBwYWlycyBhbGlnbmVkIDAgdGltZXMgY29uY29yZGFudGx5IG9yIGRpc2NvcmRhbnRseTsgb2YgdGhlc2U6DQogICAgDQogICAgICA4Mjg4NjAgbWF0ZXMgbWFrZSB1cCB0aGUgcGFpcnM7IG9mIHRoZXNlOg0KICAgICAgDQogICAgICAgIDU5MDM5OSAoNzEuMjMlKSBhbGlnbmVkIDAgdGltZXMNCiAgICAgICAgDQogICAgICAgIDIzMzY3OSAoMjguMTklKSBhbGlnbmVkIGV4YWN0bHkgMSB0aW1lDQogICAgICAgIA0KICAgICAgICA0NzgyICgwLjU4JSkgYWxpZ25lZCA+MSB0aW1lcw0KICAgICAgICANCjcwLjQ4JSBvdmVyYWxsIGFsaWdubWVudCByYXRlDQoNCioqKlJlcGVhdCB0aGUgcnVucyB1c2luZyB0aGUgcmVtYWluaWcgZmFzdHEgc2FtcGxlcy9maWxlcyoqKg0KDQoNCg0KKioqbWtkaXIgQWxpZ25lZF9zYW0qKioNCg0KIyMjIyBtdiAqLnNhbSBBbGlnbmVkX3NhbS8NCg0KIyMjIyBscyAtbCBBbGlnbmVkX3NhbS8NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgNTQyMjU3ODc1IE1hciAgNSAwMjo1MCBTcF9kcy5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgNTQzNzA0MTI3IE1hciAgNSAwMjo0OSBTcF9ocy5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgNTU3NTUyMTkxIE1hciAgNSAwMjo1MiBTcF9sb2cuc2FtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDUzMDE5MjQ1NyBNYXIgIDUgMDI6NTMgU3BfcGxhdC5zYW0NCg0KDQoNCioqKm1rZGlyIEFsaWduZWRTdGF0cyoqKg0KDQojIyMjIG12ICoudHh0IEFsaWduZWRTdGF0cy8NCg0KIyMjIyBscyAtbCBBbGlnbmVkU3RhdHMvDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDYxOSBNYXIgIDUgMDI6NTAgU3BfZHNfYWxpZ25TdGF0cy50eHQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgNjE5IE1hciAgNSAwMjo0OSBTcF9oc19hbGlnblN0YXRzLnR4dA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSA2MTkgTWFyICA1IDAyOjUyIFNwX2xvZ19hbGlnblN0YXRzLnR4dA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSA2MTkgTWFyICA1IDAyOjUzIFNwX3BsYXRfYWxpZ25TdGF0cy50eHQNCg0KDQoNCiMjIFNvcnQgdGhlIFNBTSBmaWxlcyBieSBjaHJvbW9zb21hbCBjby1vcmRpbmF0ZXMgYW5kIGNvbnZlcnQgdGhlbSB0byBCQU0gZm9ybWF0DQoNCioqKm1rZGlyIEFsaWduZWRfYmFtKioqDQoNCiMjIyMgdHV4ZWRvMl9IU0JfU3BvbWJlJCANCg0Kc2FtdG9vbHMgdmlldyAtU3UgQWxpZ25lZF9zYW0vU3BfZHMuc2FtIHwgc2FtdG9vbHMgc29ydCAtbyBBbGlnbmVkX2JhbS9TcF9kcy5zb3J0ZWQuYmFtDQoNCnNhbXRvb2xzIHZpZXcgLVN1IEFsaWduZWRfc2FtL1NwX2hzLnNhbSB8IHNhbXRvb2xzIHNvcnQgLW8gQWxpZ25lZF9iYW0vU3BfaHMuc29ydGVkLmJhbQ0KDQpzYW10b29scyB2aWV3IC1TdSBBbGlnbmVkX3NhbS9TcF9wbGF0LnNhbSB8IHNhbXRvb2xzIHNvcnQgLW8gQWxpZ25lZF9iYW0vU3BfcGxhdC5zb3J0ZWQuYmFtDQoNCnNhbXRvb2xzIHZpZXcgLVN1IEFsaWduZWRfc2FtL1NwX2xvZy5zYW0gfCBzYW10b29scyBzb3J0IC1vIEFsaWduZWRfYmFtL1NwX2xvZy5zb3J0ZWQuYmFtDQoNCg0KIyMjIyBscyAtbCBBbGlnbmVkX2JhbS8NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTE4NTMwNzc5IE1hciAgNSAwMjo1OSBTcF9kcy5zb3J0ZWQuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDExODQwMTg1NyBNYXIgIDUgMDM6MDEgU3BfaHMuc29ydGVkLmJhbQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxMTkwMDc4MjkgTWFyICA1IDAzOjAzIFNwX2xvZy5zb3J0ZWQuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDExNzgzMzQ4MyBNYXIgIDUgMDM6MDIgU3BfcGxhdC5zb3J0ZWQuYmFtDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=