1 Some metrics of variant positions with respect to the panamensis reference genome

This process is not really optimized yet, I am not really certain what questions I want to ask nor how I want to answer them.

But whatever my questions are, the first thing I will need to do is collect the variant information and get a feeling for how many variants are in each sample.

## The scale difference between the smallest and largest
## libraries is > 10. Assuming a log10 scale is better, set scale=FALSE if not.

1.1 Gather Categories of variants

This categorizes the possible variants so that we can cross reference them against experiment metadata later.

##                            Lp001 s1022 s1320 s2189 s2271 s2272 s2504 s5397
## LPAL13_SCAF000001_1019_G_A     0  15.5     0     0     0     0     6     0
## LPAL13_SCAF000001_106_A_G      0   0.0     0     0     0     0     0     0
## LPAL13_SCAF000001_1092_A_G     0  17.0     0     0     0     0    13     0
## LPAL13_SCAF000001_1138_C_A     0   0.0     0     0     0     0     0     0
## LPAL13_SCAF000001_1149_G_A     0   0.0     0     0     0     0     0     0
## LPAL13_SCAF000001_1183_C_T     0  14.5     0     0     0     0     0     0
##                            s5430 s5433        chr
## LPAL13_SCAF000001_1019_G_A   0.0    10 SCAF000001
## LPAL13_SCAF000001_106_A_G    0.0     0 SCAF000001
## LPAL13_SCAF000001_1092_A_G   0.0    22 SCAF000001
## LPAL13_SCAF000001_1138_C_A  24.0     0 SCAF000001
## LPAL13_SCAF000001_1149_G_A  23.5     0 SCAF000001
## LPAL13_SCAF000001_1183_C_T   0.0     0 SCAF000001

1.4 Now view some of the hits observed

