1. Relevant notes

-The panel of normals not only represents common germline variant sites, it presents commonly noisy sites in sequencing data, e.g. mapping artifacts or other somewhat random but systematic artifacts of sequencing.

-When using a population germline resource, consider adjusting the –af-of-alleles-not-in-resource parameter from its default of 0.001.

-For example, the gnomAD resource af-only-gnomad_grch38.vcf.gz represents ~200k exomes and ~16k genomes and the tutorial data is exome data, so we adjust –af-of-alleles-not-in-resource to 0.0000025 which corresponds to 1/(2*exome samples).

-The default of 0.001 is appropriate for human sample analyses without any population resource. It is based on the human average rate of heterozygosity.

-The population allele frequencies (POP_AF) and the af-of-alleles-not-in-resource factor in probability calculations of the variant being somatic.

-Tutorial uses BAM files which are generated aligning the Fastq files to the hg38 reference genome using bwa mem algorithm.

-The normal and tumor BAM files will be used to discriminate the exclusive presence of mutation in the tumor tissues

2. References and resources

Google Cloud Platform, 4 VCPUs, 15 or 16 GB RAM

https://software.broadinstitute.org/gatk/documentation/article?id=11136

GATK in a Docker container : https://software.broadinstitute.org/gatk/documentation/article?id=11090

3. Obtain the data (genome/reference and analysis datasets) and check contents

wget ftp://gsapubftp-anonymous@ftp.broadinstitute.org/tutorials/datasets/tutorial_11136.tar.gz

Extract the data into a directory named /home/b0d2647/gatk_data_ref

~/gatk_data_ref$ ls -l

drwxr-xr-x 4 b0d2647 b0d2647 4096 Apr 20 18:27 gatk_mutect2

(base) :~/gatk_data_ref/gatk_mutect2$ ls -l

-rw-r–r– 1 b0d2647 b0d2647 607714 Jan 18 2018 4_NA19771.vcf.gz

-rw-r–r– 1 b0d2647 b0d2647 28618 Jan 18 2018 4_NA19771.vcf.gz.tbi

-rw-r–r– 1 b0d2647 b0d2647 754824 Jan 18 2018 5_HG02759.vcf.gz

-rw-r–r– 1 b0d2647 b0d2647 25282 Jan 18 2018 5_HG02759.vcf.gz.tbi

-rw-r–r– 1 b0d2647 b0d2647 3744912 Jan 18 2018 HG00190.bai

-rw-r–r– 1 b0d2647 b0d2647 373599558 Jan 18 2018 HG00190.bam

-rw-r–r– 1 b0d2647 b0d2647 757396 Jan 19 2018 chr17plus.interval_list

-rw-r–r– 1 b0d2647 b0d2647 2126864 Jan 18 2018 normal.bai

-rw-r–r– 1 b0d2647 b0d2647 437801420 Jan 18 2018 normal.bam

drwxrwxr-x 2 b0d2647 b0d2647 4096 Apr 20 18:47 output

drwxr-xr-x 2 b0d2647 b0d2647 4096 Apr 19 21:55 resources

-rw-r–r– 1 b0d2647 b0d2647 255301 Jan 18 2018 somatic_m2.vcf.gz

-rw-r–r– 1 b0d2647 b0d2647 34573 Jan 18 2018 somatic_m2.vcf.gz.tbi

-rw-r–r– 1 b0d2647 b0d2647 2096768 Jan 18 2018 tumor.bai

-rw-r–r– 1 b0d2647 b0d2647 567033677 Jan 18 2018 tumor.bam

-rw-r–r– 1 b0d2647 b0d2647 15312 Jan 18 2018 tumor_artifact.pre_adapter_detail_metrics.txt

-rw-r–r– 1 b0d2647 b0d2647 78 Jan 18 2018 tumor_calculatecontamination.table

~/gatk_data_ref/gatk_mutect2$ ls -l resources/

-rw-r–r– 1 b0d2647 b0d2647 112767707 Jan 18 2018 chr17_af-only-gnomad_grch38.vcf.gz

-rw-r–r– 1 b0d2647 b0d2647 73800 Jan 18 2018 chr17_af-only-gnomad_grch38.vcf.gz.tbi

-rw-r–r– 1 b0d2647 b0d2647 594252 Jan 18 2018 chr17_m2pon.vcf.gz

-rw-r–r– 1 b0d2647 b0d2647 42439 Jan 18 2018 chr17_m2pon.vcf.gz.tbi

-rw-r–r– 1 b0d2647 b0d2647 100230 Jan 18 2018 chr17_small_exac_common_3_grch38.vcf.gz

-rw-r–r– 1 b0d2647 b0d2647 11629 Jan 18 2018 chr17_small_exac_common_3_grch38.vcf.gz.tbi

~/gatk_data_ref/gatk_mutect2$ ls -l output/

-rw-r–r– 1 root root 17649 Apr 20 18:10 10_tumor_artifact.bait_bias_detail_metrics.txt

-rw-r–r– 1 root root 1842 Apr 20 18:10 10_tumor_artifact.bait_bias_summary_metrics.txt

-rw-r–r– 1 root root 1221 Apr 20 18:10 10_tumor_artifact.error_summary_metrics.txt

-rw-r–r– 1 root root 14175 Apr 20 18:10 10_tumor_artifact.pre_adapter_detail_metrics.txt

-rw-r–r– 1 root root 1856 Apr 20 18:10 10_tumor_artifact.pre_adapter_summary_metrics.txt

-rw-r–r– 1 root root 47102 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz

-rw-r–r– 1 root root 247 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.summary

-rw-r–r– 1 root root 1293 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.tbi

-rw-r–r– 1 root root 41959 Apr 20 14:14 1_somatic_m2.vcf.gz

-rw-r–r– 1 root root 35 Apr 20 14:14 1_somatic_m2.vcf.gz.stats

-rw-r–r– 1 root root 1286 Apr 20 14:14 1_somatic_m2.vcf.gz.tbi

-rw-r–r– 1 root root 69584 Apr 20 14:14 2_tumor_normal_m2.bai

-rw-r–r– 1 root root 1709147 Apr 20 14:14 2_tumor_normal_m2.bam

-rw-r–r– 1 root root 1450207 Apr 20 15:40 3_HG00190.vcf.gz

-rw-r–r– 1 root root 35 Apr 20 15:40 3_HG00190.vcf.gz.stats

-rw-r–r– 1 root root 52808 Apr 20 15:40 3_HG00190.vcf.gz.tbi

-rw-r–r– 1 root root 29292 Apr 20 17:01 6_HG0190_pon.vcf.gz

-rw-r–r– 1 root root 77 Apr 20 17:01 6_HG0190_pon.vcf.gz.tbi

-rw-r–r– 1 root root 46775 Apr 20 17:25 7_tumor_getpileupsummaries.table

-rw-r–r– 1 root root 84 Apr 20 17:35 8_tumor_calculatecontamination.table

-rw-r–r– 1 root root 45280 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz

-rw-r–r– 1 root root 1791 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.filteringStats.tsv

-rw-r–r– 1 root root 1299 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.tbi

** Our output should be similar to what is in the output folder.

4. Mount the data volume (i.e., gatk_data_ref) as ‘gatk_analysis’ in docker and check contents

:~$ sudo docker run -v /home/b0d2647/gatk_data_ref/:/gatk/gatk_analysis -it broadinstitute/gatk:4.1.1.0

Docker contents

(gatk) :/gatk# ls -l

-rw-r–r– 1 root root 3635 Mar 28 23:43 GATKConfig.EXAMPLE.properties

-rw-r–r– 1 root root 37870 Mar 28 23:43 README.md

-rwxr-xr-x 1 root root 19494 Mar 28 23:43 gatk

-rw-r–r– 1 root root 836229 Mar 28 23:43 gatk-completion.sh

-rw-r–r– 1 root root 282832421 Mar 28 23:43 gatk-package-4.1.1.0-local.jar

-rw-r–r– 1 root root 137266125 Mar 28 23:43 gatk-package-4.1.1.0-spark.jar

lrwxrwxrwx 1 root root 36 Mar 28 23:45 gatk-spark.jar -> /gatk/gatk-package-4.1.1.0-spark.jar

lrwxrwxrwx 1 root root 36 Mar 28 23:46 gatk.jar -> /gatk/gatk-package-4.1.1.0-local.jar

-rw-r–r– 1 root root 114783 Mar 28 23:43 gatkPythonPackageArchive.zip

drwxrwxr-x 3 1002 1003 4096 Apr 20 11:51 gatk_analysis

-rw-r–r– 1 root root 964 Mar 28 23:43 gatkcondaenv.yml

drwxr-xr-x 2 root root 69632 Mar 28 23:43 gatkdoc

-rw-r–r– 1 root root 53 Mar 28 23:49 gatkenv.rc

-rw-r–r– 1 root root 1984 Mar 28 23:46 install_R_packages.R

-rw-r–r– 1 root root 648 Mar 28 23:46 run_unit_tests.sh

drwxr-xr-x 5 root root 4096 Mar 28 23:44 scripts

(gatk) :/gatk/gatk_analysis/gatk_mutect2# ls -l

-rw-r–r– 1 1002 1003 607714 Jan 18 2018 4_NA19771.vcf.gz

-rw-r–r– 1 1002 1003 28618 Jan 18 2018 4_NA19771.vcf.gz.tbi

-rw-r–r– 1 1002 1003 754824 Jan 18 2018 5_HG02759.vcf.gz

-rw-r–r– 1 1002 1003 25282 Jan 18 2018 5_HG02759.vcf.gz.tbi

-rw-r–r– 1 1002 1003 3744912 Jan 18 2018 HG00190.bai

-rw-r–r– 1 1002 1003 373599558 Jan 18 2018 HG00190.bam

-rw-r–r– 1 1002 1003 757396 Jan 19 2018 chr17plus.interval_list

-rw-r–r– 1 1002 1003 2126864 Jan 18 2018 normal.bai

-rw-r–r– 1 1002 1003 437801420 Jan 18 2018 normal.bam

drwxr-xr-x 2 1002 1003 4096 Apr 19 21:55 precomputed

drwxr-xr-x 2 1002 1003 4096 Apr 19 21:55 resources

-rw-r–r– 1 1002 1003 255301 Jan 18 2018 somatic_m2.vcf.gz

-rw-r–r– 1 1002 1003 34573 Jan 18 2018 somatic_m2.vcf.gz.tbi

-rw-r–r– 1 1002 1003 2096768 Jan 18 2018 tumor.bai

-rw-r–r– 1 1002 1003 567033677 Jan 18 2018 tumor.bam

-rw-r–r– 1 1002 1003 15312 Jan 18 2018 tumor_artifact.pre_adapter_detail_metrics.txt

-rw-r–r– 1 1002 1003 78 Jan 18 2018 tumor_calculatecontamination.table

(gatk) :/gatk/gatk_analysis/gatk_mutect2# ls -l resources/

-rw-r–r– 1 1002 1003 112767707 Jan 18 2018 chr17_af-only-gnomad_grch38.vcf.gz

-rw-r–r– 1 1002 1003 73800 Jan 18 2018 chr17_af-only-gnomad_grch38.vcf.gz.tbi

-rw-r–r– 1 1002 1003 594252 Jan 18 2018 chr17_m2pon.vcf.gz

-rw-r–r– 1 1002 1003 42439 Jan 18 2018 chr17_m2pon.vcf.gz.tbi

-rw-r–r– 1 1002 1003 100230 Jan 18 2018 chr17_small_exac_common_3_grch38.vcf.gz

-rw-r–r– 1 1002 1003 11629 Jan 18 2018 chr17_small_exac_common_3_grch38.vcf.gz.tbi

(gatk) :/gatk/gatk_analysis/gatk_mutect2# ls -l precomputed/

total 4456 -rw-r–r– 1 1002 1003 17688 Jan 18 2018 10_tumor_artifact.bait_bias_detail_metrics.txt

-rw-r–r– 1 1002 1003 1881 Jan 18 2018 10_tumor_artifact.bait_bias_summary_metrics.txt

-rw-r–r– 1 1002 1003 1260 Jan 18 2018 10_tumor_artifact.error_summary_metrics.txt

-rw-r–r– 1 1002 1003 14214 Jan 18 2018 10_tumor_artifact.pre_adapter_detail_metrics.txt

-rw-r–r– 1 1002 1003 1895 Jan 18 2018 10_tumor_artifact.pre_adapter_summary_metrics.txt

-rw-r–r– 1 1002 1003 297267 Jan 18 2018 11_somatic_twicefiltered.vcf.gz

-rw-r–r– 1 1002 1003 358 Jan 18 2018 11_somatic_twicefiltered.vcf.gz.summary

-rw-r–r– 1 1002 1003 34588 Jan 18 2018 11_somatic_twicefiltered.vcf.gz.tbi

-rw-r–r– 1 1002 1003 39765 Jan 18 2018 1_somatic_m2.vcf.gz

-rw-r–r– 1 1002 1003 1535 Jan 18 2018 1_somatic_m2.vcf.gz.tbi

-rw-r–r– 1 1002 1003 84304 Jan 18 2018 2_tumor_normal_m2.bai

-rw-r–r– 1 1002 1003 2673966 Jan 18 2018 2_tumor_normal_m2.bam

-rw-r–r– 1 1002 1003 855035 Jan 18 2018 3_HG00190.vcf.gz

-rw-r–r– 1 1002 1003 35118 Jan 18 2018 3_HG00190.vcf.gz.tbi

-rw-r–r– 1 1002 1003 85870 Jan 18 2018 6_threesamplepon.vcf.gz

-rw-r–r– 1 1002 1003 17558 Jan 18 2018 6_threesamplepon.vcf.gz.tbi

-rw-r–r– 1 1002 1003 53913 Jan 18 2018 7_tumor_getpileupsummaries.table

-rw-r–r– 1 1002 1003 79 Jan 18 2018 8_tumor_calculatecontamination.table

