ZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvaG90c2hvdG1haW4ucHkgYi9Ub29scy9zY3JpcHRzL2hvdHNob3RtYWluLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTIwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9zY3JpcHRzL2hvdHNob3RtYWluLnB5CkBAIC0wLDAgKzEsNTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQorCisiIiIKK1J1biBhIFB5dGhvbiBzY3JpcHQgdW5kZXIgaG90c2hvdCdzIGNvbnRyb2wuCisKK0FkYXB0ZWQgZnJvbSBhIHBvc3Rpbmcgb24gcHl0aG9uLWRldiBieSBXYWx0ZXIgRPZyd2FsZAorCit1c2FnZSAlcHJvZyBbICVwcm9nIGFyZ3MgXSBmaWxlbmFtZSBbIGZpbGVuYW1lIGFyZ3MgXQorCitBbnkgYXJndW1lbnRzIGFmdGVyIHRoZSBmaWxlbmFtZSBhcmUgdXNlZCBhcyBzeXMuYXJndiBmb3IgdGhlIGZpbGVuYW1lLgorIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IG9zCitpbXBvcnQgaG90c2hvdAoraW1wb3J0IGhvdHNob3Quc3RhdHMKKworUFJPRklMRSA9ICJob3RzaG90LnByb2YiCisKK2RlZiBydW5faG90c2hvdChmaWxlbmFtZSwgcHJvZmlsZSwgYXJncyk6CisgICAgcHJvZiA9IGhvdHNob3QuUHJvZmlsZShwcm9maWxlKQorICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpKQorICAgIHN5cy5hcmd2ID0gW2ZpbGVuYW1lXSArIGFyZ3MKKyAgICBwcm9mLnJ1bigiZXhlY2ZpbGUoJXIpIiAlIGZpbGVuYW1lKQorICAgIHByb2YuY2xvc2UoKQorICAgIHN0YXRzID0gaG90c2hvdC5zdGF0cy5sb2FkKHByb2ZpbGUpCisgICAgc3RhdHMuc29ydF9zdGF0cygidGltZSIsICJjYWxscyIpCisKKyAgICAjIHByaW50X3N0YXRzIHVzZXMgdW5hZG9ybmVkIHByaW50IHN0YXRlbWVudHMsIHNvIHRoZSBvbmx5IHdheQorICAgICMgdG8gZm9yY2Ugb3V0cHV0IHRvIHN0ZGVyciBpcyB0byByZWFzc2lnbiBzeXMuc3Rkb3V0IHRlbXBvcmFyaWx5CisgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIKKyAgICBzdGF0cy5wcmludF9zdGF0cygpCisgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0CisKKyAgICByZXR1cm4gMAorCitkZWYgbWFpbihhcmdzKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoX19kb2NfXykKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXAiLCAiLS1wcm9maWxlIiwgYWN0aW9uPSJzdG9yZSIsIGRlZmF1bHQ9UFJPRklMRSwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0PSJwcm9maWxlIiwgaGVscD0nU3BlY2lmeSBwcm9maWxlIGZpbGUgdG8gdXNlJykKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgIHBhcnNlci5wcmludF9oZWxwKCJtaXNzaW5nIHNjcmlwdCB0byBleGVjdXRlIikKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGZpbGVuYW1lID0gYXJnc1swXQorICAgIHJldHVybiBydW5faG90c2hvdChmaWxlbmFtZSwgb3B0aW9ucy5wcm9maWxlLCBhcmdzWzE6XSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSkpCg==