A1. References and resources

We will analyze the HG02759 low coverage genome sequencing data.

1000_genome_HG02759

1000_genome_HG02759

Machine

Google Cloud Platform (GCP), 4 vCPUs, 15 GB

Google Cloud Platform (GCP), 24 vCPUs, 32 GB

A2. Download analysis datasets (the fastq files)

~/gatk_data_ref$ wget -bqc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR251/ERR251295/ERR251295_2.fastq.gz

Continuing in background, pid 25770.

~/gatk_data_ref$ wget -bqc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR251/ERR251295/ERR251295_1.fastq.gz

Continuing in background, pid 25776.

~/gatk_data_ref$ wget -bqc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR251/ERR251296/ERR251296_2.fastq.gz

Continuing in background, pid 25788.

~/gatk_data_ref$ wget -bqc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR251/ERR251296/ERR251296_1.fastq.gz

Continuing in background, pid 25790.

Directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 5595686029 Apr 22 02:03 ERR251295_1.fastq.gz

-rw-rw-r– 1 b0d2647 b0d2647 5719449352 Apr 22 02:03 ERR251295_2.fastq.gz

-rw-rw-r– 1 b0d2647 b0d2647 5653494965 Apr 21 22:30 ERR251296_1.fastq.gz

-rw-rw-r– 1 b0d2647 b0d2647 5772390726 Apr 21 22:19 ERR251296_2.fastq.gz

A3. Dwonload the refrence and/or genome files (from the GATK resources bundle maintained by Broad Institure in a google bucket)

~/gatk_data_ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.fasta ./

Copying gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.fasta…

~/gatk_data_ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.dict ./

Copying gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.dict…

~/gatk_data_ref$ gsutil cp gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.fasta.fai ./

Copying gs://genomics-public-data/resources/broad/hg38/v0/Homo_sapiens_assembly38.fasta.fai…

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 581712 Apr 20 13:42 Homo_sapiens_assembly38.dict

-rw-rw-r– 1 b0d2647 b0d2647 3249912778 Apr 20 13:44 Homo_sapiens_assembly38.fasta

-rw-rw-r– 1 b0d2647 b0d2647 160928 Apr 20 16:47 Homo_sapiens_assembly38.fasta.fai

A4. Make a BWA index of the human genome

~/gatk_data_ref$ bwa index -a bwtsw Homo_sapiens_assembly38.fasta

[bwa_index] Pack FASTA… 30.70 sec

[bwa_index] Construct BWT for the packed sequence…

[BWTIncCreate] textLength=6434693834, availableWord=464768632

[BWTIncConstructFromPacked] 10 iterations done. 99999994 characters processed.

[BWTIncConstructFromPacked] 20 iterations done. 199999994 characters processed.

………….

[BWTIncConstructFromPacked] 700 iterations done. 6411146922 characters processed.

[BWTIncConstructFromPacked] 710 iterations done. 6432978554 characters processed.

[bwt_gen] Finished constructing BWT in 711 iterations.

[bwa_index] 4734.94 seconds elapse.

[bwa_index] Update BWT… 23.36 sec

[bwa_index] Pack forward-only FASTA… 22.12 sec

[bwa_index] Construct SA from BWT and Occ… 2665.77 sec

[main] Version: 0.7.17-r1188

[main] CMD: bwa index -a bwtsw Homo_sapiens_assembly38.fasta

[main] Real time: 7558.780 sec; CPU: 7476.896 sec

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 487553 Apr 21 22:49 Homo_sapiens_assembly38.fasta.64.alt

-rw-rw-r– 1 b0d2647 b0d2647 20199 Apr 21 22:49 Homo_sapiens_assembly38.fasta.64.amb

-rw-rw-r– 1 b0d2647 b0d2647 455474 Apr 21 22:49 Homo_sapiens_assembly38.fasta.64.ann

-rw-rw-r– 1 b0d2647 b0d2647 3217347004 Apr 21 22:49 Homo_sapiens_assembly38.fasta.64.bwt

-rw-rw-r– 1 b0d2647 b0d2647 804336731 Apr 21 22:49 Homo_sapiens_assembly38.fasta.64.pac

-rw-rw-r– 1 b0d2647 b0d2647 1608673512 Apr 21 22:50 Homo_sapiens_assembly38.fasta.64.sa

A5. Align the 1st pair of sequences to the reference genome using Burrows-Wheeler Aligner (BWA)

Note: It is important to assign read groups (RG) to the sequences

Check the fastq file contents

~/gatk_data_ref$ zcat ERR251295_1.fastq.gz | head

@ERR251295.1 FCC1H7WACXX:1:1101:1133:2181/1 TGCTNAAAATACAGAAGACAAATTTTCTCATTTAGGGAAATCAATTTTATTAGTGCTTGGTCAGAAAAGACTAAAAATTTCATGTTGAATACGTACTAAT + CCCF#2ADHHHHGIGGHGIIIGHIJJJIIHEIIGGIJJJJIJJCGGHIIHJHIGHIEIJJBGIIIJJGIGIIIJIEEEEHFFFFCDEEEEEEDCCBBEDD

@ERR251295.2 FCC1H7WACXX:1:1101:1086:2200/1 TGACNATTCCATTCAATTCTGTTCAATGATTCCCTTAGATTCCATTTGATGATGATTCCATTCGATTCCATTTGATGATGATTCCATGCGATTCCATTAG + >DHIIHEGHHGGHGJIJJJJJIGHHHHHFFF

@ERR251295.3 FCC1H7WACXX:1:1101:1094:2225/1 GCTGNGAGCCTCGTTGCCATGTAGGCAACTGTATTGAAAGAGTCCAGGCTCCTCCTCAGATTAGGGACTCATTTCCTCTCCCCTCTACAAGCCCGGTGTT

~/gatk_data_ref$ zcat ERR251295_2.fastq.gz | head -n 2

@ERR251295.1 FCC1H7WACXX:1:1101:1133:2181/2 TTGTCTAGTTACTTGAACAATAAGAGAAATTCTATCTTTGAGCTTTCATAATTGGCTTTCTGGACACCACTGAGTTTATTAGATAATCTTTAAAAATATT

~/gatk-data-ref$ bwa mem -M -t 24 -R ‘@RG:ERR251295:Z:illumina:FCC1H7WACXX:HG02759’ Homo_sapiens_assembly38.fasta ERR251295_1.fastq.gz ERR251295_2.fastq.gz | samtools view -Sbh | samtools sort -o ERR251295_1.bam - && samtools index ERR251295_1.bam && samtools flagstat ERR251295_1.bam

…………….

[main] Version: 0.7.17-r1188

[main] Real time: 5776.739 sec; CPU: 81456.772 sec

[bam_sort_core] merging from 49 files and 1 in-memory blocks…

129330360 + 0 in total (QC-passed reads + QC-failed reads)

1128310 + 0 secondary

832800 + 0 supplementary

0 + 0 duplicates

128944247 + 0 mapped (99.70% : N/A)

127369250 + 0 paired in sequencing

63684625 + 0 read1

63684625 + 0 read2

122823900 + 0 properly paired (96.43% : N/A)

126601922 + 0 with itself and mate mapped

381215 + 0 singletons (0.30% : N/A)

2253238 + 0 with mate mapped to a different chr

1052000 + 0 with mate mapped to a different chr (mapQ>=5)

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 12241966896 Apr 26 22:08 ERR251295_1.bam

-rw-rw-r– 1 b0d2647 b0d2647 6665728 Apr 26 22:12 ERR251295_1.bam.bai

A6. Validate the BAM file and fix it if necessary

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I ERR251295_1.bam -M SUMMARY -O summary_ERR251295_1

Using GATK jar /home/b0d2647/miniconda3/share/gatk4-4.1.2.0-0/gatk-package-4.1.2.0-local.jar

…………………

INFO 2019-04-27 23:39:51 SamFileValidator Validated Read 10,000,000 records. Elapsed time: 00:01:41s. Time for last 10,000,000: 100s. Last read position: chr1:221,207,964

INFO 2019-04-27 23:41:24 SamFileValidator Validated Read 20,000,000 records. Elapsed time: 00:03:14s. Time for last 10,000,000:93s. Last read position: chr2:211,520,747

…………………….

INFO 2019-04-27 23:58:03 SamFileValidator Validated Read 120,000,000 records. Elapsed time: 00:19:53s. Time for last 10,000,000: 104s. Last read position: chr22:47,204,986

[Sun Apr 28 00:06:18 UTC 2019] picard.sam.ValidateSamFile done. Elapsed time: 28.17 minutes.

To get help, see http://broadinstitute.github.io/picard/index.html#GettingHelp

Tool returned: 3

Additional directory contents

~/gatk-data-ref$ cat summary_ERR251295_1

## HISTOGRAM    java.lang.String

Error   Type              Count

ERROR:  INVALID_TAG_NM    16816

A7. Fix the error in the BAM file using samtools

~/gatk-data-ref$ samtools calmd -bAr ERR251295_1.bam Homo_sapiens_assembly38.fasta > ERR251295_1.calmd.bam

….

[bam_fillmd1] different MD for read ‘ERR251295.60210117’: ‘33G0T19C0C1C4C11C23’ -> ‘0N32G0T19C0C1C4C11C23’

[bam_fillmd1] different NM for read ‘ERR251295.59668755’: 0 -> 4

[bam_fillmd1] different MD for read ‘ERR251295.59668755’: ‘54’ -> ‘0N0N0N0N50’

[bam_fillmd1] different NM for read ‘ERR251295.47869477’: 0 -> 1

[bam_fillmd1] different MD for read ‘ERR251295.47869477’: ‘73’ -> ‘72N0’

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 13319762424 Apr 28 01:54 ERR251295_1.calmd.bam

A8. Mark duplicates

~/gatk-data-ref$ gatk MarkDuplicates -I ERR251295_1.calmd.bam -O ERR251295_1.calmd.mdup.bam -M ERR251295_1.calmd.dupMetrics.txt

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 3525 Apr 28 04:53 ERR251295_1.calmd.dupMetrics.txt

-rw-rw-r– 1 b0d2647 b0d2647 17998947047 Apr 28 04:53 ERR251295_1.calmd.mdup.bam

