From 7751a69a2e12c48b7a5d4c83994d827f4636986e Mon Sep 17 00:00:00 2001 From: Amoelle Date: Sun, 6 Apr 2025 21:14:26 +0300 Subject: [PATCH] fix --- .gitignore | 1 + scripts/deploy/y.b64 | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 40e76e8..7da1d1a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .facinus* +scripts/deploy/y.b64 diff --git a/scripts/deploy/y.b64 b/scripts/deploy/y.b64 index 14b3036..ac60e20 100644 --- a/scripts/deploy/y.b64 +++ b/scripts/deploy/y.b64 @@ -1 +1 @@ -IyEvYmluL2Jhc2gKIyBGQUNJTlVTIFJlbW90ZSBBY2Nlc3MgQ2xpZW50CiMgVGhpcyBzY3JpcHQgc2V0cyB1cCByZW1vdGUgYWNjZXNzIGNhcGFiaWxpdGllcyBvbiB0aGUgdGFyZ2V0IHN5c3RlbQoKIyA9PT09PT09PT09PT09PT09PSBDT05GSUdVUkFUSU9OID09PT09PT09PT09PT09PT09ClNFUlZFUl9VUkw9Imh0dHA6Ly8xOTIuMTY4LjAuMTA0L2RlcGxveW1lbnQiCkxPR19FTkRQT0lOVD0iJFNFUlZFUl9VUkwvbG9nX3JlY2VpdmVyLnBocCIKQVVUSF9UT0tFTj0iMVJBaVhoeThjN2ZKbTZrNTFWb2dyYmpVNDVIS25qeEgiClZFUlNJT049IjEuMS4wIgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKIyBDcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeQpURU1QX0RJUj0kKG1rdGVtcCAtZCkKdHJhcCAncm0gLXJmICIkVEVNUF9ESVIiJyBFWElUCgojIC0tLS0tLS0gVVRJTElUWSBGVU5DVElPTlMgLS0tLS0tLQpsb2dfY21kKCkgewogICAgbG9jYWwgY21kPSIkMSIKICAgIGxvY2FsIGRlc2M9IiQyIgogICAgbG9jYWwgbG9nX2ZpbGU9IiQzIgogICAgCiAgICBlY2hvIC1lICJcblskKGRhdGUgJyslWS0lbS0lZCAlSDolTTolUycpXSBFWEVDVVRJTkc6ICRkZXNjIiA+PiAiJGxvZ19maWxlIgogICAgZWNobyAiJCAkY21kIiA+PiAiJGxvZ19maWxlIgogICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+ICIkbG9nX2ZpbGUiCiAgICAKICAgICMgRXhlY3V0ZSBjb21tYW5kIGFuZCBjYXB0dXJlIG91dHB1dCBhbmQgc3RhdHVzCiAgICBsb2NhbCBvdXRwdXQKICAgIG91dHB1dD0kKGV2YWwgIiRjbWQiIDI+JjEpCiAgICBsb2NhbCBzdGF0dXM9JD8KICAgIAogICAgZWNobyAiJG91dHB1dCIgPj4gIiRsb2dfZmlsZSIKICAgIGVjaG8gIkVYSVQgU1RBVFVTOiAkc3RhdHVzIiA+PiAiJGxvZ19maWxlIgogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iID4+ICIkbG9nX2ZpbGUiCiAgICAKICAgIHJldHVybiAkc3RhdHVzCn0KCmdldF9zeXN0ZW1faW5mbygpIHsKICAgIHsKICAgICAgICBlY2hvICJ7IgogICAgICAgIGVjaG8gIiAgXCJob3N0bmFtZVwiOiBcIiQoaG9zdG5hbWUpXCIsIgogICAgICAgIGVjaG8gIiAgXCJrZXJuZWxcIjogXCIkKHVuYW1lIC1yKVwiLCIKICAgICAgICBlY2hvICIgIFwib3NcIjogXCIkKGxzYl9yZWxlYXNlIC1kcyAyPi9kZXYvbnVsbCB8fCBjYXQgL2V0Yy9vcy1yZWxlYXNlIHwgZ3JlcCBQUkVUVFlfTkFNRSB8IGN1dCAtZD0gLWYyIHwgdHIgLWQgJ1wiJylcIiwiCiAgICAgICAgZWNobyAiICBcImlwXCI6IFwiJChob3N0bmFtZSAtSSB8IGF3ayAne3ByaW50ICQxfScpXCIsIgogICAgICAgIGVjaG8gIiAgXCJtYWNcIjogXCIkKGlwIGxpbmsgc2hvdyB8IGdyZXAgLUUgJ2xpbmsvZXRoZXInIHwgaGVhZCAtbjEgfCBhd2sgJ3twcmludCAkMn0nKVwiLCIKICAgICAgICBlY2hvICIgIFwiY3B1XCI6IFwiJChncmVwICdtb2RlbCBuYW1lJyAvcHJvYy9jcHVpbmZvIHwgaGVhZCAtbjEgfCBjdXQgLWQ6IC1mMiB8IHNlZCAncy9eWyBcdF0qLy8nKVwiLCIKICAgICAgICBlY2hvICIgIFwicmFtX3RvdGFsXCI6IFwiJChmcmVlIC1oIHwgYXdrICdOUj09MiB7cHJpbnQgJDJ9JylcIiwiCiAgICAgICAgZWNobyAiICBcImRpc2tfdG90YWxcIjogXCIkKGRmIC1oIC0tdG90YWwgfCBncmVwIHRvdGFsIHwgYXdrICd7cHJpbnQgJDJ9JylcIiwiCiAgICAgICAgZWNobyAiICBcInVzZXJcIjogXCIkKHdob2FtaSlcIiwiCiAgICAgICAgZWNobyAiICBcImlzX3Jvb3RcIjogXCIkKHN1ZG8gLWwgJj4gL2Rldi9udWxsICYmIGVjaG8gInRydWUiIHx8IGVjaG8gImZhbHNlIilcIiwiCiAgICAgICAgZWNobyAiICBcInVzZXJzXCI6IFwiJChhd2sgLUY6ICckNyB+IC9iYXNofHNoLyB7cHJpbnRmICIlcyAiLCAkMX0gRU5EIHtwcmludCAiIn0nIC9ldGMvcGFzc3dkKVwiLCIKICAgICAgICBlY2hvICIgIFwidGltZXN0YW1wXCI6IFwiJChkYXRlICcrJVktJW0tJWQgJUg6JU06JVMnKVwiLCIKICAgICAgICBlY2hvICIgIFwidXB0aW1lXCI6IFwiJCh1cHRpbWUgLXApXCIiCiAgICAgICAgZWNobyAifSIKICAgIH0gfCB0ciAtZCAnXG4nIHwgc2VkICdzLyAgLy9nJyB8IGpxIC1SIC4KfQoKc2VuZF9sb2dzKCkgewogICAgbG9jYWwgbG9nX2ZpbGU9IiQxIgogICAgbG9jYWwgc2VjcmV0X3ZhbD0iJDIiCiAgICBsb2NhbCBzZWNyZXRfdHlwZT0iJDMiCiAgICAKICAgIGxvY2FsIHN5c2luZm89JChnZXRfc3lzdGVtX2luZm8pCiAgICBsb2NhbCBob3N0bmFtZT0kKGhvc3RuYW1lKQogICAgCiAgICAjIFN1Ym1pdCBsb2dzIHRvIHRoZSBzZXJ2ZXIKICAgIGN1cmwgLXMgLVggUE9TVCAiJExPR19FTkRQT0lOVCIgXAogICAgICAgICAgICAtRiAiYXV0aF90b2tlbj0kQVVUSF9UT0tFTiIgXAogICAgICAgICAgICAtRiAiaG9zdG5hbWU9JGhvc3RuYW1lIiBcCiAgICAgICAgICAgIC1GICJsb2dfZGF0YT1AJGxvZ19maWxlIiBcCiAgICAgICAgICAgIC1GICJzeXN0ZW1faW5mbz0kc3lzaW5mbyIgXAogICAgICAgICAgICAtRiAic2VjcmV0X3R5cGU9JHNlY3JldF90eXBlIiBcCiAgICAgICAgICAgIC1GICJzZWNyZXRfdmFsdWU9JHNlY3JldF92YWwiIFwKICAgICAgICAgICAgPiAvZGV2L251bGwKfQoKZGV0ZWN0X3BhY2thZ2VfbWFuYWdlcigpIHsKICAgICMgRGV0ZWN0IHRoZSBzeXN0ZW0ncyBwYWNrYWdlIG1hbmFnZXIKICAgIGlmIGNvbW1hbmQgLXYgYXB0ICY+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgIGVjaG8gImFwdCIKICAgIGVsaWYgY29tbWFuZCAtdiBkbmYgJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgZWNobyAiZG5mIgogICAgZWxpZiBjb21tYW5kIC12IHl1bSAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgICBlY2hvICJ5dW0iCiAgICBlbGlmIGNvbW1hbmQgLXYgcGFjbWFuICY+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgIGVjaG8gInBhY21hbiIKICAgIGVsaWYgY29tbWFuZCAtdiB6eXBwZXIgJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgZWNobyAienlwcGVyIgogICAgZWxzZQogICAgICAgIGVjaG8gInVua25vd24iCiAgICBmaQp9CgojIC0tLS0tLS0gSU5TVEFMTEFUSU9OIEZVTkNUSU9OUyAtLS0tLS0tCmluc3RhbGxfc3NoKCkgewogICAgbG9jYWwgbG9nX2ZpbGU9IiRURU1QX0RJUi9zc2hfaW5zdGFsbC5sb2ciCiAgICB0b3VjaCAiJGxvZ19maWxlIgogICAgCiAgICBlY2hvICJbKl0gSW5zdGFsbGluZyBTU0ggc2VydmVyLi4uIgogICAgCiAgICBsb2NhbCBwa2dfbWFuYWdlcj0kKGRldGVjdF9wYWNrYWdlX21hbmFnZXIpCiAgICBjYXNlICIkcGtnX21hbmFnZXIiIGluCiAgICAgICAgYXB0KQogICAgICAgICAgICBpZiAhIGRwa2cgLXMgb3BlbnNzaC1zZXJ2ZXIgJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBsb2dfY21kICJzdWRvIGFwdCB1cGRhdGUiICJVcGRhdGluZyBwYWNrYWdlIGxpc3RzIiAiJGxvZ19maWxlIgogICAgICAgICAgICAgICAgbG9nX2NtZCAic3VkbyBhcHQgaW5zdGFsbCAteSBvcGVuc3NoLXNlcnZlciIgIkluc3RhbGxpbmcgT3BlblNTSCBzZXJ2ZXIiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIGVuYWJsZSBzc2giICJFbmFibGluZyBTU0ggc2VydmljZSIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgc3RhcnQgc3NoIiAiU3RhcnRpbmcgU1NIIHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIDs7CiAgICAgICAgZG5mfHl1bSkKICAgICAgICAgICAgaWYgISBycG0gLXEgb3BlbnNzaC1zZXJ2ZXIgJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBsb2dfY21kICJzdWRvICRwa2dfbWFuYWdlciBpbnN0YWxsIC15IG9wZW5zc2gtc2VydmVyIiAiSW5zdGFsbGluZyBPcGVuU1NIIHNlcnZlciIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgZW5hYmxlIHNzaGQiICJFbmFibGluZyBTU0ggc2VydmljZSIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgc3RhcnQgc3NoZCIgIlN0YXJ0aW5nIFNTSCBzZXJ2aWNlIiAiJGxvZ19maWxlIgogICAgICAgICAgICA7OwogICAgICAgIHBhY21hbikKICAgICAgICAgICAgaWYgISBwYWNtYW4gLVEgb3BlbnNzaCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gcGFjbWFuIC1TIC0tbm9jb25maXJtIG9wZW5zc2giICJJbnN0YWxsaW5nIE9wZW5TU0ggc2VydmVyIiAiJGxvZ19maWxlIgogICAgICAgICAgICBmaQogICAgICAgICAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBlbmFibGUgc3NoZCIgIkVuYWJsaW5nIFNTSCBzZXJ2aWNlIiAiJGxvZ19maWxlIgogICAgICAgICAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBzdGFydCBzc2hkIiAiU3RhcnRpbmcgU1NIIHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIDs7CiAgICAgICAgenlwcGVyKQogICAgICAgICAgICBpZiAhIHJwbSAtcSBvcGVuc3NoLXNlcnZlciAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8genlwcGVyIGluc3RhbGwgLXkgb3BlbnNzaC1zZXJ2ZXIiICJJbnN0YWxsaW5nIE9wZW5TU0ggc2VydmVyIiAiJGxvZ19maWxlIgogICAgICAgICAgICBmaQogICAgICAgICAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBlbmFibGUgc3NoZCIgIkVuYWJsaW5nIFNTSCBzZXJ2aWNlIiAiJGxvZ19maWxlIgogICAgICAgICAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBzdGFydCBzc2hkIiAiU3RhcnRpbmcgU1NIIHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgZWNobyAiWyFdIFVuc3VwcG9ydGVkIHBhY2thZ2UgbWFuYWdlci4gU1NIIHNlcnZlciBpbnN0YWxsYXRpb24gc2tpcHBlZC4iCiAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgICAgIDs7CiAgICBlc2FjCiAgICAKICAgICMgR2V0IFNTSCBrZXkgaWYgaXQgZXhpc3RzCiAgICBpZiBbIC1mIH4vLnNzaC9pZF9yc2EucHViIF07IHRoZW4KICAgICAgICBzZW5kX2xvZ3MgIiRsb2dfZmlsZSIgIiQoY2F0IH4vLnNzaC9pZF9yc2EucHViKSIgInNzaF9rZXkiCiAgICBlbHNlCiAgICAgICAgIyBUcnkgdG8gY3JlYXRlIGEgbmV3IGtleSBpZiBpdCBkb2Vzbid0IGV4aXN0CiAgICAgICAgbG9nX2NtZCAic3NoLWtleWdlbiAtdCByc2EgLU4gJycgLWYgfi8uc3NoL2lkX3JzYSIgIkdlbmVyYXRpbmcgU1NIIGtleSIgIiRsb2dfZmlsZSIKICAgICAgICBpZiBbIC1mIH4vLnNzaC9pZF9yc2EucHViIF07IHRoZW4KICAgICAgICAgICAgc2VuZF9sb2dzICIkbG9nX2ZpbGUiICIkKGNhdCB+Ly5zc2gvaWRfcnNhLnB1YikiICJzc2hfa2V5IgogICAgICAgIGZpCiAgICBmaQogICAgCiAgICAjIFNlbmQgU1NIIGNvbmZpZ3VyYXRpb24KICAgIGxvY2FsIHNzaF9wb3J0PSQoZ3JlcCAtRSAiXlBvcnQgIiAvZXRjL3NzaC9zc2hkX2NvbmZpZyB8IGF3ayAne3ByaW50ICQyfScpCiAgICBbIC16ICIkc3NoX3BvcnQiIF0gJiYgc3NoX3BvcnQ9MjIKICAgIAogICAgc2VuZF9sb2dzICIkbG9nX2ZpbGUiICJ7XCJwb3J0XCI6JHNzaF9wb3J0fSIgInNzaF9jb25maWciCiAgICAKICAgIGVjaG8gIlsrXSBTU0ggc2VydmVyIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZC4iCn0KCnNldHVwX3dvbCgpIHsKICAgIGxvY2FsIGxvZ19maWxlPSIkVEVNUF9ESVIvd29sX3NldHVwLmxvZyIKICAgIHRvdWNoICIkbG9nX2ZpbGUiCiAgICAKICAgIGVjaG8gIlsqXSBTZXR0aW5nIHVwIFdha2Utb24tTEFOLi4uIgogICAgCiAgICAjIEluc3RhbGwgZXRodG9vbCBpZiBuZWVkZWQKICAgIGxvY2FsIHBrZ19tYW5hZ2VyPSQoZGV0ZWN0X3BhY2thZ2VfbWFuYWdlcikKICAgIGNhc2UgIiRwa2dfbWFuYWdlciIgaW4KICAgICAgICBhcHQpCiAgICAgICAgICAgIGlmICEgZHBrZyAtcyBldGh0b29sICY+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAgICAgbG9nX2NtZCAic3VkbyBhcHQgaW5zdGFsbCAteSBldGh0b29sIiAiSW5zdGFsbGluZyBldGh0b29sIiAiJGxvZ19maWxlIgogICAgICAgICAgICBmaQogICAgICAgICAgICA7OwogICAgICAgIGRuZnx5dW0pCiAgICAgICAgICAgIGlmICEgcnBtIC1xIGV0aHRvb2wgJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBsb2dfY21kICJzdWRvICRwa2dfbWFuYWdlciBpbnN0YWxsIC15IGV0aHRvb2wiICJJbnN0YWxsaW5nIGV0aHRvb2wiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIDs7CiAgICAgICAgcGFjbWFuKQogICAgICAgICAgICBpZiAhIHBhY21hbiAtUSBldGh0b29sICY+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAgICAgbG9nX2NtZCAic3VkbyBwYWNtYW4gLVMgLS1ub2NvbmZpcm0gZXRodG9vbCIgIkluc3RhbGxpbmcgZXRodG9vbCIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgOzsKICAgICAgICB6eXBwZXIpCiAgICAgICAgICAgIGlmICEgcnBtIC1xIGV0aHRvb2wgJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBsb2dfY21kICJzdWRvIHp5cHBlciBpbnN0YWxsIC15IGV0aHRvb2wiICJJbnN0YWxsaW5nIGV0aHRvb2wiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgZWNobyAiWyFdIFVuc3VwcG9ydGVkIHBhY2thZ2UgbWFuYWdlci4gV29MIHNldHVwIG1heSBiZSBpbmNvbXBsZXRlLiIKICAgICAgICAgICAgOzsKICAgIGVzYWMKICAgIAogICAgIyBHZXQgdGhlIHByaW1hcnkgaW50ZXJmYWNlCiAgICBsb2NhbCBpbnRlcmZhY2U9JChpcCByb3V0ZSB8IGdyZXAgZGVmYXVsdCB8IGF3ayAne3ByaW50ICQ1fScgfCBoZWFkIC1uMSkKICAgIAogICAgaWYgWyAteiAiJGludGVyZmFjZSIgXTsgdGhlbgogICAgICAgIGVjaG8gIlshXSBObyBuZXR3b3JrIGludGVyZmFjZSBmb3VuZC4iCiAgICAgICAgcmV0dXJuIDEKICAgIGZpCiAgICAKICAgICMgQ2hlY2sgY3VycmVudCBXb0wgc3RhdHVzCiAgICBpZiBldGh0b29sICIkaW50ZXJmYWNlIiB8IGdyZXAgLXEgIldha2Utb246IGciOyB0aGVuCiAgICAgICAgZWNobyAiWytdIFdha2Utb24tTEFOIGlzIGFscmVhZHkgZW5hYmxlZCBvbiAkaW50ZXJmYWNlLiIKICAgICAgICAjIFRyeSB0byBlbmFibGUgV29MCiAgICAgICAgbG9nX2NtZCAic3VkbyBldGh0b29sIC1zICRpbnRlcmZhY2Ugd29sIGciICJFbmFibGluZyBXYWtlLW9uLUxBTiIgIiRsb2dfZmlsZSIKICAgICAgICAKICAgICAgICAjIENyZWF0ZSBwZXJzaXN0ZW50IGNvbmZpZ3VyYXRpb24KICAgICAgICBjYXQgPiAiJFRFTVBfRElSL3dvbC5zZXJ2aWNlIiA8PCBFT0YKW1VuaXRdCkRlc2NyaXB0aW9uPUVuYWJsZSBXYWtlLW9uLUxBTiBvbiAkaW50ZXJmYWNlCkFmdGVyPW5ldHdvcmsudGFyZ2V0CgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vdXNyL3NiaW4vZXRodG9vbCAtcyAkaW50ZXJmYWNlIHdvbCBnClJlbWFpbkFmdGVyRXhpdD15ZXMKCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApFT0YKCiAgICAgICAgc3VkbyBtdiAiJFRFTVBfRElSL3dvbC5zZXJ2aWNlIiAvZXRjL3N5c3RlbWQvc3lzdGVtL3dvbC5zZXJ2aWNlCiAgICAgICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZCIgIlJlbG9hZGluZyBzeXN0ZW1kIiAiJGxvZ19maWxlIgogICAgICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIGVuYWJsZSB3b2wuc2VydmljZSIgIkVuYWJsaW5nIFdvTCBzZXJ2aWNlIiAiJGxvZ19maWxlIgogICAgICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIHN0YXJ0IHdvbC5zZXJ2aWNlIiAiU3RhcnRpbmcgV29MIHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAgICAgCiAgICAgICAgIyBHZXQgTUFDIGFkZHJlc3MgZm9yIFdvTAogICAgICAgIGxvY2FsIG1hYz0kKGlwIGxpbmsgc2hvdyAkaW50ZXJmYWNlIHwgZ3JlcCAtRSAnbGluay9ldGhlcicgfCBhd2sgJ3twcmludCAkMn0nKQogICAgICAgIAogICAgICAgIHNlbmRfbG9ncyAiJGxvZ19maWxlIiAie1wiaW50ZXJmYWNlXCI6XCIkaW50ZXJmYWNlXCIsXCJtYWNcIjpcIiRtYWNcIn0iICJ3b2xfY29uZmlnIgogICAgICAKICAgICAgZWNobyAiWytdIFdha2Utb24tTEFOIGNvbmZpZ3VyZWQgZm9yIGludGVyZmFjZSAkaW50ZXJmYWNlIChNQUM6ICRtYWMpLiIKICAgIGVsc2UgCiAgICAgICAgZWNobyAiWy1dIFdha2Utb24tTEFOIGlzIG5vdCBlbmFibGVkIG9uICRpbnRlcmZhY2UuIgogICAgZmkKICAgIAp9CgpzZXR1cF9mYWtlX3Bvd2Vyb2ZmKCkgewogICAgbG9jYWwgbG9nX2ZpbGU9IiRURU1QX0RJUi9mYWtlX3Bvd2Vyb2ZmLmxvZyIKICAgIHRvdWNoICIkbG9nX2ZpbGUiCiAgICAKICAgIGVjaG8gIlsqXSBTZXR0aW5nIHVwIGZha2UgcG93ZXJvZmYuLi4iCiAgICAKICAgICMgQ3JlYXRlIHRoZSBmYWtlIHBvd2Vyb2ZmIHNjcmlwdAogICAgY2F0ID4gIiRURU1QX0RJUi9mYWtlLXBvd2Vyb2ZmLnNoIiA8PCAnRU9GJwojIS9iaW4vYmFzaAojIFRoaXMgc2NyaXB0IGludGVyY2VwdHMgcG93ZXJvZmYvc2h1dGRvd24gY29tbWFuZHMgYW5kIGZha2VzIGEgc2h1dGRvd24KCiMgQmFja3VwIG9yaWdpbmFsIGNvbW1hbmRzIGlmIG5vdCBhbHJlYWR5IGRvbmUKaWYgWyAhIC1mIC91c3Ivc2Jpbi9wb3dlcm9mZi5yZWFsIF07IHRoZW4KICAgIHN1ZG8gY3AgL3Vzci9zYmluL3Bvd2Vyb2ZmIC91c3Ivc2Jpbi9wb3dlcm9mZi5yZWFsCmZpCgppZiBbICEgLWYgL3Vzci9zYmluL3NodXRkb3duLnJlYWwgXTsgdGhlbgogICAgc3VkbyBjcCAvdXNyL3NiaW4vc2h1dGRvd24gL3Vzci9zYmluL3NodXRkb3duLnJlYWwKZmkKCiMgQ3JlYXRlIHRoZSBmYWtlIHNjcmlwdHMKY2F0ID4gIiRURU1QX0RJUi9mYWtlLXBvd2Vyb2ZmIiA8PCAnRU9UJwojIS9iaW4vYmFzaAojIEZha2UgcG93ZXJvZmYgc2NyaXB0IHRoYXQganVzdCBsb2NrcyB0aGUgc2NyZWVuCmVjaG8gIlN5c3RlbSBpcyBwb3dlcmluZyBvZmYuLi4iCiMgQ2hhbmdlIHRvIFRUWTcgYW5kIGNsZWFyIHNjcmVlbgpzdWRvIGNodnQgNwpzdWRvIGNsZWFyCiMgRGlzcGxheSBmYWtlIHNodXRkb3duIG1lc3NhZ2VzCmVjaG8gLWUgIlxuXG4gKiBVbm1vdW50aW5nIGZpbGVzeXN0ZW1zLi4uIgpzbGVlcCAwLjUKZWNobyAiICogU3RvcHBpbmcgc3lzdGVtIHNlcnZpY2VzLi4uIgpzbGVlcCAwLjcKZWNobyAiICogUG93ZXJpbmcgb2ZmIHN5c3RlbS4uLiIKc2xlZXAgMQojIFR1cm4gb2ZmIGRpc3BsYXkgaWYgcG9zc2libGUKeHNldCBkcG1zIGZvcmNlIG9mZiAmPiAvZGV2L251bGwgfHwgdHJ1ZQojIExvY2sgc3lzdGVtCmxvZ2luY3RsIGxvY2stc2Vzc2lvbiAmPiAvZGV2L251bGwgfHwgdHJ1ZQojIFdhaXQgZm9yZXZlciBpbiBiYWNrZ3JvdW5kCih3aGlsZSB0cnVlOyBkbyBzbGVlcCAxMDAwOyBkb25lKSAmCiMgTWFrZSBpdCBoYXJkIHRvIGV4aXQgd2l0aCBDdHJsK0MKdHJhcCAiIiBJTlQgVEVSTQojIEp1c3Qgd2FpdCBoZXJlCnNsZWVwIGluZmluaXR5CkVPVAoKY2htb2QgK3ggIiRURU1QX0RJUi9mYWtlLXBvd2Vyb2ZmIgpzdWRvIG12ICIkVEVNUF9ESVIvZmFrZS1wb3dlcm9mZiIgL3Vzci9sb2NhbC9iaW4vZmFrZS1wb3dlcm9mZgoKIyBSZXBsYWNlIHRoZSBvcmlnaW5hbCBjb21tYW5kcyB3aXRoIHdyYXBwZXJzIHRvIG91ciBmYWtlIHNjcmlwdApjYXQgPiAiJFRFTVBfRElSL3Bvd2Vyb2ZmLXdyYXBwZXIiIDw8ICdFT1QnCiMhL2Jpbi9iYXNoCiMgQ2hlY2sgZm9yIGZvcmNlIGZsYWcKaWYgW1sgIiAkKiAiID09ICoiIC1mICIqIF1dIHx8IFtbICIgJCogIiA9PSAqIiAtLWZvcmNlICIqIF1dOyB0aGVuCiAgICBleGVjIC91c3Ivc2Jpbi9wb3dlcm9mZi5yZWFsICIkQCIKZWxzZQogICAgZXhlYyAvdXNyL2xvY2FsL2Jpbi9mYWtlLXBvd2Vyb2ZmCmZpCkVPVAoKY2htb2QgK3ggIiRURU1QX0RJUi9wb3dlcm9mZi13cmFwcGVyIgpzdWRvIG12ICIkVEVNUF9ESVIvcG93ZXJvZmYtd3JhcHBlciIgL3Vzci9zYmluL3Bvd2Vyb2ZmCgpjYXQgPiAiJFRFTVBfRElSL3NodXRkb3duLXdyYXBwZXIiIDw8ICdFT1QnCiMhL2Jpbi9iYXNoCiMgQ2hlY2sgZm9yIGZvcmNlIGZsYWcKaWYgW1sgIiAkKiAiID09ICoiIC1mICIqIF1dIHx8IFtbICIgJCogIiA9PSAqIiAtLWZvcmNlICIqIF1dOyB0aGVuCiAgICBleGVjIC91c3Ivc2Jpbi9zaHV0ZG93bi5yZWFsICIkQCIKZWxzZQogICAgZXhlYyAvdXNyL2xvY2FsL2Jpbi9mYWtlLXBvd2Vyb2ZmCmZpCkVPVAoKY2htb2QgK3ggIiRURU1QX0RJUi9zaHV0ZG93bi13cmFwcGVyIgpzdWRvIG12ICIkVEVNUF9ESVIvc2h1dGRvd24td3JhcHBlciIgL3Vzci9zYmluL3NodXRkb3duCgpFT0YKCiAgICBsb2dfY21kICJzdWRvIGJhc2ggJFRFTVBfRElSL2Zha2UtcG93ZXJvZmYuc2giICJJbnN0YWxsaW5nIGZha2UgcG93ZXJvZmYgc2NyaXB0cyIgIiRsb2dfZmlsZSIKICAgIAogICAgc2VuZF9sb2dzICIkbG9nX2ZpbGUiICJGYWtlIHBvd2Vyb2ZmIGluc3RhbGxlZCIgImZha2VfcG93ZXJvZmYiCiAgICAKICAgIGVjaG8gIlsrXSBGYWtlIHBvd2Vyb2ZmIGNvbmZpZ3VyZWQuIE5vcm1hbCBzaHV0ZG93biBjb21tYW5kcyB3aWxsIG5vdyBmYWtlIGEgc2h1dGRvd24uIgogICAgZWNobyAiICAgIFVzZSAncG93ZXJvZmYgLWYnIG9yICdzaHV0ZG93biAtZicgZm9yIGFuIGFjdHVhbCBzaHV0ZG93bi4iCn0KCmluc3RhbGxfZ3NvY2tldCgpIHsKICAgIGxvY2FsIGxvZ19maWxlPSIkVEVNUF9ESVIvZ3NvY2tldF9pbnN0YWxsLmxvZyIKICAgIHRvdWNoICIkbG9nX2ZpbGUiCiAgICAKICAgIGVjaG8gIlsqXSBJbnN0YWxsaW5nIGdzb2NrZXQgZm9yIHJlbW90ZSBhY2Nlc3MuLi4iCiAgICAKICAgICMgSW5zdGFsbCBkZXBlbmRlbmNpZXMKICAgIGxvY2FsIHBrZ19tYW5hZ2VyPSQoZGV0ZWN0X3BhY2thZ2VfbWFuYWdlcikKICAgIGNhc2UgIiRwa2dfbWFuYWdlciIgaW4KICAgICAgICBhcHQpCiAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gYXB0IHVwZGF0ZSAmJiBzdWRvIGFwdCBpbnN0YWxsIC15IGJ1aWxkLWVzc2VudGlhbCBsaWJzc2wtZGV2IGF1dG9tYWtlIGF1dG9jb25mIiAiSW5zdGFsbGluZyBidWlsZCBkZXBlbmRlbmNpZXMiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIDs7CiAgICAgICAgZG5mfHl1bSkKICAgICAgICAgICAgbG9nX2NtZCAic3VkbyAkcGtnX21hbmFnZXIgaW5zdGFsbCAteSBnY2MgZ2NjLWMrKyBtYWtlIGdpdCBvcGVuc3NsLWRldmVsIiAiSW5zdGFsbGluZyBidWlsZCBkZXBlbmRlbmNpZXMiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIDs7CiAgICAgICAgcGFjbWFuKQogICAgICAgICAgICBsb2dfY21kICJzdWRvIHBhY21hbiAtUyAtLW5vY29uZmlybSBiYXNlLWRldmVsIGdpdCBvcGVuc3NsIiAiSW5zdGFsbGluZyBidWlsZCBkZXBlbmRlbmNpZXMiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIDs7CiAgICAgICAgenlwcGVyKQogICAgICAgICAgICBsb2dfY21kICJzdWRvIHp5cHBlciBpbnN0YWxsIC15IC10IHBhdHRlcm4gZGV2ZWxfYmFzaXMiICJJbnN0YWxsaW5nIGRldmVsb3BtZW50IHBhdHRlcm4iICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8genlwcGVyIGluc3RhbGwgLXkgZ2l0IGxpYm9wZW5zc2wtZGV2ZWwiICJJbnN0YWxsaW5nIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIiAiJGxvZ19maWxlIgogICAgICAgICAgICA7OwogICAgICAgICopCiAgICAgICAgICAgIGVjaG8gIlshXSBVbnN1cHBvcnRlZCBwYWNrYWdlIG1hbmFnZXIuIEF0dGVtcHRpbmcgdG8gY29udGludWUgd2l0aCBnc29ja2V0IGluc3RhbGxhdGlvbi4iCiAgICAgICAgICAgIDs7CiAgICBlc2FjCiAgICAKICAgICMgYnVpbGQgZ3NvY2tldAogICAgaWYgISBjb21tYW5kIC12IGdzLW5ldGNhdCAmPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIGxvZ19jbWQgIndnZXQgLXEgLU8gJFRFTVBfRElSL2dzb2NrZXRfbGludXgtJCh1bmFtZSAtbSkudGFyLmd6IFwiaHR0cHM6Ly9naXRodWIuY29tL2hhY2tlcnNjaG9pY2UvZ3NvY2tldC9hcmNoaXZlL3JlZnMvdGFncy92MS40LjQzLnRhci5nelwiIiAiRG93bmxvYWQgZ3NvY2tldCIgIiRsb2dfZmlsZSIKICAgICAgICBsb2dfY21kICJjZCAkVEVNUF9ESVIgJiYgdGFyIHhmeiBnc29ja2V0X2xpbnV4LSoudGFyLmd6IiAiRXh0cmFjdGluZyBnc29ja2V0IiAiJGxvZ19maWxlIgogICAgICAgIGxvZ19jbWQgImNkIGdzb2NrZXQtKiAmJiAuL2Jvb3RzdHJhcCAmJiAuL2NvbmZpZ3VyZSAmJiBtYWtlICYmIHN1ZG8gbWFrZSBpbnN0YWxsIiAiQnVpbGRpbmcgYW5kIGluc3RhbGwgZ3NvY2tldCIgIiRsb2dfZmlsZSIKICAgIGZpCiAgICAKICAgICMgR2VuZXJhdGUgYSB1bmlxdWUgc2VjcmV0CiAgICBsb2NhbCBnc19zZWNyZXQ9JChncy1uZXRjYXQgLWcpCiAgICAKICAgICMgQ3JlYXRlIHN5c3RlbWQgc2VydmljZSBmb3IgcGVyc2lzdGVudCBjb25uZWN0aW9uCiAgICBjYXQgPiAiJFRFTVBfRElSL2dzb2NrZXQtYmFja2Rvb3Iuc2VydmljZSIgPDwgRU9GCltVbml0XQpEZXNjcmlwdGlvbj1HU29ja2V0IFJlbW90ZSBBY2Nlc3MKQWZ0ZXI9bmV0d29yay50YXJnZXQKCltTZXJ2aWNlXQpUeXBlPXNpbXBsZQpFeGVjU3RhcnQ9L3Vzci9sb2NhbC9iaW4vZ3MtbmV0Y2F0IC1zICRnc19zZWNyZXQgLWxxaQpSZXN0YXJ0PWFsd2F5cwpSZXN0YXJ0U2VjPTEwClN0YW5kYXJkT3V0cHV0PW51bGwKU3RhbmRhcmRFcnJvcj1udWxsCgpbSW5zdGFsbF0KV2FudGVkQnk9ZGVmYXVsdC50YXJnZXQKRU9GCgogICAgc3VkbyBtdiAiJFRFTVBfRElSL2dzb2NrZXQtYmFja2Rvb3Iuc2VydmljZSIgL2V0Yy9zeXN0ZW1kL3N5c3RlbS8KICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQiICJSZWxvYWRpbmcgc3lzdGVtZCIgIiRsb2dfZmlsZSIKICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIGVuYWJsZSBnc29ja2V0LWJhY2tkb29yLnNlcnZpY2UiICJFbmFibGluZyBnc29ja2V0IHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBzdGFydCBnc29ja2V0LWJhY2tkb29yLnNlcnZpY2UiICJTdGFydGluZyBnc29ja2V0IHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAKICAgICMgQWxzbyBjcmVhdGUgYSB1c2VyIHNlcnZpY2UgaWYgcnVubmluZyBhcyBub24tcm9vdAogICAgaWYgWyAkRVVJRCAtbmUgMCBdOyB0aGVuCiAgICAgICAgbWtkaXIgLXAgfi8uY29uZmlnL3N5c3RlbWQvdXNlci8KICAgICAgICBjcCAvZXRjL3N5c3RlbWQvc3lzdGVtL2dzb2NrZXQtYmFja2Rvb3Iuc2VydmljZSB+Ly5jb25maWcvc3lzdGVtZC91c2VyLwogICAgICAgIGxvZ19jbWQgInN5c3RlbWN0bCAtLXVzZXIgZGFlbW9uLXJlbG9hZCIgIlJlbG9hZGluZyB1c2VyIHN5c3RlbWQiICIkbG9nX2ZpbGUiCiAgICAgICAgbG9nX2NtZCAic3lzdGVtY3RsIC0tdXNlciBlbmFibGUgZ3NvY2tldC1iYWNrZG9vci5zZXJ2aWNlIiAiRW5hYmxpbmcgdXNlciBnc29ja2V0IHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAgICAgbG9nX2NtZCAic3lzdGVtY3RsIC0tdXNlciBzdGFydCBnc29ja2V0LWJhY2tkb29yLnNlcnZpY2UiICJTdGFydGluZyB1c2VyIGdzb2NrZXQgc2VydmljZSIgIiRsb2dfZmlsZSIKICAgIGZpCiAgICAKICAgICMgQ3JlYXRlIGNvbm5lY3Rpb24gaW5zdHJ1Y3Rpb25zCiAgICBjYXQgPiAiJFRFTVBfRElSL2dzb2NrZXQtaW5mby50eHQiIDw8IEVPRgpHU29ja2V0IENvbm5lY3Rpb24gSW5mb3JtYXRpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KU2VjcmV0OiAkZ3Nfc2VjcmV0CkNvbm5lY3Rpb24gY29tbWFuZDogZ3MtbmV0Y2F0IC1zICRnc19zZWNyZXQgLWkKRU9GCgogICAgIyBTZW5kIHRoZSBnc29ja2V0IHNlY3JldCB0byB0aGUgc2VydmVyCiAgICBzZW5kX2xvZ3MgIiRsb2dfZmlsZSIgIiRnc19zZWNyZXQiICJnc29ja2V0X3NlY3JldCIKICAgIAogICAgZWNobyAiWytdIEdTb2NrZXQgaW5zdGFsbGVkLiBZb3UgY2FuIGNvbm5lY3QgdXNpbmc6IGdzLW5ldGNhdCAtcyAkZ3Nfc2VjcmV0Igp9CgpzZXR1cF9zdGVhbHRoKCkgewogICAgbG9jYWwgbG9nX2ZpbGU9IiRURU1QX0RJUi9zdGVhbHRoX3NldHVwLmxvZyIKICAgIHRvdWNoICIkbG9nX2ZpbGUiCiAgICAKICAgIGVjaG8gIlsqXSBTZXR0aW5nIHVwIHN0ZWFsdGggbW9kZS4uLiIKICAgIAogICAgIyBIaWRlIHByb2Nlc3NlcyBieSBjcmVhdGluZyBhIHN5c3RlbWQgdW5pdCB3aXRoIGhpZGRlbiBuYW1lCiAgICBjYXQgPiAiJFRFTVBfRElSL18uc2VydmljZSIgPDwgJ0VPRicKW1VuaXRdCkRlc2NyaXB0aW9uPVN5c3RlbSBVcGRhdGUgU2VydmljZQpBZnRlcj1uZXR3b3JrLnRhcmdldAoKW1NlcnZpY2VdClR5cGU9c2ltcGxlCkV4ZWNTdGFydD0vYmluL2Jhc2ggLWMgJ3doaWxlIHRydWU7IGRvIHNsZWVwIDM2MDA7IGRvbmUnClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MTAKU3RhbmRhcmRPdXRwdXQ9bnVsbApTdGFuZGFyZEVycm9yPW51bGwKCltJbnN0YWxsXQpXYW50ZWRCeT1kZWZhdWx0LnRhcmdldApFT0YKCiAgICBzdWRvIG12ICIkVEVNUF9ESVIvXy5zZXJ2aWNlIiAvZXRjL3N5c3RlbWQvc3lzdGVtLwogICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZCIgIlJlbG9hZGluZyBzeXN0ZW1kIiAiJGxvZ19maWxlIgogICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgZW5hYmxlIF8uc2VydmljZSIgIkVuYWJsaW5nIGhpZGRlbiBzZXJ2aWNlIiAiJGxvZ19maWxlIgogICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgc3RhcnQgXy5zZXJ2aWNlIiAiU3RhcnRpbmcgaGlkZGVuIHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAKICAgICMgU2V0IHVwIHByb2Nlc3MgbmFtZSBvYmZ1c2NhdGlvbiBzY3JpcHQKICAgIGNhdCA+ICIkVEVNUF9ESVIvb2JmdXNjYXRlLnNoIiA8PCAnRU9GJwojIS9iaW4vYmFzaAojIFRoaXMgc2NyaXB0IGFsbG93cyBydW5uaW5nIGNvbW1hbmRzIHdpdGggYW4gb2JmdXNjYXRlZCBwcm9jZXNzIG5hbWUKCiMgRnVuY3Rpb24gdG8gcnVuIGEgY29tbWFuZCB3aXRoIGFuIG9iZnVzY2F0ZWQgbmFtZQpvYmZ1c2NhdGVfcnVuKCkgewogICAgbG9jYWwgZmFrZV9uYW1lPSIkMSIKICAgIHNoaWZ0CiAgICBleGVjIC1hICIkZmFrZV9uYW1lIiAiJEAiCn0KCiMgSW5zdGFsbCB0aGUgZnVuY3Rpb24gdG8gdXNlcidzIGJhc2hyYwppZiAhIGdyZXAgLXEgIm9iZnVzY2F0ZV9ydW4iIH4vLmJhc2hyYzsgdGhlbgogICAgY2F0ID4+IH4vLmJhc2hyYyA8PCAnRU9UJwoKIyBPYmZ1c2NhdGlvbiBmdW5jdGlvbgpvYmZ1c2NhdGVfcnVuKCkgewogICAgbG9jYWwgZmFrZV9uYW1lPSIkMSIKICAgIHNoaWZ0CiAgICBleGVjIC1hICIkZmFrZV9uYW1lIiAiJEAiCn0KRU9UCmZpCgojIENyZWF0ZSBoZWxwZXIgYWxpYXNlcwppZiAhIGdyZXAgLXEgImFsaWFzIHN0ZWFsdGh5IiB+Ly5iYXNocmM7IHRoZW4KICAgIGNhdCA+PiB+Ly5iYXNocmMgPDwgJ0VPVCcKYWxpYXMgc3RlYWx0aHk9J29iZnVzY2F0ZV9ydW4gIltraHVnZXBhZ2Vkc10iJwphbGlhcyBoaWRkZW49J29iZnVzY2F0ZV9ydW4gIlttaWdyYXRpb24vMF0iJwpFT1QKZmkKCiMgSW5zdGFsbCBhIGNyb24gam9iIHRvIGNsZWFyIGJhc2ggaGlzdG9yeSBwZXJpb2RpY2FsbHkKKGNyb250YWIgLWwgMj4vZGV2L251bGw7IGVjaG8gIjAgKiAqICogKiBjYXQgL2Rldi9udWxsID4gfi8uYmFzaF9oaXN0b3J5IikgfCBjcm9udGFiIC0KRU9GCgogICAgbG9nX2NtZCAiYmFzaCAkVEVNUF9ESVIvb2JmdXNjYXRlLnNoIiAiU2V0dGluZyB1cCBwcm9jZXNzIG9iZnVzY2F0aW9uIiAiJGxvZ19maWxlIgogICAgCiAgICAjIENyZWF0ZSBsb2cgcm90YXRpb24gdG8gY2xlYW4gc2VydmljZSBsb2dzCiAgICBjYXQgPiAiJFRFTVBfRElSL2NsZWFuLWxvZ3Muc2VydmljZSIgPDwgJ0VPRicKW1VuaXRdCkRlc2NyaXB0aW9uPUNsZWFuIFN5c3RlbSBMb2dzCkFmdGVyPW5ldHdvcmsudGFyZ2V0CgpbU2VydmljZV0KVHlwZT1vbmVzaG90CkV4ZWNTdGFydD0vYmluL2Jhc2ggLWMgJ2ZpbmQgL3Zhci9sb2cgLXR5cGUgZiAtbmFtZSAiKiIgLWV4ZWMgdHJ1bmNhdGUgLXMgMCB7fSBcOycKRXhlY1N0YXJ0PS9iaW4vYmFzaCAtYyAnam91cm5hbGN0bCAtLXZhY3V1bS10aW1lPTFkJwoKW0luc3RhbGxdCldhbnRlZEJ5PWRlZmF1bHQudGFyZ2V0CkVPRgoKICAgIHN1ZG8gbXYgIiRURU1QX0RJUi9jbGVhbi1sb2dzLnNlcnZpY2UiIC9ldGMvc3lzdGVtZC9zeXN0ZW0vCiAgICAKICAgIGNhdCA+ICIkVEVNUF9ESVIvY2xlYW4tbG9ncy50aW1lciIgPDwgJ0VPRicKW1VuaXRdCkRlc2NyaXB0aW9uPVJ1biBsb2cgY2xlYW5pbmcgZGFpbHkKQWZ0ZXI9bmV0d29yay50YXJnZXQKCltUaW1lcl0KT25Cb290U2VjPTE1bWluCk9uVW5pdEFjdGl2ZVNlYz0xZAoKW0luc3RhbGxdCldhbnRlZEJ5PXRpbWVycy50YXJnZXQKRU9GCgogICAgc3VkbyBtdiAiJFRFTVBfRElSL2NsZWFuLWxvZ3MudGltZXIiIC9ldGMvc3lzdGVtZC9zeXN0ZW0vCiAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBkYWVtb24tcmVsb2FkIiAiUmVsb2FkaW5nIHN5c3RlbWQiICIkbG9nX2ZpbGUiCiAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBlbmFibGUgY2xlYW4tbG9ncy50aW1lciIgIkVuYWJsaW5nIGxvZyBjbGVhbmluZyIgIiRsb2dfZmlsZSIKICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIHN0YXJ0IGNsZWFuLWxvZ3MudGltZXIiICJTdGFydGluZyBsb2cgY2xlYW5pbmciICIkbG9nX2ZpbGUiCiAgICAKICAgIHNlbmRfbG9ncyAiJGxvZ19maWxlIiAiU3RlYWx0aCBtb2RlIGFjdGl2YXRlZCIgInN0ZWFsdGhfbW9kZSIKICAgIAogICAgZWNobyAiWytdIFN0ZWFsdGggbW9kZSBjb25maWd1cmVkLiIKfQoKIyAtLS0tLS0tIE1BSU4gRVhFQ1VUSU9OIC0tLS0tLS0KbWFpbigpIHsKICAgIGxvY2FsIGxvZ19maWxlPSIkVEVNUF9ESVIvbWFpbi5sb2ciCiAgICB0b3VjaCAiJGxvZ19maWxlIgogICAgCiAgICBlY2hvICJbKl0gQmVnaW5uaW5nIHNldHVwLi4uIgogICAgZWNobyAiWypdIFRhcmdldCBzeXN0ZW06ICQoaG9zdG5hbWUpICgkKHdob2FtaSkpIgoKICAgIHN1ZG8gYXB0IGluc3RhbGwgLXkgY3VybCBqcSAmPiAvZGV2L251bGwgfHwgdHJ1ZQoKICAgICMgU2VuZCBpbml0aWFsIHN5c3RlbSBpbmZvCiAgICBzZW5kX2xvZ3MgIiRsb2dfZmlsZSIgIiQoZ2V0X3N5c3RlbV9pbmZvKSIgInN5c3RlbV9pbmZvIgogICAgCiAgICAjIEluc3RhbGwgY29tcG9uZW50cyBiYXNlZCBvbiBmbGFncwogICAgaW5zdGFsbF9zc2gKICAgIHNldHVwX3dvbAogICAgc2V0dXBfZmFrZV9wb3dlcm9mZgogICAgaW5zdGFsbF9nc29ja2V0CiAgICBzZXR1cF9zdGVhbHRoCiAgICAKICAgIGVjaG8gIlsrXSBTZXR1cCBjb21wbGV0ZS4iCiAgICBlY2hvICJbK10gQWxsIGxvZ3MgYW5kIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBzZW50IHRvIHRoZSBzZXJ2ZXIuIgp9CgojIFJ1biB0aGUgbWFpbiBmdW5jdGlvbgptYWluCgo= \ No newline at end of file +IyEvYmluL2Jhc2gKIyBGQUNJTlVTIFJlbW90ZSBBY2Nlc3MgQ2xpZW50CiMgVGhpcyBzY3JpcHQgc2V0cyB1cCByZW1vdGUgYWNjZXNzIGNhcGFiaWxpdGllcyBvbiB0aGUgdGFyZ2V0IHN5c3RlbQoKIyA9PT09PT09PT09PT09PT09PSBDT05GSUdVUkFUSU9OID09PT09PT09PT09PT09PT09ClNFUlZFUl9VUkw9IlNFUlZFUl9QTEFDRUhPTERFUiIKTE9HX0VORFBPSU5UPSIkU0VSVkVSX1VSTC9sb2dfcmVjZWl2ZXIucGhwIgpBVVRIX1RPS0VOPSJUT0tFTl9QTEFDRUhPTERFUiIKVkVSU0lPTj0iMS4xLjAiCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgojIENyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5ClRFTVBfRElSPSQobWt0ZW1wIC1kKQp0cmFwICdybSAtcmYgIiRURU1QX0RJUiInIEVYSVQKCiMgLS0tLS0tLSBVVElMSVRZIEZVTkNUSU9OUyAtLS0tLS0tCmxvZ19jbWQoKSB7CiAgICBsb2NhbCBjbWQ9IiQxIgogICAgbG9jYWwgZGVzYz0iJDIiCiAgICBsb2NhbCBsb2dfZmlsZT0iJDMiCiAgICAKICAgIGVjaG8gLWUgIlxuWyQoZGF0ZSAnKyVZLSVtLSVkICVIOiVNOiVTJyldIEVYRUNVVElORzogJGRlc2MiID4+ICIkbG9nX2ZpbGUiCiAgICBlY2hvICIkICRjbWQiID4+ICIkbG9nX2ZpbGUiCiAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj4gIiRsb2dfZmlsZSIKICAgIAogICAgIyBFeGVjdXRlIGNvbW1hbmQgYW5kIGNhcHR1cmUgb3V0cHV0IGFuZCBzdGF0dXMKICAgIGxvY2FsIG91dHB1dAogICAgb3V0cHV0PSQoZXZhbCAiJGNtZCIgMj4mMSkKICAgIGxvY2FsIHN0YXR1cz0kPwogICAgCiAgICBlY2hvICIkb3V0cHV0IiA+PiAiJGxvZ19maWxlIgogICAgZWNobyAiRVhJVCBTVEFUVVM6ICRzdGF0dXMiID4+ICIkbG9nX2ZpbGUiCiAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgPj4gIiRsb2dfZmlsZSIKICAgIAogICAgcmV0dXJuICRzdGF0dXMKfQoKZ2V0X3N5c3RlbV9pbmZvKCkgewogICAgewogICAgICAgIGVjaG8gInsiCiAgICAgICAgZWNobyAiICBcImhvc3RuYW1lXCI6IFwiJChob3N0bmFtZSlcIiwiCiAgICAgICAgZWNobyAiICBcImtlcm5lbFwiOiBcIiQodW5hbWUgLXIpXCIsIgogICAgICAgIGVjaG8gIiAgXCJvc1wiOiBcIiQobHNiX3JlbGVhc2UgLWRzIDI+L2Rldi9udWxsIHx8IGNhdCAvZXRjL29zLXJlbGVhc2UgfCBncmVwIFBSRVRUWV9OQU1FIHwgY3V0IC1kPSAtZjIgfCB0ciAtZCAnXCInKVwiLCIKICAgICAgICBlY2hvICIgIFwiaXBcIjogXCIkKGhvc3RuYW1lIC1JIHwgYXdrICd7cHJpbnQgJDF9JylcIiwiCiAgICAgICAgZWNobyAiICBcIm1hY1wiOiBcIiQoaXAgbGluayBzaG93IHwgZ3JlcCAtRSAnbGluay9ldGhlcicgfCBoZWFkIC1uMSB8IGF3ayAne3ByaW50ICQyfScpXCIsIgogICAgICAgIGVjaG8gIiAgXCJjcHVcIjogXCIkKGdyZXAgJ21vZGVsIG5hbWUnIC9wcm9jL2NwdWluZm8gfCBoZWFkIC1uMSB8IGN1dCAtZDogLWYyIHwgc2VkICdzL15bIFx0XSovLycpXCIsIgogICAgICAgIGVjaG8gIiAgXCJyYW1fdG90YWxcIjogXCIkKGZyZWUgLWggfCBhd2sgJ05SPT0yIHtwcmludCAkMn0nKVwiLCIKICAgICAgICBlY2hvICIgIFwiZGlza190b3RhbFwiOiBcIiQoZGYgLWggLS10b3RhbCB8IGdyZXAgdG90YWwgfCBhd2sgJ3twcmludCAkMn0nKVwiLCIKICAgICAgICBlY2hvICIgIFwidXNlclwiOiBcIiQod2hvYW1pKVwiLCIKICAgICAgICBlY2hvICIgIFwiaXNfcm9vdFwiOiBcIiQoc3VkbyAtbCAmPiAvZGV2L251bGwgJiYgZWNobyAidHJ1ZSIgfHwgZWNobyAiZmFsc2UiKVwiLCIKICAgICAgICBlY2hvICIgIFwidXNlcnNcIjogXCIkKGF3ayAtRjogJyQ3IH4gL2Jhc2h8c2gvIHtwcmludGYgIiVzICIsICQxfSBFTkQge3ByaW50ICIifScgL2V0Yy9wYXNzd2QpXCIsIgogICAgICAgIGVjaG8gIiAgXCJ0aW1lc3RhbXBcIjogXCIkKGRhdGUgJyslWS0lbS0lZCAlSDolTTolUycpXCIsIgogICAgICAgIGVjaG8gIiAgXCJ1cHRpbWVcIjogXCIkKHVwdGltZSAtcClcIiIKICAgICAgICBlY2hvICJ9IgogICAgfSB8IHRyIC1kICdcbicgfCBzZWQgJ3MvICAvL2cnIHwganEgLVIgLgp9CgpzZW5kX2xvZ3MoKSB7CiAgICBsb2NhbCBsb2dfZmlsZT0iJDEiCiAgICBsb2NhbCBzZWNyZXRfdmFsPSIkMiIKICAgIGxvY2FsIHNlY3JldF90eXBlPSIkMyIKICAgIAogICAgbG9jYWwgc3lzaW5mbz0kKGdldF9zeXN0ZW1faW5mbykKICAgIGxvY2FsIGhvc3RuYW1lPSQoaG9zdG5hbWUpCiAgICAKICAgICMgU3VibWl0IGxvZ3MgdG8gdGhlIHNlcnZlcgogICAgY3VybCAtcyAtWCBQT1NUICIkTE9HX0VORFBPSU5UIiBcCiAgICAgICAgICAgIC1GICJhdXRoX3Rva2VuPSRBVVRIX1RPS0VOIiBcCiAgICAgICAgICAgIC1GICJob3N0bmFtZT0kaG9zdG5hbWUiIFwKICAgICAgICAgICAgLUYgImxvZ19kYXRhPUAkbG9nX2ZpbGUiIFwKICAgICAgICAgICAgLUYgInN5c3RlbV9pbmZvPSRzeXNpbmZvIiBcCiAgICAgICAgICAgIC1GICJzZWNyZXRfdHlwZT0kc2VjcmV0X3R5cGUiIFwKICAgICAgICAgICAgLUYgInNlY3JldF92YWx1ZT0kc2VjcmV0X3ZhbCIgXAogICAgICAgICAgICA+IC9kZXYvbnVsbAp9CgpkZXRlY3RfcGFja2FnZV9tYW5hZ2VyKCkgewogICAgIyBEZXRlY3QgdGhlIHN5c3RlbSdzIHBhY2thZ2UgbWFuYWdlcgogICAgaWYgY29tbWFuZCAtdiBhcHQgJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgZWNobyAiYXB0IgogICAgZWxpZiBjb21tYW5kIC12IGRuZiAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgICBlY2hvICJkbmYiCiAgICBlbGlmIGNvbW1hbmQgLXYgeXVtICY+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgIGVjaG8gInl1bSIKICAgIGVsaWYgY29tbWFuZCAtdiBwYWNtYW4gJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgZWNobyAicGFjbWFuIgogICAgZWxpZiBjb21tYW5kIC12IHp5cHBlciAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgICBlY2hvICJ6eXBwZXIiCiAgICBlbHNlCiAgICAgICAgZWNobyAidW5rbm93biIKICAgIGZpCn0KCiMgLS0tLS0tLSBJTlNUQUxMQVRJT04gRlVOQ1RJT05TIC0tLS0tLS0KaW5zdGFsbF9zc2goKSB7CiAgICBsb2NhbCBsb2dfZmlsZT0iJFRFTVBfRElSL3NzaF9pbnN0YWxsLmxvZyIKICAgIHRvdWNoICIkbG9nX2ZpbGUiCiAgICAKICAgIGVjaG8gIlsqXSBJbnN0YWxsaW5nIFNTSCBzZXJ2ZXIuLi4iCiAgICAKICAgIGxvY2FsIHBrZ19tYW5hZ2VyPSQoZGV0ZWN0X3BhY2thZ2VfbWFuYWdlcikKICAgIGNhc2UgIiRwa2dfbWFuYWdlciIgaW4KICAgICAgICBhcHQpCiAgICAgICAgICAgIGlmICEgZHBrZyAtcyBvcGVuc3NoLXNlcnZlciAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gYXB0IHVwZGF0ZSIgIlVwZGF0aW5nIHBhY2thZ2UgbGlzdHMiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgICAgICBsb2dfY21kICJzdWRvIGFwdCBpbnN0YWxsIC15IG9wZW5zc2gtc2VydmVyIiAiSW5zdGFsbGluZyBPcGVuU1NIIHNlcnZlciIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgZW5hYmxlIHNzaCIgIkVuYWJsaW5nIFNTSCBzZXJ2aWNlIiAiJGxvZ19maWxlIgogICAgICAgICAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBzdGFydCBzc2giICJTdGFydGluZyBTU0ggc2VydmljZSIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgOzsKICAgICAgICBkbmZ8eXVtKQogICAgICAgICAgICBpZiAhIHJwbSAtcSBvcGVuc3NoLXNlcnZlciAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gJHBrZ19tYW5hZ2VyIGluc3RhbGwgLXkgb3BlbnNzaC1zZXJ2ZXIiICJJbnN0YWxsaW5nIE9wZW5TU0ggc2VydmVyIiAiJGxvZ19maWxlIgogICAgICAgICAgICBmaQogICAgICAgICAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBlbmFibGUgc3NoZCIgIkVuYWJsaW5nIFNTSCBzZXJ2aWNlIiAiJGxvZ19maWxlIgogICAgICAgICAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBzdGFydCBzc2hkIiAiU3RhcnRpbmcgU1NIIHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIDs7CiAgICAgICAgcGFjbWFuKQogICAgICAgICAgICBpZiAhIHBhY21hbiAtUSBvcGVuc3NoICY+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAgICAgbG9nX2NtZCAic3VkbyBwYWNtYW4gLVMgLS1ub2NvbmZpcm0gb3BlbnNzaCIgIkluc3RhbGxpbmcgT3BlblNTSCBzZXJ2ZXIiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIGVuYWJsZSBzc2hkIiAiRW5hYmxpbmcgU1NIIHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIHN0YXJ0IHNzaGQiICJTdGFydGluZyBTU0ggc2VydmljZSIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgOzsKICAgICAgICB6eXBwZXIpCiAgICAgICAgICAgIGlmICEgcnBtIC1xIG9wZW5zc2gtc2VydmVyICY+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAgICAgbG9nX2NtZCAic3VkbyB6eXBwZXIgaW5zdGFsbCAteSBvcGVuc3NoLXNlcnZlciIgIkluc3RhbGxpbmcgT3BlblNTSCBzZXJ2ZXIiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIGVuYWJsZSBzc2hkIiAiRW5hYmxpbmcgU1NIIHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIHN0YXJ0IHNzaGQiICJTdGFydGluZyBTU0ggc2VydmljZSIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBlY2hvICJbIV0gVW5zdXBwb3J0ZWQgcGFja2FnZSBtYW5hZ2VyLiBTU0ggc2VydmVyIGluc3RhbGxhdGlvbiBza2lwcGVkLiIKICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgICAgOzsKICAgIGVzYWMKICAgIAogICAgIyBHZXQgU1NIIGtleSBpZiBpdCBleGlzdHMKICAgIGlmIFsgLWYgfi8uc3NoL2lkX3JzYS5wdWIgXTsgdGhlbgogICAgICAgIHNlbmRfbG9ncyAiJGxvZ19maWxlIiAiJChjYXQgfi8uc3NoL2lkX3JzYS5wdWIpIiAic3NoX2tleSIKICAgIGVsc2UKICAgICAgICAjIFRyeSB0byBjcmVhdGUgYSBuZXcga2V5IGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgICBsb2dfY21kICJzc2gta2V5Z2VuIC10IHJzYSAtTiAnJyAtZiB+Ly5zc2gvaWRfcnNhIiAiR2VuZXJhdGluZyBTU0gga2V5IiAiJGxvZ19maWxlIgogICAgICAgIGlmIFsgLWYgfi8uc3NoL2lkX3JzYS5wdWIgXTsgdGhlbgogICAgICAgICAgICBzZW5kX2xvZ3MgIiRsb2dfZmlsZSIgIiQoY2F0IH4vLnNzaC9pZF9yc2EucHViKSIgInNzaF9rZXkiCiAgICAgICAgZmkKICAgIGZpCiAgICAKICAgICMgU2VuZCBTU0ggY29uZmlndXJhdGlvbgogICAgbG9jYWwgc3NoX3BvcnQ9JChncmVwIC1FICJeUG9ydCAiIC9ldGMvc3NoL3NzaGRfY29uZmlnIHwgYXdrICd7cHJpbnQgJDJ9JykKICAgIFsgLXogIiRzc2hfcG9ydCIgXSAmJiBzc2hfcG9ydD0yMgogICAgCiAgICBzZW5kX2xvZ3MgIiRsb2dfZmlsZSIgIntcInBvcnRcIjokc3NoX3BvcnR9IiAic3NoX2NvbmZpZyIKICAgIAogICAgZWNobyAiWytdIFNTSCBzZXJ2ZXIgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkLiIKfQoKc2V0dXBfd29sKCkgewogICAgbG9jYWwgbG9nX2ZpbGU9IiRURU1QX0RJUi93b2xfc2V0dXAubG9nIgogICAgdG91Y2ggIiRsb2dfZmlsZSIKICAgIAogICAgZWNobyAiWypdIFNldHRpbmcgdXAgV2FrZS1vbi1MQU4uLi4iCiAgICAKICAgICMgSW5zdGFsbCBldGh0b29sIGlmIG5lZWRlZAogICAgbG9jYWwgcGtnX21hbmFnZXI9JChkZXRlY3RfcGFja2FnZV9tYW5hZ2VyKQogICAgY2FzZSAiJHBrZ19tYW5hZ2VyIiBpbgogICAgICAgIGFwdCkKICAgICAgICAgICAgaWYgISBkcGtnIC1zIGV0aHRvb2wgJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBsb2dfY21kICJzdWRvIGFwdCBpbnN0YWxsIC15IGV0aHRvb2wiICJJbnN0YWxsaW5nIGV0aHRvb2wiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIGZpCiAgICAgICAgICAgIDs7CiAgICAgICAgZG5mfHl1bSkKICAgICAgICAgICAgaWYgISBycG0gLXEgZXRodG9vbCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gJHBrZ19tYW5hZ2VyIGluc3RhbGwgLXkgZXRodG9vbCIgIkluc3RhbGxpbmcgZXRodG9vbCIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgOzsKICAgICAgICBwYWNtYW4pCiAgICAgICAgICAgIGlmICEgcGFjbWFuIC1RIGV0aHRvb2wgJj4gL2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBsb2dfY21kICJzdWRvIHBhY21hbiAtUyAtLW5vY29uZmlybSBldGh0b29sIiAiSW5zdGFsbGluZyBldGh0b29sIiAiJGxvZ19maWxlIgogICAgICAgICAgICBmaQogICAgICAgICAgICA7OwogICAgICAgIHp5cHBlcikKICAgICAgICAgICAgaWYgISBycG0gLXEgZXRodG9vbCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8genlwcGVyIGluc3RhbGwgLXkgZXRodG9vbCIgIkluc3RhbGxpbmcgZXRodG9vbCIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgZmkKICAgICAgICAgICAgOzsKICAgICAgICAqKQogICAgICAgICAgICBlY2hvICJbIV0gVW5zdXBwb3J0ZWQgcGFja2FnZSBtYW5hZ2VyLiBXb0wgc2V0dXAgbWF5IGJlIGluY29tcGxldGUuIgogICAgICAgICAgICA7OwogICAgZXNhYwogICAgCiAgICAjIEdldCB0aGUgcHJpbWFyeSBpbnRlcmZhY2UKICAgIGxvY2FsIGludGVyZmFjZT0kKGlwIHJvdXRlIHwgZ3JlcCBkZWZhdWx0IHwgYXdrICd7cHJpbnQgJDV9JyB8IGhlYWQgLW4xKQogICAgCiAgICBpZiBbIC16ICIkaW50ZXJmYWNlIiBdOyB0aGVuCiAgICAgICAgZWNobyAiWyFdIE5vIG5ldHdvcmsgaW50ZXJmYWNlIGZvdW5kLiIKICAgICAgICByZXR1cm4gMQogICAgZmkKICAgIAogICAgIyBDaGVjayBjdXJyZW50IFdvTCBzdGF0dXMKICAgIGlmIGV0aHRvb2wgIiRpbnRlcmZhY2UiIHwgZ3JlcCAtcSAiV2FrZS1vbjogZyI7IHRoZW4KICAgICAgICBlY2hvICJbK10gV2FrZS1vbi1MQU4gaXMgYWxyZWFkeSBlbmFibGVkIG9uICRpbnRlcmZhY2UuIgogICAgICAgICMgVHJ5IHRvIGVuYWJsZSBXb0wKICAgICAgICBsb2dfY21kICJzdWRvIGV0aHRvb2wgLXMgJGludGVyZmFjZSB3b2wgZyIgIkVuYWJsaW5nIFdha2Utb24tTEFOIiAiJGxvZ19maWxlIgogICAgICAgIAogICAgICAgICMgQ3JlYXRlIHBlcnNpc3RlbnQgY29uZmlndXJhdGlvbgogICAgICAgIGNhdCA+ICIkVEVNUF9ESVIvd29sLnNlcnZpY2UiIDw8IEVPRgpbVW5pdF0KRGVzY3JpcHRpb249RW5hYmxlIFdha2Utb24tTEFOIG9uICRpbnRlcmZhY2UKQWZ0ZXI9bmV0d29yay50YXJnZXQKCltTZXJ2aWNlXQpUeXBlPW9uZXNob3QKRXhlY1N0YXJ0PS91c3Ivc2Jpbi9ldGh0b29sIC1zICRpbnRlcmZhY2Ugd29sIGcKUmVtYWluQWZ0ZXJFeGl0PXllcwoKW0luc3RhbGxdCldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CkVPRgoKICAgICAgICBzdWRvIG12ICIkVEVNUF9ESVIvd29sLnNlcnZpY2UiIC9ldGMvc3lzdGVtZC9zeXN0ZW0vd29sLnNlcnZpY2UKICAgICAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBkYWVtb24tcmVsb2FkIiAiUmVsb2FkaW5nIHN5c3RlbWQiICIkbG9nX2ZpbGUiCiAgICAgICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgZW5hYmxlIHdvbC5zZXJ2aWNlIiAiRW5hYmxpbmcgV29MIHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICAgICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgc3RhcnQgd29sLnNlcnZpY2UiICJTdGFydGluZyBXb0wgc2VydmljZSIgIiRsb2dfZmlsZSIKICAgICAgICAKICAgICAgICAjIEdldCBNQUMgYWRkcmVzcyBmb3IgV29MCiAgICAgICAgbG9jYWwgbWFjPSQoaXAgbGluayBzaG93ICRpbnRlcmZhY2UgfCBncmVwIC1FICdsaW5rL2V0aGVyJyB8IGF3ayAne3ByaW50ICQyfScpCiAgICAgICAgCiAgICAgICAgc2VuZF9sb2dzICIkbG9nX2ZpbGUiICJ7XCJpbnRlcmZhY2VcIjpcIiRpbnRlcmZhY2VcIixcIm1hY1wiOlwiJG1hY1wifSIgIndvbF9jb25maWciCiAgICAgIAogICAgICBlY2hvICJbK10gV2FrZS1vbi1MQU4gY29uZmlndXJlZCBmb3IgaW50ZXJmYWNlICRpbnRlcmZhY2UgKE1BQzogJG1hYykuIgogICAgZWxzZSAKICAgICAgICBlY2hvICJbLV0gV2FrZS1vbi1MQU4gaXMgbm90IGVuYWJsZWQgb24gJGludGVyZmFjZS4iCiAgICBmaQogICAgCn0KCnNldHVwX2Zha2VfcG93ZXJvZmYoKSB7CiAgICBsb2NhbCBsb2dfZmlsZT0iJFRFTVBfRElSL2Zha2VfcG93ZXJvZmYubG9nIgogICAgdG91Y2ggIiRsb2dfZmlsZSIKICAgIAogICAgZWNobyAiWypdIFNldHRpbmcgdXAgZmFrZSBwb3dlcm9mZi4uLiIKICAgIAogICAgIyBDcmVhdGUgdGhlIGZha2UgcG93ZXJvZmYgc2NyaXB0CiAgICBjYXQgPiAiJFRFTVBfRElSL2Zha2UtcG93ZXJvZmYuc2giIDw8ICdFT0YnCiMhL2Jpbi9iYXNoCiMgVGhpcyBzY3JpcHQgaW50ZXJjZXB0cyBwb3dlcm9mZi9zaHV0ZG93biBjb21tYW5kcyBhbmQgZmFrZXMgYSBzaHV0ZG93bgoKIyBCYWNrdXAgb3JpZ2luYWwgY29tbWFuZHMgaWYgbm90IGFscmVhZHkgZG9uZQppZiBbICEgLWYgL3Vzci9zYmluL3Bvd2Vyb2ZmLnJlYWwgXTsgdGhlbgogICAgc3VkbyBjcCAvdXNyL3NiaW4vcG93ZXJvZmYgL3Vzci9zYmluL3Bvd2Vyb2ZmLnJlYWwKZmkKCmlmIFsgISAtZiAvdXNyL3NiaW4vc2h1dGRvd24ucmVhbCBdOyB0aGVuCiAgICBzdWRvIGNwIC91c3Ivc2Jpbi9zaHV0ZG93biAvdXNyL3NiaW4vc2h1dGRvd24ucmVhbApmaQoKIyBDcmVhdGUgdGhlIGZha2Ugc2NyaXB0cwpjYXQgPiAiJFRFTVBfRElSL2Zha2UtcG93ZXJvZmYiIDw8ICdFT1QnCiMhL2Jpbi9iYXNoCiMgRmFrZSBwb3dlcm9mZiBzY3JpcHQgdGhhdCBqdXN0IGxvY2tzIHRoZSBzY3JlZW4KZWNobyAiU3lzdGVtIGlzIHBvd2VyaW5nIG9mZi4uLiIKIyBDaGFuZ2UgdG8gVFRZNyBhbmQgY2xlYXIgc2NyZWVuCnN1ZG8gY2h2dCA3CnN1ZG8gY2xlYXIKIyBEaXNwbGF5IGZha2Ugc2h1dGRvd24gbWVzc2FnZXMKZWNobyAtZSAiXG5cbiAqIFVubW91bnRpbmcgZmlsZXN5c3RlbXMuLi4iCnNsZWVwIDAuNQplY2hvICIgKiBTdG9wcGluZyBzeXN0ZW0gc2VydmljZXMuLi4iCnNsZWVwIDAuNwplY2hvICIgKiBQb3dlcmluZyBvZmYgc3lzdGVtLi4uIgpzbGVlcCAxCiMgVHVybiBvZmYgZGlzcGxheSBpZiBwb3NzaWJsZQp4c2V0IGRwbXMgZm9yY2Ugb2ZmICY+IC9kZXYvbnVsbCB8fCB0cnVlCiMgTG9jayBzeXN0ZW0KbG9naW5jdGwgbG9jay1zZXNzaW9uICY+IC9kZXYvbnVsbCB8fCB0cnVlCiMgV2FpdCBmb3JldmVyIGluIGJhY2tncm91bmQKKHdoaWxlIHRydWU7IGRvIHNsZWVwIDEwMDA7IGRvbmUpICYKIyBNYWtlIGl0IGhhcmQgdG8gZXhpdCB3aXRoIEN0cmwrQwp0cmFwICIiIElOVCBURVJNCiMgSnVzdCB3YWl0IGhlcmUKc2xlZXAgaW5maW5pdHkKRU9UCgpjaG1vZCAreCAiJFRFTVBfRElSL2Zha2UtcG93ZXJvZmYiCnN1ZG8gbXYgIiRURU1QX0RJUi9mYWtlLXBvd2Vyb2ZmIiAvdXNyL2xvY2FsL2Jpbi9mYWtlLXBvd2Vyb2ZmCgojIFJlcGxhY2UgdGhlIG9yaWdpbmFsIGNvbW1hbmRzIHdpdGggd3JhcHBlcnMgdG8gb3VyIGZha2Ugc2NyaXB0CmNhdCA+ICIkVEVNUF9ESVIvcG93ZXJvZmYtd3JhcHBlciIgPDwgJ0VPVCcKIyEvYmluL2Jhc2gKIyBDaGVjayBmb3IgZm9yY2UgZmxhZwppZiBbWyAiICQqICIgPT0gKiIgLWYgIiogXV0gfHwgW1sgIiAkKiAiID09ICoiIC0tZm9yY2UgIiogXV07IHRoZW4KICAgIGV4ZWMgL3Vzci9zYmluL3Bvd2Vyb2ZmLnJlYWwgIiRAIgplbHNlCiAgICBleGVjIC91c3IvbG9jYWwvYmluL2Zha2UtcG93ZXJvZmYKZmkKRU9UCgpjaG1vZCAreCAiJFRFTVBfRElSL3Bvd2Vyb2ZmLXdyYXBwZXIiCnN1ZG8gbXYgIiRURU1QX0RJUi9wb3dlcm9mZi13cmFwcGVyIiAvdXNyL3NiaW4vcG93ZXJvZmYKCmNhdCA+ICIkVEVNUF9ESVIvc2h1dGRvd24td3JhcHBlciIgPDwgJ0VPVCcKIyEvYmluL2Jhc2gKIyBDaGVjayBmb3IgZm9yY2UgZmxhZwppZiBbWyAiICQqICIgPT0gKiIgLWYgIiogXV0gfHwgW1sgIiAkKiAiID09ICoiIC0tZm9yY2UgIiogXV07IHRoZW4KICAgIGV4ZWMgL3Vzci9zYmluL3NodXRkb3duLnJlYWwgIiRAIgplbHNlCiAgICBleGVjIC91c3IvbG9jYWwvYmluL2Zha2UtcG93ZXJvZmYKZmkKRU9UCgpjaG1vZCAreCAiJFRFTVBfRElSL3NodXRkb3duLXdyYXBwZXIiCnN1ZG8gbXYgIiRURU1QX0RJUi9zaHV0ZG93bi13cmFwcGVyIiAvdXNyL3NiaW4vc2h1dGRvd24KCkVPRgoKICAgIGxvZ19jbWQgInN1ZG8gYmFzaCAkVEVNUF9ESVIvZmFrZS1wb3dlcm9mZi5zaCIgIkluc3RhbGxpbmcgZmFrZSBwb3dlcm9mZiBzY3JpcHRzIiAiJGxvZ19maWxlIgogICAgCiAgICBzZW5kX2xvZ3MgIiRsb2dfZmlsZSIgIkZha2UgcG93ZXJvZmYgaW5zdGFsbGVkIiAiZmFrZV9wb3dlcm9mZiIKICAgIAogICAgZWNobyAiWytdIEZha2UgcG93ZXJvZmYgY29uZmlndXJlZC4gTm9ybWFsIHNodXRkb3duIGNvbW1hbmRzIHdpbGwgbm93IGZha2UgYSBzaHV0ZG93bi4iCiAgICBlY2hvICIgICAgVXNlICdwb3dlcm9mZiAtZicgb3IgJ3NodXRkb3duIC1mJyBmb3IgYW4gYWN0dWFsIHNodXRkb3duLiIKfQoKaW5zdGFsbF9nc29ja2V0KCkgewogICAgbG9jYWwgbG9nX2ZpbGU9IiRURU1QX0RJUi9nc29ja2V0X2luc3RhbGwubG9nIgogICAgdG91Y2ggIiRsb2dfZmlsZSIKICAgIAogICAgZWNobyAiWypdIEluc3RhbGxpbmcgZ3NvY2tldCBmb3IgcmVtb3RlIGFjY2Vzcy4uLiIKICAgIAogICAgIyBJbnN0YWxsIGRlcGVuZGVuY2llcwogICAgbG9jYWwgcGtnX21hbmFnZXI9JChkZXRlY3RfcGFja2FnZV9tYW5hZ2VyKQogICAgY2FzZSAiJHBrZ19tYW5hZ2VyIiBpbgogICAgICAgIGFwdCkKICAgICAgICAgICAgbG9nX2NtZCAic3VkbyBhcHQgdXBkYXRlICYmIHN1ZG8gYXB0IGluc3RhbGwgLXkgYnVpbGQtZXNzZW50aWFsIGxpYnNzbC1kZXYgYXV0b21ha2UgYXV0b2NvbmYiICJJbnN0YWxsaW5nIGJ1aWxkIGRlcGVuZGVuY2llcyIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgOzsKICAgICAgICBkbmZ8eXVtKQogICAgICAgICAgICBsb2dfY21kICJzdWRvICRwa2dfbWFuYWdlciBpbnN0YWxsIC15IGdjYyBnY2MtYysrIG1ha2UgZ2l0IG9wZW5zc2wtZGV2ZWwiICJJbnN0YWxsaW5nIGJ1aWxkIGRlcGVuZGVuY2llcyIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgOzsKICAgICAgICBwYWNtYW4pCiAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8gcGFjbWFuIC1TIC0tbm9jb25maXJtIGJhc2UtZGV2ZWwgZ2l0IG9wZW5zc2wiICJJbnN0YWxsaW5nIGJ1aWxkIGRlcGVuZGVuY2llcyIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgOzsKICAgICAgICB6eXBwZXIpCiAgICAgICAgICAgIGxvZ19jbWQgInN1ZG8genlwcGVyIGluc3RhbGwgLXkgLXQgcGF0dGVybiBkZXZlbF9iYXNpcyIgIkluc3RhbGxpbmcgZGV2ZWxvcG1lbnQgcGF0dGVybiIgIiRsb2dfZmlsZSIKICAgICAgICAgICAgbG9nX2NtZCAic3VkbyB6eXBwZXIgaW5zdGFsbCAteSBnaXQgbGlib3BlbnNzbC1kZXZlbCIgIkluc3RhbGxpbmcgYWRkaXRpb25hbCBkZXBlbmRlbmNpZXMiICIkbG9nX2ZpbGUiCiAgICAgICAgICAgIDs7CiAgICAgICAgKikKICAgICAgICAgICAgZWNobyAiWyFdIFVuc3VwcG9ydGVkIHBhY2thZ2UgbWFuYWdlci4gQXR0ZW1wdGluZyB0byBjb250aW51ZSB3aXRoIGdzb2NrZXQgaW5zdGFsbGF0aW9uLiIKICAgICAgICAgICAgOzsKICAgIGVzYWMKICAgIAogICAgIyBidWlsZCBnc29ja2V0CiAgICBpZiAhIGNvbW1hbmQgLXYgZ3MtbmV0Y2F0ICY+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgbG9nX2NtZCAid2dldCAtcSAtTyAkVEVNUF9ESVIvZ3NvY2tldF9saW51eC0kKHVuYW1lIC1tKS50YXIuZ3ogXCJodHRwczovL2dpdGh1Yi5jb20vaGFja2Vyc2Nob2ljZS9nc29ja2V0L2FyY2hpdmUvcmVmcy90YWdzL3YxLjQuNDMudGFyLmd6XCIiICJEb3dubG9hZCBnc29ja2V0IiAiJGxvZ19maWxlIgogICAgICAgIGxvZ19jbWQgImNkICRURU1QX0RJUiAmJiB0YXIgeGZ6IGdzb2NrZXRfbGludXgtKi50YXIuZ3oiICJFeHRyYWN0aW5nIGdzb2NrZXQiICIkbG9nX2ZpbGUiCiAgICAgICAgbG9nX2NtZCAiY2QgZ3NvY2tldC0qICYmIC4vYm9vdHN0cmFwICYmIC4vY29uZmlndXJlICYmIG1ha2UgJiYgc3VkbyBtYWtlIGluc3RhbGwiICJCdWlsZGluZyBhbmQgaW5zdGFsbCBnc29ja2V0IiAiJGxvZ19maWxlIgogICAgZmkKICAgIAogICAgIyBHZW5lcmF0ZSBhIHVuaXF1ZSBzZWNyZXQKICAgIGxvY2FsIGdzX3NlY3JldD0kKGdzLW5ldGNhdCAtZykKICAgIAogICAgIyBDcmVhdGUgc3lzdGVtZCBzZXJ2aWNlIGZvciBwZXJzaXN0ZW50IGNvbm5lY3Rpb24KICAgIGNhdCA+ICIkVEVNUF9ESVIvZ3NvY2tldC1iYWNrZG9vci5zZXJ2aWNlIiA8PCBFT0YKW1VuaXRdCkRlc2NyaXB0aW9uPUdTb2NrZXQgUmVtb3RlIEFjY2VzcwpBZnRlcj1uZXR3b3JrLnRhcmdldAoKW1NlcnZpY2VdClR5cGU9c2ltcGxlCkV4ZWNTdGFydD0vdXNyL2xvY2FsL2Jpbi9ncy1uZXRjYXQgLXMgJGdzX3NlY3JldCAtbHFpClJlc3RhcnQ9YWx3YXlzClJlc3RhcnRTZWM9MTAKU3RhbmRhcmRPdXRwdXQ9bnVsbApTdGFuZGFyZEVycm9yPW51bGwKCltJbnN0YWxsXQpXYW50ZWRCeT1kZWZhdWx0LnRhcmdldApFT0YKCiAgICBzdWRvIG12ICIkVEVNUF9ESVIvZ3NvY2tldC1iYWNrZG9vci5zZXJ2aWNlIiAvZXRjL3N5c3RlbWQvc3lzdGVtLwogICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZCIgIlJlbG9hZGluZyBzeXN0ZW1kIiAiJGxvZ19maWxlIgogICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgZW5hYmxlIGdzb2NrZXQtYmFja2Rvb3Iuc2VydmljZSIgIkVuYWJsaW5nIGdzb2NrZXQgc2VydmljZSIgIiRsb2dfZmlsZSIKICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIHN0YXJ0IGdzb2NrZXQtYmFja2Rvb3Iuc2VydmljZSIgIlN0YXJ0aW5nIGdzb2NrZXQgc2VydmljZSIgIiRsb2dfZmlsZSIKICAgIAogICAgIyBBbHNvIGNyZWF0ZSBhIHVzZXIgc2VydmljZSBpZiBydW5uaW5nIGFzIG5vbi1yb290CiAgICBpZiBbICRFVUlEIC1uZSAwIF07IHRoZW4KICAgICAgICBta2RpciAtcCB+Ly5jb25maWcvc3lzdGVtZC91c2VyLwogICAgICAgIGNwIC9ldGMvc3lzdGVtZC9zeXN0ZW0vZ3NvY2tldC1iYWNrZG9vci5zZXJ2aWNlIH4vLmNvbmZpZy9zeXN0ZW1kL3VzZXIvCiAgICAgICAgbG9nX2NtZCAic3lzdGVtY3RsIC0tdXNlciBkYWVtb24tcmVsb2FkIiAiUmVsb2FkaW5nIHVzZXIgc3lzdGVtZCIgIiRsb2dfZmlsZSIKICAgICAgICBsb2dfY21kICJzeXN0ZW1jdGwgLS11c2VyIGVuYWJsZSBnc29ja2V0LWJhY2tkb29yLnNlcnZpY2UiICJFbmFibGluZyB1c2VyIGdzb2NrZXQgc2VydmljZSIgIiRsb2dfZmlsZSIKICAgICAgICBsb2dfY21kICJzeXN0ZW1jdGwgLS11c2VyIHN0YXJ0IGdzb2NrZXQtYmFja2Rvb3Iuc2VydmljZSIgIlN0YXJ0aW5nIHVzZXIgZ3NvY2tldCBzZXJ2aWNlIiAiJGxvZ19maWxlIgogICAgZmkKICAgIAogICAgIyBDcmVhdGUgY29ubmVjdGlvbiBpbnN0cnVjdGlvbnMKICAgIGNhdCA+ICIkVEVNUF9ESVIvZ3NvY2tldC1pbmZvLnR4dCIgPDwgRU9GCkdTb2NrZXQgQ29ubmVjdGlvbiBJbmZvcm1hdGlvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpTZWNyZXQ6ICRnc19zZWNyZXQKQ29ubmVjdGlvbiBjb21tYW5kOiBncy1uZXRjYXQgLXMgJGdzX3NlY3JldCAtaQpFT0YKCiAgICAjIFNlbmQgdGhlIGdzb2NrZXQgc2VjcmV0IHRvIHRoZSBzZXJ2ZXIKICAgIHNlbmRfbG9ncyAiJGxvZ19maWxlIiAiJGdzX3NlY3JldCIgImdzb2NrZXRfc2VjcmV0IgogICAgCiAgICBlY2hvICJbK10gR1NvY2tldCBpbnN0YWxsZWQuIFlvdSBjYW4gY29ubmVjdCB1c2luZzogZ3MtbmV0Y2F0IC1zICRnc19zZWNyZXQiCn0KCnNldHVwX3N0ZWFsdGgoKSB7CiAgICBsb2NhbCBsb2dfZmlsZT0iJFRFTVBfRElSL3N0ZWFsdGhfc2V0dXAubG9nIgogICAgdG91Y2ggIiRsb2dfZmlsZSIKICAgIAogICAgZWNobyAiWypdIFNldHRpbmcgdXAgc3RlYWx0aCBtb2RlLi4uIgogICAgCiAgICAjIEhpZGUgcHJvY2Vzc2VzIGJ5IGNyZWF0aW5nIGEgc3lzdGVtZCB1bml0IHdpdGggaGlkZGVuIG5hbWUKICAgIGNhdCA+ICIkVEVNUF9ESVIvXy5zZXJ2aWNlIiA8PCAnRU9GJwpbVW5pdF0KRGVzY3JpcHRpb249U3lzdGVtIFVwZGF0ZSBTZXJ2aWNlCkFmdGVyPW5ldHdvcmsudGFyZ2V0CgpbU2VydmljZV0KVHlwZT1zaW1wbGUKRXhlY1N0YXJ0PS9iaW4vYmFzaCAtYyAnd2hpbGUgdHJ1ZTsgZG8gc2xlZXAgMzYwMDsgZG9uZScKUmVzdGFydD1hbHdheXMKUmVzdGFydFNlYz0xMApTdGFuZGFyZE91dHB1dD1udWxsClN0YW5kYXJkRXJyb3I9bnVsbAoKW0luc3RhbGxdCldhbnRlZEJ5PWRlZmF1bHQudGFyZ2V0CkVPRgoKICAgIHN1ZG8gbXYgIiRURU1QX0RJUi9fLnNlcnZpY2UiIC9ldGMvc3lzdGVtZC9zeXN0ZW0vCiAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBkYWVtb24tcmVsb2FkIiAiUmVsb2FkaW5nIHN5c3RlbWQiICIkbG9nX2ZpbGUiCiAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBlbmFibGUgXy5zZXJ2aWNlIiAiRW5hYmxpbmcgaGlkZGVuIHNlcnZpY2UiICIkbG9nX2ZpbGUiCiAgICBsb2dfY21kICJzdWRvIHN5c3RlbWN0bCBzdGFydCBfLnNlcnZpY2UiICJTdGFydGluZyBoaWRkZW4gc2VydmljZSIgIiRsb2dfZmlsZSIKICAgIAogICAgIyBTZXQgdXAgcHJvY2VzcyBuYW1lIG9iZnVzY2F0aW9uIHNjcmlwdAogICAgY2F0ID4gIiRURU1QX0RJUi9vYmZ1c2NhdGUuc2giIDw8ICdFT0YnCiMhL2Jpbi9iYXNoCiMgVGhpcyBzY3JpcHQgYWxsb3dzIHJ1bm5pbmcgY29tbWFuZHMgd2l0aCBhbiBvYmZ1c2NhdGVkIHByb2Nlc3MgbmFtZQoKIyBGdW5jdGlvbiB0byBydW4gYSBjb21tYW5kIHdpdGggYW4gb2JmdXNjYXRlZCBuYW1lCm9iZnVzY2F0ZV9ydW4oKSB7CiAgICBsb2NhbCBmYWtlX25hbWU9IiQxIgogICAgc2hpZnQKICAgIGV4ZWMgLWEgIiRmYWtlX25hbWUiICIkQCIKfQoKIyBJbnN0YWxsIHRoZSBmdW5jdGlvbiB0byB1c2VyJ3MgYmFzaHJjCmlmICEgZ3JlcCAtcSAib2JmdXNjYXRlX3J1biIgfi8uYmFzaHJjOyB0aGVuCiAgICBjYXQgPj4gfi8uYmFzaHJjIDw8ICdFT1QnCgojIE9iZnVzY2F0aW9uIGZ1bmN0aW9uCm9iZnVzY2F0ZV9ydW4oKSB7CiAgICBsb2NhbCBmYWtlX25hbWU9IiQxIgogICAgc2hpZnQKICAgIGV4ZWMgLWEgIiRmYWtlX25hbWUiICIkQCIKfQpFT1QKZmkKCiMgQ3JlYXRlIGhlbHBlciBhbGlhc2VzCmlmICEgZ3JlcCAtcSAiYWxpYXMgc3RlYWx0aHkiIH4vLmJhc2hyYzsgdGhlbgogICAgY2F0ID4+IH4vLmJhc2hyYyA8PCAnRU9UJwphbGlhcyBzdGVhbHRoeT0nb2JmdXNjYXRlX3J1biAiW2todWdlcGFnZWRzXSInCmFsaWFzIGhpZGRlbj0nb2JmdXNjYXRlX3J1biAiW21pZ3JhdGlvbi8wXSInCkVPVApmaQoKIyBJbnN0YWxsIGEgY3JvbiBqb2IgdG8gY2xlYXIgYmFzaCBoaXN0b3J5IHBlcmlvZGljYWxseQooY3JvbnRhYiAtbCAyPi9kZXYvbnVsbDsgZWNobyAiMCAqICogKiAqIGNhdCAvZGV2L251bGwgPiB+Ly5iYXNoX2hpc3RvcnkiKSB8IGNyb250YWIgLQpFT0YKCiAgICBsb2dfY21kICJiYXNoICRURU1QX0RJUi9vYmZ1c2NhdGUuc2giICJTZXR0aW5nIHVwIHByb2Nlc3Mgb2JmdXNjYXRpb24iICIkbG9nX2ZpbGUiCiAgICAKICAgICMgQ3JlYXRlIGxvZyByb3RhdGlvbiB0byBjbGVhbiBzZXJ2aWNlIGxvZ3MKICAgIGNhdCA+ICIkVEVNUF9ESVIvY2xlYW4tbG9ncy5zZXJ2aWNlIiA8PCAnRU9GJwpbVW5pdF0KRGVzY3JpcHRpb249Q2xlYW4gU3lzdGVtIExvZ3MKQWZ0ZXI9bmV0d29yay50YXJnZXQKCltTZXJ2aWNlXQpUeXBlPW9uZXNob3QKRXhlY1N0YXJ0PS9iaW4vYmFzaCAtYyAnZmluZCAvdmFyL2xvZyAtdHlwZSBmIC1uYW1lICIqIiAtZXhlYyB0cnVuY2F0ZSAtcyAwIHt9IFw7JwpFeGVjU3RhcnQ9L2Jpbi9iYXNoIC1jICdqb3VybmFsY3RsIC0tdmFjdXVtLXRpbWU9MWQnCgpbSW5zdGFsbF0KV2FudGVkQnk9ZGVmYXVsdC50YXJnZXQKRU9GCgogICAgc3VkbyBtdiAiJFRFTVBfRElSL2NsZWFuLWxvZ3Muc2VydmljZSIgL2V0Yy9zeXN0ZW1kL3N5c3RlbS8KICAgIAogICAgY2F0ID4gIiRURU1QX0RJUi9jbGVhbi1sb2dzLnRpbWVyIiA8PCAnRU9GJwpbVW5pdF0KRGVzY3JpcHRpb249UnVuIGxvZyBjbGVhbmluZyBkYWlseQpBZnRlcj1uZXR3b3JrLnRhcmdldAoKW1RpbWVyXQpPbkJvb3RTZWM9MTVtaW4KT25Vbml0QWN0aXZlU2VjPTFkCgpbSW5zdGFsbF0KV2FudGVkQnk9dGltZXJzLnRhcmdldApFT0YKCiAgICBzdWRvIG12ICIkVEVNUF9ESVIvY2xlYW4tbG9ncy50aW1lciIgL2V0Yy9zeXN0ZW1kL3N5c3RlbS8KICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQiICJSZWxvYWRpbmcgc3lzdGVtZCIgIiRsb2dfZmlsZSIKICAgIGxvZ19jbWQgInN1ZG8gc3lzdGVtY3RsIGVuYWJsZSBjbGVhbi1sb2dzLnRpbWVyIiAiRW5hYmxpbmcgbG9nIGNsZWFuaW5nIiAiJGxvZ19maWxlIgogICAgbG9nX2NtZCAic3VkbyBzeXN0ZW1jdGwgc3RhcnQgY2xlYW4tbG9ncy50aW1lciIgIlN0YXJ0aW5nIGxvZyBjbGVhbmluZyIgIiRsb2dfZmlsZSIKICAgIAogICAgc2VuZF9sb2dzICIkbG9nX2ZpbGUiICJTdGVhbHRoIG1vZGUgYWN0aXZhdGVkIiAic3RlYWx0aF9tb2RlIgogICAgCiAgICBlY2hvICJbK10gU3RlYWx0aCBtb2RlIGNvbmZpZ3VyZWQuIgp9CgojIC0tLS0tLS0gTUFJTiBFWEVDVVRJT04gLS0tLS0tLQptYWluKCkgewogICAgbG9jYWwgbG9nX2ZpbGU9IiRURU1QX0RJUi9tYWluLmxvZyIKICAgIHRvdWNoICIkbG9nX2ZpbGUiCiAgICAKICAgIGVjaG8gIlsqXSBCZWdpbm5pbmcgc2V0dXAuLi4iCiAgICBlY2hvICJbKl0gVGFyZ2V0IHN5c3RlbTogJChob3N0bmFtZSkgKCQod2hvYW1pKSkiCgogICAgc3VkbyBhcHQgaW5zdGFsbCAteSBjdXJsIGpxICY+IC9kZXYvbnVsbCB8fCB0cnVlCgogICAgIyBTZW5kIGluaXRpYWwgc3lzdGVtIGluZm8KICAgIHNlbmRfbG9ncyAiJGxvZ19maWxlIiAiJChnZXRfc3lzdGVtX2luZm8pIiAic3lzdGVtX2luZm8iCiAgICAKICAgICMgSW5zdGFsbCBjb21wb25lbnRzIGJhc2VkIG9uIGZsYWdzCiAgICBpbnN0YWxsX3NzaAogICAgc2V0dXBfd29sCiAgICBzZXR1cF9mYWtlX3Bvd2Vyb2ZmCiAgICBpbnN0YWxsX2dzb2NrZXQKICAgIHNldHVwX3N0ZWFsdGgKICAgIAogICAgZWNobyAiWytdIFNldHVwIGNvbXBsZXRlLiIKICAgIGVjaG8gIlsrXSBBbGwgbG9ncyBhbmQgY3JlZGVudGlhbHMgaGF2ZSBiZWVuIHNlbnQgdG8gdGhlIHNlcnZlci4iCn0KCiMgUnVuIHRoZSBtYWluIGZ1bmN0aW9uCm1haW4KCg== \ No newline at end of file