IyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgTk1BS0UgRmlsZSwgQmFzZWQgb24gZGpwZWcuZHNwCiFJRiAiJChDRkcpIiA9PSAiIgpDRkc9ZGpwZWcgLSBXaW4zMgohTUVTU0FHRSBLZWluZSBLb25maWd1cmF0aW9uIGFuZ2VnZWJlbi4gZGpwZWcgLSBXaW4zMiB3aXJkIGFscyBTdGFuZGFyZCB2ZXJ3ZW5kZXQuCiFFTkRJRiAKCiFJRiAiJChDRkcpIiAhPSAiZGpwZWcgLSBXaW4zMiIKIU1FU1NBR0UgVW5n/Gx0aWdlIEtvbmZpZ3VyYXRpb24gIiQoQ0ZHKSIgYW5nZWdlYmVuLgohTUVTU0FHRSBTaWUga/ZubmVuIGJlaW0gQXVzZvxocmVuIHZvbiBOTUFLRSBlaW5lIEtvbmZpZ3VyYXRpb24gYW5nZWJlbgohTUVTU0FHRSBkdXJjaCBEZWZpbmllcmVuIGRlcyBNYWtyb3MgQ0ZHIGluIGRlciBCZWZlaGxzemVpbGUuIFp1bSBCZWlzcGllbDoKIU1FU1NBR0UgCiFNRVNTQUdFIE5NQUtFIC9mICJkanBlZy5tYWsiIENGRz0iZGpwZWcgLSBXaW4zMiIKIU1FU1NBR0UgCiFNRVNTQUdFIEb8ciBkaWUgS29uZmlndXJhdGlvbiBzdGVoZW4genVyIEF1c3dhaGw6CiFNRVNTQUdFIAohTUVTU0FHRSAiZGpwZWcgLSBXaW4zMiIgKGJhc2llcmVuZCBhdWYgICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKIU1FU1NBR0UgCiFFUlJPUiBFaW5lIHVuZ/xsdGlnZSBLb25maWd1cmF0aW9uIHd1cmRlIGFuZ2VnZWJlbi4KIUVORElGIAoKIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCk5VTEw9CiFFTFNFIApOVUxMPW51bAohRU5ESUYgCgpDUFA9Y2wuZXhlClJTQz1yYy5leGUKT1VURElSPS5cZGpwZWdcUmVsZWFzZQpJTlRESVI9LlxkanBlZ1xSZWxlYXNlCiMgQmVnaW4gQ3VzdG9tIE1hY3JvcwpPdXREaXI9LlxkanBlZ1xSZWxlYXNlCiMgRW5kIEN1c3RvbSBNYWNyb3MKCkFMTCA6ICIkKE9VVERJUilcZGpwZWcuZXhlIgoKCkNMRUFOIDoKCS1AZXJhc2UgIiQoSU5URElSKVxjZGpwZWcub2JqIgoJLUBlcmFzZSAiJChJTlRESVIpXGRqcGVnLm9iaiIKCS1AZXJhc2UgIiQoSU5URElSKVxyZGNvbG1hcC5vYmoiCgktQGVyYXNlICIkKElOVERJUilcdmM2MC5pZGIiCgktQGVyYXNlICIkKElOVERJUilcd3JibXAub2JqIgoJLUBlcmFzZSAiJChJTlRESVIpXHdyZ2lmLm9iaiIKCS1AZXJhc2UgIiQoSU5URElSKVx3cnBwbS5vYmoiCgktQGVyYXNlICIkKElOVERJUilcd3JybGUub2JqIgoJLUBlcmFzZSAiJChJTlRESVIpXHdydGFyZ2Eub2JqIgoJLUBlcmFzZSAiJChPVVRESVIpXGRqcGVnLmV4ZSIKCiIkKE9VVERJUikiIDoKICAgIGlmIG5vdCBleGlzdCAiJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIkKE9VVERJUikiCgpCU0MzMj1ic2NtYWtlLmV4ZQpCU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoT1VURElSKVxkanBlZy5ic2MiIApCU0MzMl9TQlJTPSBcCgkKTElOSzMyPWxpbmsuZXhlCkxJTkszMl9GTEFHUz1SZWxlYXNlXGpwZWcubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvcGRiOiIkKE9VVERJUilcZGpwZWcucGRiIiAvbWFjaGluZTpJMzg2IC9vdXQ6IiQoT1VURElSKVxkanBlZy5leGUiIApMSU5LMzJfT0JKUz0gXAoJIiQoSU5URElSKVxjZGpwZWcub2JqIiBcCgkiJChJTlRESVIpXGRqcGVnLm9iaiIgXAoJIiQoSU5URElSKVxyZGNvbG1hcC5vYmoiIFwKCSIkKElOVERJUilcd3JibXAub2JqIiBcCgkiJChJTlRESVIpXHdyZ2lmLm9iaiIgXAoJIiQoSU5URElSKVx3cnBwbS5vYmoiIFwKCSIkKElOVERJUilcd3JybGUub2JqIiBcCgkiJChJTlRESVIpXHdydGFyZ2Eub2JqIgoKIiQoT1VURElSKVxkanBlZy5leGUiIDogIiQoT1VURElSKSIgJChERUZfRklMRSkgJChMSU5LMzJfT0JKUykKICAgICQoTElOSzMyKSBAPDwKICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKPDwKCkNQUF9QUk9KPS9ub2xvZ28gL0c2IC9NVCAvVzMgL0dYIC9PeCAvT2EgL09iMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0ZwIiQoSU5URElSKVxkanBlZy5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCIgL0ZEIC9jIAoKLmN7JChJTlRESVIpfS5vYmo6OgogICAkKENQUCkgQDw8CiAgICQoQ1BQX1BST0opICQ8IAo8PAoKLmNwcHskKElOVERJUil9Lm9iajo6CiAgICQoQ1BQKSBAPDwKICAgJChDUFBfUFJPSikgJDwgCjw8CgouY3h4eyQoSU5URElSKX0ub2JqOjoKICAgJChDUFApIEA8PAogICAkKENQUF9QUk9KKSAkPCAKPDwKCi5jeyQoSU5URElSKX0uc2JyOjoKICAgJChDUFApIEA8PAogICAkKENQUF9QUk9KKSAkPCAKPDwKCi5jcHB7JChJTlRESVIpfS5zYnI6OgogICAkKENQUCkgQDw8CiAgICQoQ1BQX1BST0opICQ8IAo8PAoKLmN4eHskKElOVERJUil9LnNicjo6CiAgICQoQ1BQKSBAPDwKICAgJChDUFBfUFJPSikgJDwgCjw8CgoKIUlGICIkKE5PX0VYVEVSTkFMX0RFUFMpIiAhPSAiMSIKIUlGIEVYSVNUUygiZGpwZWcuZGVwIikKIUlOQ0xVREUgImRqcGVnLmRlcCIKIUVMU0UgCiFNRVNTQUdFIFdhcm5pbmc6IGNhbm5vdCBmaW5kICJkanBlZy5kZXAiCiFFTkRJRiAKIUVORElGIAoKCiFJRiAiJChDRkcpIiA9PSAiZGpwZWcgLSBXaW4zMiIKU09VUkNFPS5cY2RqcGVnLmMKCiIkKElOVERJUilcY2RqcGVnLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKCgpTT1VSQ0U9LlxkanBlZy5jCgoiJChJTlRESVIpXGRqcGVnLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKCgpTT1VSQ0U9LlxyZGNvbG1hcC5jCgoiJChJTlRESVIpXHJkY29sbWFwLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKCgpTT1VSQ0U9Llx3cmJtcC5jCgoiJChJTlRESVIpXHdyYm1wLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKCgpTT1VSQ0U9Llx3cmdpZi5jCgoiJChJTlRESVIpXHdyZ2lmLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKCgpTT1VSQ0U9Llx3cnBwbS5jCgoiJChJTlRESVIpXHdycHBtLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKCgpTT1VSQ0U9Llx3cnJsZS5jCgoiJChJTlRESVIpXHdycmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKCgpTT1VSQ0U9Llx3cnRhcmdhLmMKCiIkKElOVERJUilcd3J0YXJnYS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCgoKCiFFTkRJRiAKCg==