1 Introduction

Collect the results from the gene/tx TRAP and bulk analyses here and perform a few AUCC/correlation/etc comparisons to see how similar/different they are.

*** Reminder to myself ***

When I did this on my main computer, I had the same environment loaded for the bulk and trap data. In the container this is not possible; so I will need to judiciously use the rda argument to combine_de_tables() and collect up the results before running the following blocks. Don’t forget to add that.

2 Compare the bulk and TRAP data

There are a few variables from the bulk analyses which we may use to compare to the TRAP data:

mm_de_dlgn_sva, mm_de_ret_sva, mm_de_scn_sva, mm_de_dlgn, mm_de_ret, mm_de_scn.

Those are location-specific contrasts.

genoloc_de_sva/genoloc_table_sva provide all contrasts that I thought might be fun.

The following is all pre-wt filtering. Next I will repeat everything post-filtering.

## The bulk tables
genoloc_table_sva[["table_names"]]

## The TRAP tables
location_tables_full[["table_names"]]
genotype_tables_full[["table_names"]]
time_tables_full[["table_names"]]

## Retina het vs Retina wt
bulk_table <- genoloc_table_sva[["data"]][["Retina_ko_vs_Retina_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p08_retina"]]
retina_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
retina_ko_het_aucc
retina_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
retina_ko_het_ros[["lfc_scatter"]]

bulk_table <- genoloc_table_sva[["data"]][["Retina_ko_vs_Retina_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p15_retina"]]
retina_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
retina_ko_het_aucc
retina_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
retina_ko_het_ros[["lfc_scatter"]]

bulk_table <- genoloc_table_sva[["data"]][["SCN_ko_vs_SCN_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p08_scn"]]
scn_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
scn_ko_het_aucc
scn_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
scn_ko_het_ros[["lfc_scatter"]]


bulk_table <- genoloc_table_sva[["data"]][["SCN_ko_vs_SCN_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p15_scn"]]
scn_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
scn_ko_het_aucc
scn_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
scn_ko_het_ros[["lfc_scatter"]]

bulk_table <- genoloc_table_sva[["data"]][["dLGN_ko_vs_dLGN_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p08_dlgn"]]
dlgn_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
dlgn_ko_het_aucc
dlgn_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
dlgn_ko_het_ros[["lfc_scatter"]]

bulk_table <- genoloc_table_sva[["data"]][["dLGN_ko_vs_dLGN_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p15_dlgn"]]
dlgn_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
dlgn_ko_het_aucc
dlgn_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
dlgn_ko_het_ros[["lfc_scatter"]]
## The bulk tables
genoloc_table_sva[["table_names"]]

## The TRAP tables
location_tables[["table_names"]]
genotype_tables[["table_names"]]
time_tables[["table_names"]]

## Retina het vs Retina wt
bulk_table <- genoloc_table_sva[["data"]][["Retina_ko_vs_Retina_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p08_retina"]]
retina_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
retina_ko_het_aucc
retina_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
retina_ko_het_ros[["lfc_scatter"]]

bulk_table <- genoloc_table_sva[["data"]][["Retina_ko_vs_Retina_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p15_retina"]]
retina_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
retina_ko_het_aucc
retina_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
retina_ko_het_ros[["lfc_scatter"]]

bulk_table <- genoloc_table_sva[["data"]][["SCN_ko_vs_SCN_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p08_scn"]]
scn_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
scn_ko_het_aucc
scn_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
scn_ko_het_ros[["lfc_scatter"]]


bulk_table <- genoloc_table_sva[["data"]][["SCN_ko_vs_SCN_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p15_scn"]]
scn_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
scn_ko_het_aucc
scn_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
scn_ko_het_ros[["lfc_scatter"]]

bulk_table <- genoloc_table_sva[["data"]][["dLGN_ko_vs_dLGN_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p08_dlgn"]]
dlgn_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
                                     lx = "deseq_logfc", ly = "deseq_logfc")
dlgn_ko_het_aucc
dlgn_ko_het_ros <- rank_order_scatter(bulk_table, trap_table)
dlgn_ko_het_ros[["lfc_scatter"]]

bulk_table <- genoloc_table_sva[["data"]][["dLGN_ko_vs_dLGN_het"]]
trap_table <- genotype_tables_full[["data"]][["kh_p15_dlgn"]]
dlgn_ko_het_aucc <- calculate_aucc(bulk_table, trap_table,
                                     px = "deseq_adjp", py = "deseq_adjp",
LS0tCnRpdGxlOiAiaXBSR0MgVFJBUCB2cy4gYnVsayAtLSBDb21wYXJlIHRoZSB0cmFwIGFuZCBidWxrIHJlc3VsdHMuIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgZmlnX2NhcHRpb246IHRydWUKICAgIGZpZ19oZWlnaHQ6IDcKICAgIGZpZ193aWR0aDogNwogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAga2VlcF9tZDogZmFsc2UKICAgIG1vZGU6IHNlbGZjb250YWluZWQKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIHRoZW1lOiByZWFkYWJsZQogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6CiAgICAgIGNvbGxhcHNlZDogZmFsc2UKICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UKICAgICAgdG9jX2RlcHRoOiA1CiAgICAgIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOgogICAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgICAgICBjb2RlX2ZvbGRpbmc6IHNob3cKICAgICAgICBkZl9wcmludDogcGFnZWQKICAgICAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgICAgIGZpZ19oZWlnaHQ6IDcKICAgICAgICBmaWdfd2lkdGg6IDcKICAgICAgICBoaWdobGlnaHQ6IHRhbmdvCiAgICAgICAgd2lkdGg6IDMwMAogICAgICAgIGtlZXBfbWQ6IGZhbHNlCiAgICAgICAgbW9kZTogc2VsZmNvbnRhaW5lZAogICAgICAgIHRvY19mbG9hdDogdHJ1ZQogICAgICAgIEJpb2NTdHlsZTo6aHRtbF9kb2N1bWVudDoKICAgICAgICAgIGNvZGVfZG93bmxvYWQ6IHRydWUKICAgICAgICAgIGNvZGVfZm9sZGluZzogc2hvdwogICAgICAgICAgZmlnX2NhcHRpb246IHRydWUKICAgICAgICAgIGZpZ19oZWlnaHQ6IDcKICAgICAgICAgIGZpZ193aWR0aDogNwogICAgICAgICAgaGlnaGxpZ2h0OiB0YW5nbwogICAgICAgICAga2VlcF9tZDogZmFsc2UKICAgICAgICAgIG1vZGU6IHNlbGZjb250YWluZWQKICAgICAgICAgIHRvY19mbG9hdDogdHJ1ZQotLS0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSwgdGQgewogIGZvbnQtc2l6ZTogMTZweDsKfQpjb2RlLnJ7CiAgZm9udC1zaXplOiAxNnB4Owp9CnByZSB7CiAgZm9udC1zaXplOiAxNnB4Cn0KPC9zdHlsZT4KCiMgSW50cm9kdWN0aW9uCgpDb2xsZWN0IHRoZSByZXN1bHRzIGZyb20gdGhlIGdlbmUvdHggVFJBUCBhbmQgYnVsayBhbmFseXNlcyBoZXJlIGFuZApwZXJmb3JtIGEgZmV3IEFVQ0MvY29ycmVsYXRpb24vZXRjIGNvbXBhcmlzb25zIHRvIHNlZSBob3cKc2ltaWxhci9kaWZmZXJlbnQgdGhleSBhcmUuCgoqKiogUmVtaW5kZXIgdG8gbXlzZWxmICoqKgoKV2hlbiBJIGRpZCB0aGlzIG9uIG15IG1haW4gY29tcHV0ZXIsIEkgaGFkIHRoZSBzYW1lIGVudmlyb25tZW50IGxvYWRlZApmb3IgdGhlIGJ1bGsgYW5kIHRyYXAgZGF0YS4gIEluIHRoZSBjb250YWluZXIgdGhpcyBpcyBub3QgcG9zc2libGU7IHNvCkkgd2lsbCBuZWVkIHRvIGp1ZGljaW91c2x5IHVzZSB0aGUgcmRhIGFyZ3VtZW50IHRvIGNvbWJpbmVfZGVfdGFibGVzKCkKYW5kIGNvbGxlY3QgdXAgdGhlIHJlc3VsdHMgYmVmb3JlIHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBibG9ja3MuICBEb24ndApmb3JnZXQgdG8gYWRkIHRoYXQuCgojIENvbXBhcmUgdGhlIGJ1bGsgYW5kIFRSQVAgZGF0YQoKVGhlcmUgYXJlIGEgZmV3IHZhcmlhYmxlcyBmcm9tIHRoZSBidWxrIGFuYWx5c2VzIHdoaWNoIHdlIG1heSB1c2UgdG8KY29tcGFyZSB0byB0aGUgVFJBUCBkYXRhOgoKbW1fZGVfZGxnbl9zdmEsIG1tX2RlX3JldF9zdmEsIG1tX2RlX3Njbl9zdmEsIG1tX2RlX2RsZ24sIG1tX2RlX3JldCwKbW1fZGVfc2NuLgoKVGhvc2UgYXJlIGxvY2F0aW9uLXNwZWNpZmljIGNvbnRyYXN0cy4KCmdlbm9sb2NfZGVfc3ZhL2dlbm9sb2NfdGFibGVfc3ZhIHByb3ZpZGUgYWxsIGNvbnRyYXN0cyB0aGF0IEkgdGhvdWdodAptaWdodCBiZSBmdW4uCgpUaGUgZm9sbG93aW5nIGlzIGFsbCBwcmUtd3QgZmlsdGVyaW5nLiAgTmV4dCBJIHdpbGwgcmVwZWF0IGV2ZXJ5dGhpbmcgcG9zdC1maWx0ZXJpbmcuCgpgYGB7ciwgZXZhbD1GQUxTRX0KIyMgVGhlIGJ1bGsgdGFibGVzCmdlbm9sb2NfdGFibGVfc3ZhW1sidGFibGVfbmFtZXMiXV0KCiMjIFRoZSBUUkFQIHRhYmxlcwpsb2NhdGlvbl90YWJsZXNfZnVsbFtbInRhYmxlX25hbWVzIl1dCmdlbm90eXBlX3RhYmxlc19mdWxsW1sidGFibGVfbmFtZXMiXV0KdGltZV90YWJsZXNfZnVsbFtbInRhYmxlX25hbWVzIl1dCgojIyBSZXRpbmEgaGV0IHZzIFJldGluYSB3dApidWxrX3RhYmxlIDwtIGdlbm9sb2NfdGFibGVfc3ZhW1siZGF0YSJdXVtbIlJldGluYV9rb192c19SZXRpbmFfaGV0Il1dCnRyYXBfdGFibGUgPC0gZ2Vub3R5cGVfdGFibGVzX2Z1bGxbWyJkYXRhIl1dW1sia2hfcDA4X3JldGluYSJdXQpyZXRpbmFfa29faGV0X2F1Y2MgPC0gY2FsY3VsYXRlX2F1Y2MoYnVsa190YWJsZSwgdHJhcF90YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB4ID0gImRlc2VxX2FkanAiLCBweSA9ICJkZXNlcV9hZGpwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx4ID0gImRlc2VxX2xvZ2ZjIiwgbHkgPSAiZGVzZXFfbG9nZmMiKQpyZXRpbmFfa29faGV0X2F1Y2MKcmV0aW5hX2tvX2hldF9yb3MgPC0gcmFua19vcmRlcl9zY2F0dGVyKGJ1bGtfdGFibGUsIHRyYXBfdGFibGUpCnJldGluYV9rb19oZXRfcm9zW1sibGZjX3NjYXR0ZXIiXV0KCmJ1bGtfdGFibGUgPC0gZ2Vub2xvY190YWJsZV9zdmFbWyJkYXRhIl1dW1siUmV0aW5hX2tvX3ZzX1JldGluYV9oZXQiXV0KdHJhcF90YWJsZSA8LSBnZW5vdHlwZV90YWJsZXNfZnVsbFtbImRhdGEiXV1bWyJraF9wMTVfcmV0aW5hIl1dCnJldGluYV9rb19oZXRfYXVjYyA8LSBjYWxjdWxhdGVfYXVjYyhidWxrX3RhYmxlLCB0cmFwX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHggPSAiZGVzZXFfYWRqcCIsIHB5ID0gImRlc2VxX2FkanAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHggPSAiZGVzZXFfbG9nZmMiLCBseSA9ICJkZXNlcV9sb2dmYyIpCnJldGluYV9rb19oZXRfYXVjYwpyZXRpbmFfa29faGV0X3JvcyA8LSByYW5rX29yZGVyX3NjYXR0ZXIoYnVsa190YWJsZSwgdHJhcF90YWJsZSkKcmV0aW5hX2tvX2hldF9yb3NbWyJsZmNfc2NhdHRlciJdXQoKYnVsa190YWJsZSA8LSBnZW5vbG9jX3RhYmxlX3N2YVtbImRhdGEiXV1bWyJTQ05fa29fdnNfU0NOX2hldCJdXQp0cmFwX3RhYmxlIDwtIGdlbm90eXBlX3RhYmxlc19mdWxsW1siZGF0YSJdXVtbImtoX3AwOF9zY24iXV0Kc2NuX2tvX2hldF9hdWNjIDwtIGNhbGN1bGF0ZV9hdWNjKGJ1bGtfdGFibGUsIHRyYXBfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweCA9ICJkZXNlcV9hZGpwIiwgcHkgPSAiZGVzZXFfYWRqcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBseCA9ICJkZXNlcV9sb2dmYyIsIGx5ID0gImRlc2VxX2xvZ2ZjIikKc2NuX2tvX2hldF9hdWNjCnNjbl9rb19oZXRfcm9zIDwtIHJhbmtfb3JkZXJfc2NhdHRlcihidWxrX3RhYmxlLCB0cmFwX3RhYmxlKQpzY25fa29faGV0X3Jvc1tbImxmY19zY2F0dGVyIl1dCgoKYnVsa190YWJsZSA8LSBnZW5vbG9jX3RhYmxlX3N2YVtbImRhdGEiXV1bWyJTQ05fa29fdnNfU0NOX2hldCJdXQp0cmFwX3RhYmxlIDwtIGdlbm90eXBlX3RhYmxlc19mdWxsW1siZGF0YSJdXVtbImtoX3AxNV9zY24iXV0Kc2NuX2tvX2hldF9hdWNjIDwtIGNhbGN1bGF0ZV9hdWNjKGJ1bGtfdGFibGUsIHRyYXBfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweCA9ICJkZXNlcV9hZGpwIiwgcHkgPSAiZGVzZXFfYWRqcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBseCA9ICJkZXNlcV9sb2dmYyIsIGx5ID0gImRlc2VxX2xvZ2ZjIikKc2NuX2tvX2hldF9hdWNjCnNjbl9rb19oZXRfcm9zIDwtIHJhbmtfb3JkZXJfc2NhdHRlcihidWxrX3RhYmxlLCB0cmFwX3RhYmxlKQpzY25fa29faGV0X3Jvc1tbImxmY19zY2F0dGVyIl1dCgpidWxrX3RhYmxlIDwtIGdlbm9sb2NfdGFibGVfc3ZhW1siZGF0YSJdXVtbImRMR05fa29fdnNfZExHTl9oZXQiXV0KdHJhcF90YWJsZSA8LSBnZW5vdHlwZV90YWJsZXNfZnVsbFtbImRhdGEiXV1bWyJraF9wMDhfZGxnbiJdXQpkbGduX2tvX2hldF9hdWNjIDwtIGNhbGN1bGF0ZV9hdWNjKGJ1bGtfdGFibGUsIHRyYXBfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweCA9ICJkZXNlcV9hZGpwIiwgcHkgPSAiZGVzZXFfYWRqcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBseCA9ICJkZXNlcV9sb2dmYyIsIGx5ID0gImRlc2VxX2xvZ2ZjIikKZGxnbl9rb19oZXRfYXVjYwpkbGduX2tvX2hldF9yb3MgPC0gcmFua19vcmRlcl9zY2F0dGVyKGJ1bGtfdGFibGUsIHRyYXBfdGFibGUpCmRsZ25fa29faGV0X3Jvc1tbImxmY19zY2F0dGVyIl1dCgpidWxrX3RhYmxlIDwtIGdlbm9sb2NfdGFibGVfc3ZhW1siZGF0YSJdXVtbImRMR05fa29fdnNfZExHTl9oZXQiXV0KdHJhcF90YWJsZSA8LSBnZW5vdHlwZV90YWJsZXNfZnVsbFtbImRhdGEiXV1bWyJraF9wMTVfZGxnbiJdXQpkbGduX2tvX2hldF9hdWNjIDwtIGNhbGN1bGF0ZV9hdWNjKGJ1bGtfdGFibGUsIHRyYXBfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweCA9ICJkZXNlcV9hZGpwIiwgcHkgPSAiZGVzZXFfYWRqcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBseCA9ICJkZXNlcV9sb2dmYyIsIGx5ID0gImRlc2VxX2xvZ2ZjIikKZGxnbl9rb19oZXRfYXVjYwpkbGduX2tvX2hldF9yb3MgPC0gcmFua19vcmRlcl9zY2F0dGVyKGJ1bGtfdGFibGUsIHRyYXBfdGFibGUpCmRsZ25fa29faGV0X3Jvc1tbImxmY19zY2F0dGVyIl1dCmBgYAoKYGBge3IsIGV2YWw9RkFMU0V9CiMjIFRoZSBidWxrIHRhYmxlcwpnZW5vbG9jX3RhYmxlX3N2YVtbInRhYmxlX25hbWVzIl1dCgojIyBUaGUgVFJBUCB0YWJsZXMKbG9jYXRpb25fdGFibGVzW1sidGFibGVfbmFtZXMiXV0KZ2Vub3R5cGVfdGFibGVzW1sidGFibGVfbmFtZXMiXV0KdGltZV90YWJsZXNbWyJ0YWJsZV9uYW1lcyJdXQoKIyMgUmV0aW5hIGhldCB2cyBSZXRpbmEgd3QKYnVsa190YWJsZSA8LSBnZW5vbG9jX3RhYmxlX3N2YVtbImRhdGEiXV1bWyJSZXRpbmFfa29fdnNfUmV0aW5hX2hldCJdXQp0cmFwX3RhYmxlIDwtIGdlbm90eXBlX3RhYmxlc19mdWxsW1siZGF0YSJdXVtbImtoX3AwOF9yZXRpbmEiXV0KcmV0aW5hX2tvX2hldF9hdWNjIDwtIGNhbGN1bGF0ZV9hdWNjKGJ1bGtfdGFibGUsIHRyYXBfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweCA9ICJkZXNlcV9hZGpwIiwgcHkgPSAiZGVzZXFfYWRqcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBseCA9ICJkZXNlcV9sb2dmYyIsIGx5ID0gImRlc2VxX2xvZ2ZjIikKcmV0aW5hX2tvX2hldF9hdWNjCnJldGluYV9rb19oZXRfcm9zIDwtIHJhbmtfb3JkZXJfc2NhdHRlcihidWxrX3RhYmxlLCB0cmFwX3RhYmxlKQpyZXRpbmFfa29faGV0X3Jvc1tbImxmY19zY2F0dGVyIl1dCgpidWxrX3RhYmxlIDwtIGdlbm9sb2NfdGFibGVfc3ZhW1siZGF0YSJdXVtbIlJldGluYV9rb192c19SZXRpbmFfaGV0Il1dCnRyYXBfdGFibGUgPC0gZ2Vub3R5cGVfdGFibGVzX2Z1bGxbWyJkYXRhIl1dW1sia2hfcDE1X3JldGluYSJdXQpyZXRpbmFfa29faGV0X2F1Y2MgPC0gY2FsY3VsYXRlX2F1Y2MoYnVsa190YWJsZSwgdHJhcF90YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB4ID0gImRlc2VxX2FkanAiLCBweSA9ICJkZXNlcV9hZGpwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx4ID0gImRlc2VxX2xvZ2ZjIiwgbHkgPSAiZGVzZXFfbG9nZmMiKQpyZXRpbmFfa29faGV0X2F1Y2MKcmV0aW5hX2tvX2hldF9yb3MgPC0gcmFua19vcmRlcl9zY2F0dGVyKGJ1bGtfdGFibGUsIHRyYXBfdGFibGUpCnJldGluYV9rb19oZXRfcm9zW1sibGZjX3NjYXR0ZXIiXV0KCmJ1bGtfdGFibGUgPC0gZ2Vub2xvY190YWJsZV9zdmFbWyJkYXRhIl1dW1siU0NOX2tvX3ZzX1NDTl9oZXQiXV0KdHJhcF90YWJsZSA8LSBnZW5vdHlwZV90YWJsZXNfZnVsbFtbImRhdGEiXV1bWyJraF9wMDhfc2NuIl1dCnNjbl9rb19oZXRfYXVjYyA8LSBjYWxjdWxhdGVfYXVjYyhidWxrX3RhYmxlLCB0cmFwX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHggPSAiZGVzZXFfYWRqcCIsIHB5ID0gImRlc2VxX2FkanAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHggPSAiZGVzZXFfbG9nZmMiLCBseSA9ICJkZXNlcV9sb2dmYyIpCnNjbl9rb19oZXRfYXVjYwpzY25fa29faGV0X3JvcyA8LSByYW5rX29yZGVyX3NjYXR0ZXIoYnVsa190YWJsZSwgdHJhcF90YWJsZSkKc2NuX2tvX2hldF9yb3NbWyJsZmNfc2NhdHRlciJdXQoKCmJ1bGtfdGFibGUgPC0gZ2Vub2xvY190YWJsZV9zdmFbWyJkYXRhIl1dW1siU0NOX2tvX3ZzX1NDTl9oZXQiXV0KdHJhcF90YWJsZSA8LSBnZW5vdHlwZV90YWJsZXNfZnVsbFtbImRhdGEiXV1bWyJraF9wMTVfc2NuIl1dCnNjbl9rb19oZXRfYXVjYyA8LSBjYWxjdWxhdGVfYXVjYyhidWxrX3RhYmxlLCB0cmFwX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHggPSAiZGVzZXFfYWRqcCIsIHB5ID0gImRlc2VxX2FkanAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHggPSAiZGVzZXFfbG9nZmMiLCBseSA9ICJkZXNlcV9sb2dmYyIpCnNjbl9rb19oZXRfYXVjYwpzY25fa29faGV0X3JvcyA8LSByYW5rX29yZGVyX3NjYXR0ZXIoYnVsa190YWJsZSwgdHJhcF90YWJsZSkKc2NuX2tvX2hldF9yb3NbWyJsZmNfc2NhdHRlciJdXQoKYnVsa190YWJsZSA8LSBnZW5vbG9jX3RhYmxlX3N2YVtbImRhdGEiXV1bWyJkTEdOX2tvX3ZzX2RMR05faGV0Il1dCnRyYXBfdGFibGUgPC0gZ2Vub3R5cGVfdGFibGVzX2Z1bGxbWyJkYXRhIl1dW1sia2hfcDA4X2RsZ24iXV0KZGxnbl9rb19oZXRfYXVjYyA8LSBjYWxjdWxhdGVfYXVjYyhidWxrX3RhYmxlLCB0cmFwX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHggPSAiZGVzZXFfYWRqcCIsIHB5ID0gImRlc2VxX2FkanAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHggPSAiZGVzZXFfbG9nZmMiLCBseSA9ICJkZXNlcV9sb2dmYyIpCmRsZ25fa29faGV0X2F1Y2MKZGxnbl9rb19oZXRfcm9zIDwtIHJhbmtfb3JkZXJfc2NhdHRlcihidWxrX3RhYmxlLCB0cmFwX3RhYmxlKQpkbGduX2tvX2hldF9yb3NbWyJsZmNfc2NhdHRlciJdXQoKYnVsa190YWJsZSA8LSBnZW5vbG9jX3RhYmxlX3N2YVtbImRhdGEiXV1bWyJkTEdOX2tvX3ZzX2RMR05faGV0Il1dCnRyYXBfdGFibGUgPC0gZ2Vub3R5cGVfdGFibGVzX2Z1bGxbWyJkYXRhIl1dW1sia2hfcDE1X2RsZ24iXV0KZGxnbl9rb19oZXRfYXVjYyA8LSBjYWxjdWxhdGVfYXVjYyhidWxrX3RhYmxlLCB0cmFwX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHggPSAiZGVzZXFfYWRqcCIsIHB5ID0gImRlc2VxX2FkanAiLApgYGAK