Log.final.out Output File of Star Read Into Df
1. References and resources
Reference
PLoS One. 2013;8(3):e59582. doi: 10.1371/periodical.pone.0059582.
Motorcar
AWS r5.2xlarge and CentOS linux 7 on a Virtual Machine
2. Obtain and/process analysis datsets
Make directories
~/data/rnaseq/Rn/PLoS-One-eight-e59582$ ls -l
drwxrwxr-ten 2 ubuntu ubuntu 4096 Apr 10 02:48 f344_pfc_nicotine
drwxrwxr-10 2 ubuntu ubuntu 4096 Apr x 03:28 f344_pfc_saline
Convert sra files to fastq files
f344_pfc_nicotine$ fastq-dump –split up-3 SRR869032.sra –gzip
f344_pfc_nicotine$ fastq-dump –divide-iii SRR869033.sra –gzip
f344_pfc_nicotine$ fastq-dump –separate-three SRR869034.sra –gzip
PLoS-One-8-e59582$ ls -l f344_pfc_nicotine/
-rw-rw-r– 1 ubuntu ubuntu 1918376826 Apr 7 13:08 SRR869032.sra
-rw-rw-r– i ubuntu ubuntu 1512702873 Apr 10 03:07 SRR869032_1.fastq.gz
-rw-rw-r– 1 ubuntu ubuntu 1565027421 Apr ten 03:07 SRR869032_2.fastq.gz
-rw-rw-r– ane ubuntu ubuntu 1989086241 April 7 xiii:09 SRR869033.sra
-rw-rw-r– one ubuntu ubuntu 1559510818 Apr 10 03:11 SRR869033_1.fastq.gz
-rw-rw-r– 1 ubuntu ubuntu 1612258618 Apr 10 03:eleven SRR869033_2.fastq.gz
-rw-rw-r– 1 ubuntu ubuntu 1978327667 Apr vii thirteen:x SRR869034.sra
-rw-rw-r– 1 ubuntu ubuntu 1568979784 April 10 03:12 SRR869034_1.fastq.gz
-rw-rw-r– 1 ubuntu ubuntu 1615385331 Apr 10 03:12 SRR869034_2.fastq.gz
3. Obtain, process and/or build genome, reference and index datasets
Download the refGene file and convert it to a GTF file
wget http://hgdownload.soe.ucsc.edu/goldenPath/rn6/database/refGene.txt.gz
gunzip refGene.txt.gz
cutting -f 2- refGene.txt > refGene.input
genePredToGtf file refGene.input refGene.gtf
genome_rat$ ls -50
-rw-rw-r– 1 ubuntu ubuntu 61891341 Apr 9 19:27 refGene.gtf
-rw-rw-r– ane ubuntu ubuntu 5143380 April 9 nineteen:27 refGene.input
-rw-rw-r– i ubuntu ubuntu 5226507 April 9 xix:27 refGene.txt
4. Build a STAR alphabetize for the rat geneome
$ STAR --runThreadN xvi --runMode genomeGenerate --genomeDir StarIndexRat/ --genomeFastaFiles rn6/rn6.fa
Apr 09 18:39:04 ….. started STAR run
April 09 18:39:04 … starting to generate Genome files
Apr 09 18:xl:18 … starting to sort Suffix Array. This may take a long time…
Apr 09 18:forty:32 … sorting Suffix Array chunks and saving them to disk…
Apr 09 nineteen:05:33 … loading chunks from deejay, packing SA…
April 09 19:06:42 … finished generating suffix array
Apr 09 19:06:42 … generating Suffix Array index
Apr 09 19:ten:57 … completed Suffix Assortment index
April 09 19:10:57 … writing Genome to disk …
Apr 09 xix:ten:59 … writing Suffix Array to disk …
Apr 09 19:12:19 … writing SAindex to disk
Apr 09 nineteen:12:27 ….. finished successfully
StarIndexRat$ ls -l
-rw-rw-r– ane ubuntu ubuntu 3095134208 April nine nineteen:10 Genome
-rw-rw-r– 1 ubuntu ubuntu 22521351645 April 9 19:12 SA
-rw-rw-r– 1 ubuntu ubuntu 1565873619 Apr ix xix:12 SAindex
-rw-rw-r– 1 ubuntu ubuntu 5213 Apr 9 18:forty chrLength.txt
-rw-rw-r– 1 ubuntu ubuntu 19347 Apr 9 18:twoscore chrName.txt
-rw-rw-r– 1 ubuntu ubuntu 24560 Apr nine 18:40 chrNameLength.txt
-rw-rw-r– ane ubuntu ubuntu 10387 April 9 18:40 chrStart.txt
-rw-rw-r– ane ubuntu ubuntu 479 Apr ix xix:x genomeParameters.txt
5. Align the fastq.gz files to obtain BAM files
~/results/rnaseq/Rn/star_rat$ STAR --runThreadN 12 --genomeDir StarIndexRat/ --sjdbGTFfile ~/genome_rat/refGene.gtf --sjdbOverhang 100 --readFilesIn ~/PLoS-1-8-e59582/f344_pfc_saline/SRR869044_1.fastq.gz ~/PLoS-Ane-8-e59582/f344_pfc_saline/SRR869044_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 1align/
Apr 10 03:30:thirty ….. started STAR run
Apr 10 03:30:30 ….. loading genome
Apr ten 03:32:39 ….. processing annotations GTF
Apr 10 03:32:43 ….. inserting junctions into the genome indices
Apr x 03:37:23 ….. started mapping
Apr 10 03:42:29 ….. finished successfully
$ ls -l 1align/
-rw-rw-r– 1 ubuntu ubuntu 15933444986 Apr ten 03:42 Aligned.out.sam
-rw-rw-r– 1 ubuntu ubuntu 2358643579 Apr 10 03:42 Aligned.toTranscriptome.out.bam
-rw-rw-r– ane ubuntu ubuntu 1862 April ten 03:42 Log.final.out
-rw-rw-r– 1 ubuntu ubuntu 272935 Apr 10 03:42 Log.out
-rw-rw-r– 1 ubuntu ubuntu 836 Apr 10 03:42 Log.progress.out
-rw-rw-r– 1 ubuntu ubuntu 7368886 Apr 10 03:42 SJ.out.tab
drwx—— 2 ubuntu ubuntu 4096 Apr 10 03:32 _STARgenome
$ cat 1align/Log.terminal.out
Started task on | Apr 10 03:xxx:30 Started mapping on | Apr 10 03:37:23 Finished on | Apr 10 03:42:29 Mapping speed, 1000000 of reads per hour | 489.23 Number of input reads | 41584891 Average input read length | 100 UNIQUE READS: Uniquely mapped reads number | 34796331 Uniquely mapped reads % | 83.68% Boilerplate mapped length | 99.37 Number of splices: Total | 7910199 Number of splices: Annotated (sjdb) | 7194940 Number of splices: GT/AG | 7764677 Number of splices: GC/AG | 62004 Number of splices: AT/Ac | 7634 Number of splices: Not-canonical | 75884 Mismatch rate per base, % | 0.37% Deletion charge per unit per base | 0.01% Deletion average length | i.61 Insertion rate per base of operations | 0.00% Insertion boilerplate length | 1.35 MULTI-MAPPING READS: Number of reads mapped to multiple loci | 2553852 % of reads mapped to multiple loci | 6.14% Number of reads mapped to too many loci | 57308 % of reads mapped to too many loci | 0.14% UNMAPPED READS: % of reads unmapped: too many mismatches | 0.00% % of reads unmapped: too short | 9.92% % of reads unmapped: other | 0.13% CHIMERIC READS: Number of chimeric reads | 0 % of chimeric reads | 0.00%
~/results/rnaseq/Rn/star_rat/transcriptomeOut$ STAR --runThreadN 12 --genomeDir ~/genomeAndIndices/Rn/star/ --sjdbGTFfile ~/genomeAndIndices/Rn/rn6.refGene.gtf --sjdbOverhang 100 --readFilesIn ~/information/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_saline/SRR869045_1.fastq.gz ~/information/rnaseq/Rn/PLoS-One-viii-e59582/f344_pfc_saline/SRR869045_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 2align/
Apr xi 15:08:19 ….. started STAR run
Apr xi xv:08:twenty ….. loading genome
Apr 11 15:12:01 ….. processing annotations GTF
Apr xi 15:12:25 ….. inserting junctions into the genome indices
April 11 15:37:46 ….. started mapping
Apr 11 15:58:54 ….. finished successfully
$ ls -l 2align/
-rw-rw-r– 1 ubuntu ubuntu 14869436644 April xi 15:58 Aligned.out.sam
-rw-rw-r– i ubuntu ubuntu 2216166668 Apr 11 15:58 Aligned.toTranscriptome.out.bam
-rw-rw-r– 1 ubuntu ubuntu 1863 Apr 11 15:58 Log.terminal.out
-rw-rw-r– 1 ubuntu ubuntu 290971 Apr 11 15:58 Log.out
-rw-rw-r– i ubuntu ubuntu 2488 Apr 11 15:58 Log.progress.out
-rw-rw-r– 1 ubuntu ubuntu 7278953 Apr eleven 15:58 SJ.out.tab
drwx—— 2 ubuntu ubuntu 4096 Apr xi xv:12 _STARgenome
$ cat 2align/Log.final.out
Started job on | April 11 xv:08:19 Started mapping on | Apr xi 15:37:46 Finished on | Apr xi 15:58:54 Mapping speed, Million of reads per 60 minutes | 116.02 Number of input reads | 40866035 Average input read length | 100 UNIQUE READS: Uniquely mapped reads number | 32594115 Uniquely mapped reads % | 79.76% Average mapped length | 99.35 Number of splices: Full | 7372181 Number of splices: Annotated (sjdb) | 6695155 Number of splices: GT/AG | 7235135 Number of splices: GC/AG | 58523 Number of splices: AT/Air conditioning | 6995 Number of splices: Non-approved | 71528 Mismatch rate per base, % | 0.38% Deletion charge per unit per base | 0.01% Deletion boilerplate length | one.61 Insertion rate per base | 0.01% Insertion average length | i.35 MULTI-MAPPING READS: Number of reads mapped to multiple loci | 2353903 % of reads mapped to multiple loci | 5.76% Number of reads mapped to too many loci | 52876 % of reads mapped to too many loci | 0.13% UNMAPPED READS: % of reads unmapped: too many mismatches | 0.00% % of reads unmapped: likewise short | 14.23% % of reads unmapped: other | 0.12% CHIMERIC READS: Number of chimeric reads | 0 % of chimeric reads | 0.00%
~/results/rnaseq/Rn/star_rat/transcriptomeOut$ STAR --runThreadN 12 --genomeDir ~/genomeAndIndices/Rn/star/ --sjdbGTFfile ~/genomeAndIndices/Rn/rn6.refGene.gtf --sjdbOverhang 100 --readFilesIn ~/data/rnaseq/Rn/PLoS-I-8-e59582/f344_pfc_saline/SRR869046_1.fastq.gz ~/data/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_saline/SRR869046_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 3align/
April 11 16:00:52 ….. started STAR run
Apr 11 16:00:52 ….. loading genome
April eleven 16:02:35 ….. processing annotations GTF
Apr xi sixteen:02:37 ….. inserting junctions into the genome indices
Apr 11 xvi:05:23 ….. started mapping
Apr 11 16:11:29 ….. finished successfully
$ ls -l 3align/
-rw-rw-r– ane ubuntu ubuntu 14998319245 Apr 11 sixteen:11 Aligned.out.sam
-rw-rw-r– 1 ubuntu ubuntu 2183814631 Apr 11 sixteen:11 Aligned.toTranscriptome.out.bam
-rw-rw-r– i ubuntu ubuntu 1863 Apr 11 16:11 Log.last.out
-rw-rw-r– 1 ubuntu ubuntu 290970 Apr 11 16:11 Log.out
-rw-rw-r– ane ubuntu ubuntu 954 Apr eleven 16:11 Log.progress.out
-rw-rw-r– 1 ubuntu ubuntu 7220923 Apr xi 16:11 SJ.out.tab
drwx—— 2 ubuntu ubuntu 4096 Apr 11 16:02 _STARgenome
$ cat 3align/Log.final.out
Started chore on | April 11 16:00:52 Started mapping on | April 11 xvi:05:23 Finished on | Apr eleven 16:11:29 Mapping speed, Meg of reads per hour | 387.26 Number of input reads | 39370935 Average input read length | 100 UNIQUE READS: Uniquely mapped reads number | 32717958 Uniquely mapped reads % | 83.10% Average mapped length | 99.35 Number of splices: Total | 7102328 Number of splices: Annotated (sjdb) | 6458206 Number of splices: GT/AG | 6971391 Number of splices: GC/AG | 55634 Number of splices: AT/Ac | 6999 Number of splices: Non-canonical | 68304 Mismatch rate per base, % | 0.twoscore% Deletion rate per base | 0.01% Deletion average length | i.61 Insertion rate per base | 0.01% Insertion average length | 1.35 MULTI-MAPPING READS: Number of reads mapped to multiple loci | 2462309 % of reads mapped to multiple loci | 6.25% Number of reads mapped to too many loci | 51917 % of reads mapped to likewise many loci | 0.thirteen% UNMAPPED READS: % of reads unmapped: too many mismatches | 0.00% % of reads unmapped: likewise brusque | 10.38% % of reads unmapped: other | 0.13% CHIMERIC READS: Number of chimeric reads | 0 % of chimeric reads | 0.00%
~/results/rnaseq/Rn/star_rat/transcriptomeOut$ STAR --runThreadN 12 --genomeDir ~/genomeAndIndices/Rn/star/ --sjdbGTFfile ~/genomeAndIndices/Rn/rn6.refGene.gtf --sjdbOverhang 100 --readFilesIn ~/information/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_nicotine/SRR869032_1.fastq.gz ~/data/rnaseq/Rn/PLoS-I-8-e59582/f344_pfc_nicotine/SRR869032_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 4align/
Apr 11 sixteen:21:26 ….. started STAR run
Apr 11 sixteen:21:26 ….. loading genome
April xi 16:23:09 ….. processing annotations GTF
Apr xi 16:23:x ….. inserting junctions into the genome indices
Apr 11 16:25:24 ….. started mapping
Apr 11 16:28:58 ….. finished successfully
$ ls -50 4align/
-rw-rw-r– 1 ubuntu ubuntu 10933116395 Apr 11 sixteen:28 Aligned.out.sam
-rw-rw-r– 1 ubuntu ubuntu 1617775311 Apr eleven xvi:28 Aligned.toTranscriptome.out.bam
-rw-rw-r– 1 ubuntu ubuntu 1863 Apr 11 16:28 Log.terminal.out
-rw-rw-r– 1 ubuntu ubuntu 291006 April 11 16:28 Log.out
-rw-rw-r– 1 ubuntu ubuntu 600 April 11 16:28 Log.progress.out
-rw-rw-r– one ubuntu ubuntu 6778075 April xi 16:28 SJ.out.tab
drwx—— 2 ubuntu ubuntu 4096 Apr 11 16:23 _STARgenome
$ cat 4align/Log.terminal.out
Started job on | Apr xi 16:21:26 Started mapping on | April eleven 16:25:24 Finished on | Apr xi 16:28:58 Mapping speed, One thousand thousand of reads per hour | 486.66 Number of input reads | 28929485 Average input read length | 100 UNIQUE READS: Uniquely mapped reads number | 23884850 Uniquely mapped reads % | 82.56% Average mapped length | 99.37 Number of splices: Total | 5337591 Number of splices: Annotated (sjdb) | 4843698 Number of splices: GT/AG | 5237284 Number of splices: GC/AG | 42360 Number of splices: AT/Ac | 5126 Number of splices: Non-approved | 52821 Mismatch charge per unit per base, % | 0.38% Deletion rate per base | 0.01% Deletion average length | 1.61 Insertion rate per base | 0.01% Insertion average length | ane.35 MULTI-MAPPING READS: Number of reads mapped to multiple loci | 1745210 % of reads mapped to multiple loci | half dozen.03% Number of reads mapped to likewise many loci | 41759 % of reads mapped to too many loci | 0.fourteen% UNMAPPED READS: % of reads unmapped: besides many mismatches | 0.00% % of reads unmapped: too brusque | eleven.13% % of reads unmapped: other | 0.14% CHIMERIC READS: Number of chimeric reads | 0 % of chimeric reads | 0.00%
~/results/rnaseq/Rn/star_rat/transcriptomeOut$ STAR --runThreadN 12 --genomeDir ~/genomeAndIndices/Rn/star/ --sjdbGTFfile ~/genomeAndIndices/Rn/rn6.refGene.gtf --sjdbOverhang 100 --readFilesIn ~/data/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_nicotine/SRR869033_1.fastq.gz ~/data/rnaseq/Rn/PLoS-I-8-e59582/f344_pfc_nicotine/SRR869033_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 5align/
April 11 16:32:44 ….. started STAR run
April 11 16:32:44 ….. loading genome
Apr 11 16:34:26 ….. processing annotations GTF
Apr 11 sixteen:34:28 ….. inserting junctions into the genome indices
Apr eleven 16:36:40 ….. started mapping
Apr eleven xvi:40:24 ….. finished successfully
$ ls -fifty 5align/
-rw-rw-r– i ubuntu ubuntu 11152871716 April 11 16:xl Aligned.out.sam
-rw-rw-r– one ubuntu ubuntu 1650315098 April 11 16:40 Aligned.toTranscriptome.out.bam
-rw-rw-r– ane ubuntu ubuntu 1863 April 11 16:40 Log.last.out
-rw-rw-r– 1 ubuntu ubuntu 291006 Apr 11 xvi:40 Log.out
-rw-rw-r– 1 ubuntu ubuntu 600 April 11 16:40 Log.progress.out
-rw-rw-r– 1 ubuntu ubuntu 6943028 Apr eleven 16:40 SJ.out.tab
drwx—— two ubuntu ubuntu 4096 Apr 11 16:34 _STARgenome
$ cat 5align/Log.terminal.out
Started job on | April 11 16:32:44 Started mapping on | Apr eleven sixteen:36:40 Finished on | Apr 11 xvi:xl:24 Mapping speed, Million of reads per hr | 483.07 Number of input reads | 30057458 Boilerplate input read length | 100 UNIQUE READS: Uniquely mapped reads number | 24242026 Uniquely mapped reads % | lxxx.65% Average mapped length | 99.39 Number of splices: Total | 5464310 Number of splices: Annotated (sjdb) | 4969845 Number of splices: GT/AG | 5365023 Number of splices: GC/AG | 42481 Number of splices: AT/Ac | 5178 Number of splices: Non-canonical | 51628 Mismatch rate per base, % | 0.37% Deletion rate per base | 0.01% Deletion average length | ane.60 Insertion charge per unit per base | 0.00% Insertion boilerplate length | 1.36 MULTI-MAPPING READS: Number of reads mapped to multiple loci | 1816245 % of reads mapped to multiple loci | 6.04% Number of reads mapped to too many loci | 44886 % of reads mapped to besides many loci | 0.15% UNMAPPED READS: % of reads unmapped: too many mismatches | 0.00% % of reads unmapped: also short | 13.03% % of reads unmapped: other | 0.13% CHIMERIC READS: Number of chimeric reads | 0 % of chimeric reads | 0.00%
~/results/rnaseq/Rn/star_rat/transcriptomeOut$ STAR --runThreadN 12 --genomeDir ~/genomeAndIndices/Rn/star/ --sjdbGTFfile ~/genomeAndIndices/Rn/rn6.refGene.gtf --sjdbOverhang 100 --readFilesIn ~/data/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_nicotine/SRR869034_1.fastq.gz ~/data/rnaseq/Rn/PLoS-One-8-e59582/f344_pfc_nicotine/SRR869034_2.fastq.gz --readFilesCommand zcat --quantMode TranscriptomeSAM --outFileNamePrefix 6align/
Apr 11 xvi:41:46 ….. started STAR run
Apr 11 16:41:46 ….. loading genome
April eleven 16:42:54 ….. processing annotations GTF
Apr xi 16:42:55 ….. inserting junctions into the genome indices
Apr xi sixteen:45:08 ….. started mapping
April 11 16:48:49 ….. finished successfully
$ ls -l 6align/
-rw-rw-r– 1 ubuntu ubuntu 11451915825 Apr 11 16:48 Aligned.out.sam
-rw-rw-r– ane ubuntu ubuntu 1719135420 Apr 11 16:48 Aligned.toTranscriptome.out.bam
-rw-rw-r– 1 ubuntu ubuntu 1862 Apr eleven xvi:48 Log.final.out
-rw-rw-r– 1 ubuntu ubuntu 291006 Apr xi 16:48 Log.out
-rw-rw-r– i ubuntu ubuntu 600 Apr xi sixteen:48 Log.progress.out
-rw-rw-r– 1 ubuntu ubuntu 6840437 April 11 16:48 SJ.out.tab
drwx—— 2 ubuntu ubuntu 4096 April 11 16:42 _STARgenome
$ cat 6align/Log.final.out
Started job on | Apr 11 16:41:46 Started mapping on | Apr 11 sixteen:45:08 Finished on | April eleven sixteen:48:49 Mapping speed, Million of reads per 60 minutes | 485.67 Number of input reads | 29814687 Average input read length | 100 UNIQUE READS: Uniquely mapped reads number | 25029582 Uniquely mapped reads % | 83.95% Boilerplate mapped length | 99.40 Number of splices: Full | 5664801 Number of splices: Annotated (sjdb) | 5152217 Number of splices: GT/AG | 5560246 Number of splices: GC/AG | 44589 Number of splices: AT/AC | 5504 Number of splices: Not-canonical | 54462 Mismatch rate per base, % | 0.38% Deletion rate per base | 0.01% Deletion average length | 1.61 Insertion rate per base of operations | 0.00% Insertion average length | 1.36 MULTI-MAPPING READS: Number of reads mapped to multiple loci | 1834753 % of reads mapped to multiple loci | 6.xv% Number of reads mapped to as well many loci | 40924 % of reads mapped to besides many loci | 0.14% UNMAPPED READS: % of reads unmapped: too many mismatches | 0.00% % of reads unmapped: too short | 9.63% % of reads unmapped: other | 0.13% CHIMERIC READS: Number of chimeric reads | 0 % of chimeric reads | 0.00%
vi. RSEM analysis
Download the information
BAM files were imported to CentOS as directories (1s, 2s, 3s, 4s, 5s and 6s) for RSEM analysis. The genome and GTF files are were also imported (& also renamed).
$ ls -l
drwxr-xr-x. 2 bdash bdash 45 Apr 11 xx:17 1s
drwxr-xr-x. 2 bdash bdash 45 Apr eleven eighteen:21 2s
drwxr-xr-x. 2 bdash bdash 45 Apr eleven 20:20 3s
drwxr-xr-x. 2 bdash bdash 45 Apr eleven twenty:21 4s
drwxr-xr-x. 2 bdash bdash 45 April eleven 20:27 5s
drwxr-xr-x. 2 bdash bdash 45 Apr eleven twenty:27 6s
-rw-rw-r–. 1 bdash bdash 2927607333 Apr ix 15:26 rn6.fa
-rw-rw-r–. 1 bdash bdash 40654 Apr 9 15:26 rn6.fa.fai
-rw-rw-r–. one bdash bdash 61891341 April nine xv:27 rn6.refGene.gtf
Prepare RSEM reference (will apply both the fa and gtf file)
mkdir rsem_ref
cd rsem_ref
rsem_ref$ rsem-fix-reference –gtf rn6.refGene.gtf rn6.fa ./rsemRef
rsem-extract-reference-transcripts ./rsemRef 0 rn6.refGene.gtf None 0 rn6.fa Parsed 200000 lines Parsing gtf File is washed! rn6.fa is processed! 18939 transcripts are extracted and 0 transcripts are omitted. Extracting sequences is done! Grouping File is generated! Transcript Information File is generated! Chromosome List File is generated! Extracted Sequences File is generated! rsem-preref ./rsemRef.transcripts.fa 1 ./rsemRef Refs.makeRefs finished! Refs.saveRefs finished! ./rsemRef.idx.fa is generated! ./rsemRef.n2g.idx.fa is generated!
star-transcriptomeout$ ls -50 rsem_ref/
-rw-rw-r–. 1 bdash bdash 1293 Apr eleven 21:06 rsemRef.chrlist
-rw-rw-r–. 1 bdash bdash 93718 Apr xi 21:06 rsemRef.grp
-rw-rw-r–. 1 bdash bdash 43007289 Apr eleven 21:06 rsemRef.idx.fa
-rw-rw-r–. one bdash bdash 43007289 April xi 21:06 rsemRef.n2g.idx.fa
-rw-rw-r–. 1 bdash bdash 45858412 April xi 21:06 rsemRef.seq
-rw-rw-r–. one bdash bdash 6041108 Apr 11 21:06 rsemRef.ti
-rw-rw-r–. 1 bdash bdash 43007289 Apr 11 21:06 rsemRef.transcripts.fa
RSEM-calculate-expression
star-transcriptomeout$ rsem-calculate-expression –bam –no-bam-output -p 12 –paired-finish –frontwards-prob 0 1s/Aligned.toTranscriptome.out.bam rsem_ref/rsemRef 1out/ >& rsem1.log
Echo information technology for the rest of the bam files
star-transcriptomeout$ ls -l
drwxrwxr-10. 3 bdash bdash 66 April 11 22:41 1out
drwxrwxr-10. 3 bdash bdash 66 Apr xi 23:56 2out
drwxrwxr-ten. 3 bdash bdash 66 April 12 03:48 3out
drwxrwxr-x. 3 bdash bdash 66 April 12 03:13 4out
drwxrwxr-x. 3 bdash bdash 66 Apr 12 02:48 5out
drwxrwxr-ten. 3 bdash bdash 66 April 12 01:54 6out
-rw-rw-r–. 1 bdash bdash 309141 Apr xi 22:41 rsem1.log
-rw-rw-r–. one bdash bdash 353855 Apr eleven 23:56 rsem2.log
-rw-rw-r–. 1 bdash bdash 255588 Apr 12 03:48 rsem3.log
-rw-rw-r–. 1 bdash bdash 326662 Apr 12 03:13 rsem4.log
-rw-rw-r–. 1 bdash bdash 366472 Apr 12 02:48 rsem5.log
-rw-rw-r–. ane bdash bdash 294402 Apr 12 01:54 rsem6.log
drwxrwxr-10. 2 bdash bdash 163 Apr xi 21:20 rsem_ref
seven. edgeR (Empirical Assay of Digital Factor Expression) assay of isoforms
Generate a matrix file of the isoforms for analysis using edgeR method
star-transcriptomeout$ abundance_estimates_to_matrix.pl --est_method RSEM 1out/.isoforms.results 2out/.isoforms.results 3out/.isoforms.results 4out/.isoforms.results 5out/.isoforms.results 6out/.isoforms.results --gene_trans_map none --name_sample_by_basedir --out_prefix isoforms_gene_trans_map_none/isoforms
-reading file: 1out/.isoforms.results
-reading file: 2out/.isoforms.results
-reading file: 3out/.isoforms.results
-reading file: 4out/.isoforms.results
-reading file: 5out/.isoforms.results
-reading file: 6out/.isoforms.results
- Outputting combined matrix.
/home/bdash/miniconda2/opt/trinity-2.six.6/util/support_scripts/run_TMM_scale_matrix.pl
–matrix isoforms_gene_trans_map_none/isoforms.isoform.TPM.not_cross_norm >
isoforms_gene_trans_map_none/isoforms.isoform.TMM.EXPR.matrix
CMD: R –no-salve –no-restore –no-site-file –no-init-file -q <
isoforms_gene_trans_map_none/isoforms.isoform.TPM.not_cross_norm.runTMM.R 1>&2
> library(edgeR) Loading required packet: limma > > rnaseqMatrix = read.table("isoforms_gene_trans_map_none/isoforms.isoform.TPM.not_cross_norm", header=T, row.names=1, com='', check.names=F) > rnaseqMatrix = as.matrix(rnaseqMatrix) > rnaseqMatrix = round(rnaseqMatrix) > exp_study = DGEList(counts=rnaseqMatrix, group=cistron(colnames(rnaseqMatrix))) > exp_study = calcNormFactors(exp_study) > exp_study$samples$eff.lib.size = exp_study$samples$lib.size * exp_study$samples$norm.factors > write.table(exp_study$samples, file="isoforms_gene_trans_map_none/isoforms.isoform.TPM.not_cross_norm.TMM_info.txt", quote=F, sep="\t", row.names=F)
star-transcriptomeout$ ls -l isoforms_gene_trans_map_none/
-rw-rw-r–. 1 bdash bdash 934917 April 12 12:12 isoforms.isoform.counts.matrix
-rw-rw-r–. 1 bdash bdash 981854 Apr 12 12:12 isoforms.isoform.TMM.EXPR.matrix
-rw-rw-r–. ane bdash bdash 775288 Apr 12 12:12 isoforms.isoform.TPM.not_cross_norm
-rw-rw-r–. 1 bdash bdash 590 April 12 12:12 isoforms.isoform.TPM.not_cross_norm.runTMM.R
-rw-rw-r–. 1 bdash bdash 320 Apr 12 12:12 isoforms.isoform.TPM.not_cross_norm.TMM_info.txt
Run differential analysis (DE) assay using method edgeR: Produces MA plot and volcano plot
Annotation: Analysis with biological triplicates with ii conditions (condition A=saline treatment and condition B=nicotine treatment)
A file with the name "samples_described.txt" will be needed for the assay. Its contents are as follows:
$ cat samples_described.txt conditionA 1out conditionA 2out conditionA 3out conditionB 4out conditionB 5out conditionB 6out
star-transcriptomeout]$ run_DE_analysis.pl --matrix isoforms_gene_trans_map_none/isoforms.isoform.counts.matrix --output isoforms_DE_3/ --samples_file samples_described.txt --method edgeR
Got half dozen samples, and got: 7 information fields.
Header: 1out 2out 3out 4out 5out 6out
Next: NM_021666 thirteen.00 7.00 vi.00 i.00 2.00 4.00
$VAR1 =
{ '2out' => 2, '1out' => i, '4out' => four, '5out' => 5, '3out' => iii, '6out' => vi };
$VAR1 =
{ 'conditionB' => [ '4out', '5out', '6out' ], 'conditionA' => [ '1out', '2out', '3out' ] };
Contrasts to perform are: $VAR1 =
[ [ 'conditionA', 'conditionB' ] ];
CMD: R –no-salve –no-restore –no-site-file –no-init-file -q < isoforms.isoform.counts.matrix.conditionA_vs_conditionB.conditionA.vs.conditionB.EdgeR.Rscript
> library(edgeR) Loading required package: limma > > information = read.table("/home/bdash/Desktop/star-transcriptomeout/isoforms_gene_trans_map_none/isoforms.isoform.counts.matrix", header=T, row.names=i, com='') > col_ordering = c(i,two,3,iv,5,six) > rnaseqMatrix = information[,col_ordering] > rnaseqMatrix = round(rnaseqMatrix) > rnaseqMatrix = rnaseqMatrix[rowSums(cpm(rnaseqMatrix) > 1) >= 2,] > weather condition = factor(c(rep("conditionA", 3), rep("conditionB", three))) > > exp_study = DGEList(counts=rnaseqMatrix, group=weather condition) > exp_study = calcNormFactors(exp_study) > exp_study = estimateCommonDisp(exp_study) > exp_study = estimateTagwiseDisp(exp_study) > et = exactTest(exp_study, pair=c("conditionA", "conditionB")) > tTags = topTags(et,n=Aught) > result_table = tTags$tabular array > result_table = data.frame(sampleA="conditionA", sampleB="conditionB", result_table) > result_table$logFC = -1 * result_table$logFC > write.tabular array(result_table, file='isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results', sep=' ', quote=F, row.names=T) > write.tabular array(rnaseqMatrix, file='isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.count_matrix', sep=' ', quote=F, row.names=T) > source("/home/bdash/miniconda2/opt/trinity-2.6.6/Analysis/DifferentialExpression/R/rnaseq_plot_funcs.R") > pdf("isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.MA_n_Volcano.pdf") > plot_MA_and_Volcano(rownames(result_table), result_table$logCPM, result_table$logFC, result_table$FDR) > dev.off() null device 1 >
star-transcriptomeout]$ ls -l isoforms_DE_3/
-rw-rw-r–. 1 bdash bdash 1425 Apr 13 02:26 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.conditionA.vs.conditionB.EdgeR.Rscript
-rw-rw-r–. 1 bdash bdash 447974 Apr 13 02:27 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.count_matrix
-rw-rw-r–. 1 bdash bdash 1156287 April thirteen 02:27 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results
-rw-rw-r–. 1 bdash bdash 118065 Apr 13 02:27 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.MA_n_Volcano.pdf
-rw-rw-r–. 1 bdash bdash 959 Apr 13 02:29 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.conditionA-UP.subset
-rw-rw-r–. one bdash bdash 513 Apr 13 02:29 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.conditionB-UP.subset
-rw-rw-r–. i bdash bdash 1402 Apr thirteen 02:29 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.DE.subset
-rw-rw-r–. ane bdash bdash 96 Apr 13 02:29 isoforms.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.samples
star-transcriptomeout$ cd isoforms_DE_3/
Clarify differential expression: Produces heatmap
isoforms_DE_3$ analyze_diff_expr.pl --matrix ../isoforms_gene_trans_map_none/isoforms.isoform.TMM.EXPR.matrix --samples ../samples_described.txt --output DE_isoforms_3
Found 9 features as differentially expressed.
CMD:
/habitation/bdash/miniconda2/opt/trinity-2.6.6/Analysis/DifferentialExpression/PtR
-m DE_isoforms_3.matrix
–log2
–heatmap
–min_colSums 0
–min_rowSums 0
–gene_dist euclidean
–sample_dist euclidean
–sample_cor_matrix
–center_rows
–salve
-due south ../samples_described.txt
CMD:
R
–no-save
–no-restore
–no-site-file
–no-init-file
-q < DE_isoforms_3.matrix.R
> library(cluster) > library(Biobase)
Loading required package: BiocGenerics
Loading required bundle: parallel
Attaching package: 'BiocGenerics'
The following objects are masked from 'package:parallel':
clusterApply, clusterApplyLB, clusterCall, clusterEvalQ, clusterExport, clusterMap, parApply, parCapply, parLapply, parLapplyLB, parRapply, parSapply, parSapplyLB
The following objects are masked from 'package:stats':
IQR, mad, sd, var, xtabs
The following objects are masked from 'package:base':
anyDuplicated, suspend, as.data.frame, basename, cbind, colMeans, colnames, colSums, dirname, do.telephone call, duplicated, eval, evalq, Filter, Discover, get, grep, grepl, intersect, is.unsorted, lapply, lengths, Map, mapply, match, mget, social club, paste, pmax, pmax.int, pmin, pmin.int, Position, rank, rbind, Reduce, rowMeans, rownames, rowSums, sapply, setdiff, sort, table, tapply, spousal relationship, unique, unsplit, which, which.max, which.min
Welcome to Bioconductor
Vignettes contain introductory textile; view with 'browseVignettes()'. To cite Bioconductor, meet 'citation("Biobase")', and for packages 'citation("pkgname")'.
> library(qvalue) > library(fastcluster)
Attaching package: 'fastcluster'
The post-obit object is masked from 'packet:stats':
hclust
> options(stringsAsFactors = FALSE) > NO_REUSE = F > > # try to reuse earlier-loaded data if possible > if (file.exists("DE_isoforms_3.matrix.RData") && ! NO_REUSE) { + print('RESTORING Information FROM EARLIER Assay') + load("DE_isoforms_3.matrix.RData") + } else { + print('Reading matrix file.') + primary_data = read.tabular array("DE_isoforms_3.matrix", header=T, com='', row.names=1, check.names=F) + primary_data = as.matrix(primary_data) + } [1] "Reading matrix file." > source("/dwelling house/bdash/miniconda2/opt/trinity-2.6.6/Analysis/DifferentialExpression/R/heatmap.3.R") > source("/domicile/bdash/miniconda2/opt/trinity-2.6.6/Analysis/DifferentialExpression/R/misc_rnaseq_funcs.R") > source("/home/bdash/miniconda2/opt/trinity-2.6.6/Analysis/DifferentialExpression/R/pairs3.R") > source("/home/bdash/miniconda2/opt/trinity-2.six.6/Analysis/DifferentialExpression/R/vioplot2.R") > data = primary_data > myheatcol = colorpanel(75, 'regal','black','yellow') > samples_data = read.table("../samples_described.txt", header=F, bank check.names=F, fill=T) > samples_data = samples_data[samples_data[,ii] != '',] > colnames(samples_data) = c('sample_name', 'replicate_name') > sample_types = as.character(unique(samples_data[,1])) > rep_names = equally.character(samples_data[,2]) > data = data[, colnames(information) %in% rep_names, drop=F ] > nsamples = length(sample_types) > sample_colors = rainbow(nsamples) > names(sample_colors) = sample_types > sample_type_list = list() > for (i in one:nsamples) { + samples_want = samples_data[samples_data[,1]==sample_types[i], 2] + sample_type_list[[sample_types[i]]] = as.vector(samples_want) + } > sample_factoring = colnames(data) > for (i in 1:nsamples) { + sample_type = sample_types[i] + replicates_want = sample_type_list[[sample_type]] + sample_factoring[ colnames(data) %in% replicates_want ] = sample_type + } > initial_matrix = data # shop before doing various data transformations > information = log2(data+1) > sample_factoring = colnames(information) > for (i in 1:nsamples) { + sample_type = sample_types[i] + replicates_want = sample_type_list[[sample_type]] + sample_factoring[ colnames(data) %in% replicates_want ] = sample_type + } > sampleAnnotations = matrix(ncol=ncol(data),nrow=nsamples) > for (i in 1:nsamples) { + sampleAnnotations[i,] = colnames(data) %in% sample_type_list[[sample_types[i]]] + } > sampleAnnotations = utilise(sampleAnnotations, i:2, function(x) as.logical(x)) > sampleAnnotations = sample_matrix_to_color_assignments(sampleAnnotations, col=sample_colors) > rownames(sampleAnnotations) = as.vector(sample_types) > colnames(sampleAnnotations) = colnames(information) > information = as.matrix(data) # convert to matrix > > # Centering rows > data = t(scale(t(data), calibration=F)) > > write.tabular array(information, file="DE_isoforms_3.matrix.log2.centered.dat", quote=F, sep=' '); > if (nrow(data) < ii) { finish(" + + **** Pitiful, at least 2 rows are required for this matrix. + + ");} > if (ncol(information) < 2) { stop(" + + **** Sorry, at least two columns are required for this matrix. + + ");} > sample_cor = cor(data, method='pearson', use='pairwise.complete.obs') > write.table(sample_cor, file="DE_isoforms_3.matrix.log2.centered.sample_cor.dat", quote=F, sep=' ') > sample_dist = dist(t(information), method='euclidean') > hc_samples = hclust(sample_dist, method='complete') > pdf("DE_isoforms_3.matrix.log2.centered.sample_cor_matrix.pdf") > sample_cor_for_plot = sample_cor > heatmap.3(sample_cor_for_plot, dendrogram='both', Rowv=as.dendrogram(hc_samples), Colv=as.dendrogram(hc_samples), col = myheatcol, calibration='none', symm=Truthful, key=True,density.info='none', trace='none', symkey=FALSE, symbreaks=F, margins=c(10,10), cexCol=1, cexRow=1, cex.main=0.75, chief=paste("sample correlation matrix + ", "DE_isoforms_3.matrix.log2.centered") , ColSideColors=sampleAnnotations, RowSideColors=t(sampleAnnotations)) for plotting:: min.raw: -0.959807727628706 max.raw: 1 > dev.off() zippo device 1 > gene_cor = NULL > gene_dist = dist(data, method='euclidean') > if (nrow(information) <= 1) { bulletin('Too few genes to generate heatmap'); quit(status=0); } > hc_genes = hclust(gene_dist, method='complete') > heatmap_data = data > pdf("DE_isoforms_3.matrix.log2.centered.genes_vs_samples_heatmap.pdf") > heatmap.3(heatmap_data, dendrogram='both', Rowv=as.dendrogram(hc_genes), Colv=every bit.dendrogram(hc_samples), col=myheatcol, scale="none", density.info="none", trace="none", key=Truthful, keysize=ane.2, cexCol=1, margins=c(10,10), cex.chief=0.75, primary=paste("samples vs. features + ", "DE_isoforms_3.matrix.log2.centered" ) , ColSideColors=sampleAnnotations) for plotting:: min.raw: -5.1576065841341 max.raw: 5.1576065841341 > dev.off() aught device 1 > save(listing=ls(all=TRUE), file="DE_isoforms_3.matrix.RData") >
star-transcriptomeout]$ ls -l isoforms_DE_3/
-rw-rw-r–. 1 bdash bdash 53 April 13 02:29 DE_feature_counts.P0.001_C2.matrix
-rw-rw-r–. 1 bdash bdash 476 April 13 02:29 DE_isoforms_3.matrix
-rw-rw-r–. 1 bdash bdash 1104 April xiii 02:29 DE_isoforms_3.matrix.log2.centered.dat
-rw-rw-r–. 1 bdash bdash 6526 Apr xiii 02:29 DE_isoforms_3.matrix.log2.centered.genes_vs_samples_heatmap.pdf
-rw-rw-r–. i bdash bdash 634 Apr 13 02:29 DE_isoforms_3.matrix.log2.centered.sample_cor.dat
-rw-rw-r–. 1 bdash bdash 6381 Apr 13 02:29 DE_isoforms_3.matrix.log2.centered.sample_cor_matrix.pdf
-rw-rw-r–. 1 bdash bdash 4465 Apr 13 02:29 DE_isoforms_3.matrix.R
-rw-rw-r–. 1 bdash bdash 34409 Apr 13 02:29 DE_isoforms_3.matrix.RData
library(pdftools)
pdf_convert('isoforms_DE_3/DE_isoforms_3.matrix.log2.centered.genes_vs_samples_heatmap.pdf', format = "jpeg", pages = Nil, filenames = Nix, dpi = 300, antialias = True, opw = "", upw = "", verbose = TRUE)
Converting page 1 to DE_isoforms_3.matrix.log2.centered.genes_vs_samples_heatmap_1.jpeg... washed! [i] "DE_isoforms_3.matrix.log2.centered.genes_vs_samples_heatmap_1.jpeg"
pdf_convert('isoforms_DE_3/DE_isoforms_3.matrix.log2.centered.sample_cor_matrix.pdf', format = "jpeg", pages = NULL, filenames = NULL, dpi = 300, antialias = Truthful, opw = "", upw = "", verbose = True)
Converting page 1 to DE_isoforms_3.matrix.log2.centered.sample_cor_matrix_1.jpeg... washed! [1] "DE_isoforms_3.matrix.log2.centered.sample_cor_matrix_1.jpeg"
8. edgeR analysis of differentail factor expression (similar to the isoforms analysis done in a higher place)
Generate a matrix file of abundance estimates
star-transcriptomeout$ abundance_estimates_to_matrix.pl --est_method RSEM 1out/.genes.results 2out/.genes.results 3out/.genes.results 4out/.genes.results 5out/.genes.results 6out/.genes.results --gene_trans_map none --name_sample_by_basedir --out_prefix genes_gene_trans_map_none/genes
-reading file: 1out/.genes.results
-reading file: 2out/.genes.results
-reading file: 3out/.genes.results
-reading file: 4out/.genes.results
-reading file: 5out/.genes.results
-reading file: 6out/.genes.results
- Outputting combined matrix.
/home/bdash/miniconda2/opt/trinity-2.6.6/util/support_scripts/run_TMM_scale_matrix.pl –matrix genes_gene_trans_map_none/genes.isoform.TPM.not_cross_norm > genes_gene_trans_map_none/genes.isoform.TMM.EXPR.matrixCMD: R –no-save –no-restore –no-site-file –no-init-file -q < genes_gene_trans_map_none/genes.isoform.TPM.not_cross_norm.runTMM.R one>&2
…………….
star-transcriptomeout$ ls -l genes_gene_trans_map_none/
-rw-rw-r–. 1 bdash bdash 764847 Apr 12 12:24 genes.isoform.counts.matrix
-rw-rw-r–. ane bdash bdash 805903 Apr 12 12:24 genes.isoform.TMM.EXPR.matrix
-rw-rw-r–. 1 bdash bdash 622537 Apr 12 12:24 genes.isoform.TPM.not_cross_norm
-rw-rw-r–. i bdash bdash 578 Apr 12 12:24 genes.isoform.TPM.not_cross_norm.runTMM.R
-rw-rw-r–. 1 bdash bdash 318 Apr 12 12:24 genes.isoform.TPM.not_cross_norm.TMM_info.txt
DE analysis of cistron expression: Priduces MA plot, volcano plot and counts matrix
Note biologiacl triplicates for each group (see beneath)
star-transcriptomeout$ run_DE_analysis.pl --matrix genes_gene_trans_map_none/genes.isoform.counts.matrix --output genes_DE_3/ --samples_file samples_described.txt --method edgeR
Got six samples, and got: seven data fields.
Header: 1out 2out 3out 4out 5out 6out
Adjacent: Olr1501 0.00 0.00 0.00 0.00 0.00 0.00
$VAR1 = { '5out' => 5, '6out' => 6, '3out' => three, '1out' => one, '2out' => ii, '4out' => 4 };
$VAR1 = { 'conditionB' => [ '4out', '5out', '6out' ], 'conditionA' => [ '1out', '2out', '3out' ] };
Contrasts to perform are: $VAR1 = [ [ 'conditionA', 'conditionB' ] ];
CMD: R –no-save –no-restore –no-site-file –no-init-file -q < genes.isoform.counts.matrix.conditionA_vs_conditionB.conditionA.vs.conditionB.EdgeR.Rscript
……………
star-transcriptomeout$ ls -l genes_DE_3/
-rw-rw-r–. ane bdash bdash 1410 April 13 02:12 genes.isoform.counts.matrix.conditionA_vs_conditionB.conditionA.vs.conditionB.EdgeR.Rscript
-rw-rw-r–. 1 bdash bdash 352277 April 13 02:13 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.count_matrix
-rw-rw-r–. 1 bdash bdash 1010284 Apr 13 02:xiii genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results
-rw-rw-r–. 1 bdash bdash 112695 Apr 13 02:13 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.MA_n_Volcano.pdf
-rw-rw-r–. ane bdash bdash 355 April xiii 02:21 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.conditionA-UP.subset
-rw-rw-r–. 1 bdash bdash seventy Apr xiii 02:21 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.conditionB-Upward.subset
-rw-rw-r–. 1 bdash bdash 355 Apr 13 02:21 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.P0.001_C2.DE.subset
-rw-rw-r–. ane bdash bdash 96 Apr 13 02:21 genes.isoform.counts.matrix.conditionA_vs_conditionB.edgeR.DE_results.samples
Analyze differential gene expression: Produces heatmap and coorelation matrix
genes_DE_3$ analyze_diff_expr.pl --matrix ../genes_gene_trans_map_none/genes.isoform.TMM.EXPR.matrix --samples ../samples_described.txt --output DE_genes_3
Found two features equally differentially expressed.
CMD: /domicile/bdash/miniconda2/opt/trinity-ii.vi.6/Assay/DifferentialExpression/PtR -m DE_genes_3.matrix –log2 –heatmap –min_colSums 0 –min_rowSums 0 –gene_dist euclidean –sample_dist euclidean –sample_cor_matrix –center_rows –salve -s ../samples_described.txt CMD: R –no-save –no-restore –no-site-file –no-init-file -q < DE_genes_3.matrix.R
……
star-transcriptomeout$ ls -50 genes_DE_3/
-rw-rw-r–. one bdash bdash 53 Apr 13 02:21 DE_feature_counts.P0.001_C2.matrix
-rw-rw-r–. 1 bdash bdash 120 April thirteen 02:21 DE_genes_3.matrix
-rw-rw-r–. 1 bdash bdash 256 Apr 13 02:21 DE_genes_3.matrix.log2.centered.dat
-rw-rw-r–. one bdash bdash 5977 April thirteen 02:21 DE_genes_3.matrix.log2.centered.genes_vs_samples_heatmap.pdf
-rw-rw-r–. i bdash bdash 148 Apr 13 02:21 DE_genes_3.matrix.log2.centered.sample_cor.dat
-rw-rw-r–. one bdash bdash 6311 Apr 13 02:21 DE_genes_3.matrix.log2.centered.sample_cor_matrix.pdf
-rw-rw-r–. 1 bdash bdash 4435 Apr 13 02:21 DE_genes_3.matrix.R
-rw-rw-r–. 1 bdash bdash 33214 Apr 13 02:21 DE_genes_3.matrix.RData
pdf_convert('genes_DE_3/DE_genes_3.matrix.log2.centered.genes_vs_samples_heatmap.pdf', format = "jpeg", pages = NULL, filenames = Nix, dpi = 300, antialias = Truthful, opw = "", upw = "", verbose = TRUE)
Converting page 1 to DE_genes_3.matrix.log2.centered.genes_vs_samples_heatmap_1.jpeg... done! [1] "DE_genes_3.matrix.log2.centered.genes_vs_samples_heatmap_1.jpeg"
pdf_convert('genes_DE_3/DE_genes_3.matrix.log2.centered.sample_cor_matrix.pdf', format = "jpeg", pages = NULL, filenames = Aught, dpi = 300, antialias = TRUE, opw = "", upw = "", verbose = TRUE)
Converting folio 1 to DE_genes_3.matrix.log2.centered.sample_cor_matrix_1.jpeg... done! [1] "DE_genes_3.matrix.log2.centered.sample_cor_matrix_1.jpeg"
LS0tDQp0aXRsZTogIkFuYWx5c2lzIG9mIGdlbmUgYW5kIGlzb2Zvcm0gZXhwcmVzc2lvbiBpbiBwcmVmcm9udGFsIGNvcnRleCAoUEZDKSBvZiByYXRzIGV4cG9zZWQgdG8gbmljb3RpbmU6IFN0YXItUlNFTS1lZGdlUiBwaXBlbGluZSINCmF1dGhvcjogIkJoYWdpcmF0aGkgRGFzaCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIDEuIFJlZmVyZW5jZXMgYW5kIHJlc291cmNlcw0KDQojIyMjIFJlZmVyZW5jZQ0KDQpQTG9TIE9uZS4gMjAxMzs4KDMpOmU1OTU4Mi4gZG9pOiAxMC4xMzcxL2pvdXJuYWwucG9uZS4wMDU5NTgyLg0KDQojIyMjIE1hY2hpbmUNCg0KQVdTIHI1LjJ4bGFyZ2UgYW5kIENlbnRPUyBsaW51eCA3IG9uIGEgVmlydHVhbCBNYWNoaW5lDQoNCiMjIyMgU29mdHdhcmUNCg0Kd2dldCBodHRwOi8vaGdkb3dubG9hZC5zb2UudWNzYy5lZHUvYWRtaW4vZXhlL2xpbnV4Lng4Nl82NC9nZW5lUHJlZFRvR3RmDQoNCg0KDQojIyAyLiBPYnRhaW4gYW5kL3Byb2Nlc3MgYW5hbHlzaXMgZGF0c2V0cw0KDQojIyMgTWFrZSBkaXJlY3RvcmllcyANCg0KIyMjIyB+L2RhdGEvcm5hc2VxL1JuL1BMb1MtT25lLTgtZTU5NTgyJCBscyAtbA0KDQpkcnd4cnd4ci14IDIgdWJ1bnR1IHVidW50dSA0MDk2IEFwciAxMCAwMjo0OCBmMzQ0X3BmY19uaWNvdGluZQ0KDQpkcnd4cnd4ci14IDIgdWJ1bnR1IHVidW50dSA0MDk2IEFwciAxMCAwMzoyOCBmMzQ0X3BmY19zYWxpbmUNCg0KDQojIyMgRG93bmxvYWQgc3JhIGZpbGVzIChuaWNvdGluZSBleHBvc2VkIHJhdCBQRkMpIHRvIGYzNDRfcGZjX25pY290aW5lIGRpcmVjdG9yeQ0KDQoNCiMjIyMgZjM0NF9wZmNfbmljb3RpbmUkIHdnZXQgZnRwOi8vZnRwLXRyYWNlLm5jYmkubmloLmdvdi9zcmEvc3JhLWluc3RhbnQvcmVhZHMvQnlSdW4vc3JhL1NSUi9TUlI4NjkvU1JSODY5MDMyL1NSUjg2OTAzMi5zcmENCg0KIyMjIyBmMzQ0X3BmY19uaWNvdGluZSQgd2dldCBmdHA6Ly9mdHAtdHJhY2UubmNiaS5uaWguZ292L3NyYS9zcmEtaW5zdGFudC9yZWFkcy9CeVJ1bi9zcmEvU1JSL1NSUjg2OS9TUlI4NjkwMzMvU1JSODY5MDMzLnNyYQ0KDQojIyMjIGYzNDRfcGZjX25pY290aW5lJCB3Z2V0IGZ0cDovL2Z0cC10cmFjZS5uY2JpLm5paC5nb3Yvc3JhL3NyYS1pbnN0YW50L3JlYWRzL0J5UnVuL3NyYS9TUlIvU1JSODY5L1NSUjg2OTAzNC9TUlI4NjkwMzQuc3JhDQoNCg0KDQoNCiMjIyBDb252ZXJ0IHNyYSBmaWxlcyB0byBmYXN0cSBmaWxlcw0KDQojIyMjIGYzNDRfcGZjX25pY290aW5lJCBmYXN0cS1kdW1wIC0tc3BsaXQtMyBTUlI4NjkwMzIuc3JhIC0tZ3ppcA0KDQojIyMjIGYzNDRfcGZjX25pY290aW5lJCBmYXN0cS1kdW1wIC0tc3BsaXQtMyBTUlI4NjkwMzMuc3JhIC0tZ3ppcA0KDQojIyMjIGYzNDRfcGZjX25pY290aW5lJCBmYXN0cS1kdW1wIC0tc3BsaXQtMyBTUlI4NjkwMzQuc3JhIC0tZ3ppcA0KDQoNCg0KIyMjIyBQTG9TLU9uZS04LWU1OTU4MiQgbHMgLWwgZjM0NF9wZmNfbmljb3RpbmUvDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE5MTgzNzY4MjYgQXByICA3IDEzOjA4IFNSUjg2OTAzMi5zcmENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTUxMjcwMjg3MyBBcHIgMTAgMDM6MDcgU1JSODY5MDMyXzEuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTU2NTAyNzQyMSBBcHIgMTAgMDM6MDcgU1JSODY5MDMyXzIuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTk4OTA4NjI0MSBBcHIgIDcgMTM6MDkgU1JSODY5MDMzLnNyYQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxNTU5NTEwODE4IEFwciAxMCAwMzoxMSBTUlI4NjkwMzNfMS5mYXN0cS5neg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxNjEyMjU4NjE4IEFwciAxMCAwMzoxMSBTUlI4NjkwMzNfMi5mYXN0cS5neg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxOTc4MzI3NjY3IEFwciAgNyAxMzoxMCBTUlI4NjkwMzQuc3JhDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE1Njg5Nzk3ODQgQXByIDEwIDAzOjEyIFNSUjg2OTAzNF8xLmZhc3RxLmd6DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE2MTUzODUzMzEgQXByIDEwIDAzOjEyIFNSUjg2OTAzNF8yLmZhc3RxLmd6DQoNCg0KIyMjIERvd25sb2FkIHNyYSBmaWxlcyAoY29udHJvbC9zYWxpbmUgZXhwb3NlZCByYXQgUEZDKSB0byBmMzQ0X3BmY19zYWxpbmUgZGlyZWN0b3J5DQoNCg0KIyMjIyBmMzQ0X3BmY19zYWxpbmUkIHdnZXQgZnRwOi8vZnRwLXRyYWNlLm5jYmkubmloLmdvdi9zcmEvc3JhLWluc3RhbnQvcmVhZHMvQnlSdW4vc3JhL1NSUi9TUlI4NjkvU1JSODY5MDQ0L1NSUjg2OTA0NC5zcmENCg0KIyMjIyBmMzQ0X3BmY19zYWxpbmUkIHdnZXQgZnRwOi8vZnRwLXRyYWNlLm5jYmkubmloLmdvdi9zcmEvc3JhLWluc3RhbnQvcmVhZHMvQnlSdW4vc3JhL1NSUi9TUlI4NjkvU1JSODY5MDQ1L1NSUjg2OTA0NS5zcmENCg0KIyMjIyBmMzQ0X3BmY19zYWxpbmUkIHdnZXQgZnRwOi8vZnRwLXRyYWNlLm5jYmkubmloLmdvdi9zcmEvc3JhLWluc3RhbnQvcmVhZHMvQnlSdW4vc3JhL1NSUi9TUlI4NjkvU1JSODY5MDQ2L1NSUjg2OTA0Ni5zcmENCg0KDQoNCg0KIyMjIyBmMzQ0X3BmY19zYWxpbmUkIGZhc3RxLWR1bXAgLS1zcGxpdC0zIFNSUjg2OTA0NC5zcmEgLS1nemlwDQoNCiMjIyMgZjM0NF9wZmNfc2FsaW5lJCBmYXN0cS1kdW1wIC0tc3BsaXQtMyBTUlI4NjkwNDUuc3JhIC0tZ3ppcA0KDQojIyMjIGYzNDRfcGZjX3NhbGluZSQgZmFzdHEtZHVtcCAtLXNwbGl0LTMgU1JSODY5MDQ2LnNyYSAtLWd6aXANCg0KDQoNCiMjIyMgUExvUy1PbmUtOC1lNTk1ODIkIGxzIC1sIGYzNDRfcGZjX3NhbGluZS8NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMjY4MTMzMDA3NCBBcHIgIDcgMTI6NTkgU1JSODY5MDQ0LnNyYQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAyMTE5NzQ1OTU1IEFwciAxMCAwMzoxMCBTUlI4NjkwNDRfMS5mYXN0cS5neg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAyMjAyNTgwNDgyIEFwciAxMCAwMzoxMCBTUlI4NjkwNDRfMi5mYXN0cS5neg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAyNzA5MzgzMTk0IEFwciAgNyAxMzowMSBTUlI4NjkwNDUuc3JhDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDIxMDM4OTIwOTcgQXByIDEwIDAzOjEyIFNSUjg2OTA0NV8xLmZhc3RxLmd6DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDIxOTgzNjMwNjIgQXByIDEwIDAzOjEyIFNSUjg2OTA0NV8yLmZhc3RxLmd6DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDI2MTQwMjMzMjggQXByICA3IDEzOjAyIFNSUjg2OTA0Ni5zcmENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMjA1NDk0MjM3NSBBcHIgMTAgMDM6MTMgU1JSODY5MDQ2XzEuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMjEzODQ0NjI2OSBBcHIgMTAgMDM6MTMgU1JSODY5MDQ2XzIuZmFzdHEuZ3oNCg0KDQoNCiMjIDMuIE9idGFpbiwgcHJvY2VzcyBhbmQvb3IgYnVpbGQgZ2Vub21lLCByZWZlcmVuY2UgYW5kIGluZGV4IGRhdGFzZXRzDQoNCg0KIyMjIERvd25sb2FkIHRoZSBnZW5vbWUgZmlsZSBhbmQgaW5kZXggaXQNCg0KDQojIyMjIHdnZXQgaHR0cDovL2hnZG93bmxvYWQuc29lLnVjc2MuZWR1L2dvbGRlblBhdGgvcm42L2JpZ1ppcHMvcm42LmZhLmd6DQoNCg0KIyMjIyBzYW10b29scyBmYWlkeCBybjYuZmENCg0KDQojIyMjIHJuNiQgbHMgLWwNCg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAyOTI3NjA3MzMzIEFwciAgOSAxOToyNiBybjYuZmENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICA0MDY1NCBBcHIgIDkgMTk6MjYgcm42LmZhLmZhaQ0KDQoNCg0KDQojIyMgRG93bmxvYWQgdGhlIHJlZkdlbmUgZmlsZSBhbmQgY29udmVydCBpdCB0byBhIEdURiBmaWxlDQoNCg0KIyMjIyB3Z2V0IGh0dHA6Ly9oZ2Rvd25sb2FkLnNvZS51Y3NjLmVkdS9nb2xkZW5QYXRoL3JuNi9kYXRhYmFzZS9yZWZHZW5lLnR4dC5neg0KDQojIyMjIGd1bnppcCByZWZHZW5lLnR4dC5neiANCiANCiMjIyMgY3V0IC1mIDItIHJlZkdlbmUudHh0ID4gcmVmR2VuZS5pbnB1dA0KDQojIyMjIGdlbmVQcmVkVG9HdGYgZmlsZSByZWZHZW5lLmlucHV0IHJlZkdlbmUuZ3RmDQogDQoNCiMjIyMgZ2Vub21lX3JhdCQgbHMgLWwgIA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgIDYxODkxMzQxIEFwciAgOSAxOToyNyByZWZHZW5lLmd0Zg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICA1MTQzMzgwIEFwciAgOSAxOToyNyByZWZHZW5lLmlucHV0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgIDUyMjY1MDcgQXByICA5IDE5OjI3IHJlZkdlbmUudHh0DQoNCg0KDQoNCg0KDQoNCiMjIyA0LiBCdWlsZCBhIFNUQVIgaW5kZXggZm9yIHRoZSByYXQgZ2VuZW9tZQ0KDQoNCmBgYA0KJCBTVEFSIC0tcnVuVGhyZWFkTiAxNiAtLXJ1bk1vZGUgZ2Vub21lR2VuZXJhdGUgLS1nZW5vbWVEaXIgU3RhckluZGV4UmF0LyAtLWdlbm9tZUZhc3RhRmlsZXMgcm42L3JuNi5mYQ0KDQpgYGANCg0KDQpBcHIgMDkgMTg6Mzk6MDQgLi4uLi4gc3RhcnRlZCBTVEFSIHJ1bg0KDQpBcHIgMDkgMTg6Mzk6MDQgLi4uIHN0YXJ0aW5nIHRvIGdlbmVyYXRlIEdlbm9tZSBmaWxlcw0KDQpBcHIgMDkgMTg6NDA6MTggLi4uIHN0YXJ0aW5nIHRvIHNvcnQgU3VmZml4IEFycmF5LiBUaGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lLi4uDQoNCkFwciAwOSAxODo0MDozMiAuLi4gc29ydGluZyBTdWZmaXggQXJyYXkgY2h1bmtzIGFuZCBzYXZpbmcgdGhlbSB0byBkaXNrLi4uDQoNCkFwciAwOSAxOTowNTozMyAuLi4gbG9hZGluZyBjaHVua3MgZnJvbSBkaXNrLCBwYWNraW5nIFNBLi4uDQoNCkFwciAwOSAxOTowNjo0MiAuLi4gZmluaXNoZWQgZ2VuZXJhdGluZyBzdWZmaXggYXJyYXkNCg0KQXByIDA5IDE5OjA2OjQyIC4uLiBnZW5lcmF0aW5nIFN1ZmZpeCBBcnJheSBpbmRleA0KDQpBcHIgMDkgMTk6MTA6NTcgLi4uIGNvbXBsZXRlZCBTdWZmaXggQXJyYXkgaW5kZXgNCg0KQXByIDA5IDE5OjEwOjU3IC4uLiB3cml0aW5nIEdlbm9tZSB0byBkaXNrIC4uLg0KDQpBcHIgMDkgMTk6MTA6NTkgLi4uIHdyaXRpbmcgU3VmZml4IEFycmF5IHRvIGRpc2sgLi4uDQoNCkFwciAwOSAxOToxMjoxOSAuLi4gd3JpdGluZyBTQWluZGV4IHRvIGRpc2sNCg0KQXByIDA5IDE5OjEyOjI3IC4uLi4uIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseQ0KDQoNCiMjIyMgU3RhckluZGV4UmF0JCBscyAtbA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMzA5NTEzNDIwOCBBcHIgIDkgMTk6MTAgR2Vub21lDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDIyNTIxMzUxNjQ1IEFwciAgOSAxOToxMiBTQQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMTU2NTg3MzYxOSBBcHIgIDkgMTk6MTIgU0FpbmRleA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgICAgNTIxMyBBcHIgIDkgMTg6NDAgY2hyTGVuZ3RoLnR4dA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgICAxOTM0NyBBcHIgIDkgMTg6NDAgY2hyTmFtZS50eHQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgMjQ1NjAgQXByICA5IDE4OjQwIGNock5hbWVMZW5ndGgudHh0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgIDEwMzg3IEFwciAgOSAxODo0MCBjaHJTdGFydC50eHQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA0NzkgQXByICA5IDE5OjEwIGdlbm9tZVBhcmFtZXRlcnMudHh0DQoNCg0KDQoNCg0KDQoNCiMjIDUuIEFsaWduIHRoZSBmYXN0cS5neiBmaWxlcyB0byBvYnRhaW4gQkFNIGZpbGVzDQoNCg0KYGBgDQogfi9yZXN1bHRzL3JuYXNlcS9Sbi9zdGFyX3JhdCQgU1RBUiANCiANCiAtLXJ1blRocmVhZE4gMTIgDQogDQogLS1nZW5vbWVEaXIgU3RhckluZGV4UmF0LyANCiANCiAtLXNqZGJHVEZmaWxlIH4vZ2Vub21lX3JhdC9yZWZHZW5lLmd0ZiANCiANCiAtLXNqZGJPdmVyaGFuZyAxMDAgDQogDQogLS1yZWFkRmlsZXNJbiB+L1BMb1MtT25lLTgtZTU5NTgyL2YzNDRfcGZjX3NhbGluZS9TUlI4NjkwNDRfMS5mYXN0cS5neg0KIA0KIH4vUExvUy1PbmUtOC1lNTk1ODIvZjM0NF9wZmNfc2FsaW5lL1NSUjg2OTA0NF8yLmZhc3RxLmd6IA0KIA0KIC0tcmVhZEZpbGVzQ29tbWFuZCB6Y2F0IA0KIA0KIC0tcXVhbnRNb2RlIFRyYW5zY3JpcHRvbWVTQU0gDQogDQogLS1vdXRGaWxlTmFtZVByZWZpeCAxYWxpZ24vDQogDQogYGBgDQoNCkFwciAxMCAwMzozMDozMCAuLi4uLiBzdGFydGVkIFNUQVIgcnVuDQoNCkFwciAxMCAwMzozMDozMCAuLi4uLiBsb2FkaW5nIGdlbm9tZQ0KDQpBcHIgMTAgMDM6MzI6MzkgLi4uLi4gcHJvY2Vzc2luZyBhbm5vdGF0aW9ucyBHVEYNCg0KQXByIDEwIDAzOjMyOjQzIC4uLi4uIGluc2VydGluZyBqdW5jdGlvbnMgaW50byB0aGUgZ2Vub21lIGluZGljZXMNCg0KQXByIDEwIDAzOjM3OjIzIC4uLi4uIHN0YXJ0ZWQgbWFwcGluZw0KDQpBcHIgMTAgMDM6NDI6MjkgLi4uLi4gZmluaXNoZWQgc3VjY2Vzc2Z1bGx5DQoNCg0KDQojIyMjICQgbHMgLWwgMWFsaWduLw0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE1OTMzNDQ0OTg2IEFwciAxMCAwMzo0MiBBbGlnbmVkLm91dC5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDIzNTg2NDM1NzkgQXByIDEwIDAzOjQyIEFsaWduZWQudG9UcmFuc2NyaXB0b21lLm91dC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDE4NjIgQXByIDEwIDAzOjQyIExvZy5maW5hbC5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyNzI5MzUgQXByIDEwIDAzOjQyIExvZy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA4MzYgQXByIDEwIDAzOjQyIExvZy5wcm9ncmVzcy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgIDczNjg4ODYgQXByIDEwIDAzOjQyIFNKLm91dC50YWINCg0KZHJ3eC0tLS0tLSAyIHVidW50dSB1YnVudHUgICAgICAgIDQwOTYgQXByIDEwIDAzOjMyIF9TVEFSZ2Vub21lDQoNCg0KDQojIyMjICQgY2F0IDFhbGlnbi9Mb2cuZmluYWwub3V0IA0KDQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRlZCBqb2Igb24gfAlBcHIgMTAgMDM6MzA6MzANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRlZCBtYXBwaW5nIG9uIHwJQXByIDEwIDAzOjM3OjIzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaW5pc2hlZCBvbiB8CUFwciAxMCAwMzo0MjoyOQ0KICAgICAgIE1hcHBpbmcgc3BlZWQsIE1pbGxpb24gb2YgcmVhZHMgcGVyIGhvdXIgfAk0ODkuMjMNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgaW5wdXQgcmVhZHMgfAk0MTU4NDg5MQ0KICAgICAgICAgICAgICAgICAgICAgIEF2ZXJhZ2UgaW5wdXQgcmVhZCBsZW5ndGggfAkxMDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVFVRSBSRUFEUzoNCiAgICAgICAgICAgICAgICAgICBVbmlxdWVseSBtYXBwZWQgcmVhZHMgbnVtYmVyIHwJMzQ3OTYzMzENCiAgICAgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWx5IG1hcHBlZCByZWFkcyAlIHwJODMuNjglDQogICAgICAgICAgICAgICAgICAgICAgICAgIEF2ZXJhZ2UgbWFwcGVkIGxlbmd0aCB8CTk5LjM3DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBUb3RhbCB8CTc5MTAxOTkNCiAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBBbm5vdGF0ZWQgKHNqZGIpIHwJNzE5NDk0MA0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogR1QvQUcgfAk3NzY0Njc3DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBHQy9BRyB8CTYyMDA0DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBBVC9BQyB8CTc2MzQNCiAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBOb24tY2Fub25pY2FsIHwJNzU4ODQNCiAgICAgICAgICAgICAgICAgICAgICBNaXNtYXRjaCByYXRlIHBlciBiYXNlLCAlIHwJMC4zNyUNCiAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGlvbiByYXRlIHBlciBiYXNlIHwJMC4wMSUNCiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0aW9uIGF2ZXJhZ2UgbGVuZ3RoIHwJMS42MQ0KICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0aW9uIHJhdGUgcGVyIGJhc2UgfAkwLjAwJQ0KICAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRpb24gYXZlcmFnZSBsZW5ndGggfAkxLjM1DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJLU1BUFBJTkcgUkVBRFM6DQogICAgICAgIE51bWJlciBvZiByZWFkcyBtYXBwZWQgdG8gbXVsdGlwbGUgbG9jaSB8CTI1NTM4NTINCiAgICAgICAgICAgICAlIG9mIHJlYWRzIG1hcHBlZCB0byBtdWx0aXBsZSBsb2NpIHwJNi4xNCUNCiAgICAgICAgTnVtYmVyIG9mIHJlYWRzIG1hcHBlZCB0byB0b28gbWFueSBsb2NpIHwJNTczMDgNCiAgICAgICAgICAgICAlIG9mIHJlYWRzIG1hcHBlZCB0byB0b28gbWFueSBsb2NpIHwJMC4xNCUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTk1BUFBFRCBSRUFEUzoNCiAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiB0b28gbWFueSBtaXNtYXRjaGVzIHwJMC4wMCUNCiAgICAgICAgICAgICAgICAgJSBvZiByZWFkcyB1bm1hcHBlZDogdG9vIHNob3J0IHwJOS45MiUNCiAgICAgICAgICAgICAgICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IG90aGVyIHwJMC4xMyUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSElNRVJJQyBSRUFEUzoNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNoaW1lcmljIHJlYWRzIHwJMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb2YgY2hpbWVyaWMgcmVhZHMgfAkwLjAwJQ0KDQpgYGANCg0KDQoNCg0KYGBgDQp+L3Jlc3VsdHMvcm5hc2VxL1JuL3N0YXJfcmF0L3RyYW5zY3JpcHRvbWVPdXQkIFNUQVIgLS1ydW5UaHJlYWROIDEyIC0tZ2Vub21lRGlyIH4vZ2Vub21lQW5kSW5kaWNlcy9Sbi9zdGFyLyAtLXNqZGJHVEZmaWxlIH4vZ2Vub21lQW5kSW5kaWNlcy9Sbi9ybjYucmVmR2VuZS5ndGYgLS1zamRiT3ZlcmhhbmcgMTAwIC0tcmVhZEZpbGVzSW4gfi9kYXRhL3JuYXNlcS9Sbi9QTG9TLU9uZS04LWU1OTU4Mi9mMzQ0X3BmY19zYWxpbmUvU1JSODY5MDQ1XzEuZmFzdHEuZ3ogfi9kYXRhL3JuYXNlcS9Sbi9QTG9TLU9uZS04LWU1OTU4Mi9mMzQ0X3BmY19zYWxpbmUvU1JSODY5MDQ1XzIuZmFzdHEuZ3ogLS1yZWFkRmlsZXNDb21tYW5kIHpjYXQgLS1xdWFudE1vZGUgVHJhbnNjcmlwdG9tZVNBTSAtLW91dEZpbGVOYW1lUHJlZml4IDJhbGlnbi8NCg0KYGBgDQoNCg0KQXByIDExIDE1OjA4OjE5IC4uLi4uIHN0YXJ0ZWQgU1RBUiBydW4NCg0KQXByIDExIDE1OjA4OjIwIC4uLi4uIGxvYWRpbmcgZ2Vub21lDQoNCkFwciAxMSAxNToxMjowMSAuLi4uLiBwcm9jZXNzaW5nIGFubm90YXRpb25zIEdURg0KDQpBcHIgMTEgMTU6MTI6MjUgLi4uLi4gaW5zZXJ0aW5nIGp1bmN0aW9ucyBpbnRvIHRoZSBnZW5vbWUgaW5kaWNlcw0KDQpBcHIgMTEgMTU6Mzc6NDYgLi4uLi4gc3RhcnRlZCBtYXBwaW5nDQoNCkFwciAxMSAxNTo1ODo1NCAuLi4uLiBmaW5pc2hlZCBzdWNjZXNzZnVsbHkNCg0KDQojIyMjICQgbHMgLWwgMmFsaWduLw0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxNDg2OTQzNjY0NCBBcHIgMTEgMTU6NTggQWxpZ25lZC5vdXQuc2FtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAyMjE2MTY2NjY4IEFwciAxMSAxNTo1OCBBbGlnbmVkLnRvVHJhbnNjcmlwdG9tZS5vdXQuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgICAxODYzIEFwciAxMSAxNTo1OCBMb2cuZmluYWwub3V0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgMjkwOTcxIEFwciAxMSAxNTo1OCBMb2cub3V0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgICAyNDg4IEFwciAxMSAxNTo1OCBMb2cucHJvZ3Jlc3Mub3V0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICA3Mjc4OTUzIEFwciAxMSAxNTo1OCBTSi5vdXQudGFiDQoNCmRyd3gtLS0tLS0gMiB1YnVudHUgdWJ1bnR1ICAgICAgICA0MDk2IEFwciAxMSAxNToxMiBfU1RBUmdlbm9tZQ0KDQoNCg0KDQojIyMjICQgY2F0IDJhbGlnbi9Mb2cuZmluYWwub3V0IA0KDQoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGVkIGpvYiBvbiB8CUFwciAxMSAxNTowODoxOQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGVkIG1hcHBpbmcgb24gfAlBcHIgMTEgMTU6Mzc6NDYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmlzaGVkIG9uIHwJQXByIDExIDE1OjU4OjU0DQogICAgICAgTWFwcGluZyBzcGVlZCwgTWlsbGlvbiBvZiByZWFkcyBwZXIgaG91ciB8CTExNi4wMg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnB1dCByZWFkcyB8CTQwODY2MDM1DQogICAgICAgICAgICAgICAgICAgICAgQXZlcmFnZSBpbnB1dCByZWFkIGxlbmd0aCB8CTEwMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JUVVFIFJFQURTOg0KICAgICAgICAgICAgICAgICAgIFVuaXF1ZWx5IG1hcHBlZCByZWFkcyBudW1iZXIgfAkzMjU5NDExNQ0KICAgICAgICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgbWFwcGVkIHJlYWRzICUgfAk3OS43NiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQXZlcmFnZSBtYXBwZWQgbGVuZ3RoIHwJOTkuMzUNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IFRvdGFsIHwJNzM3MjE4MQ0KICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEFubm90YXRlZCAoc2pkYikgfAk2Njk1MTU1DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBHVC9BRyB8CTcyMzUxMzUNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEdDL0FHIHwJNTg1MjMNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEFUL0FDIHwJNjk5NQ0KICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IE5vbi1jYW5vbmljYWwgfAk3MTUyOA0KICAgICAgICAgICAgICAgICAgICAgIE1pc21hdGNoIHJhdGUgcGVyIGJhc2UsICUgfAkwLjM4JQ0KICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0aW9uIHJhdGUgcGVyIGJhc2UgfAkwLjAxJQ0KICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRpb24gYXZlcmFnZSBsZW5ndGggfAkxLjYxDQogICAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRpb24gcmF0ZSBwZXIgYmFzZSB8CTAuMDElDQogICAgICAgICAgICAgICAgICAgICAgIEluc2VydGlvbiBhdmVyYWdlIGxlbmd0aCB8CTEuMzUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVVMVEktTUFQUElORyBSRUFEUzoNCiAgICAgICAgTnVtYmVyIG9mIHJlYWRzIG1hcHBlZCB0byBtdWx0aXBsZSBsb2NpIHwJMjM1MzkwMw0KICAgICAgICAgICAgICUgb2YgcmVhZHMgbWFwcGVkIHRvIG11bHRpcGxlIGxvY2kgfAk1Ljc2JQ0KICAgICAgICBOdW1iZXIgb2YgcmVhZHMgbWFwcGVkIHRvIHRvbyBtYW55IGxvY2kgfAk1Mjg3Ng0KICAgICAgICAgICAgICUgb2YgcmVhZHMgbWFwcGVkIHRvIHRvbyBtYW55IGxvY2kgfAkwLjEzJQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOTUFQUEVEIFJFQURTOg0KICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IHRvbyBtYW55IG1pc21hdGNoZXMgfAkwLjAwJQ0KICAgICAgICAgICAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiB0b28gc2hvcnQgfAkxNC4yMyUNCiAgICAgICAgICAgICAgICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IG90aGVyIHwJMC4xMiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSElNRVJJQyBSRUFEUzoNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNoaW1lcmljIHJlYWRzIHwJMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb2YgY2hpbWVyaWMgcmVhZHMgfAkwLjAwJQ0KDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCmBgYA0Kfi9yZXN1bHRzL3JuYXNlcS9Sbi9zdGFyX3JhdC90cmFuc2NyaXB0b21lT3V0JCBTVEFSIC0tcnVuVGhyZWFkTiAxMiAtLWdlbm9tZURpciB+L2dlbm9tZUFuZEluZGljZXMvUm4vc3Rhci8gLS1zamRiR1RGZmlsZSB+L2dlbm9tZUFuZEluZGljZXMvUm4vcm42LnJlZkdlbmUuZ3RmIC0tc2pkYk92ZXJoYW5nIDEwMCAtLXJlYWRGaWxlc0luIH4vZGF0YS9ybmFzZXEvUm4vUExvUy1PbmUtOC1lNTk1ODIvZjM0NF9wZmNfc2FsaW5lL1NSUjg2OTA0Nl8xLmZhc3RxLmd6IH4vZGF0YS9ybmFzZXEvUm4vUExvUy1PbmUtOC1lNTk1ODIvZjM0NF9wZmNfc2FsaW5lL1NSUjg2OTA0Nl8yLmZhc3RxLmd6IC0tcmVhZEZpbGVzQ29tbWFuZCB6Y2F0IC0tcXVhbnRNb2RlIFRyYW5zY3JpcHRvbWVTQU0gLS1vdXRGaWxlTmFtZVByZWZpeCAzYWxpZ24vDQoNCmBgYA0KDQpBcHIgMTEgMTY6MDA6NTIgLi4uLi4gc3RhcnRlZCBTVEFSIHJ1bg0KDQpBcHIgMTEgMTY6MDA6NTIgLi4uLi4gbG9hZGluZyBnZW5vbWUNCg0KQXByIDExIDE2OjAyOjM1IC4uLi4uIHByb2Nlc3NpbmcgYW5ub3RhdGlvbnMgR1RGDQoNCkFwciAxMSAxNjowMjozNyAuLi4uLiBpbnNlcnRpbmcganVuY3Rpb25zIGludG8gdGhlIGdlbm9tZSBpbmRpY2VzDQoNCkFwciAxMSAxNjowNToyMyAuLi4uLiBzdGFydGVkIG1hcHBpbmcNCg0KQXByIDExIDE2OjExOjI5IC4uLi4uIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseQ0KDQoNCiMjIyMgJCBscyAtbCAzYWxpZ24vDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE0OTk4MzE5MjQ1IEFwciAxMSAxNjoxMSBBbGlnbmVkLm91dC5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDIxODM4MTQ2MzEgQXByIDExIDE2OjExIEFsaWduZWQudG9UcmFuc2NyaXB0b21lLm91dC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDE4NjMgQXByIDExIDE2OjExIExvZy5maW5hbC5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyOTA5NzAgQXByIDExIDE2OjExIExvZy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA5NTQgQXByIDExIDE2OjExIExvZy5wcm9ncmVzcy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgIDcyMjA5MjMgQXByIDExIDE2OjExIFNKLm91dC50YWINCg0KZHJ3eC0tLS0tLSAyIHVidW50dSB1YnVudHUgICAgICAgIDQwOTYgQXByIDExIDE2OjAyIF9TVEFSZ2Vub21lDQoNCg0KDQojIyMjICQgY2F0IDNhbGlnbi9Mb2cuZmluYWwub3V0IA0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0ZWQgam9iIG9uIHwJQXByIDExIDE2OjAwOjUyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0ZWQgbWFwcGluZyBvbiB8CUFwciAxMSAxNjowNToyMw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmluaXNoZWQgb24gfAlBcHIgMTEgMTY6MTE6MjkNCiAgICAgICBNYXBwaW5nIHNwZWVkLCBNaWxsaW9uIG9mIHJlYWRzIHBlciBob3VyIHwJMzg3LjI2DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGlucHV0IHJlYWRzIHwJMzkzNzA5MzUNCiAgICAgICAgICAgICAgICAgICAgICBBdmVyYWdlIGlucHV0IHJlYWQgbGVuZ3RoIHwJMTAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTklRVUUgUkVBRFM6DQogICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgbWFwcGVkIHJlYWRzIG51bWJlciB8CTMyNzE3OTU4DQogICAgICAgICAgICAgICAgICAgICAgICBVbmlxdWVseSBtYXBwZWQgcmVhZHMgJSB8CTgzLjEwJQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBBdmVyYWdlIG1hcHBlZCBsZW5ndGggfAk5OS4zNQ0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogVG90YWwgfAk3MTAyMzI4DQogICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogQW5ub3RhdGVkIChzamRiKSB8CTY0NTgyMDYNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEdUL0FHIHwJNjk3MTM5MQ0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogR0MvQUcgfAk1NTYzNA0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogQVQvQUMgfAk2OTk5DQogICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogTm9uLWNhbm9uaWNhbCB8CTY4MzA0DQogICAgICAgICAgICAgICAgICAgICAgTWlzbWF0Y2ggcmF0ZSBwZXIgYmFzZSwgJSB8CTAuNDAlDQogICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRpb24gcmF0ZSBwZXIgYmFzZSB8CTAuMDElDQogICAgICAgICAgICAgICAgICAgICAgICBEZWxldGlvbiBhdmVyYWdlIGxlbmd0aCB8CTEuNjENCiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VydGlvbiByYXRlIHBlciBiYXNlIHwJMC4wMSUNCiAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0aW9uIGF2ZXJhZ2UgbGVuZ3RoIHwJMS4zNQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVUxUSS1NQVBQSU5HIFJFQURTOg0KICAgICAgICBOdW1iZXIgb2YgcmVhZHMgbWFwcGVkIHRvIG11bHRpcGxlIGxvY2kgfAkyNDYyMzA5DQogICAgICAgICAgICAgJSBvZiByZWFkcyBtYXBwZWQgdG8gbXVsdGlwbGUgbG9jaSB8CTYuMjUlDQogICAgICAgIE51bWJlciBvZiByZWFkcyBtYXBwZWQgdG8gdG9vIG1hbnkgbG9jaSB8CTUxOTE3DQogICAgICAgICAgICAgJSBvZiByZWFkcyBtYXBwZWQgdG8gdG9vIG1hbnkgbG9jaSB8CTAuMTMlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5NQVBQRUQgUkVBRFM6DQogICAgICAgJSBvZiByZWFkcyB1bm1hcHBlZDogdG9vIG1hbnkgbWlzbWF0Y2hlcyB8CTAuMDAlDQogICAgICAgICAgICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IHRvbyBzaG9ydCB8CTEwLjM4JQ0KICAgICAgICAgICAgICAgICAgICAgJSBvZiByZWFkcyB1bm1hcHBlZDogb3RoZXIgfAkwLjEzJQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENISU1FUklDIFJFQURTOg0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgY2hpbWVyaWMgcmVhZHMgfAkwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBvZiBjaGltZXJpYyByZWFkcyB8CTAuMDAlDQoNCmBgYA0KDQoNCg0KYGBgDQp+L3Jlc3VsdHMvcm5hc2VxL1JuL3N0YXJfcmF0L3RyYW5zY3JpcHRvbWVPdXQkIFNUQVIgLS1ydW5UaHJlYWROIDEyIC0tZ2Vub21lRGlyIH4vZ2Vub21lQW5kSW5kaWNlcy9Sbi9zdGFyLyAtLXNqZGJHVEZmaWxlIH4vZ2Vub21lQW5kSW5kaWNlcy9Sbi9ybjYucmVmR2VuZS5ndGYgLS1zamRiT3ZlcmhhbmcgMTAwIC0tcmVhZEZpbGVzSW4gfi9kYXRhL3JuYXNlcS9Sbi9QTG9TLU9uZS04LWU1OTU4Mi9mMzQ0X3BmY19uaWNvdGluZS9TUlI4NjkwMzJfMS5mYXN0cS5neiB+L2RhdGEvcm5hc2VxL1JuL1BMb1MtT25lLTgtZTU5NTgyL2YzNDRfcGZjX25pY290aW5lL1NSUjg2OTAzMl8yLmZhc3RxLmd6IC0tcmVhZEZpbGVzQ29tbWFuZCB6Y2F0IC0tcXVhbnRNb2RlIFRyYW5zY3JpcHRvbWVTQU0gLS1vdXRGaWxlTmFtZVByZWZpeCA0YWxpZ24vDQoNCmBgYA0KDQpBcHIgMTEgMTY6MjE6MjYgLi4uLi4gc3RhcnRlZCBTVEFSIHJ1bg0KDQpBcHIgMTEgMTY6MjE6MjYgLi4uLi4gbG9hZGluZyBnZW5vbWUNCg0KQXByIDExIDE2OjIzOjA5IC4uLi4uIHByb2Nlc3NpbmcgYW5ub3RhdGlvbnMgR1RGDQoNCkFwciAxMSAxNjoyMzoxMCAuLi4uLiBpbnNlcnRpbmcganVuY3Rpb25zIGludG8gdGhlIGdlbm9tZSBpbmRpY2VzDQoNCkFwciAxMSAxNjoyNToyNCAuLi4uLiBzdGFydGVkIG1hcHBpbmcNCg0KQXByIDExIDE2OjI4OjU4IC4uLi4uIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseQ0KDQoNCg0KDQojIyMjICQgbHMgLWwgNGFsaWduLw0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDEwOTMzMTE2Mzk1IEFwciAxMSAxNjoyOCBBbGlnbmVkLm91dC5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDE2MTc3NzUzMTEgQXByIDExIDE2OjI4IEFsaWduZWQudG9UcmFuc2NyaXB0b21lLm91dC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDE4NjMgQXByIDExIDE2OjI4IExvZy5maW5hbC5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyOTEwMDYgQXByIDExIDE2OjI4IExvZy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA2MDAgQXByIDExIDE2OjI4IExvZy5wcm9ncmVzcy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgIDY3NzgwNzUgQXByIDExIDE2OjI4IFNKLm91dC50YWINCg0KZHJ3eC0tLS0tLSAyIHVidW50dSB1YnVudHUgICAgICAgIDQwOTYgQXByIDExIDE2OjIzIF9TVEFSZ2Vub21lDQoNCg0KDQojIyMjICQgY2F0IDRhbGlnbi9Mb2cuZmluYWwub3V0IA0KDQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRlZCBqb2Igb24gfAlBcHIgMTEgMTY6MjE6MjYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRlZCBtYXBwaW5nIG9uIHwJQXByIDExIDE2OjI1OjI0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaW5pc2hlZCBvbiB8CUFwciAxMSAxNjoyODo1OA0KICAgICAgIE1hcHBpbmcgc3BlZWQsIE1pbGxpb24gb2YgcmVhZHMgcGVyIGhvdXIgfAk0ODYuNjYNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgaW5wdXQgcmVhZHMgfAkyODkyOTQ4NQ0KICAgICAgICAgICAgICAgICAgICAgIEF2ZXJhZ2UgaW5wdXQgcmVhZCBsZW5ndGggfAkxMDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOSVFVRSBSRUFEUzoNCiAgICAgICAgICAgICAgICAgICBVbmlxdWVseSBtYXBwZWQgcmVhZHMgbnVtYmVyIHwJMjM4ODQ4NTANCiAgICAgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWx5IG1hcHBlZCByZWFkcyAlIHwJODIuNTYlDQogICAgICAgICAgICAgICAgICAgICAgICAgIEF2ZXJhZ2UgbWFwcGVkIGxlbmd0aCB8CTk5LjM3DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBUb3RhbCB8CTUzMzc1OTENCiAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBBbm5vdGF0ZWQgKHNqZGIpIHwJNDg0MzY5OA0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogR1QvQUcgfAk1MjM3Mjg0DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBHQy9BRyB8CTQyMzYwDQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBBVC9BQyB8CTUxMjYNCiAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBOb24tY2Fub25pY2FsIHwJNTI4MjENCiAgICAgICAgICAgICAgICAgICAgICBNaXNtYXRjaCByYXRlIHBlciBiYXNlLCAlIHwJMC4zOCUNCiAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGlvbiByYXRlIHBlciBiYXNlIHwJMC4wMSUNCiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0aW9uIGF2ZXJhZ2UgbGVuZ3RoIHwJMS42MQ0KICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0aW9uIHJhdGUgcGVyIGJhc2UgfAkwLjAxJQ0KICAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRpb24gYXZlcmFnZSBsZW5ndGggfAkxLjM1DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VTFRJLU1BUFBJTkcgUkVBRFM6DQogICAgICAgIE51bWJlciBvZiByZWFkcyBtYXBwZWQgdG8gbXVsdGlwbGUgbG9jaSB8CTE3NDUyMTANCiAgICAgICAgICAgICAlIG9mIHJlYWRzIG1hcHBlZCB0byBtdWx0aXBsZSBsb2NpIHwJNi4wMyUNCiAgICAgICAgTnVtYmVyIG9mIHJlYWRzIG1hcHBlZCB0byB0b28gbWFueSBsb2NpIHwJNDE3NTkNCiAgICAgICAgICAgICAlIG9mIHJlYWRzIG1hcHBlZCB0byB0b28gbWFueSBsb2NpIHwJMC4xNCUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTk1BUFBFRCBSRUFEUzoNCiAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiB0b28gbWFueSBtaXNtYXRjaGVzIHwJMC4wMCUNCiAgICAgICAgICAgICAgICAgJSBvZiByZWFkcyB1bm1hcHBlZDogdG9vIHNob3J0IHwJMTEuMTMlDQogICAgICAgICAgICAgICAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiBvdGhlciB8CTAuMTQlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hJTUVSSUMgUkVBRFM6DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBjaGltZXJpYyByZWFkcyB8CTANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG9mIGNoaW1lcmljIHJlYWRzIHwJMC4wMCUNCg0KYGBgDQoNCg0KDQoNCmBgYA0Kfi9yZXN1bHRzL3JuYXNlcS9Sbi9zdGFyX3JhdC90cmFuc2NyaXB0b21lT3V0JCBTVEFSIC0tcnVuVGhyZWFkTiAxMiAtLWdlbm9tZURpciB+L2dlbm9tZUFuZEluZGljZXMvUm4vc3Rhci8gLS1zamRiR1RGZmlsZSB+L2dlbm9tZUFuZEluZGljZXMvUm4vcm42LnJlZkdlbmUuZ3RmIC0tc2pkYk92ZXJoYW5nIDEwMCAtLXJlYWRGaWxlc0luIH4vZGF0YS9ybmFzZXEvUm4vUExvUy1PbmUtOC1lNTk1ODIvZjM0NF9wZmNfbmljb3RpbmUvU1JSODY5MDMzXzEuZmFzdHEuZ3ogfi9kYXRhL3JuYXNlcS9Sbi9QTG9TLU9uZS04LWU1OTU4Mi9mMzQ0X3BmY19uaWNvdGluZS9TUlI4NjkwMzNfMi5mYXN0cS5neiAtLXJlYWRGaWxlc0NvbW1hbmQgemNhdCAtLXF1YW50TW9kZSBUcmFuc2NyaXB0b21lU0FNIC0tb3V0RmlsZU5hbWVQcmVmaXggNWFsaWduLw0KDQpgYGANCg0KQXByIDExIDE2OjMyOjQ0IC4uLi4uIHN0YXJ0ZWQgU1RBUiBydW4NCg0KQXByIDExIDE2OjMyOjQ0IC4uLi4uIGxvYWRpbmcgZ2Vub21lDQoNCkFwciAxMSAxNjozNDoyNiAuLi4uLiBwcm9jZXNzaW5nIGFubm90YXRpb25zIEdURg0KDQpBcHIgMTEgMTY6MzQ6MjggLi4uLi4gaW5zZXJ0aW5nIGp1bmN0aW9ucyBpbnRvIHRoZSBnZW5vbWUgaW5kaWNlcw0KDQpBcHIgMTEgMTY6MzY6NDAgLi4uLi4gc3RhcnRlZCBtYXBwaW5nDQoNCkFwciAxMSAxNjo0MDoyNCAuLi4uLiBmaW5pc2hlZCBzdWNjZXNzZnVsbHkNCg0KDQojIyMjICQgbHMgLWwgNWFsaWduLw0KDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDExMTUyODcxNzE2IEFwciAxMSAxNjo0MCBBbGlnbmVkLm91dC5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDE2NTAzMTUwOTggQXByIDExIDE2OjQwIEFsaWduZWQudG9UcmFuc2NyaXB0b21lLm91dC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDE4NjMgQXByIDExIDE2OjQwIExvZy5maW5hbC5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyOTEwMDYgQXByIDExIDE2OjQwIExvZy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA2MDAgQXByIDExIDE2OjQwIExvZy5wcm9ncmVzcy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgIDY5NDMwMjggQXByIDExIDE2OjQwIFNKLm91dC50YWINCg0KZHJ3eC0tLS0tLSAyIHVidW50dSB1YnVudHUgICAgICAgIDQwOTYgQXByIDExIDE2OjM0IF9TVEFSZ2Vub21lDQoNCg0KDQoNCg0KIyMjIyAkIGNhdCA1YWxpZ24vTG9nLmZpbmFsLm91dCANCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGVkIGpvYiBvbiB8CUFwciAxMSAxNjozMjo0NA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGVkIG1hcHBpbmcgb24gfAlBcHIgMTEgMTY6MzY6NDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmlzaGVkIG9uIHwJQXByIDExIDE2OjQwOjI0DQogICAgICAgTWFwcGluZyBzcGVlZCwgTWlsbGlvbiBvZiByZWFkcyBwZXIgaG91ciB8CTQ4My4wNw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnB1dCByZWFkcyB8CTMwMDU3NDU4DQogICAgICAgICAgICAgICAgICAgICAgQXZlcmFnZSBpbnB1dCByZWFkIGxlbmd0aCB8CTEwMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JUVVFIFJFQURTOg0KICAgICAgICAgICAgICAgICAgIFVuaXF1ZWx5IG1hcHBlZCByZWFkcyBudW1iZXIgfAkyNDI0MjAyNg0KICAgICAgICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgbWFwcGVkIHJlYWRzICUgfAk4MC42NSUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgQXZlcmFnZSBtYXBwZWQgbGVuZ3RoIHwJOTkuMzkNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IFRvdGFsIHwJNTQ2NDMxMA0KICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEFubm90YXRlZCAoc2pkYikgfAk0OTY5ODQ1DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBzcGxpY2VzOiBHVC9BRyB8CTUzNjUwMjMNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEdDL0FHIHwJNDI0ODENCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEFUL0FDIHwJNTE3OA0KICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IE5vbi1jYW5vbmljYWwgfAk1MTYyOA0KICAgICAgICAgICAgICAgICAgICAgIE1pc21hdGNoIHJhdGUgcGVyIGJhc2UsICUgfAkwLjM3JQ0KICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0aW9uIHJhdGUgcGVyIGJhc2UgfAkwLjAxJQ0KICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRpb24gYXZlcmFnZSBsZW5ndGggfAkxLjYwDQogICAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRpb24gcmF0ZSBwZXIgYmFzZSB8CTAuMDAlDQogICAgICAgICAgICAgICAgICAgICAgIEluc2VydGlvbiBhdmVyYWdlIGxlbmd0aCB8CTEuMzYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVVMVEktTUFQUElORyBSRUFEUzoNCiAgICAgICAgTnVtYmVyIG9mIHJlYWRzIG1hcHBlZCB0byBtdWx0aXBsZSBsb2NpIHwJMTgxNjI0NQ0KICAgICAgICAgICAgICUgb2YgcmVhZHMgbWFwcGVkIHRvIG11bHRpcGxlIGxvY2kgfAk2LjA0JQ0KICAgICAgICBOdW1iZXIgb2YgcmVhZHMgbWFwcGVkIHRvIHRvbyBtYW55IGxvY2kgfAk0NDg4Ng0KICAgICAgICAgICAgICUgb2YgcmVhZHMgbWFwcGVkIHRvIHRvbyBtYW55IGxvY2kgfAkwLjE1JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOTUFQUEVEIFJFQURTOg0KICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IHRvbyBtYW55IG1pc21hdGNoZXMgfAkwLjAwJQ0KICAgICAgICAgICAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiB0b28gc2hvcnQgfAkxMy4wMyUNCiAgICAgICAgICAgICAgICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IG90aGVyIHwJMC4xMyUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSElNRVJJQyBSRUFEUzoNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNoaW1lcmljIHJlYWRzIHwJMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgb2YgY2hpbWVyaWMgcmVhZHMgfAkwLjAwJQ0KDQoNCmBgYA0KDQoNCg0KDQoNCmBgYA0Kfi9yZXN1bHRzL3JuYXNlcS9Sbi9zdGFyX3JhdC90cmFuc2NyaXB0b21lT3V0JCBTVEFSIC0tcnVuVGhyZWFkTiAxMiAtLWdlbm9tZURpciB+L2dlbm9tZUFuZEluZGljZXMvUm4vc3Rhci8gLS1zamRiR1RGZmlsZSB+L2dlbm9tZUFuZEluZGljZXMvUm4vcm42LnJlZkdlbmUuZ3RmIC0tc2pkYk92ZXJoYW5nIDEwMCAtLXJlYWRGaWxlc0luIH4vZGF0YS9ybmFzZXEvUm4vUExvUy1PbmUtOC1lNTk1ODIvZjM0NF9wZmNfbmljb3RpbmUvU1JSODY5MDM0XzEuZmFzdHEuZ3ogfi9kYXRhL3JuYXNlcS9Sbi9QTG9TLU9uZS04LWU1OTU4Mi9mMzQ0X3BmY19uaWNvdGluZS9TUlI4NjkwMzRfMi5mYXN0cS5neiAtLXJlYWRGaWxlc0NvbW1hbmQgemNhdCAtLXF1YW50TW9kZSBUcmFuc2NyaXB0b21lU0FNIC0tb3V0RmlsZU5hbWVQcmVmaXggNmFsaWduLw0KDQpgYGANCg0KDQpBcHIgMTEgMTY6NDE6NDYgLi4uLi4gc3RhcnRlZCBTVEFSIHJ1bg0KDQpBcHIgMTEgMTY6NDE6NDYgLi4uLi4gbG9hZGluZyBnZW5vbWUNCg0KQXByIDExIDE2OjQyOjU0IC4uLi4uIHByb2Nlc3NpbmcgYW5ub3RhdGlvbnMgR1RGDQoNCkFwciAxMSAxNjo0Mjo1NSAuLi4uLiBpbnNlcnRpbmcganVuY3Rpb25zIGludG8gdGhlIGdlbm9tZSBpbmRpY2VzDQoNCkFwciAxMSAxNjo0NTowOCAuLi4uLiBzdGFydGVkIG1hcHBpbmcNCg0KQXByIDExIDE2OjQ4OjQ5IC4uLi4uIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseQ0KDQoNCg0KDQoNCiMjIyMgJCBscyAtbCA2YWxpZ24vDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDExNDUxOTE1ODI1IEFwciAxMSAxNjo0OCBBbGlnbmVkLm91dC5zYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDE3MTkxMzU0MjAgQXByIDExIDE2OjQ4IEFsaWduZWQudG9UcmFuc2NyaXB0b21lLm91dC5iYW0NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDE4NjIgQXByIDExIDE2OjQ4IExvZy5maW5hbC5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyOTEwMDYgQXByIDExIDE2OjQ4IExvZy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICA2MDAgQXByIDExIDE2OjQ4IExvZy5wcm9ncmVzcy5vdXQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgIDY4NDA0MzcgQXByIDExIDE2OjQ4IFNKLm91dC50YWINCg0KZHJ3eC0tLS0tLSAyIHVidW50dSB1YnVudHUgICAgICAgIDQwOTYgQXByIDExIDE2OjQyIF9TVEFSZ2Vub21lDQoNCg0KDQoNCiMjIyMgJCBjYXQgNmFsaWduL0xvZy5maW5hbC5vdXQgDQoNCg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0ZWQgam9iIG9uIHwJQXByIDExIDE2OjQxOjQ2DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0ZWQgbWFwcGluZyBvbiB8CUFwciAxMSAxNjo0NTowOA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmluaXNoZWQgb24gfAlBcHIgMTEgMTY6NDg6NDkNCiAgICAgICBNYXBwaW5nIHNwZWVkLCBNaWxsaW9uIG9mIHJlYWRzIHBlciBob3VyIHwJNDg1LjY3DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGlucHV0IHJlYWRzIHwJMjk4MTQ2ODcNCiAgICAgICAgICAgICAgICAgICAgICBBdmVyYWdlIGlucHV0IHJlYWQgbGVuZ3RoIHwJMTAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTklRVUUgUkVBRFM6DQogICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgbWFwcGVkIHJlYWRzIG51bWJlciB8CTI1MDI5NTgyDQogICAgICAgICAgICAgICAgICAgICAgICBVbmlxdWVseSBtYXBwZWQgcmVhZHMgJSB8CTgzLjk1JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBBdmVyYWdlIG1hcHBlZCBsZW5ndGggfAk5OS40MA0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogVG90YWwgfAk1NjY0ODAxDQogICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogQW5ub3RhdGVkIChzamRiKSB8CTUxNTIyMTcNCiAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIHNwbGljZXM6IEdUL0FHIHwJNTU2MDI0Ng0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogR0MvQUcgfAk0NDU4OQ0KICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogQVQvQUMgfAk1NTA0DQogICAgICAgICAgICAgICBOdW1iZXIgb2Ygc3BsaWNlczogTm9uLWNhbm9uaWNhbCB8CTU0NDYyDQogICAgICAgICAgICAgICAgICAgICAgTWlzbWF0Y2ggcmF0ZSBwZXIgYmFzZSwgJSB8CTAuMzglDQogICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRpb24gcmF0ZSBwZXIgYmFzZSB8CTAuMDElDQogICAgICAgICAgICAgICAgICAgICAgICBEZWxldGlvbiBhdmVyYWdlIGxlbmd0aCB8CTEuNjENCiAgICAgICAgICAgICAgICAgICAgICAgIEluc2VydGlvbiByYXRlIHBlciBiYXNlIHwJMC4wMCUNCiAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0aW9uIGF2ZXJhZ2UgbGVuZ3RoIHwJMS4zNg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVUxUSS1NQVBQSU5HIFJFQURTOg0KICAgICAgICBOdW1iZXIgb2YgcmVhZHMgbWFwcGVkIHRvIG11bHRpcGxlIGxvY2kgfAkxODM0NzUzDQogICAgICAgICAgICAgJSBvZiByZWFkcyBtYXBwZWQgdG8gbXVsdGlwbGUgbG9jaSB8CTYuMTUlDQogICAgICAgIE51bWJlciBvZiByZWFkcyBtYXBwZWQgdG8gdG9vIG1hbnkgbG9jaSB8CTQwOTI0DQogICAgICAgICAgICAgJSBvZiByZWFkcyBtYXBwZWQgdG8gdG9vIG1hbnkgbG9jaSB8CTAuMTQlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5NQVBQRUQgUkVBRFM6DQogICAgICAgJSBvZiByZWFkcyB1bm1hcHBlZDogdG9vIG1hbnkgbWlzbWF0Y2hlcyB8CTAuMDAlDQogICAgICAgICAgICAgICAgICUgb2YgcmVhZHMgdW5tYXBwZWQ6IHRvbyBzaG9ydCB8CTkuNjMlDQogICAgICAgICAgICAgICAgICAgICAlIG9mIHJlYWRzIHVubWFwcGVkOiBvdGhlciB8CTAuMTMlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hJTUVSSUMgUkVBRFM6DQogICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBjaGltZXJpYyByZWFkcyB8CTANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG9mIGNoaW1lcmljIHJlYWRzIHwJMC4wMCUNCg0KYGBgDQoNCg0KDQoNCg0KDQojIyA2LiBSU0VNIGFuYWx5c2lzDQoNCg0KIyMjIERvd25sb2FkIHRoZSBkYXRhDQoNCkJBTSBmaWxlcyB3ZXJlIGltcG9ydGVkIHRvIENlbnRPUyBhcyBkaXJlY3RvcmllcyAoMXMsIDJzLCAzcywgNHMsIDVzIGFuZCA2cykgZm9yIFJTRU0gYW5hbHlzaXMuIFRoZSBnZW5vbWUgYW5kIEdURiBmaWxlcyBhcmUgd2VyZSBhbHNvIGltcG9ydGVkICgmIGFsc28gcmVuYW1lZCkuDQoNCg0KIyMjIyAgJCBscyAtbA0KDQoNCmRyd3hyLXhyLXguIDIgYmRhc2ggYmRhc2ggICAgICAgICA0NSBBcHIgMTEgMjA6MTcgMXMNCg0KZHJ3eHIteHIteC4gMiBiZGFzaCBiZGFzaCAgICAgICAgIDQ1IEFwciAxMSAxODoyMSAycw0KDQpkcnd4ci14ci14LiAyIGJkYXNoIGJkYXNoICAgICAgICAgNDUgQXByIDExIDIwOjIwIDNzDQoNCmRyd3hyLXhyLXguIDIgYmRhc2ggYmRhc2ggICAgICAgICA0NSBBcHIgMTEgMjA6MjEgNHMNCg0KZHJ3eHIteHIteC4gMiBiZGFzaCBiZGFzaCAgICAgICAgIDQ1IEFwciAxMSAyMDoyNyA1cw0KDQpkcnd4ci14ci14LiAyIGJkYXNoIGJkYXNoICAgICAgICAgNDUgQXByIDExIDIwOjI3IDZzDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggMjkyNzYwNzMzMyBBcHIgIDkgMTU6MjYgcm42LmZhDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgICA0MDY1NCBBcHIgIDkgMTU6MjYgcm42LmZhLmZhaQ0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgNjE4OTEzNDEgQXByICA5IDE1OjI3IHJuNi5yZWZHZW5lLmd0Zg0KDQoNCg0KIyMjIFByZXBhcmUgUlNFTSByZWZlcmVuY2UgKHdpbGwgdXNlIGJvdGggdGhlIGZhIGFuZCBndGYgZmlsZSkNCg0KDQojIyMjIG1rZGlyIHJzZW1fcmVmDQoNCiMjIyMgY2QgcnNlbV9yZWYNCg0KIyMjIyByc2VtX3JlZiQgcnNlbS1wcmVwYXJlLXJlZmVyZW5jZSAtLWd0ZiBybjYucmVmR2VuZS5ndGYgcm42LmZhIC4vcnNlbVJlZg0KDQoNCmBgYA0KDQpyc2VtLWV4dHJhY3QtcmVmZXJlbmNlLXRyYW5zY3JpcHRzIC4vcnNlbVJlZiAwIHJuNi5yZWZHZW5lLmd0ZiBOb25lIDAgcm42LmZhDQoNClBhcnNlZCAyMDAwMDAgbGluZXMNCg0KUGFyc2luZyBndGYgRmlsZSBpcyBkb25lIQ0KDQpybjYuZmEgaXMgcHJvY2Vzc2VkIQ0KDQoxODkzOSB0cmFuc2NyaXB0cyBhcmUgZXh0cmFjdGVkIGFuZCAwIHRyYW5zY3JpcHRzIGFyZSBvbWl0dGVkLg0KDQpFeHRyYWN0aW5nIHNlcXVlbmNlcyBpcyBkb25lIQ0KDQpHcm91cCBGaWxlIGlzIGdlbmVyYXRlZCENCg0KVHJhbnNjcmlwdCBJbmZvcm1hdGlvbiBGaWxlIGlzIGdlbmVyYXRlZCENCg0KQ2hyb21vc29tZSBMaXN0IEZpbGUgaXMgZ2VuZXJhdGVkIQ0KDQpFeHRyYWN0ZWQgU2VxdWVuY2VzIEZpbGUgaXMgZ2VuZXJhdGVkIQ0KDQpyc2VtLXByZXJlZiAuL3JzZW1SZWYudHJhbnNjcmlwdHMuZmEgMSAuL3JzZW1SZWYNCg0KUmVmcy5tYWtlUmVmcyBmaW5pc2hlZCENCg0KUmVmcy5zYXZlUmVmcyBmaW5pc2hlZCENCg0KLi9yc2VtUmVmLmlkeC5mYSBpcyBnZW5lcmF0ZWQhDQoNCi4vcnNlbVJlZi5uMmcuaWR4LmZhIGlzIGdlbmVyYXRlZCENCg0KYGBgDQoNCg0KIyMjIyBzdGFyLXRyYW5zY3JpcHRvbWVvdXQkIGxzIC1sIHJzZW1fcmVmLw0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAxMjkzIEFwciAxMSAyMTowNiByc2VtUmVmLmNocmxpc3QNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICA5MzcxOCBBcHIgMTEgMjE6MDYgcnNlbVJlZi5ncnANCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA0MzAwNzI4OSBBcHIgMTEgMjE6MDYgcnNlbVJlZi5pZHguZmENCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA0MzAwNzI4OSBBcHIgMTEgMjE6MDYgcnNlbVJlZi5uMmcuaWR4LmZhDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggNDU4NTg0MTIgQXByIDExIDIxOjA2IHJzZW1SZWYuc2VxDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggIDYwNDExMDggQXByIDExIDIxOjA2IHJzZW1SZWYudGkNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA0MzAwNzI4OSBBcHIgMTEgMjE6MDYgcnNlbVJlZi50cmFuc2NyaXB0cy5mYQ0KDQoNCg0KIyMjIFJTRU0tY2FsY3VsYXRlLWV4cHJlc3Npb24NCg0KDQojIyMjIHN0YXItdHJhbnNjcmlwdG9tZW91dCQgcnNlbS1jYWxjdWxhdGUtZXhwcmVzc2lvbiAtLWJhbSAtLW5vLWJhbS1vdXRwdXQgLXAgMTIgLS1wYWlyZWQtZW5kIC0tZm9yd2FyZC1wcm9iIDAgMXMvQWxpZ25lZC50b1RyYW5zY3JpcHRvbWUub3V0LmJhbSByc2VtX3JlZi9yc2VtUmVmIDFvdXQvID4mIHJzZW0xLmxvZw0KDQoNCiMjIyMgUmVwZWF0IGl0IGZvciB0aGUgcmVzdCBvZiB0aGUgYmFtIGZpbGVzDQoNCg0KDQoNCg0KIyMjIyAgIHN0YXItdHJhbnNjcmlwdG9tZW91dCQgbHMgLWwNCg0KZHJ3eHJ3eHIteC4gMyBiZGFzaCBiZGFzaCAgICAgICAgIDY2IEFwciAxMSAyMjo0MSAxb3V0DQoNCmRyd3hyd3hyLXguIDMgYmRhc2ggYmRhc2ggICAgICAgICA2NiBBcHIgMTEgMjM6NTYgMm91dA0KDQpkcnd4cnd4ci14LiAzIGJkYXNoIGJkYXNoICAgICAgICAgNjYgQXByIDEyIDAzOjQ4IDNvdXQNCg0KZHJ3eHJ3eHIteC4gMyBiZGFzaCBiZGFzaCAgICAgICAgIDY2IEFwciAxMiAwMzoxMyA0b3V0DQoNCmRyd3hyd3hyLXguIDMgYmRhc2ggYmRhc2ggICAgICAgICA2NiBBcHIgMTIgMDI6NDggNW91dA0KDQpkcnd4cnd4ci14LiAzIGJkYXNoIGJkYXNoICAgICAgICAgNjYgQXByIDEyIDAxOjU0IDZvdXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMzA5MTQxIEFwciAxMSAyMjo0MSByc2VtMS5sb2cNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMzUzODU1IEFwciAxMSAyMzo1NiByc2VtMi5sb2cNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMjU1NTg4IEFwciAxMiAwMzo0OCByc2VtMy5sb2cNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMzI2NjYyIEFwciAxMiAwMzoxMyByc2VtNC5sb2cNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMzY2NDcyIEFwciAxMiAwMjo0OCByc2VtNS5sb2cNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMjk0NDAyIEFwciAxMiAwMTo1NCByc2VtNi5sb2cNCg0KZHJ3eHJ3eHIteC4gMiBiZGFzaCBiZGFzaCAgICAgICAgMTYzIEFwciAxMSAyMToyMCByc2VtX3JlZg0KDQoNCg0KDQojIyA3LiBlZGdlUiAoRW1waXJpY2FsIEFuYWx5c2lzIG9mIERpZ2l0YWwgR2VuZSBFeHByZXNzaW9uKSBhbmFseXNpcyBvZiBpc29mb3Jtcw0KDQoNCiMjIyBHZW5lcmF0ZSBhIG1hdHJpeCBmaWxlIG9mIHRoZSBpc29mb3JtcyBmb3IgYW5hbHlzaXMgdXNpbmcgZWRnZVIgbWV0aG9kDQoNCg0KYGBgDQpzdGFyLXRyYW5zY3JpcHRvbWVvdXQkIGFidW5kYW5jZV9lc3RpbWF0ZXNfdG9fbWF0cml4LnBsIA0KDQotLWVzdF9tZXRob2QgUlNFTSANCg0KDQoxb3V0Ly5pc29mb3Jtcy5yZXN1bHRzIA0KMm91dC8uaXNvZm9ybXMucmVzdWx0cyANCjNvdXQvLmlzb2Zvcm1zLnJlc3VsdHMgDQo0b3V0Ly5pc29mb3Jtcy5yZXN1bHRzIA0KNW91dC8uaXNvZm9ybXMucmVzdWx0cyANCjZvdXQvLmlzb2Zvcm1zLnJlc3VsdHMgDQoNCi0tZ2VuZV90cmFuc19tYXAgbm9uZSANCg0KLS1uYW1lX3NhbXBsZV9ieV9iYXNlZGlyIA0KDQotLW91dF9wcmVmaXggaXNvZm9ybXNfZ2VuZV90cmFuc19tYXBfbm9uZS9pc29mb3Jtcw0KDQpgYGANCg0KDQotcmVhZGluZyBmaWxlOiAxb3V0Ly5pc29mb3Jtcy5yZXN1bHRzDQoNCi1yZWFkaW5nIGZpbGU6IDJvdXQvLmlzb2Zvcm1zLnJlc3VsdHMNCg0KLXJlYWRpbmcgZmlsZTogM291dC8uaXNvZm9ybXMucmVzdWx0cw0KDQotcmVhZGluZyBmaWxlOiA0b3V0Ly5pc29mb3Jtcy5yZXN1bHRzDQoNCi1yZWFkaW5nIGZpbGU6IDVvdXQvLmlzb2Zvcm1zLnJlc3VsdHMNCg0KLXJlYWRpbmcgZmlsZTogNm91dC8uaXNvZm9ybXMucmVzdWx0cw0KDQoNCiogT3V0cHV0dGluZyBjb21iaW5lZCBtYXRyaXguDQoNCi9ob21lL2JkYXNoL21pbmljb25kYTIvb3B0L3RyaW5pdHktMi42LjYvdXRpbC9zdXBwb3J0X3NjcmlwdHMvcnVuX1RNTV9zY2FsZV9tYXRyaXgucGwgDQoNCi0tbWF0cml4IGlzb2Zvcm1zX2dlbmVfdHJhbnNfbWFwX25vbmUvaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0gPg0KDQppc29mb3Jtc19nZW5lX3RyYW5zX21hcF9ub25lL2lzb2Zvcm1zLmlzb2Zvcm0uVE1NLkVYUFIubWF0cml4DQoNCg0KDQpDTUQ6IFIgLS1uby1zYXZlIC0tbm8tcmVzdG9yZSAtLW5vLXNpdGUtZmlsZSAtLW5vLWluaXQtZmlsZSAtcSA8DQoNCmlzb2Zvcm1zX2dlbmVfdHJhbnNfbWFwX25vbmUvaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0ucnVuVE1NLlIgMT4mMiANCg0KDQpgYGANCj4gbGlicmFyeShlZGdlUikNCg0KTG9hZGluZyByZXF1aXJlZCBwYWNrYWdlOiBsaW1tYQ0KDQo+IA0KDQo+IHJuYXNlcU1hdHJpeCA9IHJlYWQudGFibGUoImlzb2Zvcm1zX2dlbmVfdHJhbnNfbWFwX25vbmUvaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0iLCBoZWFkZXI9VCwgcm93Lm5hbWVzPTEsIGNvbT0nJywgY2hlY2submFtZXM9RikNCg0KPiBybmFzZXFNYXRyaXggPSBhcy5tYXRyaXgocm5hc2VxTWF0cml4KQ0KDQo+IHJuYXNlcU1hdHJpeCA9IHJvdW5kKHJuYXNlcU1hdHJpeCkNCg0KPiBleHBfc3R1ZHkgPSBER0VMaXN0KGNvdW50cz1ybmFzZXFNYXRyaXgsIGdyb3VwPWZhY3Rvcihjb2xuYW1lcyhybmFzZXFNYXRyaXgpKSkNCg0KPiBleHBfc3R1ZHkgPSBjYWxjTm9ybUZhY3RvcnMoZXhwX3N0dWR5KQ0KDQo+IGV4cF9zdHVkeSRzYW1wbGVzJGVmZi5saWIuc2l6ZSA9IGV4cF9zdHVkeSRzYW1wbGVzJGxpYi5zaXplICogZXhwX3N0dWR5JHNhbXBsZXMkbm9ybS5mYWN0b3JzDQoNCj4gd3JpdGUudGFibGUoZXhwX3N0dWR5JHNhbXBsZXMsIGZpbGU9Imlzb2Zvcm1zX2dlbmVfdHJhbnNfbWFwX25vbmUvaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0uVE1NX2luZm8udHh0IiwgcXVvdGU9Riwgc2VwPSJcdCIsIHJvdy5uYW1lcz1GKQ0KDQpgYGANCg0KDQojIyMjIHN0YXItdHJhbnNjcmlwdG9tZW91dCQgbHMgLWwgaXNvZm9ybXNfZ2VuZV90cmFuc19tYXBfbm9uZS8NCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA5MzQ5MTcgQXByIDEyIDEyOjEyIGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDk4MTg1NCBBcHIgMTIgMTI6MTIgaXNvZm9ybXMuaXNvZm9ybS5UTU0uRVhQUi5tYXRyaXgNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCA3NzUyODggQXByIDEyIDEyOjEyIGlzb2Zvcm1zLmlzb2Zvcm0uVFBNLm5vdF9jcm9zc19ub3JtDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNTkwIEFwciAxMiAxMjoxMiBpc29mb3Jtcy5pc29mb3JtLlRQTS5ub3RfY3Jvc3Nfbm9ybS5ydW5UTU0uUg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDMyMCBBcHIgMTIgMTI6MTIgaXNvZm9ybXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0uVE1NX2luZm8udHh0DQoNCg0KDQoNCg0KDQojIyMgUnVuIGRpZmZlcmVudGlhbCBhbmFseXNpcyAoREUpIGFuYWx5c2lzIHVzaW5nIG1ldGhvZCBlZGdlUjogUHJvZHVjZXMgTUEgcGxvdCBhbmQgdm9sY2FubyBwbG90DQoNCk5vdGU6IEFuYWx5c2lzIHdpdGggYmlvbG9naWNhbCB0cmlwbGljYXRlcyB3aXRoIHR3byBjb25kaXRpb25zIChjb25kaXRpb24gQT1zYWxpbmUgdHJlYXRtZW50IGFuZCBjb25kaXRpb24gQj1uaWNvdGluZSB0cmVhdG1lbnQpDQoNCkEgZmlsZSB3aXRoIHRoZSBuYW1lICJzYW1wbGVzX2Rlc2NyaWJlZC50eHQiIHdpbGwgYmUgbmVlZGVkIGZvciB0aGUgYW5hbHlzaXMuIEl0cyBjb250ZW50cyBhcmUgYXMgZm9sbG93czoNCg0KYGBgDQokIGNhdCBzYW1wbGVzX2Rlc2NyaWJlZC50eHQgDQoNCmNvbmRpdGlvbkEgICAxb3V0DQpjb25kaXRpb25BICAgMm91dA0KY29uZGl0aW9uQSAgIDNvdXQNCg0KDQpjb25kaXRpb25CICAgNG91dA0KY29uZGl0aW9uQiAgIDVvdXQNCmNvbmRpdGlvbkIgICA2b3V0DQoNCmBgYA0KDQoNCmBgYA0Kc3Rhci10cmFuc2NyaXB0b21lb3V0XSQgcnVuX0RFX2FuYWx5c2lzLnBsIA0KDQotLW1hdHJpeCBpc29mb3Jtc19nZW5lX3RyYW5zX21hcF9ub25lL2lzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeCANCg0KLS1vdXRwdXQgaXNvZm9ybXNfREVfMy8gDQoNCi0tc2FtcGxlc19maWxlIHNhbXBsZXNfZGVzY3JpYmVkLnR4dCANCg0KLS1tZXRob2QgZWRnZVINCg0KYGBgDQoNCkdvdCA2IHNhbXBsZXMsIGFuZCBnb3Q6IDcgZGF0YSBmaWVsZHMuDQoNCkhlYWRlcjogMW91dAkyb3V0CTNvdXQJNG91dAk1b3V0CTZvdXQNCg0KTmV4dDogTk1fMDIxNjY2CTEzLjAwCTcuMDAJNi4wMAkxLjAwCTIuMDAJNC4wMA0KDQoNCg0KJFZBUjEgPSANCg0KICAgICAgICB7DQoNCiAgICAgICAgICAnMm91dCcgPT4gMiwNCiAgICAgICAgICANCiAgICAgICAgICAnMW91dCcgPT4gMSwNCiAgICAgICAgICANCiAgICAgICAgICAnNG91dCcgPT4gNCwNCiAgICAgICAgICANCiAgICAgICAgICAnNW91dCcgPT4gNSwNCiAgICAgICAgICANCiAgICAgICAgICAnM291dCcgPT4gMywNCiAgICAgICAgICANCiAgICAgICAgICAnNm91dCcgPT4gNg0KICAgICAgICAgIA0KICAgICAgICB9Ow0KICAgICAgICANCg0KJFZBUjEgPSANCg0KICAgICAgICB7DQogICAgICAgICAgDQogICAgICAgICAgJ2NvbmRpdGlvbkInID0+IFsNCiAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNG91dCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzVvdXQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc2b3V0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgJ2NvbmRpdGlvbkEnID0+IFsNCiAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMW91dCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzJvdXQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICczb3V0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBdDQogICAgICAgIH07DQogICAgICAgIA0KDQpDb250cmFzdHMgdG8gcGVyZm9ybSBhcmU6ICRWQVIxID0gDQoNCiAgICAgICAgWw0KDQogICAgICAgICAgWw0KICAgICAgICAgIA0KICAgICAgICAgICAgJ2NvbmRpdGlvbkEnLA0KICAgICAgICAgICAgDQogICAgICAgICAgICAnY29uZGl0aW9uQicNCiAgICAgICAgICAgIA0KICAgICAgICAgIF0NCiAgICAgICAgICANCiAgICAgICAgXTsNCiAgICAgICAgDQpDTUQ6IFIgLS1uby1zYXZlIC0tbm8tcmVzdG9yZSAtLW5vLXNpdGUtZmlsZSAtLW5vLWluaXQtZmlsZSAtcSA8IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuY29uZGl0aW9uQS52cy5jb25kaXRpb25CLkVkZ2VSLlJzY3JpcHQNCg0KDQpgYGANCj4gbGlicmFyeShlZGdlUikNCg0KTG9hZGluZyByZXF1aXJlZCBwYWNrYWdlOiBsaW1tYQ0KDQo+IA0KPiBkYXRhID0gcmVhZC50YWJsZSgiL2hvbWUvYmRhc2gvRGVza3RvcC9zdGFyLXRyYW5zY3JpcHRvbWVvdXQvaXNvZm9ybXNfZ2VuZV90cmFuc19tYXBfbm9uZS9pc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXgiLCBoZWFkZXI9VCwgcm93Lm5hbWVzPTEsIGNvbT0nJykNCg0KPiBjb2xfb3JkZXJpbmcgPSBjKDEsMiwzLDQsNSw2KQ0KDQo+IHJuYXNlcU1hdHJpeCA9IGRhdGFbLGNvbF9vcmRlcmluZ10NCg0KPiBybmFzZXFNYXRyaXggPSByb3VuZChybmFzZXFNYXRyaXgpDQoNCj4gcm5hc2VxTWF0cml4ID0gcm5hc2VxTWF0cml4W3Jvd1N1bXMoY3BtKHJuYXNlcU1hdHJpeCkgPiAxKSA+PSAyLF0NCg0KPiBjb25kaXRpb25zID0gZmFjdG9yKGMocmVwKCJjb25kaXRpb25BIiwgMyksIHJlcCgiY29uZGl0aW9uQiIsIDMpKSkNCj4gDQo+IGV4cF9zdHVkeSA9IERHRUxpc3QoY291bnRzPXJuYXNlcU1hdHJpeCwgZ3JvdXA9Y29uZGl0aW9ucykNCg0KPiBleHBfc3R1ZHkgPSBjYWxjTm9ybUZhY3RvcnMoZXhwX3N0dWR5KQ0KDQo+IGV4cF9zdHVkeSA9IGVzdGltYXRlQ29tbW9uRGlzcChleHBfc3R1ZHkpDQoNCj4gZXhwX3N0dWR5ID0gZXN0aW1hdGVUYWd3aXNlRGlzcChleHBfc3R1ZHkpDQoNCj4gZXQgPSBleGFjdFRlc3QoZXhwX3N0dWR5LCBwYWlyPWMoImNvbmRpdGlvbkEiLCAiY29uZGl0aW9uQiIpKQ0KDQo+IHRUYWdzID0gdG9wVGFncyhldCxuPU5VTEwpDQoNCj4gcmVzdWx0X3RhYmxlID0gdFRhZ3MkdGFibGUNCg0KPiByZXN1bHRfdGFibGUgPSBkYXRhLmZyYW1lKHNhbXBsZUE9ImNvbmRpdGlvbkEiLCBzYW1wbGVCPSJjb25kaXRpb25CIiwgcmVzdWx0X3RhYmxlKQ0KDQo+IHJlc3VsdF90YWJsZSRsb2dGQyA9IC0xICogcmVzdWx0X3RhYmxlJGxvZ0ZDDQoNCj4gd3JpdGUudGFibGUocmVzdWx0X3RhYmxlLCBmaWxlPSdpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMnLCBzZXA9JwknLCBxdW90ZT1GLCByb3cubmFtZXM9VCkNCg0KPiB3cml0ZS50YWJsZShybmFzZXFNYXRyaXgsIGZpbGU9J2lzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuZWRnZVIuY291bnRfbWF0cml4Jywgc2VwPScJJywgcXVvdGU9Riwgcm93Lm5hbWVzPVQpDQoNCj4gc291cmNlKCIvaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNi42L0FuYWx5c2lzL0RpZmZlcmVudGlhbEV4cHJlc3Npb24vUi9ybmFzZXFfcGxvdF9mdW5jcy5SIikNCg0KPiBwZGYoImlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuZWRnZVIuREVfcmVzdWx0cy5NQV9uX1ZvbGNhbm8ucGRmIikNCg0KPiBwbG90X01BX2FuZF9Wb2xjYW5vKHJvd25hbWVzKHJlc3VsdF90YWJsZSksIHJlc3VsdF90YWJsZSRsb2dDUE0sIHJlc3VsdF90YWJsZSRsb2dGQywgcmVzdWx0X3RhYmxlJEZEUikNCg0KPiBkZXYub2ZmKCkNCg0KbnVsbCBkZXZpY2UgDQogICAgICAgICAgMSANCiAgICAgICAgICANCj4gDQoNCmBgYA0KDQoNCiMjIyMgc3Rhci10cmFuc2NyaXB0b21lb3V0XSQgbHMgLWwgaXNvZm9ybXNfREVfMy8NCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAxNDI1IEFwciAxMyAwMjoyNiBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmNvbmRpdGlvbkEudnMuY29uZGl0aW9uQi5FZGdlUi5Sc2NyaXB0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggIDQ0Nzk3NCBBcHIgMTMgMDI6MjcgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5jb3VudF9tYXRyaXgNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAxMTU2Mjg3IEFwciAxMyAwMjoyNyBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgMTE4MDY1IEFwciAxMyAwMjoyNyBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMuTUFfbl9Wb2xjYW5vLnBkZg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICA5NTkgQXByIDEzIDAyOjI5IGlzb2Zvcm1zLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuY29uZGl0aW9uQS1VUC5zdWJzZXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgNTEzIEFwciAxMyAwMjoyOSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMuUDAuMDAxX0MyLmNvbmRpdGlvbkItVVAuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgMTQwMiBBcHIgMTMgMDI6MjkgaXNvZm9ybXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5ERS5zdWJzZXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgIDk2IEFwciAxMyAwMjoyOSBpc29mb3Jtcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMuc2FtcGxlcw0KDQoNCiFbREVfaXNvZm9ybXMuTUFfcGxvdF0oaXNvZm9ybXNfREVfMy9jb25kQV92c19jb25kQl9NQXBsb3QuanBnKQ0KDQoNCg0KIVtERV9pc29mb3Jtcy52b2xjYW5vX3Bsb3RdKGlzb2Zvcm1zX0RFXzMvY29uZEFfdnNfY29uZEJfdm9sY2Fub3Bsb3QuanBnKQ0KDQoNCg0KDQoNCiMjIyMgc3Rhci10cmFuc2NyaXB0b21lb3V0JCBjZCBpc29mb3Jtc19ERV8zLw0KDQoNCg0KDQoNCg0KDQojIyMgQW5hbHl6ZSBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbjogUHJvZHVjZXMgaGVhdG1hcA0KDQoNCg0KDQpgYGANCmlzb2Zvcm1zX0RFXzMkIGFuYWx5emVfZGlmZl9leHByLnBsIA0KDQotLW1hdHJpeCAuLi9pc29mb3Jtc19nZW5lX3RyYW5zX21hcF9ub25lL2lzb2Zvcm1zLmlzb2Zvcm0uVE1NLkVYUFIubWF0cml4IA0KDQotLXNhbXBsZXMgLi4vc2FtcGxlc19kZXNjcmliZWQudHh0IA0KDQotLW91dHB1dCBERV9pc29mb3Jtc18zDQoNCmBgYA0KDQoNCioqRm91bmQgOSBmZWF0dXJlcyBhcyBkaWZmZXJlbnRpYWxseSBleHByZXNzZWQuKioNCg0KDQoNCkNNRDogDQoNCi9ob21lL2JkYXNoL21pbmljb25kYTIvb3B0L3RyaW5pdHktMi42LjYvQW5hbHlzaXMvRGlmZmVyZW50aWFsRXhwcmVzc2lvbi9QdFIgDQoNCi1tIERFX2lzb2Zvcm1zXzMubWF0cml4IA0KDQotLWxvZzIgDQoNCi0taGVhdG1hcCANCg0KLS1taW5fY29sU3VtcyAwIA0KDQotLW1pbl9yb3dTdW1zIDAgDQoNCi0tZ2VuZV9kaXN0IGV1Y2xpZGVhbiANCg0KLS1zYW1wbGVfZGlzdCBldWNsaWRlYW4gDQoNCi0tc2FtcGxlX2Nvcl9tYXRyaXggDQoNCi0tY2VudGVyX3Jvd3MgDQoNCi0tc2F2ZSAgDQoNCi1zIC4uL3NhbXBsZXNfZGVzY3JpYmVkLnR4dA0KDQoNCg0KQ01EOiANCg0KUiANCg0KLS1uby1zYXZlIA0KDQotLW5vLXJlc3RvcmUgDQoNCi0tbm8tc2l0ZS1maWxlIA0KDQotLW5vLWluaXQtZmlsZSANCg0KLXEgPCBERV9pc29mb3Jtc18zLm1hdHJpeC5SDQoNCg0KYGBgDQo+IGxpYnJhcnkoY2x1c3RlcikNCg0KPiBsaWJyYXJ5KEJpb2Jhc2UpDQoNCmBgYA0KDQpMb2FkaW5nIHJlcXVpcmVkIHBhY2thZ2U6IEJpb2NHZW5lcmljcw0KDQpMb2FkaW5nIHJlcXVpcmVkIHBhY2thZ2U6IHBhcmFsbGVsDQoNCkF0dGFjaGluZyBwYWNrYWdlOiDigJhCaW9jR2VuZXJpY3PigJkNCg0KVGhlIGZvbGxvd2luZyBvYmplY3RzIGFyZSBtYXNrZWQgZnJvbSDigJhwYWNrYWdlOnBhcmFsbGVs4oCZOg0KDQogICAgY2x1c3RlckFwcGx5LCBjbHVzdGVyQXBwbHlMQiwgY2x1c3RlckNhbGwsIGNsdXN0ZXJFdmFsUSwNCiAgICBjbHVzdGVyRXhwb3J0LCBjbHVzdGVyTWFwLCBwYXJBcHBseSwgcGFyQ2FwcGx5LCBwYXJMYXBwbHksDQogICAgcGFyTGFwcGx5TEIsIHBhclJhcHBseSwgcGFyU2FwcGx5LCBwYXJTYXBwbHlMQg0KDQpUaGUgZm9sbG93aW5nIG9iamVjdHMgYXJlIG1hc2tlZCBmcm9tIOKAmHBhY2thZ2U6c3RhdHPigJk6DQoNCiAgICBJUVIsIG1hZCwgc2QsIHZhciwgeHRhYnMNCg0KVGhlIGZvbGxvd2luZyBvYmplY3RzIGFyZSBtYXNrZWQgZnJvbSDigJhwYWNrYWdlOmJhc2XigJk6DQoNCiAgICBhbnlEdXBsaWNhdGVkLCBhcHBlbmQsIGFzLmRhdGEuZnJhbWUsIGJhc2VuYW1lLCBjYmluZCwgY29sTWVhbnMsDQogICAgY29sbmFtZXMsIGNvbFN1bXMsIGRpcm5hbWUsIGRvLmNhbGwsIGR1cGxpY2F0ZWQsIGV2YWwsIGV2YWxxLA0KICAgIEZpbHRlciwgRmluZCwgZ2V0LCBncmVwLCBncmVwbCwgaW50ZXJzZWN0LCBpcy51bnNvcnRlZCwgbGFwcGx5LA0KICAgIGxlbmd0aHMsIE1hcCwgbWFwcGx5LCBtYXRjaCwgbWdldCwgb3JkZXIsIHBhc3RlLCBwbWF4LCBwbWF4LmludCwNCiAgICBwbWluLCBwbWluLmludCwgUG9zaXRpb24sIHJhbmssIHJiaW5kLCBSZWR1Y2UsIHJvd01lYW5zLCByb3duYW1lcywNCiAgICByb3dTdW1zLCBzYXBwbHksIHNldGRpZmYsIHNvcnQsIHRhYmxlLCB0YXBwbHksIHVuaW9uLCB1bmlxdWUsDQogICAgdW5zcGxpdCwgd2hpY2gsIHdoaWNoLm1heCwgd2hpY2gubWluDQoNCldlbGNvbWUgdG8gQmlvY29uZHVjdG9yDQoNCiAgICBWaWduZXR0ZXMgY29udGFpbiBpbnRyb2R1Y3RvcnkgbWF0ZXJpYWw7IHZpZXcgd2l0aA0KICAgICdicm93c2VWaWduZXR0ZXMoKScuIFRvIGNpdGUgQmlvY29uZHVjdG9yLCBzZWUNCiAgICAnY2l0YXRpb24oIkJpb2Jhc2UiKScsIGFuZCBmb3IgcGFja2FnZXMgJ2NpdGF0aW9uKCJwa2duYW1lIiknLg0KICAgIA0KYGBgDQo+IGxpYnJhcnkocXZhbHVlKQ0KDQo+IGxpYnJhcnkoZmFzdGNsdXN0ZXIpDQoNCmBgYA0KDQoNCkF0dGFjaGluZyBwYWNrYWdlOiDigJhmYXN0Y2x1c3RlcuKAmQ0KDQpUaGUgZm9sbG93aW5nIG9iamVjdCBpcyBtYXNrZWQgZnJvbSDigJhwYWNrYWdlOnN0YXRz4oCZOg0KDQogICAgaGNsdXN0DQogICAgDQogICAgDQpgYGANCj4gb3B0aW9ucyhzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpDQoNCj4gTk9fUkVVU0UgPSBGDQoNCj4gDQoNCj4gIyB0cnkgdG8gcmV1c2UgZWFybGllci1sb2FkZWQgZGF0YSBpZiBwb3NzaWJsZQ0KDQo+IGlmIChmaWxlLmV4aXN0cygiREVfaXNvZm9ybXNfMy5tYXRyaXguUkRhdGEiKSAmJiAhIE5PX1JFVVNFKSB7DQorICAgICBwcmludCgnUkVTVE9SSU5HIERBVEEgRlJPTSBFQVJMSUVSIEFOQUxZU0lTJykNCisgICAgIGxvYWQoIkRFX2lzb2Zvcm1zXzMubWF0cml4LlJEYXRhIikNCisgfSBlbHNlIHsNCisgICAgIHByaW50KCdSZWFkaW5nIG1hdHJpeCBmaWxlLicpDQorICAgICBwcmltYXJ5X2RhdGEgPSByZWFkLnRhYmxlKCJERV9pc29mb3Jtc18zLm1hdHJpeCIsIGhlYWRlcj1ULCBjb209JycsIHJvdy5uYW1lcz0xLCBjaGVjay5uYW1lcz1GKQ0KKyAgICAgcHJpbWFyeV9kYXRhID0gYXMubWF0cml4KHByaW1hcnlfZGF0YSkNCisgfQ0KDQpbMV0gIlJlYWRpbmcgbWF0cml4IGZpbGUuIg0KDQo+IHNvdXJjZSgiL2hvbWUvYmRhc2gvbWluaWNvbmRhMi9vcHQvdHJpbml0eS0yLjYuNi9BbmFseXNpcy9EaWZmZXJlbnRpYWxFeHByZXNzaW9uL1IvaGVhdG1hcC4zLlIiKQ0KDQo+IHNvdXJjZSgiL2hvbWUvYmRhc2gvbWluaWNvbmRhMi9vcHQvdHJpbml0eS0yLjYuNi9BbmFseXNpcy9EaWZmZXJlbnRpYWxFeHByZXNzaW9uL1IvbWlzY19ybmFzZXFfZnVuY3MuUiIpDQoNCj4gc291cmNlKCIvaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNi42L0FuYWx5c2lzL0RpZmZlcmVudGlhbEV4cHJlc3Npb24vUi9wYWlyczMuUiIpDQoNCj4gc291cmNlKCIvaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNi42L0FuYWx5c2lzL0RpZmZlcmVudGlhbEV4cHJlc3Npb24vUi92aW9wbG90Mi5SIikNCg0KPiBkYXRhID0gcHJpbWFyeV9kYXRhDQoNCj4gbXloZWF0Y29sID0gY29sb3JwYW5lbCg3NSwgJ3B1cnBsZScsJ2JsYWNrJywneWVsbG93JykNCg0KPiBzYW1wbGVzX2RhdGEgPSByZWFkLnRhYmxlKCIuLi9zYW1wbGVzX2Rlc2NyaWJlZC50eHQiLCBoZWFkZXI9RiwgY2hlY2submFtZXM9RiwgZmlsbD1UKQ0KDQo+IHNhbXBsZXNfZGF0YSA9IHNhbXBsZXNfZGF0YVtzYW1wbGVzX2RhdGFbLDJdICE9ICcnLF0NCg0KPiBjb2xuYW1lcyhzYW1wbGVzX2RhdGEpID0gYygnc2FtcGxlX25hbWUnLCAncmVwbGljYXRlX25hbWUnKQ0KDQo+IHNhbXBsZV90eXBlcyA9IGFzLmNoYXJhY3Rlcih1bmlxdWUoc2FtcGxlc19kYXRhWywxXSkpDQoNCj4gcmVwX25hbWVzID0gYXMuY2hhcmFjdGVyKHNhbXBsZXNfZGF0YVssMl0pDQoNCj4gZGF0YSA9IGRhdGFbLCBjb2xuYW1lcyhkYXRhKSAlaW4lIHJlcF9uYW1lcywgZHJvcD1GIF0NCg0KPiBuc2FtcGxlcyA9IGxlbmd0aChzYW1wbGVfdHlwZXMpDQoNCj4gc2FtcGxlX2NvbG9ycyA9IHJhaW5ib3cobnNhbXBsZXMpDQoNCj4gbmFtZXMoc2FtcGxlX2NvbG9ycykgPSBzYW1wbGVfdHlwZXMNCg0KPiBzYW1wbGVfdHlwZV9saXN0ID0gbGlzdCgpDQoNCj4gZm9yIChpIGluIDE6bnNhbXBsZXMpIHsNCisgICAgIHNhbXBsZXNfd2FudCA9IHNhbXBsZXNfZGF0YVtzYW1wbGVzX2RhdGFbLDFdPT1zYW1wbGVfdHlwZXNbaV0sIDJdDQorICAgICBzYW1wbGVfdHlwZV9saXN0W1tzYW1wbGVfdHlwZXNbaV1dXSA9IGFzLnZlY3RvcihzYW1wbGVzX3dhbnQpDQorIH0NCg0KPiBzYW1wbGVfZmFjdG9yaW5nID0gY29sbmFtZXMoZGF0YSkNCg0KPiBmb3IgKGkgaW4gMTpuc2FtcGxlcykgew0KKyAgICAgc2FtcGxlX3R5cGUgPSBzYW1wbGVfdHlwZXNbaV0NCisgICAgIHJlcGxpY2F0ZXNfd2FudCA9IHNhbXBsZV90eXBlX2xpc3RbW3NhbXBsZV90eXBlXV0NCisgICAgIHNhbXBsZV9mYWN0b3JpbmdbIGNvbG5hbWVzKGRhdGEpICVpbiUgcmVwbGljYXRlc193YW50IF0gPSBzYW1wbGVfdHlwZQ0KKyB9DQoNCj4gaW5pdGlhbF9tYXRyaXggPSBkYXRhICMgc3RvcmUgYmVmb3JlIGRvaW5nIHZhcmlvdXMgZGF0YSB0cmFuc2Zvcm1hdGlvbnMNCg0KPiBkYXRhID0gbG9nMihkYXRhKzEpDQoNCj4gc2FtcGxlX2ZhY3RvcmluZyA9IGNvbG5hbWVzKGRhdGEpDQoNCj4gZm9yIChpIGluIDE6bnNhbXBsZXMpIHsNCisgICAgIHNhbXBsZV90eXBlID0gc2FtcGxlX3R5cGVzW2ldDQorICAgICByZXBsaWNhdGVzX3dhbnQgPSBzYW1wbGVfdHlwZV9saXN0W1tzYW1wbGVfdHlwZV1dDQorICAgICBzYW1wbGVfZmFjdG9yaW5nWyBjb2xuYW1lcyhkYXRhKSAlaW4lIHJlcGxpY2F0ZXNfd2FudCBdID0gc2FtcGxlX3R5cGUNCisgfQ0KDQo+IHNhbXBsZUFubm90YXRpb25zID0gbWF0cml4KG5jb2w9bmNvbChkYXRhKSxucm93PW5zYW1wbGVzKQ0KDQo+IGZvciAoaSBpbiAxOm5zYW1wbGVzKSB7DQorICAgc2FtcGxlQW5ub3RhdGlvbnNbaSxdID0gY29sbmFtZXMoZGF0YSkgJWluJSBzYW1wbGVfdHlwZV9saXN0W1tzYW1wbGVfdHlwZXNbaV1dXQ0KKyB9DQoNCj4gc2FtcGxlQW5ub3RhdGlvbnMgPSBhcHBseShzYW1wbGVBbm5vdGF0aW9ucywgMToyLCBmdW5jdGlvbih4KSBhcy5sb2dpY2FsKHgpKQ0KDQo+IHNhbXBsZUFubm90YXRpb25zID0gc2FtcGxlX21hdHJpeF90b19jb2xvcl9hc3NpZ25tZW50cyhzYW1wbGVBbm5vdGF0aW9ucywgY29sPXNhbXBsZV9jb2xvcnMpDQoNCj4gcm93bmFtZXMoc2FtcGxlQW5ub3RhdGlvbnMpID0gYXMudmVjdG9yKHNhbXBsZV90eXBlcykNCg0KPiBjb2xuYW1lcyhzYW1wbGVBbm5vdGF0aW9ucykgPSBjb2xuYW1lcyhkYXRhKQ0KDQo+IGRhdGEgPSBhcy5tYXRyaXgoZGF0YSkgIyBjb252ZXJ0IHRvIG1hdHJpeA0KDQo+IA0KPiAjIENlbnRlcmluZyByb3dzDQoNCj4gZGF0YSA9IHQoc2NhbGUodChkYXRhKSwgc2NhbGU9RikpDQo+IA0KDQo+IHdyaXRlLnRhYmxlKGRhdGEsIGZpbGU9IkRFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuZGF0IiwgcXVvdGU9Riwgc2VwPScJJyk7DQoNCj4gaWYgKG5yb3coZGF0YSkgPCAyKSB7IHN0b3AoIg0KKyANCisgKioqKiBTb3JyeSwgYXQgbGVhc3QgdHdvIHJvd3MgYXJlIHJlcXVpcmVkIGZvciB0aGlzIG1hdHJpeC4NCisgDQorICIpO30NCg0KDQo+IGlmIChuY29sKGRhdGEpIDwgMikgeyBzdG9wKCINCisgDQorICoqKiogU29ycnksIGF0IGxlYXN0IHR3byBjb2x1bW5zIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBtYXRyaXguDQorIA0KKyAiKTt9DQoNCj4gc2FtcGxlX2NvciA9IGNvcihkYXRhLCBtZXRob2Q9J3BlYXJzb24nLCB1c2U9J3BhaXJ3aXNlLmNvbXBsZXRlLm9icycpDQoNCj4gd3JpdGUudGFibGUoc2FtcGxlX2NvciwgZmlsZT0iREVfaXNvZm9ybXNfMy5tYXRyaXgubG9nMi5jZW50ZXJlZC5zYW1wbGVfY29yLmRhdCIsIHF1b3RlPUYsIHNlcD0nCScpDQoNCj4gc2FtcGxlX2Rpc3QgPSBkaXN0KHQoZGF0YSksIG1ldGhvZD0nZXVjbGlkZWFuJykNCg0KPiBoY19zYW1wbGVzID0gaGNsdXN0KHNhbXBsZV9kaXN0LCBtZXRob2Q9J2NvbXBsZXRlJykNCg0KPiBwZGYoIkRFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvcl9tYXRyaXgucGRmIikNCg0KPiBzYW1wbGVfY29yX2Zvcl9wbG90ID0gc2FtcGxlX2Nvcg0KDQo+IGhlYXRtYXAuMyhzYW1wbGVfY29yX2Zvcl9wbG90LCBkZW5kcm9ncmFtPSdib3RoJywgUm93dj1hcy5kZW5kcm9ncmFtKGhjX3NhbXBsZXMpLCBDb2x2PWFzLmRlbmRyb2dyYW0oaGNfc2FtcGxlcyksIGNvbCA9IG15aGVhdGNvbCwgc2NhbGU9J25vbmUnLCBzeW1tPVRSVUUsIGtleT1UUlVFLGRlbnNpdHkuaW5mbz0nbm9uZScsIHRyYWNlPSdub25lJywgc3lta2V5PUZBTFNFLCBzeW1icmVha3M9RiwgbWFyZ2lucz1jKDEwLDEwKSwgY2V4Q29sPTEsIGNleFJvdz0xLCBjZXgubWFpbj0wLjc1LCBtYWluPXBhc3RlKCJzYW1wbGUgY29ycmVsYXRpb24gbWF0cml4DQorICIsICJERV9pc29mb3Jtc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkIikgLCBDb2xTaWRlQ29sb3JzPXNhbXBsZUFubm90YXRpb25zLCBSb3dTaWRlQ29sb3JzPXQoc2FtcGxlQW5ub3RhdGlvbnMpKQ0KZm9yIHBsb3R0aW5nOjogbWluLnJhdzogLTAuOTU5ODA3NzI3NjI4NzA2IG1heC5yYXc6IDENCg0KPiBkZXYub2ZmKCkNCg0KbnVsbCBkZXZpY2UgDQogICAgICAgICAgMSANCiAgICAgICAgICANCj4gZ2VuZV9jb3IgPSBOVUxMDQoNCj4gZ2VuZV9kaXN0ID0gZGlzdChkYXRhLCBtZXRob2Q9J2V1Y2xpZGVhbicpDQoNCj4gaWYgKG5yb3coZGF0YSkgPD0gMSkgeyBtZXNzYWdlKCdUb28gZmV3IGdlbmVzIHRvIGdlbmVyYXRlIGhlYXRtYXAnKTsgcXVpdChzdGF0dXM9MCk7IH0NCg0KPiBoY19nZW5lcyA9IGhjbHVzdChnZW5lX2Rpc3QsIG1ldGhvZD0nY29tcGxldGUnKQ0KDQo+IGhlYXRtYXBfZGF0YSA9IGRhdGENCg0KPiBwZGYoIkRFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuZ2VuZXNfdnNfc2FtcGxlc19oZWF0bWFwLnBkZiIpDQoNCj4gaGVhdG1hcC4zKGhlYXRtYXBfZGF0YSwgZGVuZHJvZ3JhbT0nYm90aCcsIFJvd3Y9YXMuZGVuZHJvZ3JhbShoY19nZW5lcyksIENvbHY9YXMuZGVuZHJvZ3JhbShoY19zYW1wbGVzKSwgY29sPW15aGVhdGNvbCwgc2NhbGU9Im5vbmUiLCBkZW5zaXR5LmluZm89Im5vbmUiLCB0cmFjZT0ibm9uZSIsIGtleT1UUlVFLCBrZXlzaXplPTEuMiwgY2V4Q29sPTEsIG1hcmdpbnM9YygxMCwxMCksIGNleC5tYWluPTAuNzUsIG1haW49cGFzdGUoInNhbXBsZXMgdnMuIGZlYXR1cmVzDQorICIsICJERV9pc29mb3Jtc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkIiApICwgQ29sU2lkZUNvbG9ycz1zYW1wbGVBbm5vdGF0aW9ucykNCmZvciBwbG90dGluZzo6IG1pbi5yYXc6IC01LjE1NzYwNjU4NDEzNDEgbWF4LnJhdzogNS4xNTc2MDY1ODQxMzQxDQoNCj4gZGV2Lm9mZigpDQoNCm51bGwgZGV2aWNlIA0KICAgICAgICAgIDEgDQo+IHNhdmUobGlzdD1scyhhbGw9VFJVRSksIGZpbGU9IkRFX2lzb2Zvcm1zXzMubWF0cml4LlJEYXRhIikNCg0KPiANCg0KYGBgDQoNCg0KDQoNCiMjIyMgc3Rhci10cmFuc2NyaXB0b21lb3V0XSQgbHMgLWwgaXNvZm9ybXNfREVfMy8NCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgIDUzIEFwciAxMyAwMjoyOSBERV9mZWF0dXJlX2NvdW50cy5QMC4wMDFfQzIubWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgIDQ3NiBBcHIgMTMgMDI6MjkgREVfaXNvZm9ybXNfMy5tYXRyaXgNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAxMTA0IEFwciAxMyAwMjoyOSBERV9pc29mb3Jtc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLmRhdA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDY1MjYgQXByIDEzIDAyOjI5IERFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuZ2VuZXNfdnNfc2FtcGxlc19oZWF0bWFwLnBkZg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICA2MzQgQXByIDEzIDAyOjI5IERFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvci5kYXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICA2MzgxIEFwciAxMyAwMjoyOSBERV9pc29mb3Jtc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLnNhbXBsZV9jb3JfbWF0cml4LnBkZg0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgIDQ0NjUgQXByIDEzIDAyOjI5IERFX2lzb2Zvcm1zXzMubWF0cml4LlINCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgIDM0NDA5IEFwciAxMyAwMjoyOSBERV9pc29mb3Jtc18zLm1hdHJpeC5SRGF0YQ0KDQoNCg0KYGBge3J9DQpsaWJyYXJ5KHBkZnRvb2xzKQ0KDQpgYGANCg0KDQpgYGB7cn0NCnBkZl9jb252ZXJ0KCdpc29mb3Jtc19ERV8zL0RFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuZ2VuZXNfdnNfc2FtcGxlc19oZWF0bWFwLnBkZicsIGZvcm1hdCA9ICJqcGVnIiwgcGFnZXMgPSBOVUxMLCBmaWxlbmFtZXMgPSBOVUxMLCBkcGkgPSAzMDAsIGFudGlhbGlhcyA9IFRSVUUsIG9wdyA9ICIiLCB1cHcgPSAiIiwgdmVyYm9zZSA9IFRSVUUpDQoNCmBgYA0KDQoNCiFbZ2VuZXNfdnNfc2FtcGxlX2hlYXRtYXBdKERFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuZ2VuZXNfdnNfc2FtcGxlc19oZWF0bWFwXzEuanBlZykNCg0KDQoNCmBgYHtyfQ0KcGRmX2NvbnZlcnQoJ2lzb2Zvcm1zX0RFXzMvREVfaXNvZm9ybXNfMy5tYXRyaXgubG9nMi5jZW50ZXJlZC5zYW1wbGVfY29yX21hdHJpeC5wZGYnLCBmb3JtYXQgPSAianBlZyIsIHBhZ2VzID0gTlVMTCwgZmlsZW5hbWVzID0gTlVMTCwgZHBpID0gMzAwLCBhbnRpYWxpYXMgPSBUUlVFLCBvcHcgPSAiIiwgdXB3ID0gIiIsIHZlcmJvc2UgPSBUUlVFKQ0KDQpgYGANCg0KDQoNCiFbc2FtcGxlX2Nvcl9tYXRyaXhdKERFX2lzb2Zvcm1zXzMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvcl9tYXRyaXhfMS5qcGVnKQ0KDQoNCiMjIDguIGVkZ2VSIGFuYWx5c2lzIG9mIGRpZmZlcmVudGFpbCBnZW5lICBleHByZXNzaW9uIChzaW1pbGFyIHRvIHRoZSBpc29mb3JtcyBhbmFseXNpcyBkb25lIGFib3ZlKQ0KDQojIyMgR2VuZXJhdGUgYSBtYXRyaXggZmlsZSBvZiBhYnVuZGFuY2UgZXN0aW1hdGVzDQoNCg0KYGBgDQoNCnN0YXItdHJhbnNjcmlwdG9tZW91dCQgYWJ1bmRhbmNlX2VzdGltYXRlc190b19tYXRyaXgucGwgDQoNCi0tZXN0X21ldGhvZCBSU0VNIA0KDQoxb3V0Ly5nZW5lcy5yZXN1bHRzIA0KMm91dC8uZ2VuZXMucmVzdWx0cyANCjNvdXQvLmdlbmVzLnJlc3VsdHMgDQo0b3V0Ly5nZW5lcy5yZXN1bHRzIA0KNW91dC8uZ2VuZXMucmVzdWx0cyANCjZvdXQvLmdlbmVzLnJlc3VsdHMgDQoNCi0tZ2VuZV90cmFuc19tYXAgbm9uZSANCg0KLS1uYW1lX3NhbXBsZV9ieV9iYXNlZGlyIA0KDQotLW91dF9wcmVmaXggZ2VuZXNfZ2VuZV90cmFuc19tYXBfbm9uZS9nZW5lcw0KDQpgYGANCg0KLXJlYWRpbmcgZmlsZTogMW91dC8uZ2VuZXMucmVzdWx0cw0KDQotcmVhZGluZyBmaWxlOiAyb3V0Ly5nZW5lcy5yZXN1bHRzDQoNCi1yZWFkaW5nIGZpbGU6IDNvdXQvLmdlbmVzLnJlc3VsdHMNCg0KLXJlYWRpbmcgZmlsZTogNG91dC8uZ2VuZXMucmVzdWx0cw0KDQotcmVhZGluZyBmaWxlOiA1b3V0Ly5nZW5lcy5yZXN1bHRzDQoNCi1yZWFkaW5nIGZpbGU6IDZvdXQvLmdlbmVzLnJlc3VsdHMNCg0KDQoqIE91dHB1dHRpbmcgY29tYmluZWQgbWF0cml4Lg0KDQovaG9tZS9iZGFzaC9taW5pY29uZGEyL29wdC90cmluaXR5LTIuNi42L3V0aWwvc3VwcG9ydF9zY3JpcHRzL3J1bl9UTU1fc2NhbGVfbWF0cml4LnBsIC0tbWF0cml4IGdlbmVzX2dlbmVfdHJhbnNfbWFwX25vbmUvZ2VuZXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0gPiBnZW5lc19nZW5lX3RyYW5zX21hcF9ub25lL2dlbmVzLmlzb2Zvcm0uVE1NLkVYUFIubWF0cml4Q01EOiBSIC0tbm8tc2F2ZSAtLW5vLXJlc3RvcmUgLS1uby1zaXRlLWZpbGUgLS1uby1pbml0LWZpbGUgLXEgPCBnZW5lc19nZW5lX3RyYW5zX21hcF9ub25lL2dlbmVzLmlzb2Zvcm0uVFBNLm5vdF9jcm9zc19ub3JtLnJ1blRNTS5SIDE+JjIgDQoNCg0KLi4uLi4uLi4uLi4uLi4uLg0KDQoNCiMjIyMgc3Rhci10cmFuc2NyaXB0b21lb3V0JCBscyAtbCBnZW5lc19nZW5lX3RyYW5zX21hcF9ub25lLw0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDc2NDg0NyBBcHIgMTIgMTI6MjQgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggODA1OTAzIEFwciAxMiAxMjoyNCBnZW5lcy5pc29mb3JtLlRNTS5FWFBSLm1hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoIDYyMjUzNyBBcHIgMTIgMTI6MjQgZ2VuZXMuaXNvZm9ybS5UUE0ubm90X2Nyb3NzX25vcm0NCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICA1NzggQXByIDEyIDEyOjI0IGdlbmVzLmlzb2Zvcm0uVFBNLm5vdF9jcm9zc19ub3JtLnJ1blRNTS5SDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgMzE4IEFwciAxMiAxMjoyNCBnZW5lcy5pc29mb3JtLlRQTS5ub3RfY3Jvc3Nfbm9ybS5UTU1faW5mby50eHQNCg0KDQoNCg0KDQojIyMgREUgYW5hbHlzaXMgb2YgZ2VuZSBleHByZXNzaW9uOiBQcmlkdWNlcyBNQSBwbG90LCB2b2xjYW5vIHBsb3QgYW5kIGNvdW50cyBtYXRyaXgNCg0KIE5vdGUgYmlvbG9naWFjbCB0cmlwbGljYXRlcyBmb3IgZWFjaCBncm91cCAoc2VlIGJlbG93KQ0KDQoNCmBgYA0Kc3Rhci10cmFuc2NyaXB0b21lb3V0JCBydW5fREVfYW5hbHlzaXMucGwgDQoNCi0tbWF0cml4IGdlbmVzX2dlbmVfdHJhbnNfbWFwX25vbmUvZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4IA0KDQotLW91dHB1dCBnZW5lc19ERV8zLyANCg0KLS1zYW1wbGVzX2ZpbGUgc2FtcGxlc19kZXNjcmliZWQudHh0IA0KDQotLW1ldGhvZCBlZGdlUg0KDQpgYGANCg0KR290IDYgc2FtcGxlcywgYW5kIGdvdDogNyBkYXRhIGZpZWxkcy4NCg0KSGVhZGVyOiAxb3V0CTJvdXQJM291dAk0b3V0CTVvdXQJNm91dA0KDQpOZXh0OiBPbHIxNTAxCTAuMDAJMC4wMAkwLjAwCTAuMDAJMC4wMAkwLjAwDQoNCiRWQVIxID0gew0KICAgICAgICAgICc1b3V0JyA9PiA1LA0KICAgICAgICAgICc2b3V0JyA9PiA2LA0KICAgICAgICAgICczb3V0JyA9PiAzLA0KICAgICAgICAgICcxb3V0JyA9PiAxLA0KICAgICAgICAgICcyb3V0JyA9PiAyLA0KICAgICAgICAgICc0b3V0JyA9PiA0DQogICAgICAgIH07DQogICAgICAgIA0KJFZBUjEgPSB7DQogICAgICAgICAgJ2NvbmRpdGlvbkInID0+IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNG91dCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzVvdXQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc2b3V0Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICdjb25kaXRpb25BJyA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJzFvdXQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcyb3V0JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnM291dCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgXQ0KICAgICAgICB9Ow0KICAgICAgICANCkNvbnRyYXN0cyB0byBwZXJmb3JtIGFyZTogJFZBUjEgPSBbDQogICAgICAgICAgWw0KICAgICAgICAgICAgJ2NvbmRpdGlvbkEnLA0KICAgICAgICAgICAgJ2NvbmRpdGlvbkInDQogICAgICAgICAgXQ0KICAgICAgICBdOw0KICAgICAgICANCiAgICAgICAgDQpDTUQ6IFIgLS1uby1zYXZlIC0tbm8tcmVzdG9yZSAtLW5vLXNpdGUtZmlsZSAtLW5vLWluaXQtZmlsZSAtcSA8IGdlbmVzLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuY29uZGl0aW9uQS52cy5jb25kaXRpb25CLkVkZ2VSLlJzY3JpcHQNCg0KDQouLi4uLi4uLi4uLi4uLi4NCg0KIyMjIyBzdGFyLXRyYW5zY3JpcHRvbWVvdXQkIGxzIC1sIGdlbmVzX0RFXzMvDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgMTQxMCBBcHIgMTMgMDI6MTIgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5jb25kaXRpb25BLnZzLmNvbmRpdGlvbkIuRWRnZVIuUnNjcmlwdA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAzNTIyNzcgQXByIDEzIDAyOjEzIGdlbmVzLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuZWRnZVIuY291bnRfbWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggMTAxMDI4NCBBcHIgMTMgMDI6MTMgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5ERV9yZXN1bHRzDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggIDExMjY5NSBBcHIgMTMgMDI6MTMgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5ERV9yZXN1bHRzLk1BX25fVm9sY2Fuby5wZGYNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMzU1IEFwciAxMyAwMjoyMSBnZW5lcy5pc29mb3JtLmNvdW50cy5tYXRyaXguY29uZGl0aW9uQV92c19jb25kaXRpb25CLmVkZ2VSLkRFX3Jlc3VsdHMuUDAuMDAxX0MyLmNvbmRpdGlvbkEtVVAuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgICA3MCBBcHIgMTMgMDI6MjEgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5ERV9yZXN1bHRzLlAwLjAwMV9DMi5jb25kaXRpb25CLVVQLnN1YnNldA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAzNTUgQXByIDEzIDAyOjIxIGdlbmVzLmlzb2Zvcm0uY291bnRzLm1hdHJpeC5jb25kaXRpb25BX3ZzX2NvbmRpdGlvbkIuZWRnZVIuREVfcmVzdWx0cy5QMC4wMDFfQzIuREUuc3Vic2V0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgICA5NiBBcHIgMTMgMDI6MjEgZ2VuZXMuaXNvZm9ybS5jb3VudHMubWF0cml4LmNvbmRpdGlvbkFfdnNfY29uZGl0aW9uQi5lZGdlUi5ERV9yZXN1bHRzLnNhbXBsZXMNCg0KDQoNCg0KDQoNCiFbZ2VuZXNfTUFfcGxvdF0oZ2VuZXNfREVfMy9nZW5lc19NQXBsb3QuanBnKQ0KDQoNCg0KIVtnZW5lc192b2xjYW5vX3Bsb3RdKGdlbmVzX0RFXzMvZ2VuZXNfdm9sY2Fub19wbG90LmpwZykNCg0KDQoNCiMjIyBBbmFseXplIGRpZmZlcmVudGlhbCBnZW5lIGV4cHJlc3Npb246IFByb2R1Y2VzIGhlYXRtYXAgYW5kIGNvb3JlbGF0aW9uIG1hdHJpeA0KDQoNCmBgYA0KZ2VuZXNfREVfMyQgYW5hbHl6ZV9kaWZmX2V4cHIucGwgDQoNCi0tbWF0cml4IC4uL2dlbmVzX2dlbmVfdHJhbnNfbWFwX25vbmUvZ2VuZXMuaXNvZm9ybS5UTU0uRVhQUi5tYXRyaXggDQoNCi0tc2FtcGxlcyAuLi9zYW1wbGVzX2Rlc2NyaWJlZC50eHQgDQoNCi0tb3V0cHV0IERFX2dlbmVzXzMNCg0KYGBgDQoNCg0KKipGb3VuZCAyIGZlYXR1cmVzIGFzIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZC4qKg0KDQpDTUQ6IC9ob21lL2JkYXNoL21pbmljb25kYTIvb3B0L3RyaW5pdHktMi42LjYvQW5hbHlzaXMvRGlmZmVyZW50aWFsRXhwcmVzc2lvbi9QdFIgLW0gREVfZ2VuZXNfMy5tYXRyaXggLS1sb2cyIC0taGVhdG1hcCAtLW1pbl9jb2xTdW1zIDAgLS1taW5fcm93U3VtcyAwIC0tZ2VuZV9kaXN0IGV1Y2xpZGVhbiAtLXNhbXBsZV9kaXN0IGV1Y2xpZGVhbiAtLXNhbXBsZV9jb3JfbWF0cml4IC0tY2VudGVyX3Jvd3MgLS1zYXZlICAtcyAuLi9zYW1wbGVzX2Rlc2NyaWJlZC50eHQNCkNNRDogUiAtLW5vLXNhdmUgLS1uby1yZXN0b3JlIC0tbm8tc2l0ZS1maWxlIC0tbm8taW5pdC1maWxlIC1xIDwgREVfZ2VuZXNfMy5tYXRyaXguUg0KDQoNCi4uLi4uLg0KDQoNCiMjIyMgc3Rhci10cmFuc2NyaXB0b21lb3V0JCBscyAtbCBnZW5lc19ERV8zLw0KDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgICA1MyBBcHIgMTMgMDI6MjEgREVfZmVhdHVyZV9jb3VudHMuUDAuMDAxX0MyLm1hdHJpeA0KDQotcnctcnctci0tLiAxIGJkYXNoIGJkYXNoICAgICAxMjAgQXByIDEzIDAyOjIxIERFX2dlbmVzXzMubWF0cml4DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgIDI1NiBBcHIgMTMgMDI6MjEgREVfZ2VuZXNfMy5tYXRyaXgubG9nMi5jZW50ZXJlZC5kYXQNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICA1OTc3IEFwciAxMyAwMjoyMSBERV9nZW5lc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLmdlbmVzX3ZzX3NhbXBsZXNfaGVhdG1hcC5wZGYNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICAgMTQ4IEFwciAxMyAwMjoyMSBERV9nZW5lc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLnNhbXBsZV9jb3IuZGF0DQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAgNjMxMSBBcHIgMTMgMDI6MjEgREVfZ2VuZXNfMy5tYXRyaXgubG9nMi5jZW50ZXJlZC5zYW1wbGVfY29yX21hdHJpeC5wZGYNCg0KLXJ3LXJ3LXItLS4gMSBiZGFzaCBiZGFzaCAgICA0NDM1IEFwciAxMyAwMjoyMSBERV9nZW5lc18zLm1hdHJpeC5SDQoNCi1ydy1ydy1yLS0uIDEgYmRhc2ggYmRhc2ggICAzMzIxNCBBcHIgMTMgMDI6MjEgREVfZ2VuZXNfMy5tYXRyaXguUkRhdGENCg0KDQoNCmBgYHtyfQ0KbGlicmFyeShwZGZ0b29scykNCg0KYGBgDQoNCmBgYHtyfQ0KcGRmX2NvbnZlcnQoJ2dlbmVzX0RFXzMvREVfZ2VuZXNfMy5tYXRyaXgubG9nMi5jZW50ZXJlZC5nZW5lc192c19zYW1wbGVzX2hlYXRtYXAucGRmJywgZm9ybWF0ID0gImpwZWciLCBwYWdlcyA9IE5VTEwsIGZpbGVuYW1lcyA9IE5VTEwsIGRwaSA9IDMwMCwgYW50aWFsaWFzID0gVFJVRSwgb3B3ID0gIiIsIHVwdyA9ICIiLCB2ZXJib3NlID0gVFJVRSkNCg0KYGBgDQoNCg0KIVtnZW5lc19oZWF0bWFwXShERV9nZW5lc18zLm1hdHJpeC5sb2cyLmNlbnRlcmVkLmdlbmVzX3ZzX3NhbXBsZXNfaGVhdG1hcF8xLmpwZWcpDQoNCg0KDQoNCg0KDQpgYGB7cn0NCnBkZl9jb252ZXJ0KCdnZW5lc19ERV8zL0RFX2dlbmVzXzMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvcl9tYXRyaXgucGRmJywgZm9ybWF0ID0gImpwZWciLCBwYWdlcyA9IE5VTEwsIGZpbGVuYW1lcyA9IE5VTEwsIGRwaSA9IDMwMCwgYW50aWFsaWFzID0gVFJVRSwgb3B3ID0gIiIsIHVwdyA9ICIiLCB2ZXJib3NlID0gVFJVRSkNCg0KYGBgDQoNCg0KIVtnZW5lc19jb3JyZWxhdGlvbl9tYXRyaXhdKERFX2dlbmVzXzMubWF0cml4LmxvZzIuY2VudGVyZWQuc2FtcGxlX2Nvcl9tYXRyaXhfMS5qcGVnKQ0KDQo=
armstrongfrour2001.blogspot.com
Source: http://rstudio-pubs-static.s3.amazonaws.com/490470_d4b52ca759674bcda12514a0ce97e8cd.html
0 Response to "Log.final.out Output File of Star Read Into Df"
ارسال یک نظر