-rw-r–r– 1 1002 1003 267160 Jan 18 2018 9_somatic_oncefiltered.vcf.gz

-rw-r–r– 1 1002 1003 34630 Jan 18 2018 9_somatic_oncefiltered.vcf.gz.tbi

5. Create a sites-only panel of normal (PoN) with CreateSomaticPanelOfNormals

First, run gatk Mutect2 in tumor-only mode on each normal sample to call all detectable variants: Needs an interval list

(gatk) :/gatk/gatk_analysis/gatk_mutect2# cat chr17plus.interval_list | head -n 3

@HD VN:1.5 SO:unsorted

@SQ SN:chr1 LN:248956422 UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/GRCh38_reference_genome/GRCh38_full_analysis_set_plus_decoy_hla.fa AS:GRCh38 M5:6aef897c3d6ff0c78aff06ac189178dd SP:Human

@SQ SN:chr2 LN:242193529 UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/GRCh38_reference_genome/GRCh38_full_analysis_set_plus_decoy_hla.fa AS:GRCh38 M5:f98db672eb0993dcfdabafe2a882905c SP:Human

(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk Mutect2 

-R Homo_sapiens_assembly38.fasta 

-I gatk_mutect2/HG00190.bam 

-tumor gatk_mutect2/HG00190.bam 

--disable-read-filter MateOnSameContigOrNoMappedMateReadFilter 

--intervals gatk_mutect2/chr17plus.interval_list 

-O gatk_mutect2/output/3_HG00190.vcf.gz

Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar

…………………………

15:29:32.805 INFO ProgressMeter - Current Locus Elapsed Minutes Regions Processed Regions/Minute

15:29:42.851 INFO ProgressMeter - chr11:949097 0.2 200 1194.5

15:29:52.853 INFO ProgressMeter - chr17:233216 0.3 1970 5895.8

……………………

15:39:44.569 INFO ProgressMeter - chr17:80482649 10.2 326990 32070.2

15:39:54.589 INFO ProgressMeter - chr17:81892061 10.4 333070 32140.1

15:40:04.607 INFO ProgressMeter - chr11_KI270927v1_alt:80173 10.5 339170 32209.8

15:40:13.546 INFO Mutect2 -

934638 read(s) filtered by: (((((((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter)AND MappingQualityNotZeroReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonChimericOriginalAlignmentReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND ReadLengthReadFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)

…………………….

                                  517298 read(s) filtered by: (MappingQualityReadFilter AND MappingQualityAvailableReadFilter)
                                  
                                      517298 read(s) filtered by: MappingQualityReadFilter 
                                      
                          3089 read(s) filtered by: NotSecondaryAlignmentReadFilter 
                          
                      414251 read(s) filtered by: NotDuplicateReadFilter 
                      

15:40:13.546 INFO ProgressMeter - HLA-A*24:03:01:2176 10.7 339828 31822.0

15:40:13.546 INFO ProgressMeter - Traversal complete. Processed 339828 total regions in 10.7 minutes.

Additional directory contents

(gatk) :/gatk/gatk_analysis# ls -l gatk_mutect2/output/

-rw-r–r– 1 root root 1450207 Apr 20 15:40 3_HG00190.vcf.gz

-rw-r–r– 1 root root 52808 Apr 20 15:40 3_HG00190.vcf.gz.tbi

Run gatk CreateSomaticPanelOfNormals on the mutect2 output

(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk CreateSomaticPanelOfNormals 

-V gatk_mutect2/output/3_HG00190.vcf.gz 

-O gatk_mutect2/output/6_HG0190_pon.vcf.gz

Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar

…………..

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Warning: CreateSomaticPanelOfNormals is a BETA tool and is not yet ready for use in production !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

………………….

17:01:10.342 INFO ProgressMeter - chr17:83057965 0.0 38386 2262436.1

17:01:10.342 INFO ProgressMeter - Traversal complete. Processed 38386 total variants in 0.0 minutes.

Additional directory contents

(gatk) :/gatk/gatk_analysis# ls -l gatk_mutect2/output/

-rw-r–r– 1 root root 29292 Apr 20 17:01 6_HG0190_pon.vcf.gz

-rw-r–r– 1 root root 77 Apr 20 17:01 6_HG0190_pon.vcf.gz.tbi

6. call mutations in the tumor in somatic mode.


(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk Mutect2 

-R Homo_sapiens_assembly38.fasta 

-I gatk_mutect2/tumor.bam 

-I gatk_mutect2/normal.bam 

-tumor HCC1143_tumor 

-normal HCC1143_normal 

-pon gatk_mutect2/resources/chr17_m2pon.vcf.gz 

--germline-resource gatk_mutect2/resources/chr17_af-only-gnomad_grch38.vcf.gz 

--af-of-alleles-not-in-resource 0.0000025 

--disable-read-filter MateOnSameContigOrNoMappedMateReadFilter 

-L gatk_mutect2/chr17plus.interval_list 

-O gatk_mutect2/output/1_somatic_m2.vcf.gz 

-bamout gatk_mutect2/output/2_tumor_normal_m2.bam

Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar

14:09:39.146 INFO ProgressMeter - Current Locus Elapsed Minutes Regions Processed Regions/Minute

14:09:49.154 INFO ProgressMeter - chr11:1073081 0.2 580 3477.9

14:09:59.265 INFO ProgressMeter - chr17:1678328 0.3 6540 19504.9

………..

14:14:10.085 INFO ProgressMeter - chr17:80459262 4.5 274360 60757.6

14:14:20.085 INFO ProgressMeter - chr17:82493081 4.7 281520 60124.1

14:14:29.317 INFO Mutect2 -

2495430 read(s) filtered by: (((((((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappingQualityNotZeroReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonChimericOriginalAlignmentReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND ReadLengthReadFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)

                                  1093427 read(s) filtered by: (MappingQualityReadFilter AND MappingQualityAvailableReadFilter)
                                      
                                      1093427 read(s) filtered by: MappingQualityReadFilter 
                                      
                      1402003 read(s) filtered by: NotDuplicateReadFilter 
                      

14:14:29.317 INFO ProgressMeter - HLA-A*24:03:01:2615 4.8 285005 58931.8

14:14:29.317 INFO ProgressMeter - Traversal complete. Processed 285005 total regions in 4.8 minutes.

Additional direcory contents

(gatk) :/gatk/gatk_analysis# ls -l gatk_mutect2/output/

total 1792

-rw-r–r– 1 root root 41959 Apr 20 14:14 1_somatic_m2.vcf.gz

-rw-r–r– 1 root root 35 Apr 20 14:14 1_somatic_m2.vcf.gz.stats

-rw-r–r– 1 root root 1286 Apr 20 14:14 1_somatic_m2.vcf.gz.tbi

-rw-r–r– 1 root root 69584 Apr 20 14:14 2_tumor_normal_m2.bai

-rw-r–r– 1 root root 1709147 Apr 20 14:14 2_tumor_normal_m2.bam

(gatk) :/gatk/gatk_analysis# cat gatk_mutect2/output/1_somatic_m2.vcf.gz.stats

statistic       value

callable        4810864.0

(base) :~/gatk_data_ref/gatk_mutect2$ zcat output/1_somatic_m2.vcf.gz | awk ‘$5 ~“,”’ | head -n 2

chr17   8513688 .       GTT     G,GT    .       .       DP=298;ECNT=1;MBQ=30,29,31;MFRL=160,158,151;MMQ=60,60,60;MPOS=21,24;NALOD=0.099,-7.345e+01;NLOD

=9.03,-7.382e+01;PON;POPAF=2.49,0.365;RPA=13,11,12;RU=T;STR;TLOD=4.92,215.42    GT:AD:AF:DP:F1R2:F2R1:SB        0/0:42,2,41:0.025,0.496:85:24,0,18:13,2

,22:11,31,13,30 0/1/2:11,8,101:0.056,0.859:120:5,3,36:4,4,54:6,5,26,83


chr17   17869308        .       GAAAA   G,GAAAAA        .       .       DP=60;ECNT=1;MBQ=32,20,32;MFRL=136,97,144;MMQ=60,60,60;MPOS=29,28;NALOD=0.610,-

4.399e+00;NLOD=2.92,-3.482e+00;PON;POPAF=1.77,2.95;RPA=15,11,16;RU=A;STR;TLOD=3.06,14.28        GT:AD:AF:DP:F1R2:F2R1:SB        0/0:9,1,3:0.097,0.269:1

3:5,1,1:3,0,1:8,1,1,3   0/1/2:10,2,12:0.095,0.530:24:2,2,3:7,0,9:5,5,11,3

7. Report variant statistics using bcftools

(base) :~/gatk_data_ref/gatk_mutect2$ bcftools stats ~/gatk_data_ref/gatk_mutect2/output/1_somatic_m2.vcf.gz

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


# The command line was: bcftools stats  /home/b0d2647/gatk_data_ref/gatk_mutect2/output/1_somatic_m2.vcf.gz
#
# SN    [2]id   [3]key                                  [4]value

SN      0       number of samples:                      2

SN      0       number of records:                      111

SN      0       number of no-ALTs:                      0

SN      0       number of SNPs:                         93

SN      0       number of MNPs:                         0

SN      0       number of indels:                       18

SN      0       number of others:                       0

SN      0       number of multiallelic sites:           7

SN      0       number of multiallelic SNP sites:       0

8. run GetPileupSummaries on the tumor BAM to summarize read support for a set of number of known variant sites.

(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk GetPileupSummaries 

-I gatk_mutect2/tumor.bam 

-V gatk_mutect2/resources/chr17_small_exac_common_3_grch38.vcf.gz 

-L gatk_mutect2/chr17plus.interval_list 

-O gatk_mutect2/output/7_tumor_getpileupsummaries.table

Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Warning: GetPileupSummaries is a BETA tool and is not yet ready for use in production !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

…………

17:24:14.981 INFO ProgressMeter - Current Locus Elapsed Minutes Loci Processed Loci/Minute

17:24:24.986 INFO ProgressMeter - chr17:7024112 0.2 1093000 6555377.8

………..

17:25:04.996 INFO ProgressMeter - chr17:80627464 0.8 9299000 11155453.4

17:25:07.921 INFO GetPileupSummaries - 1509862 read(s) filtered by: (((((((((MappingQualityAvailableReadFilter AND MappingQualityNotZeroReadFilter) AND MappedReadFilter) AND PrimaryLineReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND MateOnSameContigOrNoMappedMateReadFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)

                              ..................
                              
                              569508 read(s) filtered by: MappingQualityNotZeroReadFilter 
                              
                      22590 read(s) filtered by: PrimaryLineReadFilter 
                      
                  902676 read(s) filtered by: NotDuplicateReadFilter 
                  
          1 read(s) filtered by: NonZeroReferenceLengthAlignmentReadFilter 
          
      15087 read(s) filtered by: MateOnSameContigOrNoMappedMateReadFilter 
      
      

17:25:07.922 INFO ProgressMeter - chr11_KI270927v1_alt:91433 0.9 9906217 11227083.4

17:25:07.922 INFO ProgressMeter - Traversal complete. Processed 9906217 total loci in 0.9 minutes.

Additinal directory contents

(gatk) :/gatk/gatk_analysis# ls -l gatk_mutect2/output/

-rw-r–r– 1 root root 46775 Apr 20 17:25 7_tumor_getpileupsummaries.table

9. Calculate Contamination

(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk CalculateContamination 

-I gatk_mutect2/output/7_tumor_getpileupsummaries.table 

-O gatk_mutect2/output/8_tumor_calculatecontamination.table

Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar

…………….

17:35:01.223 WARN KernelSegmenter - Specified dimension of the kernel approximation (100) exceeds the number of data points (20) to segment; using all data points to calculate kernel matrix.

…………..

Tool returned: SUCCESS

Additinal directory contents

(gatk) :/gatk/gatk_analysis# ls -l gatk_mutect2/output/

-rw-r–r– 1 root root 84 Apr 20 17:35 8_tumor_calculatecontamination.table

-rw-r–r– 1 root root 45280 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz

10. Filter Mutect Calls

(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk FilterMutectCalls

-R Homo_sapiens_assembly38.fasta 

-V gatk_mutect2/output/1_somatic_m2.vcf.gz 

--contamination-table gatk_mutect2/output/8_tumor_calculatecontamination.table 

-O gatk_mutect2/output/9_somatic_oncefiltered.vcf.gz

Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar

17:53:14.449 INFO FeatureManager - Using codec VCFCodec to read file file:///gatk/gatk_analysis/gatk_mutect2/output/1_somatic_m2.vcf.gz

……..

17:53:15.087 INFO ProgressMeter - Current Locus Elapsed Minutes Variants Processed Variants/Minute

17:53:15.088 INFO FilterMutectCalls - Starting pass 0 through the variants

17:53:15.423 INFO FilterMutectCalls - Finished pass 0 through the variants

………………….

17:53:15.726 INFO FilterMutectCalls - No variants filtered by: AllowAllVariantsVariantFilter

17:53:15.726 INFO FilterMutectCalls - No reads filtered by: AllowAllReadsReadFilter

17:53:15.726 INFO ProgressMeter - unmapped 0.0 333 31267.6

17:53:15.726 INFO ProgressMeter - Traversal complete. Processed 333 total variants in 0.0 minutes.

Additinal directory contents

(gatk) :/gatk/gatk_analysis# ls -l gatk_mutect2/output/

-rw-r–r– 1 root root 45280 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz

-rw-r–r– 1 root root 1791 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.filteringStats.tsv

-rw-r–r– 1 root root 1299 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.tbi

11. Collect Sequencing Artifact Metrics


(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk CollectSequencingArtifactMetrics

-R Homo_sapiens_assembly38.fasta 

-I gatk_mutect2/tumor.bam 

-O gatk_mutect2/output/10_tumor_artifact 

-FILE_EXTENSION ".txt"   

Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar

INFO 2019-04-20 18:09:58 SinglePassSamProgram Processed 1,000,000 records. Elapsed time: 00:00:48s. Time for last 1,000,000: 44s. Last read position: chr17:9,242,127

………….

INFO 2019-04-20 18:10:45 SinglePassSamProgram Processed 6,000,000 records. Elapsed time: 00:01:35s. Time for last 1,000,000: 17s. Last read position: chr17_KI270908v1_alt:1,059,821

[Sat Apr 20 18:10:47 UTC 2019] picard.analysis.artifacts.CollectSequencingArtifactMetrics done. Elapsed time: 1.64 minutes.

Additinal directory contents

(gatk) :/gatk/gatk_analysis# ls -l gatk_mutect2/output/

-rw-r–r– 1 root root 17649 Apr 20 18:10 10_tumor_artifact.bait_bias_detail_metrics.txt

-rw-r–r– 1 root root 1842 Apr 20 18:10 10_tumor_artifact.bait_bias_summary_metrics.txt

-rw-r–r– 1 root root 1221 Apr 20 18:10 10_tumor_artifact.error_summary_metrics.txt

-rw-r–r– 1 root root 14175 Apr 20 18:10 10_tumor_artifact.pre_adapter_detail_metrics.txt

-rw-r–r– 1 root root 1856 Apr 20 18:10 10_tumor_artifact.pre_adapter_summary_metrics.txt

(gatk) :/gatk/gatk_analysis# cat gatk_mutect2/output/10_tumor_artifact.pre_adapter_summary_metrics.txt | head -n 17

SAMPLE_ALIAS    LIBRARY REF_BASE        ALT_BASE        TOTAL_QSCORE    WORST_CXT       WORST_CXT_QSCORE        WORST_PRE_CXT   WORST_PRE_CXT_QSCORE  W
ORST_POST_CXT   WORST_POST_CXT_QSCORE   ARTIFACT_NAME


HCC1143_tumor   Pond-147580     A       C       60      TAC     46      AAN     53      NAC     49      NA

HCC1143_tumor   Pond-147580     A       G       49      CAT     42      CAN     46      NAT     46      NA

HCC1143_tumor   Pond-147580     A       T       100     CAC     47      AAN     100     NAA     100     NA

HCC1143_tumor   Pond-147580     C       A       100     ACA     100     ACN     100     NCA     100     NA

HCC1143_tumor   Pond-147580     C       G       100     GCA     41      GCN     47      NCA     53      NA

HCC1143_tumor   Pond-147580     C       T       46      ACG     37      ACN     42      NCA     45      Deamination

HCC1143_tumor   Pond-147580     G       A       100     CGA     42      AGN     100     NGA     100     NA

HCC1143_tumor   Pond-147580     G       C       51      AGG     41      AGN     45      NGT     45      NA

HCC1143_tumor   Pond-147580     G       T       36      CGC     33      CGN     35      NGA     35      OxoG

HCC1143_tumor   Pond-147580     T       A       47      CTA     42      CTN     45      NTA     44      NA

12. Filter By Orientation Bias


#### (gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk FilterByOrientationBias 

-V gatk_mutect2/output/9_somatic_oncefiltered.vcf.gz 

-P gatk_mutect2/output/10_tumor_artifact.pre_adapter_detail_metrics.txt 

-O gatk_mutect2/output/11_somatic_twicefiltered.vcf.gz

Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar

……..

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Warning: FilterByOrientationBias is an EXPERIMENTAL tool and should not be used for production !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

………………

18:47:58.174 INFO ProgressMeter - Current Locus Elapsed Minutes Records Processed Records/Minute

18:47:58.179 INFO ProgressMeter - unmapped 0.0 222 3330000.0

18:47:58.179 INFO ProgressMeter - Traversal complete. Processed 222 total records in 0.0 minutes.

18:47:58.186 INFO OrientationBiasFilterer - HCC1143_normal: Nothing to filter.

18:47:58.199 INFO OrientationBiasFilterer - HCC1143_tumor: Cutting (G>T) pre-preAdapterQ: 0 of 2

18:47:58.200 INFO OrientationBiasFilterer - HCC1143_tumor: Cutting (C>A) pre-preAdapterQ: -1 of 0

18:47:58.201 INFO OrientationBiasFilterer - HCC1143_tumor: Cutting (total) pre-preAdapterQ: -1

18:47:58.201 INFO OrientationBiasFilterer - HCC1143_tumor: Cutting (G>T) post-preAdapterQ: 0

18:47:58.201 INFO OrientationBiasFilterer - HCC1143_tumor: Cutting (C>A) post-preAdapterQ: -1

18:47:58.201 INFO OrientationBiasFilterer - HCC1143_tumor: Adding orientation bias filter results to genotypes…

18:47:58.202 INFO OrientationBiasFilterer - Passing: HCC1143_tumor G* T p=7.0391265039049244E-9 Fob=0.38461538461538464

18:47:58.203 INFO OrientationBiasFilterer - Passing: HCC1143_tumor G* T p=0.0 Fob=0.5555555555555556

18:47:58.203 INFO OrientationBiasFilterer - Updating genotypes and creating final list of variants…

18:47:58.204 INFO ProgressMeter - Starting traversal

18:47:58.204 INFO ProgressMeter - Current Locus Elapsed Minutes Records Processed Records/Minute

18:47:58.206 INFO ProgressMeter - unmapped 0.0 111 3330000.0

18:47:58.206 INFO ProgressMeter - Traversal complete. Processed 111 total records in 0.0 minutes.

18:47:58.206 INFO FilterByOrientationBias - Writing variants to VCF…

18:47:58.268 INFO FilterByOrientationBias - Writing a simple summary table…

Additinal directory contents

(gatk) :/gatk/gatk_analysis# ls -l gatk_mutect2/output/

-rw-r–r– 1 root root 47102 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz

-rw-r–r– 1 root root 247 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.summary

-rw-r–r– 1 root root 1293 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.tbi

(gatk) :/gatk/gatk_analysis# zcat gatk_mutect2/output/11_somatic_twicefiltered.vcf.gz | grep -v ‘#’ | awk ‘$7==“PASS”’ | wc -l

24

13. Record variant statistics

(base) :~/gatk_data_ref$ bcftools stats gatk_mutect2/output/11_somatic_twicefiltered.vcf.gz

# 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:                      2
SN      0       number of records:                      111
SN      0       number of no-ALTs:                      0
SN      0       number of SNPs:                         93
SN      0       number of MNPs:                         0
SN      0       number of indels:                       18
SN      0       number of others:                       0
SN      0       number of multiallelic sites:           7
SN      0       number of multiallelic SNP sites:       0

14. Output directory contents

(gatk) :/gatk/gatk_analysis# ls -l gatk_mutect2/output/

-rw-r–r– 1 root root 17649 Apr 20 18:10 10_tumor_artifact.bait_bias_detail_metrics.txt

-rw-r–r– 1 root root 1842 Apr 20 18:10 10_tumor_artifact.bait_bias_summary_metrics.txt

-rw-r–r– 1 root root 1221 Apr 20 18:10 10_tumor_artifact.error_summary_metrics.txt

-rw-r–r– 1 root root 14175 Apr 20 18:10 10_tumor_artifact.pre_adapter_detail_metrics.txt

-rw-r–r– 1 root root 1856 Apr 20 18:10 10_tumor_artifact.pre_adapter_summary_metrics.txt

-rw-r–r– 1 root root 47102 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz

-rw-r–r– 1 root root 247 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.summary

-rw-r–r– 1 root root 1293 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.tbi

-rw-r–r– 1 root root 41959 Apr 20 14:14 1_somatic_m2.vcf.gz

-rw-r–r– 1 root root 35 Apr 20 14:14 1_somatic_m2.vcf.gz.stats

-rw-r–r– 1 root root 1286 Apr 20 14:14 1_somatic_m2.vcf.gz.tbi

-rw-r–r– 1 root root 69584 Apr 20 14:14 2_tumor_normal_m2.bai

-rw-r–r– 1 root root 1709147 Apr 20 14:14 2_tumor_normal_m2.bam

-rw-r–r– 1 root root 1450207 Apr 20 15:40 3_HG00190.vcf.gz

-rw-r–r– 1 root root 35 Apr 20 15:40 3_HG00190.vcf.gz.stats

-rw-r–r– 1 root root 52808 Apr 20 15:40 3_HG00190.vcf.gz.tbi

-rw-r–r– 1 root root 29292 Apr 20 17:01 6_HG0190_pon.vcf.gz

-rw-r–r– 1 root root 77 Apr 20 17:01 6_HG0190_pon.vcf.gz.tbi

-rw-r–r– 1 root root 46775 Apr 20 17:25 7_tumor_getpileupsummaries.table

-rw-r–r– 1 root root 84 Apr 20 17:35 8_tumor_calculatecontamination.table

-rw-r–r– 1 root root 45280 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz

-rw-r–r– 1 root root 1791 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.filteringStats.tsv

-rw-r–r– 1 root root 1299 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.tbi

```

LS0tDQp0aXRsZTogIkNhbGwgc29tYXRpYyBzaG9ydCB2YXJpYW50cyAoU05WcyBhbmQgaW5kZWxzKSB1c2luZyBnYXRrIG11dGVjdDIiDQphdXRob3I6ICJCaGFnaXJhdGhpIERhc2giDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyAxLiBSZWxldmFudCBub3RlcyANCg0KLVRoZSBwYW5lbCBvZiBub3JtYWxzIG5vdCBvbmx5IHJlcHJlc2VudHMgY29tbW9uIGdlcm1saW5lIHZhcmlhbnQgc2l0ZXMsIGl0IHByZXNlbnRzIGNvbW1vbmx5IG5vaXN5IHNpdGVzIGluIHNlcXVlbmNpbmcgZGF0YSwgZS5nLiBtYXBwaW5nIGFydGlmYWN0cyBvciBvdGhlciBzb21ld2hhdCByYW5kb20gYnV0IHN5c3RlbWF0aWMgYXJ0aWZhY3RzIG9mIHNlcXVlbmNpbmcuIA0KDQotV2hlbiB1c2luZyBhIHBvcHVsYXRpb24gZ2VybWxpbmUgcmVzb3VyY2UsIGNvbnNpZGVyIGFkanVzdGluZyB0aGUgLS1hZi1vZi1hbGxlbGVzLW5vdC1pbi1yZXNvdXJjZSBwYXJhbWV0ZXIgZnJvbSBpdHMgZGVmYXVsdCBvZiAwLjAwMS4gDQoNCi1Gb3IgZXhhbXBsZSwgdGhlIGdub21BRCByZXNvdXJjZSBhZi1vbmx5LWdub21hZF9ncmNoMzgudmNmLmd6IHJlcHJlc2VudHMgfjIwMGsgZXhvbWVzIGFuZCB+MTZrIGdlbm9tZXMgYW5kIHRoZSB0dXRvcmlhbCBkYXRhIGlzIGV4b21lIGRhdGEsIHNvIHdlIGFkanVzdCAtLWFmLW9mLWFsbGVsZXMtbm90LWluLXJlc291cmNlIHRvIDAuMDAwMDAyNSB3aGljaCBjb3JyZXNwb25kcyB0byAxLygyKmV4b21lIHNhbXBsZXMpLiANCg0KLVRoZSBkZWZhdWx0IG9mIDAuMDAxIGlzIGFwcHJvcHJpYXRlIGZvciBodW1hbiBzYW1wbGUgYW5hbHlzZXMgd2l0aG91dCBhbnkgcG9wdWxhdGlvbiByZXNvdXJjZS4gSXQgaXMgYmFzZWQgb24gdGhlIGh1bWFuIGF2ZXJhZ2UgcmF0ZSBvZiBoZXRlcm96eWdvc2l0eS4gDQoNCi1UaGUgcG9wdWxhdGlvbiBhbGxlbGUgZnJlcXVlbmNpZXMgKFBPUF9BRikgYW5kIHRoZSBhZi1vZi1hbGxlbGVzLW5vdC1pbi1yZXNvdXJjZSBmYWN0b3IgaW4gcHJvYmFiaWxpdHkgY2FsY3VsYXRpb25zIG9mIHRoZSB2YXJpYW50IGJlaW5nIHNvbWF0aWMuDQoNCi1UdXRvcmlhbCB1c2VzIEJBTSBmaWxlcyB3aGljaCBhcmUgZ2VuZXJhdGVkIGFsaWduaW5nIHRoZSBGYXN0cSBmaWxlcyB0byB0aGUgaGczOCByZWZlcmVuY2UgZ2Vub21lIHVzaW5nIGJ3YSBtZW0gYWxnb3JpdGhtLg0KDQotVGhlIG5vcm1hbCBhbmQgdHVtb3IgQkFNIGZpbGVzIHdpbGwgYmUgdXNlZCB0byBkaXNjcmltaW5hdGUgdGhlIGV4Y2x1c2l2ZSBwcmVzZW5jZSBvZiBtdXRhdGlvbiBpbiB0aGUgdHVtb3IgdGlzc3Vlcw0KDQoNCiMjIDIuIFJlZmVyZW5jZXMgYW5kIHJlc291cmNlcw0KDQoNCkdvb2dsZSBDbG91ZCBQbGF0Zm9ybSwgNCBWQ1BVcywgMTUgb3IgMTYgR0IgUkFNDQoNCg0KaHR0cHM6Ly9zb2Z0d2FyZS5icm9hZGluc3RpdHV0ZS5vcmcvZ2F0ay9kb2N1bWVudGF0aW9uL2FydGljbGU/aWQ9MTExMzYNCg0KR0FUSyBpbiBhIERvY2tlciBjb250YWluZXIgOiBodHRwczovL3NvZnR3YXJlLmJyb2FkaW5zdGl0dXRlLm9yZy9nYXRrL2RvY3VtZW50YXRpb24vYXJ0aWNsZT9pZD0xMTA5MA0KDQoNCg0KDQojIyAzLiBPYnRhaW4gdGhlIGRhdGEgKGdlbm9tZS9yZWZlcmVuY2UgYW5kIGFuYWx5c2lzIGRhdGFzZXRzKSBhbmQgY2hlY2sgY29udGVudHMNCg0KDQojIyMjIHdnZXQgZnRwOi8vZ3NhcHViZnRwLWFub255bW91c0BmdHAuYnJvYWRpbnN0aXR1dGUub3JnL3R1dG9yaWFscy9kYXRhc2V0cy90dXRvcmlhbF8xMTEzNi50YXIuZ3oNCg0KDQpFeHRyYWN0IHRoZSBkYXRhIGludG8gYSBkaXJlY3RvcnkgbmFtZWQgL2hvbWUvYjBkMjY0Ny9nYXRrX2RhdGFfcmVmDQoNCiMjIyMgfi9nYXRrX2RhdGFfcmVmJCBscyAtbA0KDQpkcnd4ci14ci14IDQgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDQwOTYgQXByIDIwIDE4OjI3IGdhdGtfbXV0ZWN0Mg0KDQoNCg0KIyMjIyAoYmFzZSkgYjBkMjY0N0B2Y3B1NC0xNmdiOn4vZ2F0a19kYXRhX3JlZi9nYXRrX211dGVjdDIkIGxzIC1sDQoNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICA2MDc3MTQgSmFuIDE4ICAyMDE4IDRfTkExOTc3MS52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgMjg2MTggSmFuIDE4ICAyMDE4IDRfTkExOTc3MS52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgNzU0ODI0IEphbiAxOCAgMjAxOCA1X0hHMDI3NTkudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgIDI1MjgyIEphbiAxOCAgMjAxOCA1X0hHMDI3NTkudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgMzc0NDkxMiBKYW4gMTggIDIwMTggSEcwMDE5MC5iYWkNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAzNzM1OTk1NTggSmFuIDE4ICAyMDE4IEhHMDAxOTAuYmFtDQoNCi1ydy1yLS1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgNzU3Mzk2IEphbiAxOSAgMjAxOCBjaHIxN3BsdXMuaW50ZXJ2YWxfbGlzdA0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgMjEyNjg2NCBKYW4gMTggIDIwMTggbm9ybWFsLmJhaQ0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDQzNzgwMTQyMCBKYW4gMTggIDIwMTggbm9ybWFsLmJhbQ0KDQoqKmRyd3hyd3hyLXggMiBiMGQyNjQ3IGIwZDI2NDcgICAgICA0MDk2IEFwciAyMCAxODo0NyBvdXRwdXQqKg0KDQoqKmRyd3hyLXhyLXggMiBiMGQyNjQ3IGIwZDI2NDcgICAgICA0MDk2IEFwciAxOSAyMTo1NSByZXNvdXJjZXMqKg0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgIDI1NTMwMSBKYW4gMTggIDIwMTggc29tYXRpY19tMi52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgMzQ1NzMgSmFuIDE4ICAyMDE4IHNvbWF0aWNfbTIudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgMjA5Njc2OCBKYW4gMTggIDIwMTggdHVtb3IuYmFpDQoNCi1ydy1yLS1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgNTY3MDMzNjc3IEphbiAxOCAgMjAxOCB0dW1vci5iYW0NCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgMTUzMTIgSmFuIDE4ICAyMDE4IHR1bW9yX2FydGlmYWN0LnByZV9hZGFwdGVyX2RldGFpbF9tZXRyaWNzLnR4dA0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICA3OCBKYW4gMTggIDIwMTggdHVtb3JfY2FsY3VsYXRlY29udGFtaW5hdGlvbi50YWJsZQ0KDQoNCg0KDQojIyMjIH4vZ2F0a19kYXRhX3JlZi9nYXRrX211dGVjdDIkIGxzIC1sIHJlc291cmNlcy8NCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAxMTI3Njc3MDcgSmFuIDE4ICAyMDE4IGNocjE3X2FmLW9ubHktZ25vbWFkX2dyY2gzOC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgNzM4MDAgSmFuIDE4ICAyMDE4IGNocjE3X2FmLW9ubHktZ25vbWFkX2dyY2gzOC52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgNTk0MjUyIEphbiAxOCAgMjAxOCBjaHIxN19tMnBvbi52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgNDI0MzkgSmFuIDE4ICAyMDE4IGNocjE3X20ycG9uLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAxMDAyMzAgSmFuIDE4ICAyMDE4IGNocjE3X3NtYWxsX2V4YWNfY29tbW9uXzNfZ3JjaDM4LnZjZi5neg0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAxMTYyOSBKYW4gMTggIDIwMTggY2hyMTdfc21hbGxfZXhhY19jb21tb25fM19ncmNoMzgudmNmLmd6LnRiaQ0KDQoNCiMjIyMgfi9nYXRrX2RhdGFfcmVmL2dhdGtfbXV0ZWN0MiQgbHMgLWwgb3V0cHV0Lw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgMTc2NDkgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmJhaXRfYmlhc19kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODQyIEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5iYWl0X2JpYXNfc3VtbWFyeV9tZXRyaWNzLnR4dA0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyMjEgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmVycm9yX3N1bW1hcnlfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDE0MTc1IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODU2IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9zdW1tYXJ5X21ldHJpY3MudHh0DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0NzEwMiBBcHIgMjAgMTg6NDcgMTFfc29tYXRpY190d2ljZWZpbHRlcmVkLnZjZi5neg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAyNDcgQXByIDIwIDE4OjQ3IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3ouc3VtbWFyeQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyOTMgQXByIDIwIDE4OjQ3IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0MTk1OSBBcHIgMjAgMTQ6MTQgMV9zb21hdGljX20yLnZjZi5neg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgMzUgQXByIDIwIDE0OjE0IDFfc29tYXRpY19tMi52Y2YuZ3ouc3RhdHMNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxMjg2IEFwciAyMCAxNDoxNCAxX3NvbWF0aWNfbTIudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNjk1ODQgQXByIDIwIDE0OjE0IDJfdHVtb3Jfbm9ybWFsX20yLmJhaQ0KDQotcnctci0tci0tIDEgcm9vdCByb290IDE3MDkxNDcgQXByIDIwIDE0OjE0IDJfdHVtb3Jfbm9ybWFsX20yLmJhbQ0KDQotcnctci0tci0tIDEgcm9vdCByb290IDE0NTAyMDcgQXByIDIwIDE1OjQwIDNfSEcwMDE5MC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAgIDM1IEFwciAyMCAxNTo0MCAzX0hHMDAxOTAudmNmLmd6LnN0YXRzDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA1MjgwOCBBcHIgMjAgMTU6NDAgM19IRzAwMTkwLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDI5MjkyIEFwciAyMCAxNzowMSA2X0hHMDE5MF9wb24udmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICA3NyBBcHIgMjAgMTc6MDEgNl9IRzAxOTBfcG9uLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDQ2Nzc1IEFwciAyMCAxNzoyNSA3X3R1bW9yX2dldHBpbGV1cHN1bW1hcmllcy50YWJsZQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgODQgQXByIDIwIDE3OjM1IDhfdHVtb3JfY2FsY3VsYXRlY29udGFtaW5hdGlvbi50YWJsZQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNDUyODAgQXByIDIwIDE3OjUzIDlfc29tYXRpY19vbmNlZmlsdGVyZWQudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgMTc5MSBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3ouZmlsdGVyaW5nU3RhdHMudHN2DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgMTI5OSBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3oudGJpDQoNCg0KKiogT3VyIG91dHB1dCBzaG91bGQgYmUgc2ltaWxhciB0byB3aGF0IGlzIGluIHRoZSBvdXRwdXQgZm9sZGVyLg0KDQoNCg0KDQojIyA0LiBNb3VudCB0aGUgZGF0YSB2b2x1bWUgKGkuZS4sIGdhdGtfZGF0YV9yZWYpIGFzICdnYXRrX2FuYWx5c2lzJyBpbiBkb2NrZXIgYW5kIGNoZWNrIGNvbnRlbnRzDQoNCg0KIyMjIyBiMGQyNjQ3QHZjcHU0LTE2Z2I6fiQgc3VkbyBkb2NrZXIgcnVuIC12IC9ob21lL2IwZDI2NDcvZ2F0a19kYXRhX3JlZi86L2dhdGsvZ2F0a19hbmFseXNpcyAtaXQgYnJvYWRpbnN0aXR1dGUvZ2F0azo0LjEuMS4wDQoNCg0KIyMjIERvY2tlciBjb250ZW50cw0KDQojIyMjIChnYXRrKSByb290QDRmMDgwYmI5MjQ5ZjovZ2F0ayMgbHMgLWwNCg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgMzYzNSBNYXIgMjggMjM6NDMgR0FUS0NvbmZpZy5FWEFNUExFLnByb3BlcnRpZXMNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAgMzc4NzAgTWFyIDI4IDIzOjQzIFJFQURNRS5tZA0KDQotcnd4ci14ci14IDEgcm9vdCByb290ICAgICAxOTQ5NCBNYXIgMjggMjM6NDMgZ2F0aw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDgzNjIyOSBNYXIgMjggMjM6NDMgZ2F0ay1jb21wbGV0aW9uLnNoDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgMjgyODMyNDIxIE1hciAyOCAyMzo0MyBnYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAxMzcyNjYxMjUgTWFyIDI4IDIzOjQzIGdhdGstcGFja2FnZS00LjEuMS4wLXNwYXJrLmphcg0KDQpscnd4cnd4cnd4IDEgcm9vdCByb290ICAgICAgICAzNiBNYXIgMjggMjM6NDUgZ2F0ay1zcGFyay5qYXIgLT4gL2dhdGsvZ2F0ay1wYWNrYWdlLTQuMS4xLjAtc3BhcmsuamFyDQoNCmxyd3hyd3hyd3ggMSByb290IHJvb3QgICAgICAgIDM2IE1hciAyOCAyMzo0NiBnYXRrLmphciAtPiAvZ2F0ay9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxMTQ3ODMgTWFyIDI4IDIzOjQzIGdhdGtQeXRob25QYWNrYWdlQXJjaGl2ZS56aXANCg0KKipkcnd4cnd4ci14IDMgMTAwMiAxMDAzICAgICAgNDA5NiBBcHIgMjAgMTE6NTEgZ2F0a19hbmFseXNpcyoqDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICAgOTY0IE1hciAyOCAyMzo0MyBnYXRrY29uZGFlbnYueW1sDQoNCioqZHJ3eHIteHIteCAyIHJvb3Qgcm9vdCAgICAgNjk2MzIgTWFyIDI4IDIzOjQzIGdhdGtkb2MqKg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgICA1MyBNYXIgMjggMjM6NDkgZ2F0a2Vudi5yYw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgMTk4NCBNYXIgMjggMjM6NDYgaW5zdGFsbF9SX3BhY2thZ2VzLlINCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAgICA2NDggTWFyIDI4IDIzOjQ2IHJ1bl91bml0X3Rlc3RzLnNoDQoNCmRyd3hyLXhyLXggNSByb290IHJvb3QgICAgICA0MDk2IE1hciAyOCAyMzo0NCBzY3JpcHRzDQoNCg0KDQoNCiMjIyMgKGdhdGspIHJvb3RANGYwODBiYjkyNDlmOi9nYXRrL2dhdGtfYW5hbHlzaXMvZ2F0a19tdXRlY3QyIyBscyAtbA0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgIDYwNzcxNCBKYW4gMTggIDIwMTggNF9OQTE5NzcxLnZjZi5neg0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgICAyODYxOCBKYW4gMTggIDIwMTggNF9OQTE5NzcxLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICA3NTQ4MjQgSmFuIDE4ICAyMDE4IDVfSEcwMjc1OS52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAgMjUyODIgSmFuIDE4ICAyMDE4IDVfSEcwMjc1OS52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAzNzQ0OTEyIEphbiAxOCAgMjAxOCBIRzAwMTkwLmJhaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzIDM3MzU5OTU1OCBKYW4gMTggIDIwMTggSEcwMDE5MC5iYW0NCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICA3NTczOTYgSmFuIDE5ICAyMDE4IGNocjE3cGx1cy5pbnRlcnZhbF9saXN0DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAyMTI2ODY0IEphbiAxOCAgMjAxOCBub3JtYWwuYmFpDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgNDM3ODAxNDIwIEphbiAxOCAgMjAxOCBub3JtYWwuYmFtDQoNCioqZHJ3eHIteHIteCAyIDEwMDIgMTAwMyAgICAgIDQwOTYgQXByIDE5IDIxOjU1IHByZWNvbXB1dGVkKioNCg0KKipkcnd4ci14ci14IDIgMTAwMiAxMDAzICAgICAgNDA5NiBBcHIgMTkgMjE6NTUgcmVzb3VyY2VzKioNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAyNTUzMDEgSmFuIDE4ICAyMDE4IHNvbWF0aWNfbTIudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgIDM0NTczIEphbiAxOCAgMjAxOCBzb21hdGljX20yLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgIDIwOTY3NjggSmFuIDE4ICAyMDE4IHR1bW9yLmJhaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzIDU2NzAzMzY3NyBKYW4gMTggIDIwMTggdHVtb3IuYmFtDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgIDE1MzEyIEphbiAxOCAgMjAxOCB0dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAgICAgNzggSmFuIDE4ICAyMDE4IHR1bW9yX2NhbGN1bGF0ZWNvbnRhbWluYXRpb24udGFibGUNCg0KDQoNCiMjIyMgKGdhdGspIHJvb3RANGYwODBiYjkyNDlmOi9nYXRrL2dhdGtfYW5hbHlzaXMvZ2F0a19tdXRlY3QyIyBscyAtbCByZXNvdXJjZXMvDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgMTEyNzY3NzA3IEphbiAxOCAgMjAxOCBjaHIxN19hZi1vbmx5LWdub21hZF9ncmNoMzgudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgIDczODAwIEphbiAxOCAgMjAxOCBjaHIxN19hZi1vbmx5LWdub21hZF9ncmNoMzgudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgIDU5NDI1MiBKYW4gMTggIDIwMTggY2hyMTdfbTJwb24udmNmLmd6DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgIDQyNDM5IEphbiAxOCAgMjAxOCBjaHIxN19tMnBvbi52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgMTAwMjMwIEphbiAxOCAgMjAxOCBjaHIxN19zbWFsbF9leGFjX2NvbW1vbl8zX2dyY2gzOC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAgMTE2MjkgSmFuIDE4ICAyMDE4IGNocjE3X3NtYWxsX2V4YWNfY29tbW9uXzNfZ3JjaDM4LnZjZi5nei50YmkNCg0KDQoNCg0KIyMjIyAoZ2F0aykgcm9vdEA0ZjA4MGJiOTI0OWY6L2dhdGsvZ2F0a19hbmFseXNpcy9nYXRrX211dGVjdDIjIGxzIC1sIHByZWNvbXB1dGVkLw0KdG90YWwgNDQ1Ng0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgIDE3Njg4IEphbiAxOCAgMjAxOCAxMF90dW1vcl9hcnRpZmFjdC5iYWl0X2JpYXNfZGV0YWlsX21ldHJpY3MudHh0DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgMTg4MSBKYW4gMTggIDIwMTggMTBfdHVtb3JfYXJ0aWZhY3QuYmFpdF9iaWFzX3N1bW1hcnlfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAxMjYwIEphbiAxOCAgMjAxOCAxMF90dW1vcl9hcnRpZmFjdC5lcnJvcl9zdW1tYXJ5X21ldHJpY3MudHh0DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAxNDIxNCBKYW4gMTggIDIwMTggMTBfdHVtb3JfYXJ0aWZhY3QucHJlX2FkYXB0ZXJfZGV0YWlsX21ldHJpY3MudHh0DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgMTg5NSBKYW4gMTggIDIwMTggMTBfdHVtb3JfYXJ0aWZhY3QucHJlX2FkYXB0ZXJfc3VtbWFyeV9tZXRyaWNzLnR4dA0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAyOTcyNjcgSmFuIDE4ICAyMDE4IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAgMzU4IEphbiAxOCAgMjAxOCAxMV9zb21hdGljX3R3aWNlZmlsdGVyZWQudmNmLmd6LnN1bW1hcnkNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgIDM0NTg4IEphbiAxOCAgMjAxOCAxMV9zb21hdGljX3R3aWNlZmlsdGVyZWQudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgMzk3NjUgSmFuIDE4ICAyMDE4IDFfc29tYXRpY19tMi52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAxNTM1IEphbiAxOCAgMjAxOCAxX3NvbWF0aWNfbTIudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgODQzMDQgSmFuIDE4ICAyMDE4IDJfdHVtb3Jfbm9ybWFsX20yLmJhaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzIDI2NzM5NjYgSmFuIDE4ICAyMDE4IDJfdHVtb3Jfbm9ybWFsX20yLmJhbQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICA4NTUwMzUgSmFuIDE4ICAyMDE4IDNfSEcwMDE5MC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgIDM1MTE4IEphbiAxOCAgMjAxOCAzX0hHMDAxOTAudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgODU4NzAgSmFuIDE4ICAyMDE4IDZfdGhyZWVzYW1wbGVwb24udmNmLmd6DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAxNzU1OCBKYW4gMTggIDIwMTggNl90aHJlZXNhbXBsZXBvbi52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICA1MzkxMyBKYW4gMTggIDIwMTggN190dW1vcl9nZXRwaWxldXBzdW1tYXJpZXMudGFibGUNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAgIDc5IEphbiAxOCAgMjAxOCA4X3R1bW9yX2NhbGN1bGF0ZWNvbnRhbWluYXRpb24udGFibGUNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgMjY3MTYwIEphbiAxOCAgMjAxOCA5X3NvbWF0aWNfb25jZWZpbHRlcmVkLnZjZi5neg0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgMzQ2MzAgSmFuIDE4ICAyMDE4IDlfc29tYXRpY19vbmNlZmlsdGVyZWQudmNmLmd6LnRiaQ0KDQoNCg0KDQojIyA1LiBDcmVhdGUgYSBzaXRlcy1vbmx5IHBhbmVsIG9mIG5vcm1hbCAoUG9OKSB3aXRoIENyZWF0ZVNvbWF0aWNQYW5lbE9mTm9ybWFscw0KDQoNCiMjIyBGaXJzdCwgcnVuIGdhdGsgTXV0ZWN0MiBpbiB0dW1vci1vbmx5IG1vZGUgb24gZWFjaCBub3JtYWwgc2FtcGxlIHRvIGNhbGwgYWxsIGRldGVjdGFibGUgdmFyaWFudHM6IE5lZWRzIGFuIGludGVydmFsIGxpc3QNCg0KIyMjIyAoZ2F0aykgcm9vdEBiMTlmYTNmNjE2NTA6L2dhdGsvZ2F0a19hbmFseXNpcy9nYXRrX211dGVjdDIjIGNhdCBjaHIxN3BsdXMuaW50ZXJ2YWxfbGlzdCB8IGhlYWQgLW4gMw0KDQpASEQgICAgIFZOOjEuNSAgU086dW5zb3J0ZWQNCg0KQFNRICAgICBTTjpjaHIxIExOOjI0ODk1NjQyMiAgICBVUjpmdHA6Ly9mdHAuMTAwMGdlbm9tZXMuZWJpLmFjLnVrL3ZvbDEvZnRwL3RlY2huaWNhbC9yZWZlcmVuY2UvR1JDaDM4X3JlZmVyZW5jZV9nZW5vbWUvR1JDaDM4X2Z1bGxfYW5hbHlzaXNfc2V0X3BsdXNfZGVjb3lfaGxhLmZhICAgICAgQVM6R1JDaDM4ICAgICAgIE01OjZhZWY4OTdjM2Q2ZmYwYzc4YWZmMDZhYzE4OTE3OGRkICAgICAgIFNQOkh1bWFuDQoNCkBTUSAgICAgU046Y2hyMiBMTjoyNDIxOTM1MjkgICAgVVI6ZnRwOi8vZnRwLjEwMDBnZW5vbWVzLmViaS5hYy51ay92b2wxL2Z0cC90ZWNobmljYWwvcmVmZXJlbmNlL0dSQ2gzOF9yZWZlcmVuY2VfZ2Vub21lL0dSQ2gzOF9mdWxsX2FuYWx5c2lzX3NldF9wbHVzX2RlY295X2hsYS5mYSAgICAgIEFTOkdSQ2gzOCAgICAgICBNNTpmOThkYjY3MmViMDk5M2RjZmRhYmFmZTJhODgyOTA1YyAgICAgICBTUDpIdW1hbg0KDQoNCg0KYGBgDQooZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgZ2F0ayBNdXRlY3QyIA0KDQotUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSANCg0KLUkgZ2F0a19tdXRlY3QyL0hHMDAxOTAuYmFtIA0KDQotdHVtb3IgZ2F0a19tdXRlY3QyL0hHMDAxOTAuYmFtIA0KDQotLWRpc2FibGUtcmVhZC1maWx0ZXIgTWF0ZU9uU2FtZUNvbnRpZ09yTm9NYXBwZWRNYXRlUmVhZEZpbHRlciANCg0KLS1pbnRlcnZhbHMgZ2F0a19tdXRlY3QyL2NocjE3cGx1cy5pbnRlcnZhbF9saXN0IA0KDQotTyBnYXRrX211dGVjdDIvb3V0cHV0LzNfSEcwMDE5MC52Y2YuZ3oNCg0KYGBgDQoNClVzaW5nIEdBVEsgamFyIC9nYXRrL2dhdGstcGFja2FnZS00LjEuMS4wLWxvY2FsLmphcg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQoxNToyOTozMi44MDUgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICBDdXJyZW50IExvY3VzICBFbGFwc2VkIE1pbnV0ZXMgICAgIFJlZ2lvbnMgUHJvY2Vzc2VkICAgUmVnaW9ucy9NaW51dGUNCg0KMTU6Mjk6NDIuODUxIElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgIGNocjExOjk0OTA5NyAgICAgICAgICAgICAgMC4yICAgICAgICAgICAgICAgICAgIDIwMCAgICAgICAgICAgMTE5NC41DQoNCjE1OjI5OjUyLjg1MyBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICBjaHIxNzoyMzMyMTYgICAgICAgICAgICAgIDAuMyAgICAgICAgICAgICAgICAgIDE5NzAgICAgICAgICAgIDU4OTUuOA0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KMTU6Mzk6NDQuNTY5IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICBjaHIxNzo4MDQ4MjY0OSAgICAgICAgICAgICAxMC4yICAgICAgICAgICAgICAgIDMyNjk5MCAgICAgICAgICAzMjA3MC4yDQoNCjE1OjM5OjU0LjU4OSBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgY2hyMTc6ODE4OTIwNjEgICAgICAgICAgICAgMTAuNCAgICAgICAgICAgICAgICAzMzMwNzAgICAgICAgICAgMzIxNDAuMQ0KDQoxNTo0MDowNC42MDcgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIGNocjExX0tJMjcwOTI3djFfYWx0OjgwMTczICAgICAgICAgICAgIDEwLjUgICAgICAgICAgICAgICAgMzM5MTcwICAgICAgICAgIDMyMjA5LjgNCg0KMTU6NDA6MTMuNTQ2IElORk8gIE11dGVjdDIgLSANCg0KDQo5MzQ2MzggcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKCgoKCgoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcilBTkQgTWFwcGluZ1F1YWxpdHlOb3RaZXJvUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgTm90RHVwbGljYXRlUmVhZEZpbHRlcikgQU5EIFBhc3Nlc1ZlbmRvclF1YWxpdHlDaGVja1JlYWRGaWx0ZXIpIEFORCBOb25DaGltZXJpY09yaWdpbmFsQWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vblplcm9SZWZlcmVuY2VMZW5ndGhBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgUmVhZExlbmd0aFJlYWRGaWx0ZXIpIEFORCBHb29kQ2lnYXJSZWFkRmlsdGVyKSBBTkQgV2VsbGZvcm1lZFJlYWRGaWx0ZXIpDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxNzI5OCByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE3Mjk4IHJlYWQocykgZmlsdGVyZWQgYnk6IE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA4OSByZWFkKHMpIGZpbHRlcmVkIGJ5OiBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIDQxNDI1MSByZWFkKHMpIGZpbHRlcmVkIGJ5OiBOb3REdXBsaWNhdGVSZWFkRmlsdGVyIA0KICAgICAgICAgICAgICAgICAgICAgICAgICANCjE1OjQwOjEzLjU0NiBJTkZPICBQcm9ncmVzc01ldGVyIC0gIEhMQS1BKjI0OjAzOjAxOjIxNzYgICAgICAgICAgICAgMTAuNyAgICAgICAgICAgICAgICAzMzk4MjggICAgICAgICAgMzE4MjIuMA0KDQoxNTo0MDoxMy41NDYgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDMzOTgyOCB0b3RhbCByZWdpb25zIGluIDEwLjcgbWludXRlcy4NCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyAoZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgbHMgLWwgZ2F0a19tdXRlY3QyL291dHB1dC8NCg0KDQotcnctci0tci0tIDEgcm9vdCByb290IDE0NTAyMDcgQXByIDIwIDE1OjQwIDNfSEcwMDE5MC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDUyODA4IEFwciAyMCAxNTo0MCAzX0hHMDAxOTAudmNmLmd6LnRiaQ0KDQoNCg0KDQojIyMgUnVuIGdhdGsgQ3JlYXRlU29tYXRpY1BhbmVsT2ZOb3JtYWxzIG9uIHRoZSBtdXRlY3QyIG91dHB1dA0KDQpgYGANCihnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBnYXRrIENyZWF0ZVNvbWF0aWNQYW5lbE9mTm9ybWFscyANCg0KLVYgZ2F0a19tdXRlY3QyL291dHB1dC8zX0hHMDAxOTAudmNmLmd6IA0KDQotTyBnYXRrX211dGVjdDIvb3V0cHV0LzZfSEcwMTkwX3Bvbi52Y2YuZ3oNCg0KYGBgDQoNClVzaW5nIEdBVEsgamFyIC9nYXRrL2dhdGstcGFja2FnZS00LjEuMS4wLWxvY2FsLmphcg0KDQoNCi4uLi4uLi4uLi4uLi4uDQoNCiAgICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQ0KICAgV2FybmluZzogQ3JlYXRlU29tYXRpY1BhbmVsT2ZOb3JtYWxzIGlzIGEgQkVUQSB0b29sIGFuZCBpcyBub3QgeWV0IHJlYWR5IGZvciB1c2UgaW4gcHJvZHVjdGlvbg0KICAgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KKioxNzowMToxMC4zNDIgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgIGNocjE3OjgzMDU3OTY1ICAgICAgICAgICAgICAwLjAgICAgICAgICAgICAgICAgIDM4Mzg2ICAgICAgICAyMjYyNDM2LjEgKioNCg0KDQoqKjE3OjAxOjEwLjM0MiBJTkZPICBQcm9ncmVzc01ldGVyIC0gVHJhdmVyc2FsIGNvbXBsZXRlLiBQcm9jZXNzZWQgMzgzODYgdG90YWwgdmFyaWFudHMgaW4gMC4wIG1pbnV0ZXMuKioNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyAoZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgbHMgLWwgZ2F0a19tdXRlY3QyL291dHB1dC8NCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDI5MjkyIEFwciAyMCAxNzowMSA2X0hHMDE5MF9wb24udmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICA3NyBBcHIgMjAgMTc6MDEgNl9IRzAxOTBfcG9uLnZjZi5nei50YmkNCg0KDQoNCiMjIDYuIGNhbGwgbXV0YXRpb25zIGluIHRoZSB0dW1vciBpbiBzb21hdGljIG1vZGUuIA0KDQoNCmBgYCANCg0KKGdhdGspIHJvb3RAN2UzMDg0NTdkZWQ2Oi9nYXRrL2dhdGtfYW5hbHlzaXMjIGdhdGsgTXV0ZWN0MiANCg0KLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgDQoNCi1JIGdhdGtfbXV0ZWN0Mi90dW1vci5iYW0gDQoNCi1JIGdhdGtfbXV0ZWN0Mi9ub3JtYWwuYmFtIA0KDQotdHVtb3IgSENDMTE0M190dW1vciANCg0KLW5vcm1hbCBIQ0MxMTQzX25vcm1hbCANCg0KLXBvbiBnYXRrX211dGVjdDIvcmVzb3VyY2VzL2NocjE3X20ycG9uLnZjZi5neiANCg0KLS1nZXJtbGluZS1yZXNvdXJjZSBnYXRrX211dGVjdDIvcmVzb3VyY2VzL2NocjE3X2FmLW9ubHktZ25vbWFkX2dyY2gzOC52Y2YuZ3ogDQoNCi0tYWYtb2YtYWxsZWxlcy1ub3QtaW4tcmVzb3VyY2UgMC4wMDAwMDI1IA0KDQotLWRpc2FibGUtcmVhZC1maWx0ZXIgTWF0ZU9uU2FtZUNvbnRpZ09yTm9NYXBwZWRNYXRlUmVhZEZpbHRlciANCg0KLUwgZ2F0a19tdXRlY3QyL2NocjE3cGx1cy5pbnRlcnZhbF9saXN0IA0KDQotTyBnYXRrX211dGVjdDIvb3V0cHV0LzFfc29tYXRpY19tMi52Y2YuZ3ogDQoNCi1iYW1vdXQgZ2F0a19tdXRlY3QyL291dHB1dC8yX3R1bW9yX25vcm1hbF9tMi5iYW0NCg0KYGBgDQoNCg0KVXNpbmcgR0FUSyBqYXIgL2dhdGsvZ2F0ay1wYWNrYWdlLTQuMS4xLjAtbG9jYWwuamFyDQoNCg0KDQoxNDowOTozOS4xNDYgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICBDdXJyZW50IExvY3VzICBFbGFwc2VkIE1pbnV0ZXMgICAgIFJlZ2lvbnMgUHJvY2Vzc2VkICAgUmVnaW9ucy9NaW51dGUNCg0KMTQ6MDk6NDkuMTU0IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgY2hyMTE6MTA3MzA4MSAgICAgICAgICAgICAgMC4yICAgICAgICAgICAgICAgICAgIDU4MCAgICAgICAgICAgMzQ3Ny45DQoNCjE0OjA5OjU5LjI2NSBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgIGNocjE3OjE2NzgzMjggICAgICAgICAgICAgIDAuMyAgICAgICAgICAgICAgICAgIDY1NDAgICAgICAgICAgMTk1MDQuOQ0KDQouLi4uLi4uLi4uLg0KDQoxNDoxNDoxMC4wODUgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgIGNocjE3OjgwNDU5MjYyICAgICAgICAgICAgICA0LjUgICAgICAgICAgICAgICAgMjc0MzYwICAgICAgICAgIDYwNzU3LjYNCg0KMTQ6MTQ6MjAuMDg1IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICBjaHIxNzo4MjQ5MzA4MSAgICAgICAgICAgICAgNC43ICAgICAgICAgICAgICAgIDI4MTUyMCAgICAgICAgICA2MDEyNC4xDQoNCg0KMTQ6MTQ6MjkuMzE3IElORk8gIE11dGVjdDIgLSANCg0KDQoyNDk1NDMwIHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKCgoKCgoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwaW5nUXVhbGl0eU5vdFplcm9SZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikgQU5EIE5vdFNlY29uZGFyeUFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBOb3REdXBsaWNhdGVSZWFkRmlsdGVyKSBBTkQgUGFzc2VzVmVuZG9yUXVhbGl0eUNoZWNrUmVhZEZpbHRlcikgQU5EIE5vbkNoaW1lcmljT3JpZ2luYWxBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgTm9uWmVyb1JlZmVyZW5jZUxlbmd0aEFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBSZWFkTGVuZ3RoUmVhZEZpbHRlcikgQU5EIEdvb2RDaWdhclJlYWRGaWx0ZXIpIEFORCBXZWxsZm9ybWVkUmVhZEZpbHRlcikNCiAgDQogDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOTM0MjcgcmVhZChzKSBmaWx0ZXJlZCBieTogKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDkzNDI3IHJlYWQocykgZmlsdGVyZWQgYnk6IE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAxNDAyMDAzIHJlYWQocykgZmlsdGVyZWQgYnk6IE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIgDQogICAgICAgICAgICAgICAgICAgICAgICAgIA0KMTQ6MTQ6MjkuMzE3IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgSExBLUEqMjQ6MDM6MDE6MjYxNSAgICAgICAgICAgICAgNC44ICAgICAgICAgICAgICAgIDI4NTAwNSAgICAgICAgICA1ODkzMS44DQoNCioqMTQ6MTQ6MjkuMzE3IElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCAyODUwMDUgdG90YWwgcmVnaW9ucyBpbiA0LjggbWludXRlcy4qKg0KDQoNCg0KIyMjIyBBZGRpdGlvbmFsIGRpcmVjb3J5IGNvbnRlbnRzDQoNCiMjIyMgKGdhdGspIHJvb3RAN2UzMDg0NTdkZWQ2Oi9nYXRrL2dhdGtfYW5hbHlzaXMjIGxzIC1sIGdhdGtfbXV0ZWN0Mi9vdXRwdXQvDQoNCnRvdGFsIDE3OTINCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDQxOTU5IEFwciAyMCAxNDoxNCAxX3NvbWF0aWNfbTIudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICAzNSBBcHIgMjAgMTQ6MTQgMV9zb21hdGljX20yLnZjZi5nei5zdGF0cw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyODYgQXByIDIwIDE0OjE0IDFfc29tYXRpY19tMi52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA2OTU4NCBBcHIgMjAgMTQ6MTQgMl90dW1vcl9ub3JtYWxfbTIuYmFpDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgMTcwOTE0NyBBcHIgMjAgMTQ6MTQgMl90dW1vcl9ub3JtYWxfbTIuYmFtDQoNCg0KDQojIyMjIChnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBjYXQgZ2F0a19tdXRlY3QyL291dHB1dC8xX3NvbWF0aWNfbTIudmNmLmd6LnN0YXRzICAgICANCg0KYGBgDQpzdGF0aXN0aWMgICAgICAgdmFsdWUNCg0KY2FsbGFibGUgICAgICAgIDQ4MTA4NjQuMA0KDQpgYGANCg0KIyMjIyAoYmFzZSkgYjBkMjY0N0B2Y3B1NC0xNmdiOn4vZ2F0a19kYXRhX3JlZi9nYXRrX211dGVjdDIkIHpjYXQgb3V0cHV0LzFfc29tYXRpY19tMi52Y2YuZ3ogfCBhd2sgJyQ1IH4iLCInIHwgaGVhZCAtbiAyDQoNCg0KDQpgYGANCmNocjE3ICAgODUxMzY4OCAuICAgICAgIEdUVCAgICAgRyxHVCAgICAuICAgICAgIC4gICAgICAgRFA9Mjk4O0VDTlQ9MTtNQlE9MzAsMjksMzE7TUZSTD0xNjAsMTU4LDE1MTtNTVE9NjAsNjAsNjA7TVBPUz0yMSwyNDtOQUxPRD0wLjA5OSwtNy4zNDVlKzAxO05MT0QNCg0KPTkuMDMsLTcuMzgyZSswMTtQT047UE9QQUY9Mi40OSwwLjM2NTtSUEE9MTMsMTEsMTI7UlU9VDtTVFI7VExPRD00LjkyLDIxNS40MiAgICBHVDpBRDpBRjpEUDpGMVIyOkYyUjE6U0IgICAgICAgIDAvMDo0MiwyLDQxOjAuMDI1LDAuNDk2Ojg1OjI0LDAsMTg6MTMsMg0KDQosMjI6MTEsMzEsMTMsMzAgMC8xLzI6MTEsOCwxMDE6MC4wNTYsMC44NTk6MTIwOjUsMywzNjo0LDQsNTQ6Niw1LDI2LDgzDQoNCg0KY2hyMTcgICAxNzg2OTMwOCAgICAgICAgLiAgICAgICBHQUFBQSAgIEcsR0FBQUFBICAgICAgICAuICAgICAgIC4gICAgICAgRFA9NjA7RUNOVD0xO01CUT0zMiwyMCwzMjtNRlJMPTEzNiw5NywxNDQ7TU1RPTYwLDYwLDYwO01QT1M9MjksMjg7TkFMT0Q9MC42MTAsLQ0KDQo0LjM5OWUrMDA7TkxPRD0yLjkyLC0zLjQ4MmUrMDA7UE9OO1BPUEFGPTEuNzcsMi45NTtSUEE9MTUsMTEsMTY7UlU9QTtTVFI7VExPRD0zLjA2LDE0LjI4ICAgICAgICBHVDpBRDpBRjpEUDpGMVIyOkYyUjE6U0IgICAgICAgIDAvMDo5LDEsMzowLjA5NywwLjI2OToxDQoNCjM6NSwxLDE6MywwLDE6OCwxLDEsMyAgIDAvMS8yOjEwLDIsMTI6MC4wOTUsMC41MzA6MjQ6MiwyLDM6NywwLDk6NSw1LDExLDMNCg0KYGBgDQoNCiMjIDcuIFJlcG9ydCB2YXJpYW50IHN0YXRpc3RpY3MgdXNpbmcgYmNmdG9vbHMNCg0KDQojIyMjIChiYXNlKSBiMGQyNjQ3QHZjcHU0LTE2Z2I6fi9nYXRrX2RhdGFfcmVmL2dhdGtfbXV0ZWN0MiQgYmNmdG9vbHMgc3RhdHMgfi9nYXRrX2RhdGFfcmVmL2dhdGtfbXV0ZWN0Mi9vdXRwdXQvMV9zb21hdGljX20yLnZjZi5neg0KDQoNCg0KYGBgDQojIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgYmNmdG9vbHMgc3RhdHMgKDEuOStodHNsaWItMS45KSBhbmQgY2FuIGJlIHBsb3R0ZWQgdXNpbmcgcGxvdC12Y2ZzdGF0cy4NCg0KDQojIFRoZSBjb21tYW5kIGxpbmUgd2FzOiBiY2Z0b29scyBzdGF0cyAgL2hvbWUvYjBkMjY0Ny9nYXRrX2RhdGFfcmVmL2dhdGtfbXV0ZWN0Mi9vdXRwdXQvMV9zb21hdGljX20yLnZjZi5neg0KIw0KIyBTTiAgICBbMl1pZCAgIFszXWtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF12YWx1ZQ0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXM6ICAgICAgICAgICAgICAgICAgICAgIDINCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiByZWNvcmRzOiAgICAgICAgICAgICAgICAgICAgICAxMTENCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBuby1BTFRzOiAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgU05QczogICAgICAgICAgICAgICAgICAgICAgICAgOTMNCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBNTlBzOiAgICAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgaW5kZWxzOiAgICAgICAgICAgICAgICAgICAgICAgMTgNCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBvdGhlcnM6ICAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzOiAgICAgICAgICAgNw0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6ICAgICAgIDANCg0KYGBgDQoNCg0KDQoNCg0KIyMgOC4gcnVuIEdldFBpbGV1cFN1bW1hcmllcyBvbiB0aGUgdHVtb3IgQkFNIHRvIHN1bW1hcml6ZSByZWFkIHN1cHBvcnQgZm9yIGEgc2V0IG9mIG51bWJlciBvZiBrbm93biB2YXJpYW50IHNpdGVzLg0KDQpgYGANCihnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBnYXRrIEdldFBpbGV1cFN1bW1hcmllcyANCg0KLUkgZ2F0a19tdXRlY3QyL3R1bW9yLmJhbSANCg0KLVYgZ2F0a19tdXRlY3QyL3Jlc291cmNlcy9jaHIxN19zbWFsbF9leGFjX2NvbW1vbl8zX2dyY2gzOC52Y2YuZ3ogDQoNCi1MIGdhdGtfbXV0ZWN0Mi9jaHIxN3BsdXMuaW50ZXJ2YWxfbGlzdCANCg0KLU8gZ2F0a19tdXRlY3QyL291dHB1dC83X3R1bW9yX2dldHBpbGV1cHN1bW1hcmllcy50YWJsZQ0KDQpgYGANCg0KDQpVc2luZyBHQVRLIGphciAvZ2F0ay9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KDQogICAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISENCiAgIFdhcm5pbmc6IEdldFBpbGV1cFN1bW1hcmllcyBpcyBhIEJFVEEgdG9vbCBhbmQgaXMgbm90IHlldCByZWFkeSBmb3IgdXNlIGluIHByb2R1Y3Rpb24NCiAgICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQ0KICAgDQouLi4uLi4uLi4uLi4NCg0KDQoxNzoyNDoxNC45ODEgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICBDdXJyZW50IExvY3VzICBFbGFwc2VkIE1pbnV0ZXMgICAgICAgIExvY2kgUHJvY2Vzc2VkICAgICAgTG9jaS9NaW51dGUNCg0KMTc6MjQ6MjQuOTg2IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgY2hyMTc6NzAyNDExMiAgICAgICAgICAgICAgMC4yICAgICAgICAgICAgICAgMTA5MzAwMCAgICAgICAgNjU1NTM3Ny44DQoNCi4uLi4uLi4uLi4uDQoNCjE3OjI1OjA0Ljk5NiBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgY2hyMTc6ODA2Mjc0NjQgICAgICAgICAgICAgIDAuOCAgICAgICAgICAgICAgIDkyOTkwMDAgICAgICAgMTExNTU0NTMuNA0KDQoxNzoyNTowNy45MjEgSU5GTyAgR2V0UGlsZXVwU3VtbWFyaWVzIC0gMTUwOTg2MiByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKCgoKCgoKChNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5Tm90WmVyb1JlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgUHJpbWFyeUxpbmVSZWFkRmlsdGVyKSBBTkQgTm90RHVwbGljYXRlUmVhZEZpbHRlcikgQU5EIFBhc3Nlc1ZlbmRvclF1YWxpdHlDaGVja1JlYWRGaWx0ZXIpIEFORCBOb25aZXJvUmVmZXJlbmNlTGVuZ3RoQWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE1hdGVPblNhbWVDb250aWdPck5vTWFwcGVkTWF0ZVJlYWRGaWx0ZXIpIEFORCBHb29kQ2lnYXJSZWFkRmlsdGVyKSBBTkQgV2VsbGZvcm1lZFJlYWRGaWx0ZXIpDQogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4uLi4uLi4uLi4uLi4uLi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Njk1MDggcmVhZChzKSBmaWx0ZXJlZCBieTogTWFwcGluZ1F1YWxpdHlOb3RaZXJvUmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgMjI1OTAgcmVhZChzKSBmaWx0ZXJlZCBieTogUHJpbWFyeUxpbmVSZWFkRmlsdGVyIA0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICA5MDI2NzYgcmVhZChzKSBmaWx0ZXJlZCBieTogTm90RHVwbGljYXRlUmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgMSByZWFkKHMpIGZpbHRlcmVkIGJ5OiBOb25aZXJvUmVmZXJlbmNlTGVuZ3RoQWxpZ25tZW50UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgDQogICAgICAgICAgMTUwODcgcmVhZChzKSBmaWx0ZXJlZCBieTogTWF0ZU9uU2FtZUNvbnRpZ09yTm9NYXBwZWRNYXRlUmVhZEZpbHRlciANCiAgICAgICAgICANCiAgICAgICAgICANCjE3OjI1OjA3LjkyMiBJTkZPICBQcm9ncmVzc01ldGVyIC0gY2hyMTFfS0kyNzA5Mjd2MV9hbHQ6OTE0MzMgICAgICAgICAgICAgIDAuOSAgICAgICAgICAgICAgIDk5MDYyMTcgICAgIDExMjI3MDgzLjQNCg0KMTc6MjU6MDcuOTIyIElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCA5OTA2MjE3IHRvdGFsIGxvY2kgaW4gMC45IG1pbnV0ZXMuDQoNCg0KIyMjIEFkZGl0aW5hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyAoZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgbHMgLWwgZ2F0a19tdXRlY3QyL291dHB1dC8NCg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNDY3NzUgQXByIDIwIDE3OjI1IDdfdHVtb3JfZ2V0cGlsZXVwc3VtbWFyaWVzLnRhYmxlDQoNCg0KDQoNCg0KIyMgOS4gQ2FsY3VsYXRlIENvbnRhbWluYXRpb24NCg0KYGBgDQooZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgZ2F0ayBDYWxjdWxhdGVDb250YW1pbmF0aW9uIA0KDQotSSBnYXRrX211dGVjdDIvb3V0cHV0LzdfdHVtb3JfZ2V0cGlsZXVwc3VtbWFyaWVzLnRhYmxlIA0KDQotTyBnYXRrX211dGVjdDIvb3V0cHV0LzhfdHVtb3JfY2FsY3VsYXRlY29udGFtaW5hdGlvbi50YWJsZQ0KDQpgYGANCg0KDQpVc2luZyBHQVRLIGphciAvZ2F0ay9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KDQouLi4uLi4uLi4uLi4uLi4uDQoNCjE3OjM1OjAxLjIyMyBXQVJOICBLZXJuZWxTZWdtZW50ZXIgLSBTcGVjaWZpZWQgZGltZW5zaW9uIG9mIHRoZSBrZXJuZWwgYXBwcm94aW1hdGlvbiAoMTAwKSBleGNlZWRzIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgKDIwKSB0byBzZWdtZW50OyB1c2luZyBhbGwgZGF0YSBwb2ludHMgdG8gY2FsY3VsYXRlIGtlcm5lbCBtYXRyaXguDQoNCi4uLi4uLi4uLi4uLi4uDQoNClRvb2wgcmV0dXJuZWQ6IFNVQ0NFU1MNCg0KDQoNCiMjIyBBZGRpdGluYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgKGdhdGspIHJvb3RAN2UzMDg0NTdkZWQ2Oi9nYXRrL2dhdGtfYW5hbHlzaXMjIGxzIC1sIGdhdGtfbXV0ZWN0Mi9vdXRwdXQvDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICA4NCBBcHIgMjAgMTc6MzUgOF90dW1vcl9jYWxjdWxhdGVjb250YW1pbmF0aW9uLnRhYmxlDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0NTI4MCBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3oNCg0KDQoNCiMjIDEwLiBGaWx0ZXIgTXV0ZWN0IENhbGxzDQoNCg0KYGBgDQooZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgZ2F0ayBGaWx0ZXJNdXRlY3RDYWxscw0KDQotUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSANCg0KLVYgZ2F0a19tdXRlY3QyL291dHB1dC8xX3NvbWF0aWNfbTIudmNmLmd6IA0KDQotLWNvbnRhbWluYXRpb24tdGFibGUgZ2F0a19tdXRlY3QyL291dHB1dC84X3R1bW9yX2NhbGN1bGF0ZWNvbnRhbWluYXRpb24udGFibGUgDQoNCi1PIGdhdGtfbXV0ZWN0Mi9vdXRwdXQvOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3oNCg0KYGBgDQoNClVzaW5nIEdBVEsgamFyIC9nYXRrL2dhdGstcGFja2FnZS00LjEuMS4wLWxvY2FsLmphcg0KDQoNCjE3OjUzOjE0LjQ0OSBJTkZPICBGZWF0dXJlTWFuYWdlciAtIFVzaW5nIGNvZGVjIFZDRkNvZGVjIHRvIHJlYWQgZmlsZSBmaWxlOi8vL2dhdGsvZ2F0a19hbmFseXNpcy9nYXRrX211dGVjdDIvb3V0cHV0LzFfc29tYXRpY19tMi52Y2YuZ3oNCg0KLi4uLi4uLi4NCg0KMTc6NTM6MTUuMDg3IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgQ3VycmVudCBMb2N1cyAgRWxhcHNlZCBNaW51dGVzICAgIFZhcmlhbnRzIFByb2Nlc3NlZCAgVmFyaWFudHMvTWludXRlDQoNCjE3OjUzOjE1LjA4OCBJTkZPICBGaWx0ZXJNdXRlY3RDYWxscyAtIFN0YXJ0aW5nIHBhc3MgMCB0aHJvdWdoIHRoZSB2YXJpYW50cw0KDQoxNzo1MzoxNS40MjMgSU5GTyAgRmlsdGVyTXV0ZWN0Q2FsbHMgLSBGaW5pc2hlZCBwYXNzIDAgdGhyb3VnaCB0aGUgdmFyaWFudHMNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoxNzo1MzoxNS43MjYgSU5GTyAgRmlsdGVyTXV0ZWN0Q2FsbHMgLSBObyB2YXJpYW50cyBmaWx0ZXJlZCBieTogQWxsb3dBbGxWYXJpYW50c1ZhcmlhbnRGaWx0ZXINCg0KMTc6NTM6MTUuNzI2IElORk8gIEZpbHRlck11dGVjdENhbGxzIC0gTm8gcmVhZHMgZmlsdGVyZWQgYnk6IEFsbG93QWxsUmVhZHNSZWFkRmlsdGVyDQoNCjE3OjUzOjE1LjcyNiBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICAgICAgdW5tYXBwZWQgICAgICAgICAgICAgIDAuMCAgICAgICAgICAgICAgICAgICAzMzMgICAgICAgICAgMzEyNjcuNg0KDQoxNzo1MzoxNS43MjYgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDMzMyB0b3RhbCB2YXJpYW50cyBpbiAwLjAgbWludXRlcy4NCg0KDQoNCiMjIyBBZGRpdGluYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgKGdhdGspIHJvb3RAN2UzMDg0NTdkZWQ2Oi9nYXRrL2dhdGtfYW5hbHlzaXMjIGxzIC1sIGdhdGtfbXV0ZWN0Mi9vdXRwdXQvDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0NTI4MCBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxNzkxIEFwciAyMCAxNzo1MyA5X3NvbWF0aWNfb25jZWZpbHRlcmVkLnZjZi5nei5maWx0ZXJpbmdTdGF0cy50c3YNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxMjk5IEFwciAyMCAxNzo1MyA5X3NvbWF0aWNfb25jZWZpbHRlcmVkLnZjZi5nei50YmkNCg0KDQoNCiMjIDExLiBDb2xsZWN0IFNlcXVlbmNpbmcgQXJ0aWZhY3QgTWV0cmljcw0KDQoNCmBgYA0KDQooZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgZ2F0ayBDb2xsZWN0U2VxdWVuY2luZ0FydGlmYWN0TWV0cmljcw0KDQotUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSANCg0KLUkgZ2F0a19tdXRlY3QyL3R1bW9yLmJhbSANCg0KLU8gZ2F0a19tdXRlY3QyL291dHB1dC8xMF90dW1vcl9hcnRpZmFjdCANCg0KLUZJTEVfRVhURU5TSU9OICIudHh0IiAgIA0KDQpgYGANCg0KVXNpbmcgR0FUSyBqYXIgL2dhdGsvZ2F0ay1wYWNrYWdlLTQuMS4xLjAtbG9jYWwuamFyDQoNCg0KDQpJTkZPICAgIDIwMTktMDQtMjAgMTg6MDk6NTggICAgIFNpbmdsZVBhc3NTYW1Qcm9ncmFtICAgIFByb2Nlc3NlZCAgICAgMSwwMDAsMDAwIHJlY29yZHMuICBFbGFwc2VkIHRpbWU6IDAwOjAwOjQ4cy4gIFRpbWUgZm9yIGxhc3QgMSwwMDAsMDAwOiAgIDQ0cy4gIExhc3QgcmVhZCBwb3NpdGlvbjogY2hyMTc6OSwyNDIsMTI3DQoNCg0KLi4uLi4uLi4uLi4uLg0KDQoNCklORk8gICAgMjAxOS0wNC0yMCAxODoxMDo0NSAgICAgU2luZ2xlUGFzc1NhbVByb2dyYW0gICAgUHJvY2Vzc2VkICAgICA2LDAwMCwwMDAgcmVjb3Jkcy4gIEVsYXBzZWQgdGltZTogMDA6MDE6MzVzLiAgVGltZSBmb3IgbGFzdCAxLDAwMCwwMDA6ICAgMTdzLiAgTGFzdCByZWFkIHBvc2l0aW9uOiBjaHIxN19LSTI3MDkwOHYxX2FsdDoxLDA1OSw4MjENCg0KW1NhdCBBcHIgMjAgMTg6MTA6NDcgVVRDIDIwMTldIHBpY2FyZC5hbmFseXNpcy5hcnRpZmFjdHMuQ29sbGVjdFNlcXVlbmNpbmdBcnRpZmFjdE1ldHJpY3MgZG9uZS4gRWxhcHNlZCB0aW1lOiAxLjY0IG1pbnV0ZXMuDQoNCg0KDQojIyMgQWRkaXRpbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjIChnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBscyAtbCBnYXRrX211dGVjdDIvb3V0cHV0Lw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgMTc2NDkgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmJhaXRfYmlhc19kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODQyIEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5iYWl0X2JpYXNfc3VtbWFyeV9tZXRyaWNzLnR4dA0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyMjEgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmVycm9yX3N1bW1hcnlfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDE0MTc1IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODU2IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9zdW1tYXJ5X21ldHJpY3MudHh0DQoNCg0KDQoNCg0KIyMjIyAoZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgY2F0IGdhdGtfbXV0ZWN0Mi9vdXRwdXQvMTBfdHVtb3JfYXJ0aWZhY3QucHJlX2FkYXB0ZXJfc3VtbWFyeV9tZXRyaWNzLnR4dCB8IGhlYWQgLW4gMTcNCg0KDQpgYGANClNBTVBMRV9BTElBUyAgICBMSUJSQVJZIFJFRl9CQVNFICAgICAgICBBTFRfQkFTRSAgICAgICAgVE9UQUxfUVNDT1JFICAgIFdPUlNUX0NYVCAgICAgICBXT1JTVF9DWFRfUVNDT1JFICAgICAgICBXT1JTVF9QUkVfQ1hUICAgV09SU1RfUFJFX0NYVF9RU0NPUkUgIFcNCk9SU1RfUE9TVF9DWFQgICBXT1JTVF9QT1NUX0NYVF9RU0NPUkUgICBBUlRJRkFDVF9OQU1FDQoNCg0KSENDMTE0M190dW1vciAgIFBvbmQtMTQ3NTgwICAgICBBICAgICAgIEMgICAgICAgNjAgICAgICBUQUMgICAgIDQ2ICAgICAgQUFOICAgICA1MyAgICAgIE5BQyAgICAgNDkgICAgICBOQQ0KDQpIQ0MxMTQzX3R1bW9yICAgUG9uZC0xNDc1ODAgICAgIEEgICAgICAgRyAgICAgICA0OSAgICAgIENBVCAgICAgNDIgICAgICBDQU4gICAgIDQ2ICAgICAgTkFUICAgICA0NiAgICAgIE5BDQoNCkhDQzExNDNfdHVtb3IgICBQb25kLTE0NzU4MCAgICAgQSAgICAgICBUICAgICAgIDEwMCAgICAgQ0FDICAgICA0NyAgICAgIEFBTiAgICAgMTAwICAgICBOQUEgICAgIDEwMCAgICAgTkENCg0KSENDMTE0M190dW1vciAgIFBvbmQtMTQ3NTgwICAgICBDICAgICAgIEEgICAgICAgMTAwICAgICBBQ0EgICAgIDEwMCAgICAgQUNOICAgICAxMDAgICAgIE5DQSAgICAgMTAwICAgICBOQQ0KDQpIQ0MxMTQzX3R1bW9yICAgUG9uZC0xNDc1ODAgICAgIEMgICAgICAgRyAgICAgICAxMDAgICAgIEdDQSAgICAgNDEgICAgICBHQ04gICAgIDQ3ICAgICAgTkNBICAgICA1MyAgICAgIE5BDQoNCkhDQzExNDNfdHVtb3IgICBQb25kLTE0NzU4MCAgICAgQyAgICAgICBUICAgICAgIDQ2ICAgICAgQUNHICAgICAzNyAgICAgIEFDTiAgICAgNDIgICAgICBOQ0EgICAgIDQ1ICAgICAgRGVhbWluYXRpb24NCg0KSENDMTE0M190dW1vciAgIFBvbmQtMTQ3NTgwICAgICBHICAgICAgIEEgICAgICAgMTAwICAgICBDR0EgICAgIDQyICAgICAgQUdOICAgICAxMDAgICAgIE5HQSAgICAgMTAwICAgICBOQQ0KDQpIQ0MxMTQzX3R1bW9yICAgUG9uZC0xNDc1ODAgICAgIEcgICAgICAgQyAgICAgICA1MSAgICAgIEFHRyAgICAgNDEgICAgICBBR04gICAgIDQ1ICAgICAgTkdUICAgICA0NSAgICAgIE5BDQoNCkhDQzExNDNfdHVtb3IgICBQb25kLTE0NzU4MCAgICAgRyAgICAgICBUICAgICAgIDM2ICAgICAgQ0dDICAgICAzMyAgICAgIENHTiAgICAgMzUgICAgICBOR0EgICAgIDM1ICAgICAgT3hvRw0KDQpIQ0MxMTQzX3R1bW9yICAgUG9uZC0xNDc1ODAgICAgIFQgICAgICAgQSAgICAgICA0NyAgICAgIENUQSAgICAgNDIgICAgICBDVE4gICAgIDQ1ICAgICAgTlRBICAgICA0NCAgICAgIE5BDQoNCmBgYA0KDQoNCiMjIDEyLiBGaWx0ZXIgQnkgT3JpZW50YXRpb24gQmlhcw0KDQoNCmBgYA0KDQojIyMjIChnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBnYXRrIEZpbHRlckJ5T3JpZW50YXRpb25CaWFzIA0KDQotViBnYXRrX211dGVjdDIvb3V0cHV0Lzlfc29tYXRpY19vbmNlZmlsdGVyZWQudmNmLmd6IA0KDQotUCBnYXRrX211dGVjdDIvb3V0cHV0LzEwX3R1bW9yX2FydGlmYWN0LnByZV9hZGFwdGVyX2RldGFpbF9tZXRyaWNzLnR4dCANCg0KLU8gZ2F0a19tdXRlY3QyL291dHB1dC8xMV9zb21hdGljX3R3aWNlZmlsdGVyZWQudmNmLmd6DQoNCmBgYA0KDQpVc2luZyBHQVRLIGphciAvZ2F0ay9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KDQoNCi4uLi4uLi4uDQoNCiAgICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQ0KICAgV2FybmluZzogRmlsdGVyQnlPcmllbnRhdGlvbkJpYXMgaXMgYW4gRVhQRVJJTUVOVEFMIHRvb2wgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgcHJvZHVjdGlvbg0KICAgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhDQogICANCiAgIA0KLi4uLi4uLi4uLi4uLi4uLi4uDQoNCg0KMTg6NDc6NTguMTc0IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgQ3VycmVudCBMb2N1cyAgRWxhcHNlZCBNaW51dGVzICAgICBSZWNvcmRzIFByb2Nlc3NlZCAgIFJlY29yZHMvTWludXRlDQoNCjE4OjQ3OjU4LjE3OSBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICAgICAgdW5tYXBwZWQgICAgICAgICAgICAgIDAuMCAgICAgICAgICAgICAgICAgICAyMjIgICAgMzMzMDAwMC4wDQogICAgDQogICAgDQoxODo0Nzo1OC4xNzkgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDIyMiB0b3RhbCByZWNvcmRzIGluIDAuMCBtaW51dGVzLg0KDQoxODo0Nzo1OC4xODYgSU5GTyAgT3JpZW50YXRpb25CaWFzRmlsdGVyZXIgLSBIQ0MxMTQzX25vcm1hbDogTm90aGluZyB0byBmaWx0ZXIuDQoNCjE4OjQ3OjU4LjE5OSBJTkZPICBPcmllbnRhdGlvbkJpYXNGaWx0ZXJlciAtIEhDQzExNDNfdHVtb3I6IEN1dHRpbmcgKEc+VCkgcHJlLXByZUFkYXB0ZXJROiAwIG9mIDINCg0KMTg6NDc6NTguMjAwIElORk8gIE9yaWVudGF0aW9uQmlhc0ZpbHRlcmVyIC0gSENDMTE0M190dW1vcjogQ3V0dGluZyAoQz5BKSBwcmUtcHJlQWRhcHRlclE6IC0xIG9mIDANCg0KMTg6NDc6NTguMjAxIElORk8gIE9yaWVudGF0aW9uQmlhc0ZpbHRlcmVyIC0gSENDMTE0M190dW1vcjogQ3V0dGluZyAodG90YWwpIHByZS1wcmVBZGFwdGVyUTogLTENCg0KMTg6NDc6NTguMjAxIElORk8gIE9yaWVudGF0aW9uQmlhc0ZpbHRlcmVyIC0gSENDMTE0M190dW1vcjogQ3V0dGluZyAoRz5UKSBwb3N0LXByZUFkYXB0ZXJROiAwDQoNCjE4OjQ3OjU4LjIwMSBJTkZPICBPcmllbnRhdGlvbkJpYXNGaWx0ZXJlciAtIEhDQzExNDNfdHVtb3I6IEN1dHRpbmcgKEM+QSkgcG9zdC1wcmVBZGFwdGVyUTogLTENCg0KMTg6NDc6NTguMjAxIElORk8gIE9yaWVudGF0aW9uQmlhc0ZpbHRlcmVyIC0gSENDMTE0M190dW1vcjogQWRkaW5nIG9yaWVudGF0aW9uIGJpYXMgZmlsdGVyIHJlc3VsdHMgdG8gZ2Vub3R5cGVzLi4uDQoNCjE4OjQ3OjU4LjIwMiBJTkZPICBPcmllbnRhdGlvbkJpYXNGaWx0ZXJlciAtIFBhc3Npbmc6IEhDQzExNDNfdHVtb3IgRyogVCBwPTcuMDM5MTI2NTAzOTA0OTI0NEUtOSBGb2I9MC4zODQ2MTUzODQ2MTUzODQ2NA0KDQoxODo0Nzo1OC4yMDMgSU5GTyAgT3JpZW50YXRpb25CaWFzRmlsdGVyZXIgLSBQYXNzaW5nOiBIQ0MxMTQzX3R1bW9yIEcqIFQgcD0wLjAgRm9iPTAuNTU1NTU1NTU1NTU1NTU1Ng0KDQoxODo0Nzo1OC4yMDMgSU5GTyAgT3JpZW50YXRpb25CaWFzRmlsdGVyZXIgLSBVcGRhdGluZyBnZW5vdHlwZXMgYW5kIGNyZWF0aW5nIGZpbmFsIGxpc3Qgb2YgdmFyaWFudHMuLi4NCg0KMTg6NDc6NTguMjA0IElORk8gIFByb2dyZXNzTWV0ZXIgLSBTdGFydGluZyB0cmF2ZXJzYWwNCg0KMTg6NDc6NTguMjA0IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgQ3VycmVudCBMb2N1cyAgRWxhcHNlZCBNaW51dGVzICAgICBSZWNvcmRzIFByb2Nlc3NlZCAgIFJlY29yZHMvTWludXRlDQoNCjE4OjQ3OjU4LjIwNiBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICAgICAgdW5tYXBwZWQgICAgICAgICAgICAgIDAuMCAgICAgICAgICAgICAgICAgICAxMTEgICAgIDMzMzAwMDAuMA0KICAgIA0KMTg6NDc6NTguMjA2IElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCAxMTEgdG90YWwgcmVjb3JkcyBpbiAwLjAgbWludXRlcy4NCg0KDQoxODo0Nzo1OC4yMDYgSU5GTyAgRmlsdGVyQnlPcmllbnRhdGlvbkJpYXMgLSBXcml0aW5nIHZhcmlhbnRzIHRvIFZDRi4uLg0KDQoxODo0Nzo1OC4yNjggSU5GTyAgRmlsdGVyQnlPcmllbnRhdGlvbkJpYXMgLSBXcml0aW5nIGEgc2ltcGxlIHN1bW1hcnkgdGFibGUuLi4NCg0KDQojIyMgQWRkaXRpbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjIChnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBscyAtbCBnYXRrX211dGVjdDIvb3V0cHV0Lw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNDcxMDIgQXByIDIwIDE4OjQ3IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAgMjQ3IEFwciAyMCAxODo0NyAxMV9zb21hdGljX3R3aWNlZmlsdGVyZWQudmNmLmd6LnN1bW1hcnkNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxMjkzIEFwciAyMCAxODo0NyAxMV9zb21hdGljX3R3aWNlZmlsdGVyZWQudmNmLmd6LnRiaQ0KDQoNCg0KIyMjIyAoZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgemNhdCBnYXRrX211dGVjdDIvb3V0cHV0LzExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3ogfCBncmVwIC12ICcjJyB8IGF3ayAnJDc9PSJQQVNTIicgfCB3YyAtbA0KDQoyNA0KDQoNCg0KDQojIyAxMy4gUmVjb3JkIHZhcmlhbnQgc3RhdGlzdGljcw0KDQoNCiMjIyMgKGJhc2UpIGIwZDI2NDdAdmNwdTQtMTZnYjp+L2dhdGtfZGF0YV9yZWYkIGJjZnRvb2xzIHN0YXRzIGdhdGtfbXV0ZWN0Mi9vdXRwdXQvMTFfc29tYXRpY190d2ljZWZpbHRlcmVkLnZjZi5neg0KDQoNCmBgYA0KIyBUaGlzIGZpbGUgd2FzIHByb2R1Y2VkIGJ5IGJjZnRvb2xzIHN0YXRzICgxLjkraHRzbGliLTEuOSkgYW5kIGNhbiBiZSBwbG90dGVkIHVzaW5nIHBsb3QtdmNmc3RhdHMuDQoNCiMgU04gICAgWzJdaWQgICBbM11rZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRddmFsdWUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAgICAgICAgICAgICAgICAgMg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiByZWNvcmRzOiAgICAgICAgICAgICAgICAgICAgICAxMTENClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAgICAgICAgICAgICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBTTlBzOiAgICAgICAgICAgICAgICAgICAgICAgICA5Mw0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBNTlBzOiAgICAgICAgICAgICAgICAgICAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIGluZGVsczogICAgICAgICAgICAgICAgICAgICAgIDE4DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgICAgICAgICAgICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzOiAgICAgICAgICAgNw0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAwDQpgYGANCg0KDQoNCiMjIDE0LiBPdXRwdXQgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgIChnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBscyAtbCBnYXRrX211dGVjdDIvb3V0cHV0Lw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgMTc2NDkgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmJhaXRfYmlhc19kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODQyIEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5iYWl0X2JpYXNfc3VtbWFyeV9tZXRyaWNzLnR4dA0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyMjEgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmVycm9yX3N1bW1hcnlfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDE0MTc1IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODU2IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9zdW1tYXJ5X21ldHJpY3MudHh0DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0NzEwMiBBcHIgMjAgMTg6NDcgMTFfc29tYXRpY190d2ljZWZpbHRlcmVkLnZjZi5neg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAyNDcgQXByIDIwIDE4OjQ3IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3ouc3VtbWFyeQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyOTMgQXByIDIwIDE4OjQ3IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0MTk1OSBBcHIgMjAgMTQ6MTQgMV9zb21hdGljX20yLnZjZi5neg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgMzUgQXByIDIwIDE0OjE0IDFfc29tYXRpY19tMi52Y2YuZ3ouc3RhdHMNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxMjg2IEFwciAyMCAxNDoxNCAxX3NvbWF0aWNfbTIudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNjk1ODQgQXByIDIwIDE0OjE0IDJfdHVtb3Jfbm9ybWFsX20yLmJhaQ0KDQotcnctci0tci0tIDEgcm9vdCByb290IDE3MDkxNDcgQXByIDIwIDE0OjE0IDJfdHVtb3Jfbm9ybWFsX20yLmJhbQ0KDQotcnctci0tci0tIDEgcm9vdCByb290IDE0NTAyMDcgQXByIDIwIDE1OjQwIDNfSEcwMDE5MC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAgIDM1IEFwciAyMCAxNTo0MCAzX0hHMDAxOTAudmNmLmd6LnN0YXRzDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA1MjgwOCBBcHIgMjAgMTU6NDAgM19IRzAwMTkwLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDI5MjkyIEFwciAyMCAxNzowMSA2X0hHMDE5MF9wb24udmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICA3NyBBcHIgMjAgMTc6MDEgNl9IRzAxOTBfcG9uLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDQ2Nzc1IEFwciAyMCAxNzoyNSA3X3R1bW9yX2dldHBpbGV1cHN1bW1hcmllcy50YWJsZQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgODQgQXByIDIwIDE3OjM1IDhfdHVtb3JfY2FsY3VsYXRlY29udGFtaW5hdGlvbi50YWJsZQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNDUyODAgQXByIDIwIDE3OjUzIDlfc29tYXRpY19vbmNlZmlsdGVyZWQudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgMTc5MSBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3ouZmlsdGVyaW5nU3RhdHMudHN2DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgMTI5OSBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3oudGJpDQoNCg0KDQoNCg0KDQpgYGANCg0KDQoNCg0KDQoNCg0K