A9. Index the BAM file

~/gatk-data-ref$ samtools index ERR251295_1.calmd.mdup.bam

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 8635016 Apr 28 05:06 ERR251295_1.calmd.mdup.bam.bai

A10. Run gatk HaplotypeCaller

~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I ERR251295_1.calmd.mdup.bam -L chr20:15,800,000-16,100,000 -O ERR251295_1.calmd.mdup.vcf

05:10:13.535 INFO ProgressMeter - Current Locus Elapsed Minutes Regions Processed Regions/Minute

05:10:23.556 INFO ProgressMeter - chr20:16090633 0.2 1270 7604.8

05:10:23.995 INFO HaplotypeCaller -

    167 read(s) filtered by: ((((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)  

    167 read(s) filtered by: (((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND GoodCigarReadFilter)


  167 read(s) filtered by: ((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter)
  
      167 read(s) filtered by: (((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter)
      
          167 read(s) filtered by: ((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter)
          
              63 read(s) filtered by: (((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter)
              
                  56 read(s) filtered by: ((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter)
                  
                      56 read(s) filtered by: (MappingQualityReadFilter AND MappingQualityAvailableReadFilter)
                      
                          56 read(s) filtered by: MappingQualityReadFilter 
                          
                            7 read(s) filtered by: NotSecondaryAlignmentReadFilter 
                  
                                    104 read(s) filtered by: NotDuplicateReadFilter 
              

05:10:24.008 INFO ProgressMeter - chr20:16098307 0.2 1317 7545.1

05:10:24.009 INFO ProgressMeter - Traversal complete. Processed 1317 total regions in 0.2 minutes.

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 212003 Apr 28 05:10 ERR251295_1.calmd.mdup.vcf

-rw-rw-r– 1 b0d2647 b0d2647 115099 Apr 28 05:10 ERR251295_1.calmd.mdup.vcf.idx

A11. Record short variants (i.e., SNPs and indels) in the intended chromosomal region

~/gatk-data-ref$ bcftools stats ERR251295_1.calmd.mdup.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.


# SN    [2]id   [3]key                                  [4]value

SN      0       number of samples:                      1

SN      0       number of records:                      200

SN      0       number of no-ALTs:                      0

SN      0       number of SNPs:                         196

SN      0       number of MNPs:                         0

SN      0       number of indels:                       4

SN      0       number of others:                       0

SN      0       number of multiallelic sites:           0

SN      0       number of multiallelic SNP sites:       0

B1. Align the 2nd pair of sequences to the reference genome using BWA and analyze as above

File contents

~/gatk-data-ref$ zcat ERR251296_1.fastq.gz | head -n 2

@ERR251296.1 FCC1H7WACXX:2:1101:1495:2145/1

NTCAGAAACTTGTTTGTGATGTGTGCCCTCTACTGACTGAGTTGAACCTTTCTTTTCATAGAGCAGTTTTGAAACACTCTTTTTGTAGAATCTGCAAGAG

~/gatk-data-ref$ zcat ERR251296_2.fastq.gz | head -n 2

@ERR251296.1 FCC1H7WACXX:2:1101:1495:2145/2

GCAAATATCCTCTTGCAGATTCCAGAAAAAGAGTGTTTCAAAACTGCTCCTTCAAAACGGTGGTTCAATTCTCTTAGTTGAGTACACACATCTCAAATAA

~/gatk-data-ref$ bwa mem -M -t 24 -R ‘@RG:ERR251296:Z:illumina:FCC1H7WACXX:HG02759’ Homo_sapiens_assembly38.fasta ERR251296_1.fastq.gz ERR251296_2.fastq.gz | samtools view -Sbh | samtools sort -o ERR251296_1.bam - && samtools index ERR251296_1.bam && samtools flagstat ERR251296_1.bam

…………

[main] Version: 0.7.17-r1188

……………………

[main] Real time: 3407.936 sec; CPU: 72679.793 sec

[bam_sort_core] merging from 49 files and 1 in-memory blocks…

129958650 + 0 in total (QC-passed reads + QC-failed reads)

1139152 + 0 secondary

838006 + 0 supplementary

0 + 0 duplicates

129602327 + 0 mapped (99.73% : N/A)

127981492 + 0 paired in sequencing

63990746 + 0 read1

63990746 + 0 read2

123468430 + 0 properly paired (96.47% : N/A)

127273926 + 0 with itself and mate mapped

351243 + 0 singletons (0.27% : N/A)

2269832 + 0 with mate mapped to a different chr

1057580 + 0 with mate mapped to a different chr (mapQ>=5)

B2. Validate BAM file and fix it if necessary

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I ERR251296_1.bam -M SUMMARY -O summary_ERR251296_1

Using GATK jar /home/b0d2647/miniconda3/share/gatk4-4.1.2.0-0/gatk-package-4.1.2.0-local.jar

Tool returned: 3

~/gatk-data-ref$ cat summary_ERR251296_1

## HISTOGRAM    java.lang.String

Error Type              Count

ERROR:INVALID_TAG_NM    17041

B3. Fix the error (INVALID_TAG_NM)

~/gatk-data-ref$ samtools calmd -bAr ERR251296_1.bam Homo_sapiens_assembly38.fasta > ERR251296_1.calmd.bam

B4. Mark duplicates

~/gatk-data-ref$ gatk MarkDuplicates -I ERR251296_1.calmd.bam -O ERR251296_1.calmd.mdup.bam -M ERR251296_1.calmd.dupMetrics.txt

……………..

INFO 2019-04-28 04:31:40 SortingCollection Creating merging iterator from 6 files

INFO 2019-04-28 04:32:30 MarkDuplicates Traversing fragment information and detecting duplicates.

INFO 2019-04-28 04:32:30 SortingCollection Creating merging iterator from 11 files

INFO 2019-04-28 04:33:42 MarkDuplicates Sorting list of duplicate records.

INFO 2019-04-28 04:33:42 MarkDuplicates After generateDuplicateIndexes freeMemory: 2790920768; totalMemory: 3755474944; maxMemory: 3755474944

INFO 2019-04-28 04:33:42 MarkDuplicates Marking 1927552 records as duplicates.

INFO 2019-04-28 04:33:42 MarkDuplicates Found 0 optical duplicate clusters.

INFO 2019-04-28 04:33:43 MarkDuplicates Reads are assumed to be ordered by: coordinate

INFO 2019-04-28 04:35:48 MarkDuplicates Written 10,000,000 records. Elapsed time: 00:02:05s. Time for last 10,000,000:125s. Last read position: chr1:220,296,254

INFO 2019-04-28 04:38:00 MarkDuplicates Written 20,000,000 records. Elapsed time: 00:04:17s. Time for last 10,000,000:131s. Last read position: chr2:209,223,795

………………….

INFO 2019-04-28 04:53:37 MarkDuplicates Written 120,000,000 records. Elapsed time: 00:19:54s. Time for last 10,000,000:87s. Last read position: chr22:35,225,173

………………………

[Sun Apr 28 04:54:47 UTC 2019] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 50.44 minutes.

Tool returned:0

B5. Index the BAM file

~/gatk-data-ref$ samtools index ERR251296_1.calmd.mdup.bam

B6. Run gatk HaplotypeCaller

~/gatk-data-ref$ gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I ERR251296_1.calmd.mdup.bam -L chr20:15,800,000-16,100,000 -O ERR251296_1.calmd.mdup.vcf

05:12:24.446 INFO HaplotypeCaller - 158 read(s) filtered by: ((((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadF ilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentRe adFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)

……………………..

05:12:24.448 INFO ProgressMeter - chr20:16098789 0.1 1317 9246.4

05:12:24.448 INFO ProgressMeter - Traversal complete. Processed 1317 total regions in 0.1 minutes.

B7. Record short variants (SNPs and indels)

~/gatk-data-ref$ bcftools stats ERR251296_1.calmd.mdup.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.

.............

# SN    [2]id   [3]key                                  [4]value

SN      0       number of samples:                      1

SN      0       number of records:                      207

SN      0       number of no-ALTs:                      0

SN      0       number of SNPs:                         202

SN      0       number of MNPs:                         0

SN      0       number of indels:                       5

SN      0       number of others:                       0

SN      0       number of multiallelic sites:           0

SN      0       number of multiallelic SNP sites:       0

B8. Additional directory contents as a result of 2nd pair of sequence alignment

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 12359531427 Apr 28 00:39 ERR251296_1.bam

-rw-rw-r– 1 b0d2647 b0d2647 6765576 Apr 28 00:41 ERR251296_1.bam.bai

-rw-rw-r– 1 b0d2647 b0d2647 13441427070 Apr 28 02:59 ERR251296_1.calmd.bam

-rw-rw-r– 1 b0d2647 b0d2647 3531 Apr 28 04:54 ERR251296_1.calmd.dupMetrics.txt

-rw-rw-r– 1 b0d2647 b0d2647 18167621403 Apr 28 04:54 ERR251296_1.calmd.mdup.bam

-rw-rw-r– 1 b0d2647 b0d2647 8673408 Apr 28 05:07 ERR251296_1.calmd.mdup.bam.bai

-rw-rw-r– 1 b0d2647 b0d2647 213523 Apr 28 05:12 ERR251296_1.calmd.mdup.vcf

-rw-rw-r– 1 b0d2647 b0d2647 115099 Apr 28 05:12 ERR251296_1.calmd.mdup.vcf.idx

BAM files could be merged and analyzed for combined analysis of multiple sequencing pairs of the same genome

C1. Merge the two BAM files

~/gatk-data-ref$ gatk MergeSamFiles -I ERR251295_1.calmd.bam -I ERR251296_1.calmd.bam -O ERR25129596.bam

………………….

INFO 2019-04-28 03:50:00 MergeSamFiles Processed 259,000,000 records. Elapsed time: 00:19:20s. Time for last 1,000,000: 7s.Last read position:chrUn_JTFH01001899v1_decoy:273

INFO 2019-04-28 03:50:02 MergeSamFiles Finished reading inputs.

[Sun Apr 28 03:50:02 UTC 2019] picard.sam.MergeSamFiles done. Elapsed time: 19.39 minutes.

C2. Mark duplicates

~/gatk-data-ref$ gatk MarkDuplicates -I ERR25129596.bam -O ERR25129596.mdup.bam -M ERR25129596.dupMetrics.txt

INFO 2019-04-28 04:44:56 SortingCollection Creating merging iterator from 10 files

INFO 2019-04-28 04:46:32 MarkDuplicates Traversing fragment information and detecting duplicates.

INFO 2019-04-28 04:46:32 SortingCollection Creating merging iterator from 21 files

INFO 2019-04-28 04:48:49 MarkDuplicates Sorting list of duplicate records.

INFO 2019-04-28 04:48:51 MarkDuplicates After generateDuplicateIndexes freeMemory: 2927996376; totalMemory: 3935305728; maxMemory: 3935305 728 INFO 2019-04-28 04:48:51 MarkDuplicates Marking 6604590 records as duplicates.

INFO 2019-04-28 04:48:51 MarkDuplicates Found 0 optical duplicate clusters.

INFO 2019-04-28 04:48:51 MarkDuplicates Reads are assumed to be ordered by: coordinate

INFO 2019-04-28 04:50:23 MarkDuplicates Written 10,000,000 records. Elapsed time: 00:01:31s. Time for last 10,000,000: 91s. Last read position: chr1:114,332,129

………………….

INFO 2019-04-28 05:11:03 MarkDuplicates Written 250,000,000 records. Elapsed time: 00:22:11s. Time for last 10,000,000: 49s. Last read position: chrY:56,737,140

……………………

[Sun Apr 28 05:11:50 UTC 2019] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 76.69 minutes.

C3. Index the BAM file

samtools index ERR25129596.mdup.bam

C4. Run gatk HaplotypeCaller

gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I ERR25129596.mdup.bam -L chr20:15,800,000-16,100,000 -O ERR25129596.mdup.vcf

05:29:40.276 INFO ProgressMeter - Current Locus Elapsed Minutes Regions Processed Regions/Minute

05:29:50.098 INFO HaplotypeCaller -

500 read(s) filtered by: ((((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)

500 read(s) filtered by: (((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND GoodCigarReadFilter)

  500 read(s) filtered by: ((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter)
      
      500 read(s) filtered by: (((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter)
          
          500 read(s) filtered by: ((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter)
              
              133 read(s) filtered by: (((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter)
                  
                  122 read(s) filtered by: ((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappedReadFilter)
                      
                      122 read(s) filtered by: (MappingQualityReadFilter AND MappingQualityAvailableReadFilter)
                          
                          122 read(s) filtered by: MappingQualityReadFilter 
                  
                  11 read(s) filtered by: NotSecondaryAlignmentReadFilter 
             
              367 read(s) filtered by: NotDuplicateReadFilter 
              

05:29:50.098 INFO ProgressMeter - chr20:16099540 0.2 1373 8387.3

05:29:50.099 INFO ProgressMeter - Traversal complete. Processed 1373 total regions in 0.2 minutes.

C5. Record short variants (SNPs and indels)

~/gatk-data-ref$ bcftools stats ERR25129596.mdup.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
.............

# SN    [2]id   [3]key                                  [4]value

SN      0       number of samples:                      1

SN      0       number of records:                      286

SN      0       number of no-ALTs:                      0

SN      0       number of SNPs:                         276

SN      0       number of MNPs:                         0

SN      0       number of indels:                       10

SN      0       number of others:                       0

SN      0       number of multiallelic sites:           0

SN      0       number of multiallelic SNP sites:       0

C6. Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 34307229848 Apr 28 03:50 ERR25129596.bam

-rw-rw-r– 1 b0d2647 b0d2647 3569 Apr 28 05:11 ERR25129596.dupMetrics.txt

-rw-rw-r– 1 b0d2647 b0d2647 34564180275 Apr 28 05:11 ERR25129596.mdup.bam

-rw-rw-r– 1 b0d2647 b0d2647 9185888 Apr 28 05:24 ERR25129596.mdup.bam.bai

-rw-rw-r– 1 b0d2647 b0d2647 230777 Apr 28 05:29 ERR25129596.mdup.vcf

-rw-rw-r– 1 b0d2647 b0d2647 116101 Apr 28 05:29 ERR25129596.mdup.vcf.idx

LS0tDQp0aXRsZTogIkFuYWx5c2lzIG9mIHdob2xlIGdlbm9tZSBvZiBhbiBpbmRpdmlkdWFsIChIRzAyNzU5KSBmcm9tIHRoZSAxMDAwIGdlbm9tZSBwcm9qZWN0Ig0KYXV0aG9yOiAiQmhhZ2lyYXRoaSBEYXNoIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KDQojIyBBMS4gUmVmZXJlbmNlcyBhbmQgcmVzb3VyY2VzDQoNCiMjIyMgV2Ugd2lsbCBhbmFseXplIHRoZSBIRzAyNzU5IGxvdyBjb3ZlcmFnZSBnZW5vbWUgc2VxdWVuY2luZyBkYXRhLg0KDQohWzEwMDBfZ2Vub21lX0hHMDI3NTldKEhHMDI3NTkuanBlZykNCg0KDQojIyMjIE1hY2hpbmUNCg0KR29vZ2xlIENsb3VkIFBsYXRmb3JtIChHQ1ApLCA0IHZDUFVzLCAxNSBHQg0KIA0KR29vZ2xlIENsb3VkIFBsYXRmb3JtIChHQ1ApLCAyNCB2Q1BVcywgMzIgR0INCg0KDQoNCiMjIEEyLiBEb3dubG9hZCBhbmFseXNpcyBkYXRhc2V0cyAodGhlIGZhc3RxIGZpbGVzKQ0KDQoNCiMjIyMgfi9nYXRrX2RhdGFfcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9FUlIyNTEvRVJSMjUxMjk1L0VSUjI1MTI5NV8yLmZhc3RxLmd6DQoNCkNvbnRpbnVpbmcgaW4gYmFja2dyb3VuZCwgcGlkIDI1NzcwLg0KDQojIyMjIH4vZ2F0a19kYXRhX3JlZiQgd2dldCAtYnFjIGZ0cDovL2Z0cC5zcmEuZWJpLmFjLnVrL3ZvbDEvZmFzdHEvRVJSMjUxL0VSUjI1MTI5NS9FUlIyNTEyOTVfMS5mYXN0cS5neg0KDQpDb250aW51aW5nIGluIGJhY2tncm91bmQsIHBpZCAyNTc3Ni4NCg0KIyMjIyB+L2dhdGtfZGF0YV9yZWYkIHdnZXQgLWJxYyBmdHA6Ly9mdHAuc3JhLmViaS5hYy51ay92b2wxL2Zhc3RxL0VSUjI1MS9FUlIyNTEyOTYvRVJSMjUxMjk2XzIuZmFzdHEuZ3oNCg0KQ29udGludWluZyBpbiBiYWNrZ3JvdW5kLCBwaWQgMjU3ODguDQoNCiMjIyMgfi9nYXRrX2RhdGFfcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9FUlIyNTEvRVJSMjUxMjk2L0VSUjI1MTI5Nl8xLmZhc3RxLmd6DQoNCkNvbnRpbnVpbmcgaW4gYmFja2dyb3VuZCwgcGlkIDI1NzkwLg0KDQoNCg0KIyMjIERpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgNTU5NTY4NjAyOSBBcHIgMjIgMDI6MDMgRVJSMjUxMjk1XzEuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgNTcxOTQ0OTM1MiBBcHIgMjIgMDI6MDMgRVJSMjUxMjk1XzIuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgNTY1MzQ5NDk2NSBBcHIgMjEgMjI6MzAgRVJSMjUxMjk2XzEuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgNTc3MjM5MDcyNiBBcHIgMjEgMjI6MTkgRVJSMjUxMjk2XzIuZmFzdHEuZ3oNCg0KDQoNCg0KIyMgQTMuIER3b25sb2FkIHRoZSByZWZyZW5jZSBhbmQvb3IgZ2Vub21lIGZpbGVzIChmcm9tIHRoZSBHQVRLIHJlc291cmNlcyBidW5kbGUgbWFpbnRhaW5lZCBieSBCcm9hZCBJbnN0aXR1cmUgaW4gYSBnb29nbGUgYnVja2V0KQ0KDQoNCg0KIyMjIyB+L2dhdGtfZGF0YV9yZWYkIGdzdXRpbCBjcCBnczovL2dlbm9taWNzLXB1YmxpYy1kYXRhL3Jlc291cmNlcy9icm9hZC9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC4vDQoNCkNvcHlpbmcgZ3M6Ly9nZW5vbWljcy1wdWJsaWMtZGF0YS9yZXNvdXJjZXMvYnJvYWQvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS4uLg0KDQoNCiMjIyMgfi9nYXRrX2RhdGFfcmVmJCBnc3V0aWwgY3AgZ3M6Ly9nZW5vbWljcy1wdWJsaWMtZGF0YS9yZXNvdXJjZXMvYnJvYWQvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5kaWN0IC4vDQoNCkNvcHlpbmcgZ3M6Ly9nZW5vbWljcy1wdWJsaWMtZGF0YS9yZXNvdXJjZXMvYnJvYWQvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5kaWN0Li4uDQoNCg0KIyMjIyB+L2dhdGtfZGF0YV9yZWYkIGdzdXRpbCBjcCBnczovL2dlbm9taWNzLXB1YmxpYy1kYXRhL3Jlc291cmNlcy9icm9hZC9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLmZhaSAuLw0KDQpDb3B5aW5nIGdzOi8vZ2Vub21pY3MtcHVibGljLWRhdGEvcmVzb3VyY2VzL2Jyb2FkL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuZmFpLi4uDQoNCg0KDQoNCiMjIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgNTgxNzEyIEFwciAyMCAxMzo0MiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5kaWN0DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgIDMyNDk5MTI3NzggQXByIDIwIDEzOjQ0IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAxNjA5MjggQXByIDIwIDE2OjQ3IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLmZhaQ0KDQoNCg0KIyMgQTQuIE1ha2UgYSBCV0EgaW5kZXggb2YgdGhlIGh1bWFuIGdlbm9tZQ0KDQoNCg0KDQoNCiMjIyMgfi9nYXRrX2RhdGFfcmVmJCBid2EgaW5kZXggLWEgYnd0c3cgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGENCg0KDQpbYndhX2luZGV4XSBQYWNrIEZBU1RBLi4uIDMwLjcwIHNlYw0KDQpbYndhX2luZGV4XSBDb25zdHJ1Y3QgQldUIGZvciB0aGUgcGFja2VkIHNlcXVlbmNlLi4uDQoNCltCV1RJbmNDcmVhdGVdIHRleHRMZW5ndGg9NjQzNDY5MzgzNCwgYXZhaWxhYmxlV29yZD00NjQ3Njg2MzINCg0KW0JXVEluY0NvbnN0cnVjdEZyb21QYWNrZWRdIDEwIGl0ZXJhdGlvbnMgZG9uZS4gOTk5OTk5OTQgY2hhcmFjdGVycyBwcm9jZXNzZWQuDQoNCltCV1RJbmNDb25zdHJ1Y3RGcm9tUGFja2VkXSAyMCBpdGVyYXRpb25zIGRvbmUuIDE5OTk5OTk5NCBjaGFyYWN0ZXJzIHByb2Nlc3NlZC4NCg0KLi4uLi4uLi4uLi4uLg0KDQoNCltCV1RJbmNDb25zdHJ1Y3RGcm9tUGFja2VkXSA3MDAgaXRlcmF0aW9ucyBkb25lLiA2NDExMTQ2OTIyIGNoYXJhY3RlcnMgcHJvY2Vzc2VkLg0KDQpbQldUSW5jQ29uc3RydWN0RnJvbVBhY2tlZF0gNzEwIGl0ZXJhdGlvbnMgZG9uZS4gNjQzMjk3ODU1NCBjaGFyYWN0ZXJzIHByb2Nlc3NlZC4NCg0KW2J3dF9nZW5dIEZpbmlzaGVkIGNvbnN0cnVjdGluZyBCV1QgaW4gNzExIGl0ZXJhdGlvbnMuDQoNCltid2FfaW5kZXhdIDQ3MzQuOTQgc2Vjb25kcyBlbGFwc2UuDQoNCltid2FfaW5kZXhdIFVwZGF0ZSBCV1QuLi4gMjMuMzYgc2VjDQoNCltid2FfaW5kZXhdIFBhY2sgZm9yd2FyZC1vbmx5IEZBU1RBLi4uIDIyLjEyIHNlYw0KDQpbYndhX2luZGV4XSBDb25zdHJ1Y3QgU0EgZnJvbSBCV1QgYW5kIE9jYy4uLiAyNjY1Ljc3IHNlYw0KDQpbbWFpbl0gVmVyc2lvbjogMC43LjE3LXIxMTg4DQoNClttYWluXSBDTUQ6IGJ3YSBpbmRleCAtYSBid3RzdyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YQ0KDQpbbWFpbl0gUmVhbCB0aW1lOiA3NTU4Ljc4MCBzZWM7IENQVTogNzQ3Ni44OTYgc2VjDQoNCg0KIyMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgNDg3NTUzIEFwciAyMSAyMjo0OSBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5hbHQNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAyMDE5OSBBcHIgMjEgMjI6NDkgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuYW1iDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICA0NTU0NzQgQXByIDIxIDIyOjQ5IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmFubg0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAzMjE3MzQ3MDA0IEFwciAyMSAyMjo0OSBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5id3QNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgIDgwNDMzNjczMSBBcHIgMjEgMjI6NDkgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQucGFjDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgIDE2MDg2NzM1MTIgQXByIDIxIDIyOjUwIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LnNhDQoNCg0KDQojIyBBNS4gQWxpZ24gdGhlIDFzdCBwYWlyIG9mIHNlcXVlbmNlcyB0byB0aGUgcmVmZXJlbmNlIGdlbm9tZSB1c2luZyBCdXJyb3dzLVdoZWVsZXIgQWxpZ25lciAoQldBKQ0KDQpOb3RlOiBJdCBpcyBpbXBvcnRhbnQgdG8gYXNzaWduIHJlYWQgZ3JvdXBzIChSRykgdG8gdGhlIHNlcXVlbmNlcw0KDQojIyMgQ2hlY2sgdGhlIGZhc3RxIGZpbGUgY29udGVudHMNCg0KIyMjIyAgfi9nYXRrX2RhdGFfcmVmJCB6Y2F0IEVSUjI1MTI5NV8xLmZhc3RxLmd6IHwgaGVhZA0KDQpARVJSMjUxMjk1LjEgRkNDMUg3V0FDWFg6MToxMTAxOjExMzM6MjE4MS8xDQpUR0NUTkFBQUFUQUNBR0FBR0FDQUFBVFRUVENUQ0FUVFRBR0dHQUFBVENBQVRUVFRBVFRBR1RHQ1RUR0dUQ0FHQUFBQUdBQ1RBQUFBQVRUVENBVEdUVEdBQVRBQ0dUQUNUQUFUDQorDQpDQ0NGIzJBREhISEhHSUdHSEdJSUlHSElKSkpJSUhFSUlHR0lKSkpKSUpKQ0dHSElJSEpISUdISUVJSkpCR0lJSUpKR0lHSUlJSklFRUVFSEZGRkZDREVFRUVFRURDQ0JCRUREDQoNCkBFUlIyNTEyOTUuMiBGQ0MxSDdXQUNYWDoxOjExMDE6MTA4NjoyMjAwLzENClRHQUNOQVRUQ0NBVFRDQUFUVENUR1RUQ0FBVEdBVFRDQ0NUVEFHQVRUQ0NBVFRUR0FUR0FUR0FUVENDQVRUQ0dBVFRDQ0FUVFRHQVRHQVRHQVRUQ0NBVEdDR0FUVENDQVRUQUcNCisNCkJDQEYjMkFEREhISEhKSklISUlKSUpKSkpKSklHSUpKSkpKSkdISUpKSUpCSElKSUdISUZJSUhJSkpJSklKSkpJSklJSD5ESElJSEVHSEhHR0hHSklKSkpKSklHSEhISEhGRkYNCg0KQEVSUjI1MTI5NS4zIEZDQzFIN1dBQ1hYOjE6MTEwMToxMDk0OjIyMjUvMQ0KR0NUR05HQUdDQ1RDR1RUR0NDQVRHVEFHR0NBQUNUR1RBVFRHQUFBR0FHVENDQUdHQ1RDQ1RDQ1RDQUdBVFRBR0dHQUNUQ0FUVFRDQ1RDVENDQ0NUQ1RBQ0FBR0NDQ0dHVEdUVA0KDQoNCg0KIyMjIyAgfi9nYXRrX2RhdGFfcmVmJCB6Y2F0IEVSUjI1MTI5NV8yLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQoNCkBFUlIyNTEyOTUuMSBGQ0MxSDdXQUNYWDoxOjExMDE6MTEzMzoyMTgxLzINClRUR1RDVEFHVFRBQ1RUR0FBQ0FBVEFBR0FHQUFBVFRDVEFUQ1RUVEdBR0NUVFRDQVRBQVRUR0dDVFRUQ1RHR0FDQUNDQUNUR0FHVFRUQVRUQUdBVEFBVENUVFRBQUFBQVRBVFQNCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYkIGJ3YSBtZW0gLU0gLXQgMjQgLVIgJ0BSR1x0SUQ6RVJSMjUxMjk1XHRMQjpaXHRQTDppbGx1bWluYVx0UFU6RkNDMUg3V0FDWFhcdFNNOkhHMDI3NTknIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIEVSUjI1MTI5NV8xLmZhc3RxLmd6IEVSUjI1MTI5NV8yLmZhc3RxLmd6IHwgc2FtdG9vbHMgdmlldyAtU2JoIHwgc2FtdG9vbHMgc29ydCAtbyBFUlIyNTEyOTVfMS5iYW0gLSAmJiBzYW10b29scyBpbmRleCBFUlIyNTEyOTVfMS5iYW0gJiYgc2FtdG9vbHMgZmxhZ3N0YXQgRVJSMjUxMjk1XzEuYmFtDQoNCi4uLi4uLi4uLi4uLi4uLi4NCg0KW21haW5dIFZlcnNpb246IDAuNy4xNy1yMTE4OA0KDQpbbWFpbl0gUmVhbCB0aW1lOiA1Nzc2LjczOSBzZWM7IENQVTogODE0NTYuNzcyIHNlYw0KDQpbYmFtX3NvcnRfY29yZV0gbWVyZ2luZyBmcm9tIDQ5IGZpbGVzIGFuZCAxIGluLW1lbW9yeSBibG9ja3MuLi4NCg0KDQpgYGANCjEyOTMzMDM2MCArIDAgaW4gdG90YWwgKFFDLXBhc3NlZCByZWFkcyArIFFDLWZhaWxlZCByZWFkcykNCg0KMTEyODMxMCArIDAgc2Vjb25kYXJ5DQoNCjgzMjgwMCArIDAgc3VwcGxlbWVudGFyeQ0KDQowICsgMCBkdXBsaWNhdGVzDQoNCjEyODk0NDI0NyArIDAgbWFwcGVkICg5OS43MCUgOiBOL0EpDQoNCjEyNzM2OTI1MCArIDAgcGFpcmVkIGluIHNlcXVlbmNpbmcNCg0KNjM2ODQ2MjUgKyAwIHJlYWQxDQoNCjYzNjg0NjI1ICsgMCByZWFkMg0KDQoxMjI4MjM5MDAgKyAwIHByb3Blcmx5IHBhaXJlZCAoOTYuNDMlIDogTi9BKQ0KDQoxMjY2MDE5MjIgKyAwIHdpdGggaXRzZWxmIGFuZCBtYXRlIG1hcHBlZA0KDQozODEyMTUgKyAwIHNpbmdsZXRvbnMgKDAuMzAlIDogTi9BKQ0KDQoyMjUzMjM4ICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNocg0KDQoxMDUyMDAwICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNociAobWFwUT49NSkNCg0KYGBgDQoNCg0KIyMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDEyMjQxOTY2ODk2IEFwciAyNiAyMjowOCBFUlIyNTEyOTVfMS5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgNjY2NTcyOCBBcHIgMjYgMjI6MTIgRVJSMjUxMjk1XzEuYmFtLmJhaQ0KDQoNCg0KDQoNCiMjIEE2LiBWYWxpZGF0ZSB0aGUgQkFNIGZpbGUgYW5kIGZpeCBpdCBpZiBuZWNlc3NhcnkNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBFUlIyNTEyOTVfMS5iYW0gLU0gU1VNTUFSWSAtTyBzdW1tYXJ5X0VSUjI1MTI5NV8xDQogDQpVc2luZyBHQVRLIGphciAvaG9tZS9iMGQyNjQ3L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphcg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KSU5GTyAgICAyMDE5LTA0LTI3IDIzOjM5OjUxICAgICBTYW1GaWxlVmFsaWRhdG9yICAgICAgICBWYWxpZGF0ZWQgUmVhZCAgICAxMCwwMDAsMDAwIHJlY29yZHMuICBFbGFwc2VkIHRpbWU6IDAwOjAxOjQxcy4gIFRpbWUgZm9yIGxhc3QgMTAsMDAwLDAwMDogIDEwMHMuICBMYXN0IHJlYWQgcG9zaXRpb246IGNocjE6MjIxLDIwNyw5NjQNCg0KDQpJTkZPICAgIDIwMTktMDQtMjcgMjM6NDE6MjQgICAgIFNhbUZpbGVWYWxpZGF0b3IgICAgICAgIFZhbGlkYXRlZCBSZWFkICAgIDIwLDAwMCwwMDAgcmVjb3Jkcy4gIEVsYXBzZWQgdGltZTogMDA6MDM6MTRzLiAgVGltZSBmb3IgbGFzdCAxMCwwMDAsMDAwOjkzcy4gIExhc3QgcmVhZCBwb3NpdGlvbjogY2hyMjoyMTEsNTIwLDc0Nw0KDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KSU5GTyAgICAyMDE5LTA0LTI3IDIzOjU4OjAzICAgICBTYW1GaWxlVmFsaWRhdG9yICAgICAgICBWYWxpZGF0ZWQgUmVhZCAgIDEyMCwwMDAsMDAwIHJlY29yZHMuICBFbGFwc2VkIHRpbWU6IDAwOjE5OjUzcy4gIFRpbWUgZm9yIGxhc3QgMTAsMDAwLDAwMDogIDEwNHMuICBMYXN0IHJlYWQgcG9zaXRpb246IGNocjIyOjQ3LDIwNCw5ODYNCg0KDQpbU3VuIEFwciAyOCAwMDowNjoxOCBVVEMgMjAxOV0gcGljYXJkLnNhbS5WYWxpZGF0ZVNhbUZpbGUgZG9uZS4gRWxhcHNlZCB0aW1lOiAyOC4xNyBtaW51dGVzLg0KDQpUbyBnZXQgaGVscCwgc2VlIGh0dHA6Ly9icm9hZGluc3RpdHV0ZS5naXRodWIuaW8vcGljYXJkL2luZGV4Lmh0bWwjR2V0dGluZ0hlbHANCg0KVG9vbCByZXR1cm5lZDogMw0KDQoNCiMjIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnlfRVJSMjUxMjk1XzEgDQoNCmBgYA0KIyMgSElTVE9HUkFNICAgIGphdmEubGFuZy5TdHJpbmcNCg0KRXJyb3IgICBUeXBlICAgICAgICAgICAgICBDb3VudA0KDQpFUlJPUjogIElOVkFMSURfVEFHX05NICAgIDE2ODE2DQpgYGANCg0KDQojIyBBNy4gRml4IHRoZSBlcnJvciBpbiB0aGUgQkFNIGZpbGUgdXNpbmcgc2FtdG9vbHMNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBjYWxtZCAtYkFyIEVSUjI1MTI5NV8xLmJhbSBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSA+IEVSUjI1MTI5NV8xLmNhbG1kLmJhbQ0KDQouLi4uDQoNCltiYW1fZmlsbG1kMV0gZGlmZmVyZW50IE1EIGZvciByZWFkICdFUlIyNTEyOTUuNjAyMTAxMTcnOiAnMzNHMFQxOUMwQzFDNEMxMUMyMycgLT4gJzBOMzJHMFQxOUMwQzFDNEMxMUMyMycNCg0KW2JhbV9maWxsbWQxXSBkaWZmZXJlbnQgTk0gZm9yIHJlYWQgJ0VSUjI1MTI5NS41OTY2ODc1NSc6IDAgLT4gNA0KDQpbYmFtX2ZpbGxtZDFdIGRpZmZlcmVudCBNRCBmb3IgcmVhZCAnRVJSMjUxMjk1LjU5NjY4NzU1JzogJzU0JyAtPiAnME4wTjBOME41MCcNCg0KW2JhbV9maWxsbWQxXSBkaWZmZXJlbnQgTk0gZm9yIHJlYWQgJ0VSUjI1MTI5NS40Nzg2OTQ3Nyc6IDAgLT4gMQ0KDQpbYmFtX2ZpbGxtZDFdIGRpZmZlcmVudCBNRCBmb3IgcmVhZCAnRVJSMjUxMjk1LjQ3ODY5NDc3JzogJzczJyAtPiAnNzJOMCcNCg0KDQoNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCg0KDQoNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAxMzMxOTc2MjQyNCBBcHIgMjggMDE6NTQgRVJSMjUxMjk1XzEuY2FsbWQuYmFtDQoNCg0KDQoNCg0KDQojIyBBOC4gTWFyayBkdXBsaWNhdGVzDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGdhdGsgTWFya0R1cGxpY2F0ZXMgLUkgRVJSMjUxMjk1XzEuY2FsbWQuYmFtIC1PIEVSUjI1MTI5NV8xLmNhbG1kLm1kdXAuYmFtIC1NIEVSUjI1MTI5NV8xLmNhbG1kLmR1cE1ldHJpY3MudHh0DQoNCg0KDQoNCiMjIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgMzUyNSBBcHIgMjggMDQ6NTMgRVJSMjUxMjk1XzEuY2FsbWQuZHVwTWV0cmljcy50eHQNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAxNzk5ODk0NzA0NyBBcHIgMjggMDQ6NTMgRVJSMjUxMjk1XzEuY2FsbWQubWR1cC5iYW0NCg0KDQoNCg0KDQojIyBBOS4gSW5kZXggdGhlIEJBTSBmaWxlDQoNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIGluZGV4IEVSUjI1MTI5NV8xLmNhbG1kLm1kdXAuYmFtDQoNCg0KIyMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICA4NjM1MDE2IEFwciAyOCAwNTowNiBFUlIyNTEyOTVfMS5jYWxtZC5tZHVwLmJhbS5iYWkNCg0KDQoNCiMjIEExMC4gUnVuIGdhdGsgSGFwbG90eXBlQ2FsbGVyDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBIYXBsb3R5cGVDYWxsZXIgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgRVJSMjUxMjk1XzEuY2FsbWQubWR1cC5iYW0gLUwgY2hyMjA6MTUsODAwLDAwMC0xNiwxMDAsMDAwIC1PIEVSUjI1MTI5NV8xLmNhbG1kLm1kdXAudmNmDQoNCg0KMDU6MTA6MTMuNTM1IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgQ3VycmVudCBMb2N1cyAgRWxhcHNlZCBNaW51dGVzICAgICBSZWdpb25zIFByb2Nlc3NlZCAgIFJlZ2lvbnMvTWludXRlDQoNCjA1OjEwOjIzLjU1NiBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgY2hyMjA6MTYwOTA2MzMgICAgICAgICAgICAgIDAuMiAgICAgICAgICAgICAgICAgIDEyNzAgICAgICAgICAgIDc2MDQuOA0KDQowNToxMDoyMy45OTUgSU5GTyAgSGFwbG90eXBlQ2FsbGVyIC0gDQoNCiAgICAgICAgMTY3IHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKCgoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIpIEFORCBQYXNzZXNWZW5kb3JRdWFsaXR5Q2hlY2tSZWFkRmlsdGVyKSBBTkQgTm9uWmVyb1JlZmVyZW5jZUxlbmd0aEFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBHb29kQ2lnYXJSZWFkRmlsdGVyKSBBTkQgV2VsbGZvcm1lZFJlYWRGaWx0ZXIpICANCg0KICAgICAgICAxNjcgcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKCgoKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikgQU5EIE5vdFNlY29uZGFyeUFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBOb3REdXBsaWNhdGVSZWFkRmlsdGVyKSBBTkQgUGFzc2VzVmVuZG9yUXVhbGl0eUNoZWNrUmVhZEZpbHRlcikgQU5EIE5vblplcm9SZWZlcmVuY2VMZW5ndGhBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgR29vZENpZ2FyUmVhZEZpbHRlcikNCg0KDQogICAgICAxNjcgcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIpIEFORCBQYXNzZXNWZW5kb3JRdWFsaXR5Q2hlY2tSZWFkRmlsdGVyKSBBTkQgTm9uWmVyb1JlZmVyZW5jZUxlbmd0aEFsaWdubWVudFJlYWRGaWx0ZXIpDQogICAgICANCiAgICAgICAgICAxNjcgcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgTm90RHVwbGljYXRlUmVhZEZpbHRlcikgQU5EIFBhc3Nlc1ZlbmRvclF1YWxpdHlDaGVja1JlYWRGaWx0ZXIpDQogICAgICAgICAgDQogICAgICAgICAgICAgIDE2NyByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIpDQogICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgNjMgcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlcikNCiAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIDU2IHJlYWQocykgZmlsdGVyZWQgYnk6ICgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICA1NiByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTYgcmVhZChzKSBmaWx0ZXJlZCBieTogTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcgcmVhZChzKSBmaWx0ZXJlZCBieTogTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQgcmVhZChzKSBmaWx0ZXJlZCBieTogTm90RHVwbGljYXRlUmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgIA0KMDU6MTA6MjQuMDA4IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICBjaHIyMDoxNjA5ODMwNyAgICAgICAgICAgICAgMC4yICAgICAgICAgICAgICAgICAgMTMxNyAgICAgICAgICAgNzU0NS4xDQoNCjA1OjEwOjI0LjAwOSBJTkZPICBQcm9ncmVzc01ldGVyIC0gVHJhdmVyc2FsIGNvbXBsZXRlLiBQcm9jZXNzZWQgMTMxNyB0b3RhbCByZWdpb25zIGluIDAuMiBtaW51dGVzLg0KDQoNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAyMTIwMDMgQXByIDI4IDA1OjEwIEVSUjI1MTI5NV8xLmNhbG1kLm1kdXAudmNmDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAxMTUwOTkgQXByIDI4IDA1OjEwIEVSUjI1MTI5NV8xLmNhbG1kLm1kdXAudmNmLmlkeA0KDQoNCg0KDQoNCiMjIEExMS4gUmVjb3JkIHNob3J0IHZhcmlhbnRzIChpLmUuLCBTTlBzIGFuZCBpbmRlbHMpIGluIHRoZSBpbnRlbmRlZCBjaHJvbW9zb21hbCByZWdpb24NCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBFUlIyNTEyOTVfMS5jYWxtZC5tZHVwLnZjZg0KDQpgYGANCiMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBiY2Z0b29scyBzdGF0cyAoMS45K2h0c2xpYi0xLjkpIGFuZCBjYW4gYmUgcGxvdHRlZCB1c2luZyBwbG90LXZjZnN0YXRzLg0KDQoNCiMgU04gICAgWzJdaWQgICBbM11rZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRddmFsdWUNCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBzYW1wbGVzOiAgICAgICAgICAgICAgICAgICAgICAxDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAgICAgICAgICAgICAgICAgMjAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6ICAgICAgICAgICAgICAgICAgICAgICAgIDE5Ng0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIE1OUHM6ICAgICAgICAgICAgICAgICAgICAgICAgIDANCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgICAgICAgICAgICAgICAgICA0DQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygb3RoZXJzOiAgICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlczogICAgICAgICAgIDANCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAwDQoNCmBgYA0KDQoNCg0KDQojIyBCMS4gQWxpZ24gdGhlIDJuZCBwYWlyIG9mIHNlcXVlbmNlcyB0byB0aGUgcmVmZXJlbmNlIGdlbm9tZSB1c2luZyBCV0EgYW5kIGFuYWx5emUgYXMgYWJvdmUNCg0KIyMjIEZpbGUgY29udGVudHMNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCB6Y2F0IEVSUjI1MTI5Nl8xLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQoNCkBFUlIyNTEyOTYuMSBGQ0MxSDdXQUNYWDoyOjExMDE6MTQ5NToyMTQ1LzENCg0KTlRDQUdBQUFDVFRHVFRUR1RHQVRHVEdUR0NDQ1RDVEFDVEdBQ1RHQUdUVEdBQUNDVFRUQ1RUVFRDQVRBR0FHQ0FHVFRUVEdBQUFDQUNUQ1RUVFRUR1RBR0FBVENUR0NBQUdBRw0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYkIHpjYXQgRVJSMjUxMjk2XzIuZmFzdHEuZ3ogfCBoZWFkIC1uIDINCg0KQEVSUjI1MTI5Ni4xIEZDQzFIN1dBQ1hYOjI6MTEwMToxNDk1OjIxNDUvMg0KDQpHQ0FBQVRBVENDVENUVEdDQUdBVFRDQ0FHQUFBQUFHQUdUR1RUVENBQUFBQ1RHQ1RDQ1RUQ0FBQUFDR0dUR0dUVENBQVRUQ1RDVFRBR1RUR0FHVEFDQUNBQ0FUQ1RDQUFBVEFBDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBid2EgbWVtIC1NIC10IDI0IC1SICdAUkdcdElEOkVSUjI1MTI5Nlx0TEI6Wlx0UEw6aWxsdW1pbmFcdFBVOkZDQzFIN1dBQ1hYXHRTTTpIRzAyNzU5JyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSBFUlIyNTEyOTZfMS5mYXN0cS5neiBFUlIyNTEyOTZfMi5mYXN0cS5neiB8IHNhbXRvb2xzIHZpZXcgLVNiaCB8IHNhbXRvb2xzIHNvcnQgLW8gRVJSMjUxMjk2XzEuYmFtIC0gJiYgc2FtdG9vbHMgaW5kZXggRVJSMjUxMjk2XzEuYmFtICYmIHNhbXRvb2xzIGZsYWdzdGF0IEVSUjI1MTI5Nl8xLmJhbQ0KDQoNCi4uLi4uLi4uLi4uLg0KDQpbbWFpbl0gVmVyc2lvbjogMC43LjE3LXIxMTg4DQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpbbWFpbl0gUmVhbCB0aW1lOiAzNDA3LjkzNiBzZWM7IENQVTogNzI2NzkuNzkzIHNlYw0KDQpbYmFtX3NvcnRfY29yZV0gbWVyZ2luZyBmcm9tIDQ5IGZpbGVzIGFuZCAxIGluLW1lbW9yeSBibG9ja3MuLi4NCg0KDQpgYGANCjEyOTk1ODY1MCArIDAgaW4gdG90YWwgKFFDLXBhc3NlZCByZWFkcyArIFFDLWZhaWxlZCByZWFkcykNCg0KMTEzOTE1MiArIDAgc2Vjb25kYXJ5DQoNCjgzODAwNiArIDAgc3VwcGxlbWVudGFyeQ0KDQowICsgMCBkdXBsaWNhdGVzDQoNCjEyOTYwMjMyNyArIDAgbWFwcGVkICg5OS43MyUgOiBOL0EpDQoNCjEyNzk4MTQ5MiArIDAgcGFpcmVkIGluIHNlcXVlbmNpbmcNCg0KNjM5OTA3NDYgKyAwIHJlYWQxDQoNCjYzOTkwNzQ2ICsgMCByZWFkMg0KDQoxMjM0Njg0MzAgKyAwIHByb3Blcmx5IHBhaXJlZCAoOTYuNDclIDogTi9BKQ0KDQoxMjcyNzM5MjYgKyAwIHdpdGggaXRzZWxmIGFuZCBtYXRlIG1hcHBlZA0KDQozNTEyNDMgKyAwIHNpbmdsZXRvbnMgKDAuMjclIDogTi9BKQ0KDQoyMjY5ODMyICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNocg0KDQoxMDU3NTgwICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNociAobWFwUT49NSkNCg0KYGBgDQoNCg0KIyMgQjIuIFZhbGlkYXRlIEJBTSBmaWxlIGFuZCBmaXggaXQgaWYgbmVjZXNzYXJ5DQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFZhbGlkYXRlU2FtRmlsZSAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBFUlIyNTEyOTZfMS5iYW0gLU0gU1VNTUFSWSAtTyBzdW1tYXJ5X0VSUjI1MTI5Nl8xDQoNClVzaW5nIEdBVEsgamFyIC9ob21lL2IwZDI2NDcvbWluaWNvbmRhMy9zaGFyZS9nYXRrNC00LjEuMi4wLTAvZ2F0ay1wYWNrYWdlLTQuMS4yLjAtbG9jYWwuamFyDQoNCg0KVG9vbCByZXR1cm5lZDogMw0KDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnlfRVJSMjUxMjk2XzEgDQoNCmBgYA0KIyMgSElTVE9HUkFNICAgIGphdmEubGFuZy5TdHJpbmcNCg0KRXJyb3IgVHlwZSAgICAgICAgICAgICAgQ291bnQNCg0KRVJST1I6SU5WQUxJRF9UQUdfTk0gICAgMTcwNDENCg0KYGBgDQoNCg0KDQojIyBCMy4gRml4IHRoZSBlcnJvciAoSU5WQUxJRF9UQUdfTk0pDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgc2FtdG9vbHMgY2FsbWQgLWJBciBFUlIyNTEyOTZfMS5iYW0gSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgPiBFUlIyNTEyOTZfMS5jYWxtZC5iYW0NCg0KDQoNCiMjIEI0LiBNYXJrIGR1cGxpY2F0ZXMNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIE1hcmtEdXBsaWNhdGVzIC1JIEVSUjI1MTI5Nl8xLmNhbG1kLmJhbSAtTyBFUlIyNTEyOTZfMS5jYWxtZC5tZHVwLmJhbSAtTSBFUlIyNTEyOTZfMS5jYWxtZC5kdXBNZXRyaWNzLnR4dA0KDQoNCi4uLi4uLi4uLi4uLi4uLi4uDQoNCklORk8gICAgMjAxOS0wNC0yOCAwNDozMTo0MCAgICAgU29ydGluZ0NvbGxlY3Rpb24gICAgICAgQ3JlYXRpbmcgbWVyZ2luZyBpdGVyYXRvciBmcm9tIDYgZmlsZXMNCg0KSU5GTyAgICAyMDE5LTA0LTI4IDA0OjMyOjMwICAgICBNYXJrRHVwbGljYXRlcyAgVHJhdmVyc2luZyBmcmFnbWVudCBpbmZvcm1hdGlvbiBhbmQgZGV0ZWN0aW5nIGR1cGxpY2F0ZXMuDQoNCklORk8gICAgMjAxOS0wNC0yOCAwNDozMjozMCAgICAgU29ydGluZ0NvbGxlY3Rpb24gICAgICAgQ3JlYXRpbmcgbWVyZ2luZyBpdGVyYXRvciBmcm9tIDExIGZpbGVzDQoNCklORk8gICAgMjAxOS0wNC0yOCAwNDozMzo0MiAgICAgTWFya0R1cGxpY2F0ZXMgIFNvcnRpbmcgbGlzdCBvZiBkdXBsaWNhdGUgcmVjb3Jkcy4NCg0KSU5GTyAgICAyMDE5LTA0LTI4IDA0OjMzOjQyICAgICBNYXJrRHVwbGljYXRlcyAgQWZ0ZXIgZ2VuZXJhdGVEdXBsaWNhdGVJbmRleGVzIGZyZWVNZW1vcnk6IDI3OTA5MjA3Njg7IHRvdGFsTWVtb3J5OiAzNzU1NDc0OTQ0OyBtYXhNZW1vcnk6IDM3NTU0NzQ5NDQNCg0KSU5GTyAgICAyMDE5LTA0LTI4IDA0OjMzOjQyICAgICBNYXJrRHVwbGljYXRlcyAgTWFya2luZyAxOTI3NTUyIHJlY29yZHMgYXMgZHVwbGljYXRlcy4NCg0KSU5GTyAgICAyMDE5LTA0LTI4IDA0OjMzOjQyICAgICBNYXJrRHVwbGljYXRlcyAgRm91bmQgMCBvcHRpY2FsIGR1cGxpY2F0ZSBjbHVzdGVycy4NCg0KSU5GTyAgICAyMDE5LTA0LTI4IDA0OjMzOjQzICAgICBNYXJrRHVwbGljYXRlcyAgUmVhZHMgYXJlIGFzc3VtZWQgdG8gYmUgb3JkZXJlZCBieTogY29vcmRpbmF0ZQ0KDQpJTkZPICAgIDIwMTktMDQtMjggMDQ6MzU6NDggICAgIE1hcmtEdXBsaWNhdGVzICBXcml0dGVuICAgIDEwLDAwMCwwMDAgcmVjb3Jkcy4gIEVsYXBzZWQgdGltZTogMDA6MDI6MDVzLiAgVGltZSBmb3IgbGFzdCAxMCwwMDAsMDAwOjEyNXMuICBMYXN0IHJlYWQgcG9zaXRpb246IGNocjE6MjIwLDI5NiwyNTQNCiANCklORk8gICAgMjAxOS0wNC0yOCAwNDozODowMCAgICAgTWFya0R1cGxpY2F0ZXMgIFdyaXR0ZW4gICAgMjAsMDAwLDAwMCByZWNvcmRzLiAgRWxhcHNlZCB0aW1lOiAwMDowNDoxN3MuICBUaW1lIGZvciBsYXN0IDEwLDAwMCwwMDA6MTMxcy4gIExhc3QgcmVhZCBwb3NpdGlvbjogY2hyMjoyMDksMjIzLDc5NQ0KIA0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoNCklORk8gICAgMjAxOS0wNC0yOCAwNDo1MzozNyAgICAgTWFya0R1cGxpY2F0ZXMgIFdyaXR0ZW4gICAxMjAsMDAwLDAwMCByZWNvcmRzLiAgRWxhcHNlZCB0aW1lOiAwMDoxOTo1NHMuICBUaW1lIGZvciBsYXN0IDEwLDAwMCwwMDA6ODdzLiAgTGFzdCByZWFkIHBvc2l0aW9uOiBjaHIyMjozNSwyMjUsMTczDQoNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCltTdW4gQXByIDI4IDA0OjU0OjQ3IFVUQyAyMDE5XSBwaWNhcmQuc2FtLm1hcmtkdXBsaWNhdGVzLk1hcmtEdXBsaWNhdGVzIGRvbmUuIEVsYXBzZWQgdGltZTogNTAuNDQgbWludXRlcy4NCg0KVG9vbCByZXR1cm5lZDowDQoNCg0KDQoNCiMjIEI1LiBJbmRleCB0aGUgQkFNIGZpbGUNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIGluZGV4IEVSUjI1MTI5Nl8xLmNhbG1kLm1kdXAuYmFtDQoNCg0KDQojIyBCNi4gUnVuIGdhdGsgSGFwbG90eXBlQ2FsbGVyDQoNCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYkIGdhdGsgSGFwbG90eXBlQ2FsbGVyIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIEVSUjI1MTI5Nl8xLmNhbG1kLm1kdXAuYmFtIC1MIGNocjIwOjE1LDgwMCwwMDAtMTYsMTAwLDAwMCAtTyBFUlIyNTEyOTZfMS5jYWxtZC5tZHVwLnZjZg0KDQowNToxMjoyNC40NDYgSU5GTyAgSGFwbG90eXBlQ2FsbGVyIC0gMTU4IHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKCgoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRg0KaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgTm90RHVwbGljYXRlUmVhZEZpbHRlcikgQU5EIFBhc3Nlc1ZlbmRvclF1YWxpdHlDaGVja1JlYWRGaWx0ZXIpIEFORCBOb25aZXJvUmVmZXJlbmNlTGVuZ3RoQWxpZ25tZW50UmUNCmFkRmlsdGVyKSBBTkQgR29vZENpZ2FyUmVhZEZpbHRlcikgQU5EIFdlbGxmb3JtZWRSZWFkRmlsdGVyKQ0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KICAgICAgICAgICAgICAgICAgDQowNToxMjoyNC40NDggSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgIGNocjIwOjE2MDk4Nzg5ICAgICAgICAgICAgICAwLjEgICAgICAgICAgICAgICAgICAxMzE3ICAgICAgICAgICA5MjQ2LjQNCg0KMDU6MTI6MjQuNDQ4IElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCAxMzE3IHRvdGFsIHJlZ2lvbnMgaW4gMC4xIG1pbnV0ZXMuDQoNCg0KDQoNCiMjIEI3LiBSZWNvcmQgc2hvcnQgdmFyaWFudHMgKFNOUHMgYW5kIGluZGVscykNCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYkIGJjZnRvb2xzIHN0YXRzIEVSUjI1MTI5Nl8xLmNhbG1kLm1kdXAudmNmDQoNCg0KYGBgDQojIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgYmNmdG9vbHMgc3RhdHMgKDEuOStodHNsaWItMS45KSBhbmQgY2FuIGJlIHBsb3R0ZWQgdXNpbmcgcGxvdC12Y2ZzdGF0cy4NCg0KLi4uLi4uLi4uLi4uLg0KDQojIFNOICAgIFsyXWlkICAgWzNda2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0XXZhbHVlDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAgICAgICAgICAgICAgICAgMQ0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgICAgICAgICAgICAgICAgIDIwNw0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgICAgICAgICAgICAgICAgIDANCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBTTlBzOiAgICAgICAgICAgICAgICAgICAgICAgICAyMDINCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBNTlBzOiAgICAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgaW5kZWxzOiAgICAgICAgICAgICAgICAgICAgICAgNQ0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgICAgICAgICAgICAgICAgIDANCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlczogICAgICAgMA0KDQpgYGANCg0KDQojIyBCOC4gQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMgYXMgYSByZXN1bHQgb2YgMm5kIHBhaXIgb2Ygc2VxdWVuY2UgYWxpZ25tZW50DQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDEyMzU5NTMxNDI3IEFwciAyOCAwMDozOSBFUlIyNTEyOTZfMS5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgNjc2NTU3NiBBcHIgMjggMDA6NDEgRVJSMjUxMjk2XzEuYmFtLmJhaQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDEzNDQxNDI3MDcwIEFwciAyOCAwMjo1OSBFUlIyNTEyOTZfMS5jYWxtZC5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgMzUzMSBBcHIgMjggMDQ6NTQgRVJSMjUxMjk2XzEuY2FsbWQuZHVwTWV0cmljcy50eHQNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAxODE2NzYyMTQwMyBBcHIgMjggMDQ6NTQgRVJSMjUxMjk2XzEuY2FsbWQubWR1cC5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgODY3MzQwOCBBcHIgMjggMDU6MDcgRVJSMjUxMjk2XzEuY2FsbWQubWR1cC5iYW0uYmFpDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAyMTM1MjMgQXByIDI4IDA1OjEyIEVSUjI1MTI5Nl8xLmNhbG1kLm1kdXAudmNmDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAxMTUwOTkgQXByIDI4IDA1OjEyIEVSUjI1MTI5Nl8xLmNhbG1kLm1kdXAudmNmLmlkeA0KDQoNCg0KDQojIyBCQU0gZmlsZXMgY291bGQgYmUgbWVyZ2VkIGFuZCBhbmFseXplZCBmb3IgY29tYmluZWQgYW5hbHlzaXMgb2YgbXVsdGlwbGUgc2VxdWVuY2luZyBwYWlycyBvZiB0aGUgc2FtZSBnZW5vbWUgIA0KDQoNCg0KIyMgQzEuIE1lcmdlIHRoZSB0d28gQkFNIGZpbGVzDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBNZXJnZVNhbUZpbGVzIC1JIEVSUjI1MTI5NV8xLmNhbG1kLmJhbSAtSSBFUlIyNTEyOTZfMS5jYWxtZC5iYW0gLU8gRVJSMjUxMjk1OTYuYmFtDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCiANCiANCklORk8gICAgMjAxOS0wNC0yOCAwMzo1MDowMCAgICAgTWVyZ2VTYW1GaWxlcyAgIFByb2Nlc3NlZCAgIDI1OSwwMDAsMDAwIHJlY29yZHMuICBFbGFwc2VkIHRpbWU6IDAwOjE5OjIwcy4gIFRpbWUgZm9yIGxhc3QgMSwwMDAsMDAwOiAgICA3cy5MYXN0IHJlYWQgcG9zaXRpb246Y2hyVW5fSlRGSDAxMDAxODk5djFfZGVjb3k6MjczDQoNCklORk8gICAgMjAxOS0wNC0yOCAwMzo1MDowMiAgICAgTWVyZ2VTYW1GaWxlcyAgIEZpbmlzaGVkIHJlYWRpbmcgaW5wdXRzLg0KDQpbU3VuIEFwciAyOCAwMzo1MDowMiBVVEMgMjAxOV0gcGljYXJkLnNhbS5NZXJnZVNhbUZpbGVzIGRvbmUuIEVsYXBzZWQgdGltZTogMTkuMzkgbWludXRlcy4NCg0KDQoNCiMjIEMyLiBNYXJrIGR1cGxpY2F0ZXMNCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYkIGdhdGsgTWFya0R1cGxpY2F0ZXMgLUkgRVJSMjUxMjk1OTYuYmFtIC1PIEVSUjI1MTI5NTk2Lm1kdXAuYmFtIC1NIEVSUjI1MTI5NTk2LmR1cE1ldHJpY3MudHh0DQoNCklORk8gICAgMjAxOS0wNC0yOCAwNDo0NDo1NiAgICAgU29ydGluZ0NvbGxlY3Rpb24gICAgICAgQ3JlYXRpbmcgbWVyZ2luZyBpdGVyYXRvciBmcm9tIDEwIGZpbGVzDQoNCklORk8gICAgMjAxOS0wNC0yOCAwNDo0NjozMiAgICAgTWFya0R1cGxpY2F0ZXMgIFRyYXZlcnNpbmcgZnJhZ21lbnQgaW5mb3JtYXRpb24gYW5kIGRldGVjdGluZyBkdXBsaWNhdGVzLg0KDQpJTkZPICAgIDIwMTktMDQtMjggMDQ6NDY6MzIgICAgIFNvcnRpbmdDb2xsZWN0aW9uICAgICAgIENyZWF0aW5nIG1lcmdpbmcgaXRlcmF0b3IgZnJvbSAyMSBmaWxlcw0KDQpJTkZPICAgIDIwMTktMDQtMjggMDQ6NDg6NDkgICAgIE1hcmtEdXBsaWNhdGVzICBTb3J0aW5nIGxpc3Qgb2YgZHVwbGljYXRlIHJlY29yZHMuDQoNCklORk8gICAgMjAxOS0wNC0yOCAwNDo0ODo1MSAgICAgTWFya0R1cGxpY2F0ZXMgIEFmdGVyIGdlbmVyYXRlRHVwbGljYXRlSW5kZXhlcyBmcmVlTWVtb3J5OiAyOTI3OTk2Mzc2OyB0b3RhbE1lbW9yeTogMzkzNTMwNTcyODsgbWF4TWVtb3J5OiAzOTM1MzA1DQo3MjgNCklORk8gICAgMjAxOS0wNC0yOCAwNDo0ODo1MSAgICAgTWFya0R1cGxpY2F0ZXMgIE1hcmtpbmcgNjYwNDU5MCByZWNvcmRzIGFzIGR1cGxpY2F0ZXMuDQoNCklORk8gICAgMjAxOS0wNC0yOCAwNDo0ODo1MSAgICAgTWFya0R1cGxpY2F0ZXMgIEZvdW5kIDAgb3B0aWNhbCBkdXBsaWNhdGUgY2x1c3RlcnMuDQoNCklORk8gICAgMjAxOS0wNC0yOCAwNDo0ODo1MSAgICAgTWFya0R1cGxpY2F0ZXMgIFJlYWRzIGFyZSBhc3N1bWVkIHRvIGJlIG9yZGVyZWQgYnk6IGNvb3JkaW5hdGUNCg0KSU5GTyAgICAyMDE5LTA0LTI4IDA0OjUwOjIzICAgICBNYXJrRHVwbGljYXRlcyAgV3JpdHRlbiAgICAxMCwwMDAsMDAwIHJlY29yZHMuICBFbGFwc2VkIHRpbWU6IDAwOjAxOjMxcy4gIFRpbWUgZm9yIGxhc3QgMTAsMDAwLDAwMDogICA5MXMuICBMYXN0IHJlYWQgcG9zaXRpb246IGNocjE6MTE0LDMzMiwxMjkNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpJTkZPICAgIDIwMTktMDQtMjggMDU6MTE6MDMgICAgIE1hcmtEdXBsaWNhdGVzICBXcml0dGVuICAgMjUwLDAwMCwwMDAgcmVjb3Jkcy4gIEVsYXBzZWQgdGltZTogMDA6MjI6MTFzLiAgVGltZSBmb3IgbGFzdCAxMCwwMDAsMDAwOiAgIDQ5cy4gIExhc3QgcmVhZCBwb3NpdGlvbjogY2hyWTo1Niw3MzcsMTQwDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpbU3VuIEFwciAyOCAwNToxMTo1MCBVVEMgMjAxOV0gcGljYXJkLnNhbS5tYXJrZHVwbGljYXRlcy5NYXJrRHVwbGljYXRlcyBkb25lLiBFbGFwc2VkIHRpbWU6IDc2LjY5IG1pbnV0ZXMuDQoNCg0KDQoNCg0KIyMgQzMuIEluZGV4IHRoZSBCQU0gZmlsZQ0KDQoNCiMjIyMgc2FtdG9vbHMgaW5kZXggRVJSMjUxMjk1OTYubWR1cC5iYW0NCg0KDQoNCiMjIEM0LiBSdW4gZ2F0ayBIYXBsb3R5cGVDYWxsZXINCg0KDQojIyMjIGdhdGsgSGFwbG90eXBlQ2FsbGVyIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIEVSUjI1MTI5NTk2Lm1kdXAuYmFtIC1MIGNocjIwOjE1LDgwMCwwMDAtMTYsMTAwLDAwMCAtTyBFUlIyNTEyOTU5Ni5tZHVwLnZjZg0KDQowNToyOTo0MC4yNzYgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICBDdXJyZW50IExvY3VzICBFbGFwc2VkIE1pbnV0ZXMgICAgIFJlZ2lvbnMgUHJvY2Vzc2VkICAgUmVnaW9ucy9NaW51dGUNCg0KMDU6Mjk6NTAuMDk4IElORk8gIEhhcGxvdHlwZUNhbGxlciAtIA0KDQo1MDAgcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKCgoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgTm90RHVwbGljYXRlUmVhZEZpbHRlcikgQU5EIFBhc3Nlc1ZlbmRvclF1YWxpdHlDaGVja1JlYWRGaWx0ZXIpIEFORCBOb25aZXJvUmVmZXJlbmNlTGVuZ3RoQWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIEdvb2RDaWdhclJlYWRGaWx0ZXIpIEFORCBXZWxsZm9ybWVkUmVhZEZpbHRlcikNCg0KICA1MDAgcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKCgoKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikgQU5EIE5vdFNlY29uZGFyeUFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBOb3REdXBsaWNhdGVSZWFkRmlsdGVyKSBBTkQgUGFzc2VzVmVuZG9yUXVhbGl0eUNoZWNrUmVhZEZpbHRlcikgQU5EIE5vblplcm9SZWZlcmVuY2VMZW5ndGhBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgR29vZENpZ2FyUmVhZEZpbHRlcikNCg0KICAgICAgNTAwIHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKCgoKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikgQU5EIE5vdFNlY29uZGFyeUFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBOb3REdXBsaWNhdGVSZWFkRmlsdGVyKSBBTkQgUGFzc2VzVmVuZG9yUXVhbGl0eUNoZWNrUmVhZEZpbHRlcikgQU5EIE5vblplcm9SZWZlcmVuY2VMZW5ndGhBbGlnbm1lbnRSZWFkRmlsdGVyKQ0KICAgICAgICAgIA0KICAgICAgICAgIDUwMCByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKCgoKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikgQU5EIE5vdFNlY29uZGFyeUFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBOb3REdXBsaWNhdGVSZWFkRmlsdGVyKSBBTkQgUGFzc2VzVmVuZG9yUXVhbGl0eUNoZWNrUmVhZEZpbHRlcikNCiAgICAgICAgICAgICAgDQogICAgICAgICAgICAgIDUwMCByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIpDQogICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDEzMyByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIDEyMiByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIDEyMiByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMiByZWFkKHMpIGZpbHRlcmVkIGJ5OiBNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgDQogICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgMTEgcmVhZChzKSBmaWx0ZXJlZCBieTogTm90U2Vjb25kYXJ5QWxpZ25tZW50UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAzNjcgcmVhZChzKSBmaWx0ZXJlZCBieTogTm90RHVwbGljYXRlUmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgIA0KMDU6Mjk6NTAuMDk4IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICBjaHIyMDoxNjA5OTU0MCAgICAgICAgICAgICAgMC4yICAgICAgICAgICAgICAgICAgMTM3MyAgICAgICAgICAgODM4Ny4zDQoNCjA1OjI5OjUwLjA5OSBJTkZPICBQcm9ncmVzc01ldGVyIC0gVHJhdmVyc2FsIGNvbXBsZXRlLiBQcm9jZXNzZWQgMTM3MyB0b3RhbCByZWdpb25zIGluIDAuMiBtaW51dGVzLg0KDQoNCg0KIyMgQzUuIFJlY29yZCBzaG9ydCB2YXJpYW50cyAoU05QcyBhbmQgaW5kZWxzKQ0KDQoNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBFUlIyNTEyOTU5Ni5tZHVwLnZjZg0KDQoNCmBgYA0KIyBUaGlzIGZpbGUgd2FzIHByb2R1Y2VkIGJ5IGJjZnRvb2xzIHN0YXRzICgxLjkraHRzbGliLTEuOSkgYW5kIGNhbiBiZSBwbG90dGVkIHVzaW5nIHBsb3QtdmNmc3RhdHMuDQouLi4uLi4uLi4uLi4uDQoNCiMgU04gICAgWzJdaWQgICBbM11rZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRddmFsdWUNCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBzYW1wbGVzOiAgICAgICAgICAgICAgICAgICAgICAxDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAgICAgICAgICAgICAgICAgMjg2DQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6ICAgICAgICAgICAgICAgICAgICAgICAgIDI3Ng0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIE1OUHM6ICAgICAgICAgICAgICAgICAgICAgICAgIDANCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgICAgICAgICAgICAgICAgICAxMA0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgICAgICAgICAgICAgICAgIDANCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlczogICAgICAgMA0KDQpgYGANCg0KIyMgQzYuIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KDQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgMzQzMDcyMjk4NDggQXByIDI4IDAzOjUwIEVSUjI1MTI5NTk2LmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICAzNTY5IEFwciAyOCAwNToxMSBFUlIyNTEyOTU5Ni5kdXBNZXRyaWNzLnR4dA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDM0NTY0MTgwMjc1IEFwciAyOCAwNToxMSBFUlIyNTEyOTU5Ni5tZHVwLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICA5MTg1ODg4IEFwciAyOCAwNToyNCBFUlIyNTEyOTU5Ni5tZHVwLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDIzMDc3NyBBcHIgMjggMDU6MjkgRVJSMjUxMjk1OTYubWR1cC52Y2YNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDExNjEwMSBBcHIgMjggMDU6MjkgRVJSMjUxMjk1OTYubWR1cC52Y2YuaWR4DQoNCg0K