## exon_LPAL13_090013100.1 exon_LPAL13_340060500.1 exon_LPAL13_310019300.1 
##                      34                      19                      18 
## exon_LPAL13_230022900.1 exon_LPAL13_270011800.1 exon_LPAL13_350020500.1 
##                      17                      17                      17 
## exon_LPAL13_160006700.1 exon_LPAL13_230013700.1 exon_LPAL13_310036400.1 
##                      16                      16                      16 
## exon_LPAL13_100010800.1 exon_LPAL13_280011700.1 exon_LPAL13_280037200.1 
##                      15                      15                      15 
## exon_LPAL13_000030400.1 exon_LPAL13_270015100.1 exon_LPAL13_310013800.1 
##                      14                      14                      14 
## exon_LPAL13_090014400.1 exon_LPAL13_130018000.1 exon_LPAL13_200020000.1 
##                      13                      13                      13 
## exon_LPAL13_200051500.1 exon_LPAL13_240016500.1 exon_LPAL13_320031600.1 
##                      13                      13                      13 
## exon_LPAL13_180009600.1 exon_LPAL13_190017200.1 exon_LPAL13_260015800.1 
##                      12                      12                      12 
## exon_LPAL13_060013800.1 exon_LPAL13_060014200.1 exon_LPAL13_070008100.1 
##                      11                      11                      11 
## exon_LPAL13_120012900.1 exon_LPAL13_140012900.1 exon_LPAL13_170011000.1 
##                      11                      11                      11
##                                  seqnames
## exon_LPAL13_090013100.1         LpaL13_09
## exon_LPAL13_340060500.1         LpaL13_34
## exon_LPAL13_310019300.1         LpaL13_31
## exon_LPAL13_230022900.1         LpaL13_23
## exon_LPAL13_270011800.1         LpaL13_27
## exon_LPAL13_350020500.1         LpaL13_35
## exon_LPAL13_160006700.1         LpaL13_16
## exon_LPAL13_230013700.1         LpaL13_23
## exon_LPAL13_310036400.1         LpaL13_31
## exon_LPAL13_100010800.1         LpaL13_10
## exon_LPAL13_280011700.1         LpaL13_28
## exon_LPAL13_280037200.1         LpaL13_28
## exon_LPAL13_000030400.1 LPAL13_SCAF000424
## exon_LPAL13_270015100.1         LpaL13_27
## exon_LPAL13_310013800.1         LpaL13_31
## exon_LPAL13_090014400.1         LpaL13_09
## exon_LPAL13_130018000.1         LpaL13_13
## exon_LPAL13_200020000.1       LpaL13_20.1
## exon_LPAL13_200051500.1       LpaL13_20.2
## exon_LPAL13_240016500.1         LpaL13_24
## exon_LPAL13_320031600.1         LpaL13_32
## exon_LPAL13_180009600.1         LpaL13_18
## exon_LPAL13_190017200.1         LpaL13_19
## exon_LPAL13_260015800.1         LpaL13_26
## exon_LPAL13_060013800.1         LpaL13_06
## exon_LPAL13_060014200.1         LpaL13_06
## exon_LPAL13_070008100.1         LpaL13_07
## exon_LPAL13_120012900.1         LpaL13_12
## exon_LPAL13_140012900.1         LpaL13_14
## exon_LPAL13_170011000.1         LpaL13_17
##                                                                                                                        description
## exon_LPAL13_090013100.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_340060500.1                                                  SPRY+domain/HECT-domain+(ubiquitin-transferase),+putative
## exon_LPAL13_310019300.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_230022900.1                                                            DNA+polymerase+zeta+catalytic+subunit,+putative
## exon_LPAL13_270011800.1                                                                  calpain-like+cysteine+peptidase,+putative
## exon_LPAL13_350020500.1                                       N-terminal+region+of+Chorein,+a+TM+vesicle-mediated+sorter,+putative
## exon_LPAL13_160006700.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_230013700.1                                             Galactose+oxidase,+central+domain+containing+protein,+putative
## exon_LPAL13_310036400.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_100010800.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_280011700.1                          Cytoplasmic+dynein+2+heavy+chain+(DYNC2H1),+putative,dynein+heavy+chain,+putative
## exon_LPAL13_280037200.1                          Cytoplasmic+dynein+2+heavy+chain+(DYNC2H1),+putative,dynein+heavy+chain,+putative
## exon_LPAL13_000030400.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_270015100.1                                                                       parallel+beta-helix+repeat,+putative
## exon_LPAL13_310013800.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_090014400.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_130018000.1                                                  SPRY+domain/HECT-domain+(ubiquitin-transferase),+putative
## exon_LPAL13_200020000.1 N-terminal+region+of+Chorein,+a+TM+vesicle-mediated+sorter/Protein+of+unknown+function+(DUF1162),+putative
## exon_LPAL13_200051500.1                                                                                   Midasin,+putative+(MDN1)
## exon_LPAL13_240016500.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_320031600.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_180009600.1                                                                   Flagellar-associated+PapD-like,+putative
## exon_LPAL13_190017200.1                                                                       Ankyrin+repeats+(3+copies),+putative
## exon_LPAL13_260015800.1                                                            TROVE+domain/WD+domain,+G-beta+repeat,+putative
## exon_LPAL13_060013800.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_060014200.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_070008100.1                                                                    ubiquitin-protein+ligase-like,+putative
## exon_LPAL13_120012900.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_140012900.1                                                                            hypothetical+protein,+conserved
## exon_LPAL13_170011000.1                                                                            hypothetical+protein,+conserved
##                                  seqnames
## exon_LPAL13_080010200.1         LpaL13_08
## exon_LPAL13_140008400.1         LpaL13_14
## exon_LPAL13_200013000.1       LpaL13_20.1
## exon_LPAL13_000035800.1 LPAL13_SCAF000500
## exon_LPAL13_000037900.1 LPAL13_SCAF000543
## exon_LPAL13_200008300.1       LpaL13_20.1
## exon_LPAL13_200012900.1       LpaL13_20.1
## exon_LPAL13_200014900.1       LpaL13_20.1
## exon_LPAL13_200016900.1       LpaL13_20.1
## exon_LPAL13_200017800.1       LpaL13_20.1
## exon_LPAL13_200019700.1       LpaL13_20.1
## exon_LPAL13_230015400.1         LpaL13_23
## exon_LPAL13_000015400.1 LPAL13_SCAF000124
## exon_LPAL13_000015500.1 LPAL13_SCAF000124
## exon_LPAL13_000029100.1 LPAL13_SCAF000388
## exon_LPAL13_040010300.1         LpaL13_04
## exon_LPAL13_060010800.1         LpaL13_06
## exon_LPAL13_070014200.1         LpaL13_07
## exon_LPAL13_080008300.1         LpaL13_08
## exon_LPAL13_080008800.1         LpaL13_08
## exon_LPAL13_080009300.1         LpaL13_08
## exon_LPAL13_100011600.1         LpaL13_10
## exon_LPAL13_100012700.1         LpaL13_10
## exon_LPAL13_200011500.1       LpaL13_20.1
## exon_LPAL13_200012200.1       LpaL13_20.1
## exon_LPAL13_200016400.1       LpaL13_20.1
## exon_LPAL13_200017400.1       LpaL13_20.1
## exon_LPAL13_200017900.1       LpaL13_20.1
## exon_LPAL13_200019500.1       LpaL13_20.1
## exon_LPAL13_200019600.1       LpaL13_20.1
##                                                                                                        description
## exon_LPAL13_080010200.1                                                     Amastin+surface+glycoprotein,+putative
## exon_LPAL13_140008400.1                                     Transmembrane+amino+acid+transporter+protein,+putative
## exon_LPAL13_200013000.1                                                     Amastin+surface+glycoprotein,+putative
## exon_LPAL13_000035800.1                                                                       hypothetical+protein
## exon_LPAL13_000037900.1                                                     Amastin+surface+glycoprotein,+putative
## exon_LPAL13_200008300.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_200012900.1                                                     Amastin+surface+glycoprotein,+putative
## exon_LPAL13_200014900.1                                                      EF+hand/EF-hand+domain+pair,+putative
## exon_LPAL13_200016900.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_200017800.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_200019700.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_230015400.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_000015400.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_000015500.1                                               ribose-phosphate+pyrophosphokinase,+putative
## exon_LPAL13_000029100.1                                                     Amastin+surface+glycoprotein,+putative
## exon_LPAL13_040010300.1                                               serine/threonine+protein+kinase-like+protein
## exon_LPAL13_060010800.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_070014200.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_080008300.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_080008800.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_080009300.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_100011600.1                                            Chromatin+assembly+factor+1+subunit+A,+putative
## exon_LPAL13_100012700.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_200011500.1                                                flagellar+attachment+zone+protein,+putative
## exon_LPAL13_200012200.1                                         serine/threonine-protein+phosphatase+PP1,+putative
## exon_LPAL13_200016400.1                                                                       hypothetical+protein
## exon_LPAL13_200017400.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_200017900.1 RNA+editing+associated+helicase+2,+putative,ATP-dependent+RNA+helicase-like+protein+(REH2)
## exon_LPAL13_200019500.1                                                            hypothetical+protein,+conserved
## exon_LPAL13_200019600.1                                                            hypothetical+protein,+conserved
## GRanges object with 10 ranges and 0 metadata columns:
##                        seqnames        ranges strand
##                           <Rle>     <IRanges>  <Rle>
##   LpaL13_01_182906_C_T       01 182906-182907      +
##   LpaL13_01_183131_G_C       01 183131-183132      +
##   LpaL13_01_183471_A_G       01 183471-183472      +
##   LpaL13_01_183498_C_G       01 183498-183499      +
##   LpaL13_01_184202_G_A       01 184202-184203      +
##   LpaL13_01_184517_C_T       01 184517-184518      +
##   LpaL13_02_233734_A_G       02 233734-233735      +
##    LpaL13_02_76980_T_C       02   76980-76981      +
##    LpaL13_02_82011_A_G       02   82011-82012      +
##    LpaL13_02_95074_G_A       02   95074-95075      +
##   -------
##   seqinfo: 100 sequences from an unspecified genome; no seqlengths
##  [1] "chronic"                               
##  [2] "failure"                               
##  [3] "chronic, self_heal"                    
##  [4] "failure, self_heal"                    
##  [5] "chronic, failure, self_heal"           
##  [6] "failure, responder, self_heal"         
##  [7] "chronic, failure"                      
##  [8] "failure, responder"                    
##  [9] "self_heal"                             
## [10] "chronic, failure, responder, self_heal"
## [11] "chronic, responder, self_heal"         
## [12] "responder"                             
## [13] "chronic, failure, responder"           
## [14] "responder, self_heal"                  
## [15] "chronic, responder"
## [1] 305
## [1] 25
LS0tCnRpdGxlOiAiTC5wYW5hbWVuc2lzIDIwMTgwODIyOiBWYXJpYW50IHBvc2l0aW9ucy4iCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjoKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogc2hvdwogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgICB3aWR0aDogMzAwCiAgICBrZWVwX21kOiBmYWxzZQogICAgbW9kZTogc2VsZmNvbnRhaW5lZAogICAgdG9jX2Zsb2F0OiB0cnVlCiAgQmlvY1N0eWxlOjpodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgICBrZWVwX21kOiBmYWxzZQogICAgbW9kZTogc2VsZmNvbnRhaW5lZAogICAgdG9jX2Zsb2F0OiB0cnVlCiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogc2hvdwogICAgZmlnX2NhcHRpb246IHRydWUKICAgIGZpZ19oZWlnaHQ6IDcKICAgIGZpZ193aWR0aDogNwogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAga2VlcF9tZDogZmFsc2UKICAgIG1vZGU6IHNlbGZjb250YWluZWQKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIHRoZW1lOiByZWFkYWJsZQogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UKLS0tCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5LCB0ZCB7CiAgZm9udC1zaXplOiAxNnB4Owp9CmNvZGUucnsKICBmb250LXNpemU6IDE2cHg7Cn0KcHJlIHsKIGZvbnQtc2l6ZTogMTZweAp9Cjwvc3R5bGU+CgpgYGB7ciBvcHRpb25zLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KCJocGdsdG9vbHMiKQp0dCA8LSBkZXZ0b29sczo6bG9hZF9hbGwoIn4vaHBnbHRvb2xzIikKa25pdHI6Om9wdHNfa25pdCRzZXQocHJvZ3Jlc3M9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT1UUlVFLAogICAgICAgICAgICAgICAgICAgICB3aWR0aD05MCwKICAgICAgICAgICAgICAgICAgICAgZWNobz1UUlVFKQprbml0cjo6b3B0c19jaHVuayRzZXQoZXJyb3I9RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGg9OCwKICAgICAgICAgICAgICAgICAgICAgIGZpZy5oZWlnaHQ9OCwKICAgICAgICAgICAgICAgICAgICAgIGRwaT05NikKb2xkX29wdGlvbnMgPC0gb3B0aW9ucyhkaWdpdHM9NCwKICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgIGtuaXRyLmR1cGxpY2F0ZS5sYWJlbD0iYWxsb3ciKQpnZ3Bsb3QyOjp0aGVtZV9zZXQoZ2dwbG90Mjo6dGhlbWVfYncoYmFzZV9zaXplPTEwKSkKc2V0LnNlZWQoMSkKdmVyIDwtICIyMDE4MDgyMiIKcHJldmlvdXNfZmlsZSA8LSAiMDFfYW5ub3RhdGlvbl8yMDE4MDgyMi5SbWQiCgp0bXAgPC0gdHJ5KHNtKGxvYWRtZShmaWxlbmFtZT1wYXN0ZTAoZ3N1YihwYXR0ZXJuPSJcXC5SbWQiLCByZXBsYWNlPSIiLCB4PXByZXZpb3VzX2ZpbGUpLCAiLXYiLCB2ZXIsICIucmRhLnh6IikpKSkKYGBgCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogMTgwMHB4ICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9CgpkaXYubWFpbi1jb250YWluZXIgewogIG1heC13aWR0aDogMTgwMHB4ICFpbXBvcnRhbnQ7CiAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgbWFyZ2luLXJpZ2h0OiBhdXRvOwp9Cjwvc3R5bGU+CgoKIyBTb21lIG1ldHJpY3Mgb2YgdmFyaWFudCBwb3NpdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBwYW5hbWVuc2lzIHJlZmVyZW5jZSBnZW5vbWUKClRoaXMgcHJvY2VzcyBpcyBub3QgcmVhbGx5IG9wdGltaXplZCB5ZXQsIEkgYW0gbm90IHJlYWxseSBjZXJ0YWluIHdoYXQgcXVlc3Rpb25zCkkgd2FudCB0byBhc2sgbm9yIGhvdyBJIHdhbnQgdG8gYW5zd2VyIHRoZW0uCgpCdXQgd2hhdGV2ZXIgbXkgcXVlc3Rpb25zIGFyZSwgdGhlIGZpcnN0IHRoaW5nIEkgd2lsbCBuZWVkIHRvIGRvIGlzIGNvbGxlY3QgdGhlCnZhcmlhbnQgaW5mb3JtYXRpb24gYW5kIGdldCBhIGZlZWxpbmcgZm9yIGhvdyBtYW55IHZhcmlhbnRzIGFyZSBpbiBlYWNoIHNhbXBsZS4KCmBgYHtyIGNyZWF0ZV9hbGxfZXhwdH0Kc25wX3N0cmFpbl9leHB0IDwtIHNtKGNvdW50X2V4cHRfc25wcyhwYXJhc2l0ZV9leHB0KSkKc25wX251bWJlcnMgPC0gcGxvdF9saWJzaXplKHNucF9zdHJhaW5fZXhwdCkKc25wX251bWJlcnMkcGxvdAojIyBUaGlzIHNob3VsZCBiZSBub3JtYWxpemVkIGFnYWluc3QgdGhlIGxpYnJhcnkgc2l6ZXMgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcmllcyBzbyB0aGF0IHdlIGtub3cKIyMgaWYgdGhlIG51bWJlcnMgd2UgYXJlIGdldHRpbmcgYXJlIGFuIGFydGlmYWN0IG9mIGNvdmVyYWdlLgpgYGAKCiMjIEdhdGhlciBDYXRlZ29yaWVzIG9mIHZhcmlhbnRzCgpUaGlzIGNhdGVnb3JpemVzIHRoZSBwb3NzaWJsZSB2YXJpYW50cyBzbyB0aGF0IHdlIGNhbiBjcm9zcyByZWZlcmVuY2UgdGhlbQphZ2FpbnN0IGV4cGVyaW1lbnQgbWV0YWRhdGEgbGF0ZXIuCgpgYGB7ciBnZXRfY2F0ZWdvcmllc30KIyMgR2V0IGFsbCBwb3NzaWJsZSBzbnAgY2F0ZWdvcmllcwpzbnBfc3RyYWluX3NldHMgPC0gc20oZ2V0X3NucF9zZXRzKHNucF9zdHJhaW5fZXhwdCkpCmhlYWQoc25wX3N0cmFpbl9zZXRzJG1lZGlhbnMpCiMjIFRoaXMgc2hvdWxkIGdpdmUgdXMgYW4gaWRlYSBvZiBvYnNlcnZhdGlvbnMgdnMuIHN0cmFpbi4KYGBgCgojIyBDcm9zcyByZWZlcmVuY2UgdGhlIGNhdGVnb3JpZXMgdnMuIGdlbmVzCgpBIGxpa2VseSBxdWVzdGlvbiB3ZSB3aWxsIGFzazogd2hhdCBnZW5lcyBoYXZlIHNucHMgaW4gc3BlY2lmaWMgc3RyYWluczoKCmBgYHtyIGdlbmVfeHJlZn0KIyMgQ3Jvc3MgcmVmZXJlbmNlIHRoZSBvYnNlcnZlZCB2YXJpYW50cyBhZ2FpbnN0IHRoZSBhbm5vdGF0ZWQgZGF0YQpzbnBfc3RyYWluX3N1bW1hcnkgPC0gc25wc192c19nZW5lcyhwYXJhc2l0ZV9leHB0LCBzbnBfc3RyYWluX3NldHMpCgojIyBOb3cgeHJlZiBhZ2FpbnN0IHRoZSBtZXRhZGF0YS4Kc25wX3N0cmFpbl9nZW5lcyA8LSBzbShzbnBzX3ZzX2ludGVyc2VjdGlvbnMocGFyYXNpdGVfZXhwdCwgc25wX3N0cmFpbl9zZXRzKSkKYGBgCgojIyBDcm9zcyByZWZlcmVuY2UgYWdhaW5zdCBhbm90aGVyIGNhdGVnb3J5CgpMZXRzIGRvIHRoZSBzYW1lIHRoaW5nLCBidXQgdGhpcyB0aW1lIGFnYWluc3QgdGhlIHNlbGYtaGVhbGluZy9jaHJvbmljIGV0YyBjb25kaXRpb25zLgoKYGBge3Igc25wX3NldHN2Mn0KIyMgeHJlZiBhZ2FpbnN0IGEgc3BlY2lmaWMgbWV0YWRhdHVtCnNucF9jb25kX3NldHMgPC0gc20oZ2V0X3NucF9zZXRzKHNucF9zdHJhaW5fZXhwdCwgZmFjdG9yPSJzdGF0ZSIpKQoKc25wX2NvbmRfc3VtbWFyeSA8LSBzbnBzX3ZzX2dlbmVzKHBhcmFzaXRlX2V4cHQsIHNucF9jb25kX3NldHMpCiMjIE9vcHMsIHRoaXMgaXMgbm90IHdoYXQgSSB0aG91Z2h0IGl0IHdhcywgdGhpcyBpcyB0aGUgc2V0IG9mIHBvc2l0aW9ucyBpbiBhbGwKIyMgc2FtcGxlcywgbm90IGEgc3BlY2lmaWMgc3Vic2V0LgpoZWFkKHNucF9jb25kX3N1bW1hcnkkc3VtbWFyeV9ieV9nZW5lKQoKc25wX2NvbmRfZ2VuZXMgPC0gc20oc25wc192c19pbnRlcnNlY3Rpb25zKHBhcmFzaXRlX2V4cHQsIHNucF9jb25kX3NldHMpKQojIyBUaGlzIGRhdGEgc3RydWN0dXJlIGdpdmVzIG1lIEdSYW5nZXMgc3BlY2lmaWMgdG8gZWFjaCBjb25kaXRpb24gc3Vic2V0LgojIyBUaGlzIGlzIHRoZSBkYXRhIEkgd2FudCB0byBwZXJmb3JtIHRoZSBjb3VudHMgb24uCmBgYAoKIyMgTm93IHZpZXcgc29tZSBvZiB0aGUgaGl0cyBvYnNlcnZlZAoKYGBge3Igdmlld19oaXRzfQpoZWFkKHNucF9jb25kX2dlbmVzW1siZ2VuZV9zdW1tYXJpZXMiXV1bWyJjaHJvbmljIl1dLCBuPTMwKQpmdW5fbmFtZXMgPC0gaGVhZChuYW1lcyhzbnBfY29uZF9nZW5lc1tbImdlbmVfc3VtbWFyaWVzIl1dW1siY2hyb25pYyJdXSksIG49MzApCmFubm90IDwtIGZEYXRhKHBhcmFzaXRlX2V4cHQpW2Z1bl9uYW1lcywgXQphbm5vdFssIGMoInNlcW5hbWVzIiwgImRlc2NyaXB0aW9uIildCgpmdW5fbmFtZXMgPC0gaGVhZChuYW1lcyhzbnBfY29uZF9nZW5lc1tbImdlbmVfc3VtbWFyaWVzIl1dW1sic2VsZl9oZWFsIl1dKSwgbj0zMCkKYW5ub3QgPC0gZkRhdGEocGFyYXNpdGVfZXhwdClbZnVuX25hbWVzLCBdCmFubm90WywgYygic2VxbmFtZXMiLCAiZGVzY3JpcHRpb24iKV0KCmhlYWQoc25wX2NvbmRfZ2VuZXMkaW50ZXJzW1siZmFpbHVyZSJdXSwgbj0xMCkKbmFtZXMoc25wX2NvbmRfZ2VuZXMkaW50ZXJzKQpsZW5ndGgoc25wX2NvbmRfZ2VuZXMkaW50ZXJzW1siZmFpbHVyZSJdXSkKbGVuZ3RoKHNucF9jb25kX2dlbmVzJGludGVyc1tbInJlc3BvbmRlciJdXSkKYGBgCgojIFByaW50IGEgaGVhdG1hcCBvZiB0aGUgdmFyaWFudCByZWxhdGlvbnNoaXBzCgpJZGVhbGx5LCB0aGUgZm9sbG93aW5nIGhlYXRtYXBzIHNob3VsZCBwcm92aWRlIHdoYXQgaXMgZXNzZW50aWFsbHkgYQpwaHlsb2dlbmV0aWMgdHJlZSBkZXNjcmliaW5nIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlIHZhcmlvdXMgc3RyYWlucyBpbiB0aGUgZGF0YQphY2NvcmRpbmcgdG8gdGhlIG9ic2VydmVkIHZhcmlhbnQgcG9zaXRpb25zIGluIHRoZSBkYXRhLgoKYGBge3IgY3JlYXRlX3NucF9oZWF0bWFwc30Kc25wX3N0cmFpbl9ub3JtIDwtIG5vcm1hbGl6ZV9leHB0KHNucF9zdHJhaW5fZXhwdCwgdHJhbnNmb3JtPSJsb2cyIiwgY29udmVydD0iY3BtIiwgZmlsdGVyPVRSVUUpCnNucF9zdHJhaW5fbm9ybSA8LSBzZXRfZXhwdF9jb25kaXRpb25zKHNucF9zdHJhaW5fbm9ybSwgZmFjdD0icGF0aG9nZW5zdHJhaW4iKQp0ZXN0IDwtIHBsb3RfZGlzaGVhdChzbnBfc3RyYWluX25vcm0pCgpkZXMgPC0gc25wX3N0cmFpbl9ub3JtJGRlc2lnbgpsaWJyYXJ5KEhlYXRwbHVzKQojI2htY29scyA8LSBjb2xvclJhbXBQYWxldHRlKGMoInllbGxvdyIsImJsYWNrIiwiZGFya2JsdWUiKSkoMjU2KQpjb3JyZWxhdGlvbnMgPC0gaHBnbF9jb3IoZXhwcnMoc25wX3N0cmFpbl9ub3JtKSkKbXlkZW5kcm8gPC0gbGlzdCgKICAiY2x1c3RmdW4iID0gaGNsdXN0LAogICJsd2QiID0gMi4wKQpjb2xfZGF0YSA8LSBhcy5kYXRhLmZyYW1lKGRlc1ssIGMoInBhdGhvZ2Vuc3RyYWluIildKQpyb3dfZGF0YSA8LSBhcy5kYXRhLmZyYW1lKGRlc1ssIGMoImFsaWFzIildKQpjb2xuYW1lcyhjb2xfZGF0YSkgPC0gYygic3RyYWluIikKY29sbmFtZXMocm93X2RhdGEpIDwtIGMoImFsaWFzIikKbXlhbm5vdCA8LSBsaXN0KAogICJDb2wiID0gbGlzdCgiZGF0YSIgPSBjb2xfZGF0YSksCiAgIlJvdyIgPSBsaXN0KCJkYXRhIiA9IHJvd19kYXRhKSkKbXljbHVzdCA8LSBsaXN0KCJjdXRoIiA9IDEuMCwKICAgICAgICAgICAgICAgICJjb2wiID0gQnJld2VyQ2x1c3RlckNvbCkKbXlsYWJzIDwtIGxpc3QoCiAgIlJvdyIgPSBsaXN0KCJucm93IiA9IDQpLAogICJDb2wiID0gbGlzdCgibnJvdyIgPSA0KSkKaG1jb2xzIDwtIGNvbG9yUmFtcFBhbGV0dGUoYygiZGFya2JsdWUiLCAiYmVpZ2UiKSkoMzMzKQptYXAyIDwtIGFubkhlYXRtYXAyKAogIGNvcnJlbGF0aW9ucywKICBkZW5kcm9ncmFtPW15ZGVuZHJvLAogIGFubm90YXRpb249bXlhbm5vdCwKICBjbHVzdGVyPW15Y2x1c3QsCiAgbGFiZWxzPW15bGFicywKICBjb2w9aG1jb2xzKQpudW1fY2x1c3RlcnMgPC0gbWF4KG1hcDJbWyJjbHVzdGVyIl1dW1siUm93Il1dW1siZ3JwIl1dKQpjaG9zZW5fcGFsZXR0ZSA8LSAiRGFyazIiCm5ld19jb2xvcnMgPC0gZ3JEZXZpY2VzOjpjb2xvclJhbXBQYWxldHRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICBSQ29sb3JCcmV3ZXI6OmJyZXdlci5wYWwobnVtX2NsdXN0ZXJzLCBjaG9zZW5fcGFsZXR0ZSkpKG51bV9jbHVzdGVycykKbXljbHVzdCA8LSBsaXN0KCJjdXRoIiA9IDEuMCwKICAgICAgICAgICAgICAgICJjb2wiID0gbmV3X2NvbG9ycykKbWFwMiA8LSBhbm5IZWF0bWFwMigKICBjb3JyZWxhdGlvbnMsCiAgZGVuZHJvZ3JhbT1teWRlbmRybywKICBhbm5vdGF0aW9uPW15YW5ub3QsCiAgY2x1c3Rlcj1teWNsdXN0LAogIGxhYmVscz1teWxhYnMsCiAgc2NhbGU9Im5vbmUiLAogIGNvbD1obWNvbHMpCnBsb3QobWFwMikKYGBgCgpgYGB7ciBzYXZlbWV9Cm1lc3NhZ2UocGFzdGUwKCJUaGlzIGlzIGhwZ2x0b29scyBjb21taXQ6ICIsIGdldF9naXRfY29tbWl0KCkpKQp0aGlzX3NhdmUgPC0gcGFzdGUwKGdzdWIocGF0dGVybj0iXFwuUm1kIiwgcmVwbGFjZT0iIiwgeD1ybWRfZmlsZSksICItdiIsIHZlciwgIi5yZGEueHoiKQptZXNzYWdlKHBhc3RlMCgiU2F2aW5nIHRvICIsIHRoaXNfc2F2ZSkpCiMjdG1wIDwtIHNtKHNhdmVtZShmaWxlbmFtZT10aGlzX3NhdmUpKQpwYW5kZXI6OnBhbmRlcihzZXNzaW9uSW5mbygpKQoKYGBgCgpgYGB7ciBsb2FkbWUsIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnRtcCA8LSBzbShsb2FkbWUoZmlsZW5hbWU9dGhpc19zYXZlKSkKIyMgbG9hZCgidmFyaWFudHNfdmVubi5yZGEiKQpgYGAK